ClassUtilities
Holds a variety of useful functions used in Fiddler and its addons.
Definition
Namespace:Fiddler
Assembly:FiddlerCore.dll
Syntax:
public static class Utilities
Inheritance: objectUtilities
Inherited Members
Fields
Http2MagicHeader
Magic string that must be sent first by the client when establishing a HTTP2 connection.
SupportedTLS1_3_Ciphers_Client
A list of supported TLS 1.3 ciphers for BouncyCastle Client(macOS only)
Declaration
public static int[] SupportedTLS1_3_Ciphers_Client
Field Value
int[]
A list of all TLS 1.3 ciphers that should be offered during handshake
SupportedTLS1_3_Ciphers_Server
A list of supported TLS 1.3 ciphers for BouncyCastle Server(macOS only)
Declaration
public static int[] SupportedTLS1_3_Ciphers_Server
Field Value
int[]
A list of all TLS 1.3 ciphers that should be offered during handshake
emptyByteArray
A static byte array containing 0 elements. Use to avoid having many copies of an empty byte[] floating around.
sCommonRequestHeaders
Declaration
public const string sCommonRequestHeaders = "Cache-Control,If-None-Match,If-Modified-Since,Pragma,If-Unmodified-Since,If-Range,If-Match,Content-Length,Content-Type,Referer,Origin,SOAPAction,Expect,Content-Encoding,TE,Transfer-Encoding,Proxy-Connection,Connection,Accept,Accept-Charset,Accept-Encoding,Accept-Language,User-Agent,UA-Color,UA-CPU,UA-OS,UA-Pixels,Cookie,Cookie2,DNT,Authorization,Proxy-Authorization,X-Requested-With,X-Download-Initiator"
Field Value
sCommonResponseHeaders
Declaration
public const string sCommonResponseHeaders = "Age,Cache-Control,Date,Expires,Pragma,Vary,Content-Length,ETag,Last-Modified,Content-Type,Content-Disposition,Content-Encoding,Transfer-encoding,Via,Keep-Alive,Location,Proxy-Connection,Connection,Set-Cookie,WWW-Authenticate,Proxy-Authenticate,P3P,X-UA-Compatible,X-Frame-options,X-Content-Type-Options,X-XSS-Protection,Strict-Transport-Security,Content-Security-Policy,Access-Control-Allow-Origin,Cross-Origin-Resource-Policy,Cross-Origin-Opener-Policy,Cross-Origin-Embedder-Policy,Cross-Origin-Embedder-Policy-Report-Only,Cross-Origin-Opener-Policy-Report-Only"
Field Value
Properties
ThisAssemblyVersion
Declaration
public static Version ThisAssemblyVersion { get; }
Property Value
Methods
BrotliCompress(byte[], out long)
Compresses a byte array using Brotli
Declaration
public static byte[] BrotliCompress(byte[] input, out long elapsedMilliseconds)
Parameters
input
byte[]
Byte array containing data to compress
elapsedMilliseconds
Outputs the amount of milliseconds it took to compress the data
Returns
byte[]
Byte array compressed with Brotli algorithm
BrotliExpand(byte[])
Decompresses a byte array using Brotli
ByteArrayToHexView(byte[], int)
Pretty-print a Hex view of a byte array. Slow.
Declaration
[CodeDescription("Returns a string representing a Hex view of a byte array. Slow.")]
public static string ByteArrayToHexView(byte[] inArr, int iBytesPerLine)
Parameters
inArr
byte[]
The byte array
iBytesPerLine
Number of bytes per line
Returns
String containing a pretty-printed array
ByteArrayToHexView(byte[], int, int)
Pretty-print a Hex view of a byte array. Slow.
Declaration
[CodeDescription("Returns a string representing a Hex view of a byte array. PERF: Slow.")]
public static string ByteArrayToHexView(byte[] inArr, int iBytesPerLine, int iMaxByteCount)
Parameters
inArr
byte[]
The byte array
iBytesPerLine
Number of bytes per line
iMaxByteCount
The maximum number of bytes to pretty-print
Returns
String containing a pretty-printed array
ByteArrayToHexView(byte[], int, int, bool)
Pretty-print a Hex view of a byte array. Slow.
Declaration
[CodeDescription("Returns a string representing a Hex view of a byte array. PERF: Slow.")]
public static string ByteArrayToHexView(byte[] inArr, int iBytesPerLine, int iMaxByteCount, bool bShowASCII)
Parameters
inArr
byte[]
The byte array
iBytesPerLine
Number of bytes per line
iMaxByteCount
The maximum number of bytes to pretty-print
bShowASCII
Show ASCII text at the end of each line
Returns
String containing a pretty-printed array
ByteArrayToHexView(byte[], int, int, int, bool)
Declaration
[CodeDescription("Returns a string representing a Hex view of a byte array. PERF: Slow.")]
public static string ByteArrayToHexView(byte[] inArr, int iStartAt, int iBytesPerLine, int iMaxByteCount, bool bShowASCII)
Parameters
inArr
byte[]
iStartAt
iBytesPerLine
iMaxByteCount
bShowASCII
Returns
ByteArrayToString(byte[])
Print an byte array to a hex string. Slow.
ByteArrayToStringExt(byte[])
Print an byte array to a hex string without separation. 2-3 times faster than BitConverter.ToString
CompareVersions(string, Version)
Typically, a version number is displayed as "major number.minor number.build number.private part number".
Declaration
public static int CompareVersions(string sRequiredVersion, Version verTest)
Parameters
sRequiredVersion
Version required
verTest
Version of the binary being tested
Returns
Returns 0 if exact match, else greater than 0 if Required version greater than verTest
ContentTypeForFilename(string)
Return the content type of a target file, or application/octet-stream if unknown.
CrackHostAndPort(string, out string, ref int)
This function cracks the Hostname/Port combo, removing IPV6 brackets if needed
Declaration
[CodeDescription("This function cracks the Host/Port combo, removing IPV6 brackets if needed.")]
public static void CrackHostAndPort(string sHostPort, out string sHostname, ref int iPort)
Parameters
sHostPort
Hostname/port combo, like www.foo.com or www.example.com:8888 or [::1]:80
sHostname
The hostname, minus any IPv6 literal brackets, if present
iPort
Port #, 80 if not specified, -1 if corrupt
DeflaterCompress(byte[])
Compress a byte array using RFC1951 DEFLATE
DeflaterCompress(byte[], CancellationToken)
Compress a byte array using RFC1951 DEFLATE
Declaration
public static Task<byte[]> DeflaterCompress(byte[] writeData, CancellationToken ct)
Parameters
writeData
byte[]
Array to compress
ct
CancellationToken used to halt a long running task
Returns
byte[] containing a DEFLATE'd copy of writeData[]
DeflaterExpand(byte[])
Decompress a byte array that was compressed using RFC1951 DEFLATE
DeflaterExpandInternal(byte[])
UnDeflate function which shows no UI and will throw on error
Dupe(byte[])
Duplicate a byte array, replacing null with byte[0]. Doing this instead of .Clone() because it better handles nulls and it may be faster.
EllipsizeIfNeeded(string, int)
Ensures that the target string is iMaxLength or fewer characters, appending ... if truncation occurred
Declaration
public static string EllipsizeIfNeeded(string sString, int iMaxLength)
Parameters
sString
The string to trim from
iMaxLength
The maximum number of characters to return
Returns
The string, or up to iMaxLength-1 characters from the "Head" of the string, with \u2026 appeneded.
EnsureInRange<T>(T, T, T)
Ensures a value is within a specified range.
Declaration
public static T EnsureInRange<T>(T current, T min, T max)
Parameters
current
T
Current value
min
T
Min value
max
T
Max value
Returns
T
Returns the provided value, unless it is outside of the specified range, in which case the nearest "fencepost" is returned.
EnsureOverwritable(string)
Ensure that the target path exists and if a file exists there, it is not readonly or hidden. WARNING: Can throw if target "Filename" calls for a parent directoryname that is already used as a filename by a non-directory. E.g. EnsureOverwriteable(C:\io.sys\filename.txt); would throw.
Declaration
public static void EnsureOverwritable(string sFilename)
Parameters
sFilename
The candidate filename
EnsurePathIsAbsolute(string, string)
Ensure that a given path is absolute, if not, applying the root path. WARNING: This function only works as well as Path.IsPathRooted, which returns "True" for things like "/NoDriveSpecified/fuzzle.txt" A better approach would be to look at the internal Path.IsRelative method
EnsureUniqueFilename(string)
Ensure that the target file does not yet exist. If it does, generates a new filename with an embedded identifier, e.g. out[1].txt instead. Attempts to ensure filename is creatable; e.g. if a path component needs to be a directory but is a file already, injects [#] into that path component.
EnsureValidAsPath(string)
Address the problem where the target "PATH" calls for a directoryname is already a filename
FileExtensionForMIMEType(string)
Maps a MIMEType to a file extension. Pass only the TYPE (e.g. use oResponse.MIMEType), to ensure no charset info in the string.
FormatSslVersion(string)
Format the value of a SslProtocol - e.g. 'Tls11' becomes 'TLS 1.1'
GetCommaTokenValue(string, string)
Returns the Value from a (case-insensitive) token in the header string. Correctly handles double-quoted strings. Allows comma and semicolon as delimiter. Trailing whitespace may be present.
GetCustomCertErrorPageTemplate(string, string, string)
Get the template shown when trying to open a URL with an invalid TLS certificate
Declaration
public static string GetCustomCertErrorPageTemplate(string host, string certError, string url)
Parameters
host
The host which fails the certificate check
certError
The certificate error
url
The url which the browser was trying to load
Returns
A string containing the HTML file content
GetEchoServicePageTemplate(Session)
Get the template shown for the Fiddler echo service (http://[fiddlerhost]:[fiddlerport]/)
GetExecutableOutput(string, string, out int)
Run an executable, wait for it to exit, and return its output as a string. NOTE: Uses CreateProcess, so you cannot launch applications which require Elevation.
Declaration
[CodeDescription("Run an executable, wait for it to exit, and return its output as a string.")]
public static string GetExecutableOutput(string sExecute, string sParams, out int iExitCode)
Parameters
sExecute
Fully-qualified filename of file to Execute
sParams
Command-line parameters to pass
iExitCode
Exit code returned by the executable
Returns
String containing the standard-output of the executable
GetHostName(Session)
Return the DNS hostname of the machine. If that is not available, return the host header of the session.
GetInstrumentedBrowserInitialPageTemplate(Session)
Get the template shown when starting a new instrumented browser (https://this.is.fiddler/)
GetRegistryBool(RegistryKey, string, bool)
Get a bool from the registry
Declaration
[CodeDescription("Returns an bool from the registry, or bDefault if the registry key is missing or cannot be used as an bool.")]
public static bool GetRegistryBool(RegistryKey oReg, string sName, bool bDefault)
Parameters
oReg
The RegistryKey
sName
The Value name
bDefault
The default value
Returns
Returns an bool from the registry, or bDefault if the registry key is missing or cannot be used as an bool.
GetRegistryFloat(RegistryKey, string, float)
Returns an Float from the registry, or a default.
Declaration
[CodeDescription("Returns an float from the registry, or flDefault if the registry key is missing or cannot be used as an float.")]
public static float GetRegistryFloat(RegistryKey oReg, string sName, float flDefault)
Parameters
oReg
Registry key in which to find the value.
sName
The value name.
flDefault
The default float value if the registry key is missing or cannot be used as a float.
Returns
Float representing the value, or the default.
GetRegistryInt(RegistryKey, string, int)
Returns an integer from the registry, or a default.
Declaration
[CodeDescription("Returns an integer from the registry, or iDefault if the registry key is missing or cannot be used as an integer.")]
public static int GetRegistryInt(RegistryKey oReg, string sName, int iDefault)
Parameters
oReg
The Registry key in which to find the value.
sName
The registry value name.
iDefault
Default to return if the registry key is missing or cannot be used as an integer
Returns
The retrieved integer, or the default.
GetRemoteDeviceConnectivityPageTemplate(Session)
Get the template shown on remote devices at the end of the remote device setup wizard (https://fiddler.device/)
GetRequestHeaders(Session)
Get the Request headers as key-value pairs, including the pseudo headers.
Declaration
public static KeyValuePair<string, string>[] GetRequestHeaders(Session oSession)
Parameters
oSession
The session
Returns
KeyValuePair<string, string>[]
The Request headers, including the pseudo headers.
GetResponseHeaders(Session)
Get the Response headers as key-value pairs
Declaration
public static KeyValuePair<string, string>[] GetResponseHeaders(Session oSession)
Parameters
oSession
The session
Returns
KeyValuePair<string, string>[]
The Response headers
GetStringFromArrayRemovingBOM(byte[], Encoding)
Gets a string from a byte-array, stripping a Byte Order Marker preamble if present.
Declaration
[CodeDescription("Gets a string from a byte-array, stripping a BOM if present.")]
public static string GetStringFromArrayRemovingBOM(byte[] arrInput, Encoding oDefaultEncoding)
Parameters
arrInput
byte[]
The byte array
oDefaultEncoding
The encoding to convert from if there's no Byte-order-marker
Returns
The string
Remarks
This function really shouldn't need to exist. Why doesn't calling .GetString on a string with a preamble remove the preamble???
GetTextEncoding(string)
WARNING: May throw. Gets an encoding, with proper respect for "utf8" as an alias for "utf-8"; Microsoft products don't support this prior to 2015-era, but it turns out to be common. We do have a linter elsewhere that reports a warning if it sees the dashless form. https://github.com/telerik/fiddler/issues/38
GetTickCount()
Get a TickCount (milliseconds since system start) as an unsigned 64bit value. On Windows Vista+, uses the GetTickCount64 API that won't rollover, but on any other platform, this unsigned wrapper moves the rollover point to 49 days of uptime.
Declaration
public static ulong GetTickCount()
Returns
Number of ms since the system started
GzipCompress(byte[])
GZIPs a byte-array
GzipExpand(byte[])
Expands a GZIP-compressed byte array
Declaration
[CodeDescription("Returns a byte[] containing an un-gzipped copy of compressedData[]")]
public static byte[] GzipExpand(byte[] compressedData)
Parameters
compressedData
byte[]
The array to decompress
Returns
byte[]
byte[] containing an un-gzipped copy of compressedData[]
GzipExpandInternal(byte[])
GZIP-Expand function which shows no UI and will throw on error
HTTPMethodAllowsBody(string)
Returns true if a request with the specified HTTP Method/Verb may contain a entity body
HTTPMethodRequiresBody(string)
Determines true if a request with the specified HTTP Method/Verb MUST contain a entity body
HasMagicBytes(byte[], byte[])
Determines whether the arrData array STARTS WITH with the supplied arrMagics bytes. Used for Content-Type sniffing.
HasMagicBytes(byte[], string)
Determines whether the arrData array begins with the supplied sMagics ASCII text. Used for Content-Type sniffing.
HasResponseHeaders(Session)
Checks if the session has response headers
HtmlEncode(string)
HtmlEncode a string. In Fiddler itself, this is a simple wrapper for the System.Web.HtmlEncode function. The .NET3.5/4.0 Client Profile doesn't include System.Web, so we must provide our own implementation of HtmlEncode for FiddlerCore's use.
IPEndPointFromHostPortString(string)
Given a string/list in the form HOSTNAME:PORT#;HOSTNAME2:PORT2#, this function returns the FIRST IPEndPoint. Defaults to port 80 if not specified. Warning: DNS resolution is slow, so use this function wisely.
Declaration
public static IPEndPoint IPEndPointFromHostPortString(string sHostAndPort)
Parameters
sHostAndPort
HOSTNAME:PORT#;OPTHOST2:PORT2#
Returns
An IPEndPoint or null
IPEndPointListFromHostPortString(string)
Given a string/list in the form HOSTNAME:PORT#;HOSTNAME2:PORT2#, this function returns all IPEndPoints for ALL listed hosts. Defaults to port 80 if not specified. Warning: DNS resolution is slow, so use this function wisely.
Declaration
public static IPEndPoint[] IPEndPointListFromHostPortString(string sAllHostAndPorts)
Parameters
sAllHostAndPorts
HOSTNAME:PORT#;OPTHOST2:PORT2#
Returns
An array of IPEndPoints or null if no results were obtained
IPFromString(string)
This function attempts to be a fast way to return an IP from a hoststring that contains an IPv4/6-Literal.
Declaration
[CodeDescription("This function attempts to be a ~fast~ way to return an IP from a hoststring that contains an IP-Literal. ")]
public static IPAddress IPFromString(string sHost)
Parameters
sHost
Hostname
Returns
IPAddress, or null, if the sHost wasn't an IP-Literal
IsBinaryMIME(string)
Determines if the specified MIME type is "binary" in nature.
IsBrowserProcessName(string)
For a given process name, returns a bool indicating whether this is a known browser process name.
IsCommentUserSupplied(string)
Returns TRUE if the string is non-empty and not of the pattern "[#123]" Necessary because SAZ-saving logic autogenerates comments of that form
IsNullOrEmpty(byte[])
Returns TRUE if the array is null or contains 0 bytes
IsRedirect(Session)
Checks if the session is a Redirect
JoinByteArrays(byte[], byte[])
Create a new byte[] containing the contents of two other byte arrays.
LaunchHyperlink(string)
Launch the user's browser to a hyperlink. This function traps exceptions and notifies the user via UI dialog.
Parameterize(string, bool)
Tokenize a string into tokens. Delimits on unquoted whitespace ; quote marks are dropped unless preceded by \ characters. Some special hackery to allow trailing slash not escape the final character of the entire input, so that: prefs set fiddler.config.path.vsplugins "F:\users\ericlaw\VSWebTest" ...doesn't end up with a trailing quote.
Declaration
[CodeDescription("Tokenize a string into tokens. Delimits on whitespace; \" marks are dropped unless preceded by \\ characters.")]
public static string[] Parameterize(string sInput, bool bAllowSQuote)
Parameters
sInput
The string to tokenize
bAllowSQuote
Are single-quotes allowed to as escapes?
Returns
string[]
An array of strings
ReadEntireStream(Stream, byte[])
Fills an array completely using the provided stream. Unlike a normal .Read(), this one will always fully fill the array unless the Stream throws.
Declaration
[CodeDescription("Reads oStream until arrBytes is filled.")]
public static int ReadEntireStream(Stream oStream, byte[] arrBytes)
Parameters
oStream
The stream from which to read.
arrBytes
byte[]
The byte array into which the data should be stored.
Returns
The count of bytes read.
ReadSessionArchive(string, out string)
Reads a Session Archive Zip file into an array of Session objects
ReadSessionArchive(string, string, GetPasswordDelegate, out string, bool, bool)
Reads a Session Archive Zip file into an array of Session objects
Declaration
[CodeDescription("Load the specified .SAZ or .ZIP session archive")]
public static Session[] ReadSessionArchive(string sFilename, string sContext, GetPasswordDelegate fnPasswordCallback, out string sazVersion, bool skipNewSessionEvent = false, bool skipOriginalIdComment = false)
Parameters
sFilename
Filename to load
sContext
Context for displaying errors
fnPasswordCallback
Delegate to use to prompt for password if importing encrypted archive
sazVersion
Outputs the version of the read Session Archive Zip file
skipNewSessionEvent
Specifies if the Session.SessionCreated event should be raised for each session in the archive of not.
skipOriginalIdComment
Specifies if the sessions without comments should ge their original Id as an auto-generated comment of not.
Returns
Session[]
Loaded array of sessions or null, in case of failure
ReadSessionArchive(string, string, out string)
Reads a Session Archive Zip file into an array of Session objects
Declaration
public static Session[] ReadSessionArchive(string sFilename, string sContext, out string sazVersion)
Parameters
sFilename
Filename to load
sContext
Context for displaying errors
sazVersion
Outputs the version of the read SAZ file
Returns
Session[]
Loaded array of sessions or null, in case of failure
RecoverMemory()
Garbage collect and, if possible, compact the Large Object heap
Declaration
public static void RecoverMemory()
ResolveProtocol(Session)
Calculate the session protocol
Declaration
public static SessionProtocol ResolveProtocol(Session oSession)
Parameters
oSession
The session
Returns
ResolveType(Session, bool)
Calculate the session type.
Declaration
public static SessionType ResolveType(Session oSession, bool resolveTypeBeforeSessionIsDone = false)
Parameters
oSession
The session
resolveTypeBeforeSessionIsDone
Return the actual sessionType even if the session is not in state Done or Aborted
Returns
the type of the session
RunExecutable(string, string)
Wrapper for Process.Start that shows error messages in the event of failure.
Declaration
public static bool RunExecutable(string sExecute, string sParams)
Parameters
sExecute
Fully-qualified filename to execute.
sParams
Command line parameters to pass.
Returns
TRUE if the execution succeeded. FALSE if the execution failed. An error message will be shown for any error except the user declining UAC.
RunExecutableAndWait(string, string)
Run an executable and wait for it to exit, notifying the user of any exceptions.
Declaration
[CodeDescription("Run an executable and wait for it to exit.")]
public static bool RunExecutableAndWait(string sExecute, string sParams)
Parameters
sExecute
Fully-qualified filename of file to execute.
sParams
Command-line parameters to pass.
Returns
TRUE if the execution succeeded. FALSE if the error message was shown.
SanitizeFileName(string)
Remove invalid characters from a file name (no extension)
SetRegistryString(RegistryKey, string, string)
Save a string to the registry. Correctly handles null Value, saving as String.Empty
Declaration
[CodeDescription("Save a string to the registry. Correctly handles null Value, saving as String.Empty.")]
public static void SetRegistryString(RegistryKey oReg, string sName, string sValue)
Parameters
oReg
The registry key into which the value will be written.
sName
The name of the value.
sValue
The value to write.
ToBcProtocolVersion(SslProtocols)
Declaration
public static ProtocolVersion ToBcProtocolVersion(SslProtocols value)
Parameters
value
Returns
ProtocolVersion
ToDotNetCertificates(Certificate)
Declaration
public static IList<X509Certificate2> ToDotNetCertificates(Certificate certificate)
Parameters
certificate
Certificate
Returns
TrimAfter(string, char)
Returns the "Head" of a string, before and not including the first instance of specified delimiter.
Declaration
[CodeDescription("Returns the part of a string up to (but NOT including) the first instance of specified delimiter. If delim not found, returns entire string.")]
public static string TrimAfter(string sString, char chDelim)
Parameters
sString
The string to trim from.
chDelim
The delimiting character at which the trim should end.
Returns
Part of a string up to (but not including) chDelim, or the full string if chDelim was not found.
TrimAfter(string, int)
[Deprecated] Ensures that the target string is iMaxLength or fewer characters
Declaration
public static string TrimAfter(string sString, int iMaxLength)
Parameters
sString
The string to trim from
iMaxLength
The maximum number of characters to return
Returns
Up to iMaxLength characters from the "Head" of the string.
Remarks
TrimAfter(string, string)
Returns the "Head" of a string, before and not including a specified search string.
Declaration
[CodeDescription("Returns the part of a string up to (but NOT including) the first instance of specified substring. If delim not found, returns entire string.")]
public static string TrimAfter(string sString, string sDelim)
Parameters
sString
The string to trim from
sDelim
The delimiting string at which the trim should end.
Returns
Part of a string up to (but not including) sDelim, or the full string if sDelim was not found.
TrimBefore(string, char)
Returns the "Tail" of a string, after (but NOT including) the First instance of specified delimiter. See also TrimBeforeLast(string, char)
Declaration
[CodeDescription("Returns the part of a string after (but NOT including) the first instance of specified delimiter. If delim not found, returns entire string.")]
public static string TrimBefore(string sString, char chDelim)
Parameters
sString
The string to trim from.
chDelim
The delimiting character after which the text should be returned.
Returns
Part of a string after (but not including) chDelim, or the full string if chDelim was not found.
TrimBefore(string, string)
Returns the "Tail" of a string, after (but NOT including) the First instance of specified search string. TrimBeforeLast(string, string)
Declaration
[CodeDescription("Returns the part of a string after (but NOT including) the first instance of specified substring. If delim not found, returns entire string.")]
public static string TrimBefore(string sString, string sDelim)
Parameters
sString
The string to trim from.
sDelim
The delimiting string after which the text should be returned.
Returns
Part of a string after (but not including) sDelim, or the full string if sDelim was not found.
TrimBeforeLast(string, char)
Returns the "Tail" of a string, after (but not including) the Last instance of specified delimiter. TrimBefore(string, char)
Declaration
[CodeDescription("Returns the part of a string after (but not including) the last instance of specified delimiter. If delim not found, returns entire string.")]
public static string TrimBeforeLast(string sString, char chDelim)
Parameters
sString
The string to trim from.
chDelim
The delimiting character after which text should be returned.
Returns
Part of a string after (but not including) the final chDelim, or the full string if chDelim was not found.
TrimBeforeLast(string, string)
Returns the "Tail" of a string, after (but not including) the Last instance of specified substring. TrimBefore(string, string)
Declaration
[CodeDescription("Returns the part of a string after (but not including) the last instance of specified substring. If delim not found, returns entire string.")]
public static string TrimBeforeLast(string sString, string sDelim)
Parameters
sString
The string to trim from.
sDelim
The delimiting string after which text should be returned.
Returns
Part of a string after (but not including) the final sDelim, or the full string if sDelim was not found.
TrimTo(string, int)
Ensures that the target string is iMaxLength or fewer characters
Declaration
[CodeDescription("Returns the first iMaxLength or fewer characters from the target string.")]
public static string TrimTo(string sString, int iMaxLength)
Parameters
sString
The string to trim from
iMaxLength
The maximum number of characters to return
Returns
Up to iMaxLength characters from the "Head" of the string.
TrimUpTo(string, string)
Returns the "Tail" of a string, after (and including) the first instance of specified search string.
Declaration
[CodeDescription("Returns the part of a string after (and including) the first instance of specified substring. If delim not found, returns entire string.")]
public static string TrimUpTo(string sString, string sDelim)
Parameters
sString
The string to trim from.
sDelim
The delimiting string at which the text should be returned.
Returns
Part of the string starting with sDelim, or the entire string if sDelim not found.
TryHexParse(string, out int)
Try parsing the string for a Hex-formatted int. If it fails, return false and 0 in iOutput.
Declaration
[CodeDescription("Try parsing the string for a Hex-formatted int. If it fails, return false and 0 in iOutput.")]
public static bool TryHexParse(string sInput, out int iOutput)
Parameters
sInput
The hex number
iOutput
The int value
Returns
TRUE if the parsing succeeded
UNSTABLE_DescribeClientHello(MemoryStream)
Parses the Client Hello part of a TLS handshake
Declaration
public static string UNSTABLE_DescribeClientHello(MemoryStream msHello)
Parameters
msHello
a byte stream containing the handshake data
Returns
String containing the client handshake data
UNSTABLE_DescribeServerHello(MemoryStream)
Parses the Server Hello part of a TLS handshake
Declaration
public static string UNSTABLE_DescribeServerHello(MemoryStream msHello)
Parameters
msHello
a byte stream containing the handshake data
Returns
String containing the server handshake data
UrlDecode(string)
Convert the %-encoded string into a string, interpreting %-escape sequences as UTF-8 characters
UrlPathEncode(string)
Replaces System.Web.HttpUtility.UrlPathEncode(str).
UrlsEquals(string, string)
Compare urls by ignoring the case trimming invalid chars.
WriteArrayToFile(string, byte[])
Writes arrBytes to a file, creating the target directory and overwriting if the file exists.
WriteSessionArchive(string, Session[], string, bool)
Create a Session Archive Zip file containing the specified sessions
Declaration
[CodeDescription("Save the specified .SAZ session archive")]
public static bool WriteSessionArchive(string sFilename, Session[] arrSessions, string sPassword, bool allowEmpty = false)
Parameters
sFilename
The filename of the SAZ file to store
arrSessions
Session[]
Array of sessions to store
sPassword
Password to encrypt the file with, or null
allowEmpty
TRUE to write an empty saz
Returns
XpressExpand(byte[])
Decompress a byte array that was compressed using Microsoft's Xpress Raw format. Available only on Windows 8+
ZstdCompress(byte[])
Compresses an input byte array with zstd
ZstdExpand(byte[])
Decompress a byte array that was compressed using zstd
Declaration
[CodeDescription("Returns a byte[] containing an decompressed copy of compressedData[]")]
public static byte[] ZstdExpand(byte[] compressedData)
Parameters
compressedData
byte[]
Array to decompress
Returns
byte[]
byte[] containing an decompressed copy of compressedData[]
ZstdExpand(byte[], bool)
Decompress a byte array that was compressed using zstd
areOriginsEquivalent(string, string, int)
Returns TRUE if two ORIGIN (scheme+host+port) values are functionally equivalent.
Declaration
public static bool areOriginsEquivalent(string sOrigin1, string sOrigin2, int iDefaultPort)
Parameters
sOrigin1
The first ORIGIN
sOrigin2
The second ORIGIN
iDefaultPort
The default port, if a port is not specified
Returns
TRUE if the two origins are equivalent
bzip2Compress(byte[])
Compress a byte[] using the bzip2 algorithm
bzip2Expand(byte[])
Decompress an array compressed using bzip2
bzip2Expand(byte[], bool)
Decompress an array compressed using bzip2
doChunk(byte[], int)
Takes a byte array and applies HTTP Chunked Transfer Encoding to it
doUnchunk(byte[])
Removes HTTP chunked encoding from the data in writeData and returns the resulting array.
getEntityBodyEncoding(HTTPHeaders, byte[])
WARNING: Potentially slow. WARNING: Does not decode the HTTP Response body; if compressed, embedded META or charset will not be checked Gets (via Headers or Sniff) the provided body's text Encoding. If not found, returns CONFIG.oHeaderEncoding (usually UTF-8).
Declaration
[CodeDescription("Gets (via Headers or Sniff) the provided body's text Encoding. Returns CONFIG.oHeaderEncoding (usually UTF-8) if unknown. Potentially slow.")]
public static Encoding getEntityBodyEncoding(HTTPHeaders oHeaders, byte[] oBody)
Parameters
oHeaders
HTTP Headers, ideally containing a Content-Type header with a charset attribute.
oBody
byte[]
byte[] containing the entity body.
Returns
A character encoding, if one could be determined
getResponseBodyEncoding(Session)
Gets (via Headers or Sniff) the Response Text Encoding. Returns CONFIG.oHeaderEncoding (usually UTF-8) if unknown. Perf: May be quite slow; cache the response
Declaration
[CodeDescription("Gets (via Headers or Sniff) the Response Text Encoding. Returns CONFIG.oHeaderEncoding (usually UTF-8) if unknown. Potentially slow.")]
public static Encoding getResponseBodyEncoding(Session oSession)
Parameters
oSession
The session
Returns
The encoding of the response body
isLocalhost(string)
This function cracks a sHostPort string to determine if the address refers to the local computer
Declaration
[CodeDescription("Returns true if True if the sHostAndPort's host is 127.0.0.1, 'localhost', or ::1. Note that list is not complete.")]
public static bool isLocalhost(string sHostAndPort)
Parameters
sHostAndPort
The string to evaluate, potentially containing a port
Returns
True if the address is 127.0.0.1, 'localhost', or ::1
isLocalhostname(string)
Determines if the specified Hostname is a either 'localhost' or an IPv4 or IPv6 loopback literal
Declaration
[CodeDescription("Returns true if True if the sHostname is 127.0.0.1, 'localhost', or ::1. Note that list is not complete.")]
public static bool isLocalhostname(string sHostname)
Parameters
sHostname
Hostname (no port)
Returns
TRUE if the hostname is equivalent to localhost
isPlainHostName(string)
This function cracks a sHostPort string to determine if the address refers to a "local" site
isUnsupportedEncoding(string, string)
Implements a BlockList for "unknown" encodings that the utilDecode* functions cannot handle
utilDecodeGRPCMessage(HTTPHeaders, ref byte[])
Decode the provided data using the encoding specified in the grpc-encoding header
Declaration
public static void utilDecodeGRPCMessage(HTTPHeaders oHeaders, ref byte[] data)
Parameters
oHeaders
Headers specifying what encodings are applied
data
byte[]
In/Out array to be modified
utilDecodeHTTPBody(HTTPHeaders, ref byte[])
Remove all encodings from arrBody, based on those specified in the supplied HTTP headers; DOES NOT MODIFY HEADERS. Throws on errors.
Declaration
public static void utilDecodeHTTPBody(HTTPHeaders oHeaders, ref byte[] arrBody)
Parameters
oHeaders
Readonly headers specifying what encodings are applied
arrBody
byte[]
In/Out array to be modified
utilDecodeHTTPBody(HTTPHeaders, ref byte[], bool)
Remove all encodings from arrBody, based on those specified in the supplied HTTP headers; DOES NOT MODIFY HEADERS. DOES NOT HANDLE UNSUPPORTED ENCODINGS WELL. Throws on errors.
Declaration
public static void utilDecodeHTTPBody(HTTPHeaders oHeaders, ref byte[] arrBody, bool bSilent)
Parameters
oHeaders
Readonly headers specifying what encodings are applied
arrBody
byte[]
In/Out array to be modified
bSilent
FALSE to show dialog boxes on errors, TRUE to remain silent
utilDecodeWebsocketMessage(string, ref byte[])
Decode provided data using the encoding specified in Sec-WebSocket-Extensions header