slskd The name of the default user group. The name of the privileged user group. The name of the leecher user group. The name of the blacklisted user group. Gets a value indicating whether the application is in the process of shutting down. Gets the version of the latest application release. The operation context. Creates and returns an instances of in response to a remote request. The username of the requesting user. The IP endpoint of the requesting user. A Task resolving an IEnumerable of Soulseek.Directory. Creates and returns a in response to a remote request. The username of the requesting user. The IP endpoint of the requesting user. The unique token for the request, supplied by the requesting user. The requested directory. A Task resolving an instance of Soulseek.Directory containing the contents of the requested directory. Creates and returns a in response to the given . The username of the requesting user. The search token. The search query. A Task resolving a SearchResponse, or null. Creates and returns a object in response to a remote request. The username of the requesting user. The IP endpoint of the requesting user. A Task resolving the UserInfo instance. API key authentication. Gets the API key authentication scheme name. Handles API key authentication. Initializes a new instance of the class. An options monitor. The security service. A logger factory. A url encoder. Authenticates via API key. A successful authentication result containing a ticket for the API key. API key authentication options. Passthrough authentication. Gets the Passthrough authentication scheme name. Handles passthrough authentication. Initializes a new instance of the class. An options monitor. A logger factory. A url encoder. Authenticates using the configured and . A successful authentication result containing a default ticket. Passthrough authentication options. Initializes a new instance of the class. Gets or sets the username for the passed-through authentication ticket. Gets or sets the role for the passed-through authentication ticket. Authentication policies. Authentication roles. For use in the attribute, specifically. Encode a 2-byte number with Base62 String Use inverted character set Base62 string Encode a 4-byte number with Base62 String Use inverted character set Base62 string Encode a 8-byte number with Base62 String Use inverted character set Base62 string Encode a string with Base62 String Use inverted character set Base62 string Encode a byte array with Base62 Byte array Use inverted character set Base62 string Decode a base62-encoded string Base62 string Use inverted character set Byte array Decode a base62-encoded string Base62 string Use inverted character set Byte array Base 64 extensions. Encode this string in Base 64. The string to encode. The encoded string. Decode this string from Base 64. The string to decode. The decoded string. Reads and handles items from a channel. Gets the that completes when the reader has read all available items from the channel. Gets a value indicating whether the reader has started reading. Starts the reader. Shared file cache worker. The type of the underlying channel. Initializes a new instance of the class. The channel from which the reader will read. An to be invoked for each item read from the channel. An optional to be invoked if the reader encounters an . An optional value indicating whether to automatically start the reader. An optional to monitor for cancellation. Gets the that completes when the worker has completed all of its work. Gets a value indicating whether the reader has started reading. Starts the reader. Shares. Initializes a new instance of the class. Gets the current list of shares. The request completed successfully. Gets the share associated with the specified . The id of the share. The request completed successfully. The requested share could not be found. Returns a list of all shared directories and files. The request completed successfully. Gets the contents of the share associated with the specified . The id of the share. The request completed successfully. The requested share could not be found. Initiates a scan of the configured shares. The request completed successfully. A share scan is already in progress. Cancels a share scan, if one is running. The request completed successfully. A share scan was not in progress. Persistent storage of shared files and metadata. Gets the connection string for this repository. Backs the current database up to the database at the specified . The destination repository. Counts the number of directories in the database. The optional directory prefix used for counting subdirectories. The number of directories. Counts the number of files in the database. The optional directory prefix used for counting files in a subdirectory. The number of files. Creates a new database. Creates tables using 'IF NOT EXISTS', so this is idempotent unless 'discardExisting` is specified, in which case tables are explicitly dropped prior to creation. An optional value that determines whether the existing database should be discarded. Dumps the contents of the database to a file. The destination file. Enable connection keepalive. A value indicating whether the keepalive logic should be executed. Finds the filename and length of the file matching the specified . The fully qualified remote path of the file. The filename, if found. Finds and returns the most recent scan record. The most recent scan record, or default if no scan was found. Flags the latest scan as suspect, indicating that the cached contents may have diverged from physical storage. Inserts a directory. The fully qualified local name of the directory. The timestamp to assign to the record. Inserts a file. The fully qualified remote path of the file. The fully qualified local path of the file. The timestamp at which the file was last modified, according to the host OS. The Soulseek.File instance representing the file. The timestamp to assign to the record. Inserts a scan record at the specified . The timestamp associated with the scan. The options snapshot at the start of the scan. Lists all directories. The optional directory prefix used for listing subdirectories. The list of directories. Lists all files. The optional parent directory. A value indicating whether the fully qualified path should be returned. The list of files. Returns the list of all started at or after the specified unix timestamp. A unix timestamp that serves as the lower bound of the time-based listing. The operation context, including the list of found scans. Deletes directory records with a timestamp prior to the specified . The timestamp before which to delete directories. The number of records deleted. Deletes file records with a timestamp prior to the specified . The timestamp before which to delete files. The number of records deleted. Rebuilds the filename index table using the data in the files table. Restores the current database from the database at the specified . The destination repository. Searches the database for files matching the specified . The search query. The list of matching files. Attempts to validate the backing database. A value indicating whether the database is valid. Attempts to validate the backing database. The list of problems, if the database is invalid. A value indicating whether the database is valid. Updates the scan started at the specified to set the . The timestamp associated with the scan. The timestamp at the conclusion of the scan. Reclaims unused space. Persistent storage of a shared file cache. Create a repository for the specified . The name of the agent. The created repository. Create a repository backup for the specified . The name of the agent. The created repository. Create a repository for the specified . The fully qualified path of the filename. A value indicating whether pooling should be enabled. The created repository. Provides control and interactions with configured shares and shared files. Gets the list of share hosts. Gets the local share host. Gets the state monitor for the service. Adds a new, or updates an existing, share host. The host to add or update. Returns the entire contents of the share. The entire contents of the share. Dumps the local share cache to a file. The destination file. The operation context. Initializes the service and shares. A value indicating whether a full re-scan of shares should be performed. The operation context. Returns the contents of the specified . The directory for which the contents are to be listed. The contents of the directory. Returns the list of all started at or after the specified unix timestamp. A unix timestamp that serves as the lower bound of the time-based listing. The operation context, including the list of found scans. Requests that a share scan is performed. Resolves the local filename and size of the specified , if the mask is associated with a configured share. The fully qualified filename to resolve. The resolved host and filename. Thrown when the specified remote filename can not be associated with a configured share. Scans the configured shares on the local host. The operation context. Thrown when a scan is already in progress. Searches the cache for the specified and returns the matching files. The query for which to search. The matching files. Cancels the currently running scan on the local host, if one is running. A value indicating whether a scan was cancelled. Returns the share host with the specified . The name of the host. The host, if found. A value indicating whether the host was found. Removes the share host with the specified . The name of the host. A value indicating whether the host was removed. Persistent storage of a shared file cache. Initializes a new instance of the class. Create a repository for the specified . The name of the agent. The created repository. Create a repository backup for the specified . The name of the agent. The created repository. Create a repository for the specified . The fully qualified path of the filename. A value indicating whether pooling should be enabled. The created repository. Shared file cache. Gets the cache state monitor. Scans the configured shares and fills the cache. The list of shares from which to fill the cache. The current options snapshot. The repository to update. The operation context. Cancels the currently running fill operation, if one is running. A value indicating whether a fill operation was cancelled. Shared file cache. Initializes a new instance of the class. Gets the cache state monitor. Scans the configured shares and fills the cache. The list of shares from which to fill the cache. The current options snapshot. The repository to update. The operation context. Cancels the currently running fill operation, if one is running. A value indicating whether a fill operation was cancelled. Provides control and interactions with configured shares and shared files. Initializes a new instance of the class. Gets the list of share hosts. Gets the local share host. Gets the state monitor for the service. Adds a new, or updates an existing, share host. The host to add or update. Returns the entire contents of the share. The entire contents of the share. Dumps the local share cache to a file. The destination file. The operation context. Returns the share host with the specified . The name of the host. The host, if found. A value indicating whether the host was found. Removes the share host with the specified . The name of the host. A value indicating whether the host was removed. Returns the contents of the specified . The directory for which the contents are to be listed. The contents of the directory. Resolves the local filename of the specified , if the mask is associated with a configured share. The fully qualified filename to resolve. The resolved local filename. Thrown when the specified remote filename can not be associated with a configured share. Returns the list of all started at or after the specified unix timestamp. A unix timestamp that serves as the lower bound of the time-based listing. The operation context, including the list of found scans. Requests that a share scan is performed. Searches the cache for the specified and returns the matching files. The query for which to search. The matching files. Scans the configured shares. The operation context. Thrown when a scan is already in progress. Cancels the currently running scan, if one is running. A value indicating whether a scan was cancelled. Initializes the service and shares. A value indicating whether a full re-scan of shares should be performed. The operation context. Creates instances of . Creates an instance of from the given path. The fully qualified path to the file. The masked filename. The created instance. Creates instances of . Initializes a new instance of the class. Creates an instance of from the given path. The fully qualified path to the file. The masked filename. The created instance. Persistent storage of shared files and metadata. Initializes a new instance of the class. Gets the connection string for this repository. Backs the current database up to the database at the specified . The destination repository. Counts the number of directories in the database. The optional directory prefix used for counting subdirectories. The number of directories. Counts the number of files in the database. The optional directory prefix used for counting files in a subdirectory. The number of files. Creates a new database. Creates tables using 'IF NOT EXISTS', so this is idempotent unless 'discardExisting` is specified, in which case tables are explicitly dropped prior to creation. An optional value that determines whether the existing database should be discarded. Disposes this object. Dumps the contents of the database to a file. The destination file. Enable connection keepalive. A value indicating whether the keepalive logic should be executed. Finds the filename of the file matching the specified . The fully qualified remote path of the file. The filename, if found. Finds and returns the most recent scan record. The most recent scan record, or default if no scan was found. Flags the latest scan as suspect, indicating that the cached contents may have diverged from physical storage. Inserts a directory. The fully qualified local name of the directory. The timestamp to assign to the record. Inserts a file. The fully qualified remote path of the file. The fully qualified local path of the file. The timestamp at which the file was last modified, according to the host OS. The Soulseek.File instance representing the file. The timestamp to assign to the record. Inserts a scan record at the specified . The timestamp associated with the scan. The options snapshot at the start of the scan. Lists all directories. The optional directory prefix used for listing subdirectories. The list of directories. Lists all files. The optional parent directory. A value indicating whether the fully qualified path should be returned. The list of files. Returns the list of all started at or after the specified unix timestamp. A unix timestamp that serves as the lower bound of the time-based listing. The operation context, including the list of found scans. Deletes directory records with a timestamp prior to the specified . The timestamp before which to delete directories. The number of records deleted. Deletes file records with a timestamp prior to the specified . The timestamp before which to delete files. The number of records deleted. Rebuilds the filename index table using the data in the files table. Restores the current database from the database at the specified . The destination repository. Searches the database for files matching the specified . The search query. The list of matching files. Attempts to validate the backing database. A value indicating whether the database is valid. Attempts to validate the backing database. The list of problems, if the database is invalid. A value indicating whether the database is valid. Updates the scan started at the specified to set the . The timestamp associated with the scan. The timestamp at the conclusion of the scan. Reclaims unused space. Disposes this object. A share host. Initializes a new instance of the class. The name of the host. The collection of hosted shares. Gets a value indicating whether this host is the local host. Gets the name of the host. Corresponds to the configured of the host, or "local" for the local host. Gets the collection of hosted shares. A file share. Initializes a new instance of the class. Initializes a new instance of the class. Storage mode. Stored in memory. Stored on disk. Common extensions; things not specific to Soulseek or slskd. Times this Task out after the specified TimeSpan. The result type. The task. The timeout. The operation context. Thrown when the task times out. Times this Task out after the specified TimeSpan. The task. The timeout. The operation context. Thrown when the task times out. Deeply compares this object with the specified object and returns a list of properties that are different. The left side of the comparison. The right side of the comparison. The root path for recursive calls. A list of differences between the two objects. Makes a best-guess determination of the directory separator character used by a remote system, based on the characters present in the specified . The fully qualified remote filename to inspect. The guessed directory separator. Returns the directory name of the given , using the specified to split and join directories and filename. The path for which to return the directory name. The directory separator character. The specified path, less the last segment. Returns the directory from the given path, regardless of separator format. The path. The directory. Safely disposes this object without throwing if it is already exposed. The object. Recursively retrieves all properties. The type from which to retrieve properties. The list of properties. Determines whether the string is a valid regular expression. The string to validate. A value indicating whether the string is a valid regular expression. Replaces the first occurrence of in the string with . The string on which to perform the replacement. The phrase or substring to replace. The replacement string. The string, with the desired phrase replaced. Serializes the JWT. The JWT. The serialized string. Formats byte to nearest size (KB, MB, etc.) The value to format. The number of decimal places to include. The formatted string. Returns a "pretty" string representation of the provided Type; specifically, corrects the naming of generic Types and appends the type parameters for the type to the name as it appears in the code editor. The type for which the colloquial name should be created. A "pretty" string representation of the provided Type. Serializes this object to json. The object to serialize. A string containing the serialized object. Serializes this object to yaml. The object to serialize. A string containing the serialized object. Deserializes this string from yaml to an object of type . The type to which to deserialize the string. The string to deserialize. The new object deserialized from the string. Converts a fully qualified remote filename to a local filename based in the provided , swapping directory characters for those specific to the local OS, removing any characters that are invalid for the local OS, and making the path relative to the remote store (including the filename and the parent folder). The fully qualified remote filename to convert. The base directory for the local filename. The converted filename. Converts the given path to the normalized format (normalizes path separators to backslashes). Various Soulseek clients (including this one) assume paths to use backslashes, regardless of the host system. The path to convert. The converted path. Converts the given path to the local format (normalizes path separators to Path.DirectorySeparatorChar). The path to convert. The converted path. , but for paths normalized to use backslashes. , but for paths normalized to use backslashes. Converts a fully qualified remote filename to a local filename, swapping directory characters for those specific to the local OS, removing any characters that are invalid for the local OS, and making the path relative to the remote store (including the filename and the parent folder). The fully qualified remote filename to convert. The converted filename. Replaces any occurrence of an invalid filename character with the specified . The path to sanitize. The character with which to replace invalid characters. The sanitized path. Determines whether the given object is a . The object to check. A value indicating whether the given object is a dictionary. Casts the string to . The Enum type to which to cast. The string to cast. The cast enum. Deserializes this string from json to an object of type . The type to which to deserialize the string. The string to deserialize. The new object deserialized from the string. Computational functions. Extension methods for adding . Adds a command line argument configuration source to . The to which to add. The type from which to map properties. An array of argument names which can be specified with multiple values. The command line string from which to parse arguments. The updated . Adds a command line argument configuration source to . The to which to add. Configures the source. The updated . A command line argument . Initializes a new instance of the class. The source settings. Parses command line arguments from the specified string and maps them to the corresponding keys. Represents command line arguments as an . Gets or sets the command line string from which to parse arguments. Gets or sets the type from which to map properties. Gets or sets an array of argument names which can be specified with multiple values. Builds the for this source. The . A . Extension methods for adding . Adds a default value configuration source to . The to which to add. The type from which to load default values. The updated . Adds a default value configuration source to . The to which to add. Configures the source. The updated . A default value . Initializes a new instance of the class. The source settings. Loads default values from the specified and maps them to the corresponding keys. Represents default values as an . Gets or sets the type from which to map properties. Builds the for this source. The . A . Extension methods for adding . Adds an environment variable configuration source to . The to which to add. The type from which to map properties. A prefix to prepend to all variable names. The updated . Adds an environment variable configuration source to . The to which to add. Configures the source. The updated . An environment variable . Initializes a new instance of the class. The source settings. Loads environment variables and maps them to the corresponding keys. Represents environment variables as an . Gets or sets the type from which to map properties. Gets or sets a prefix to prepend to all variable names. Builds the for this source. The . A . Indicates that the application must disconnect and reconnect to the Soulseek server for changes to take effect. Indicates that the application must be restarted for any changes to take effect. Extension methods for adding . Adds a YAML configuration source to . The to which to add . Path relative to the base path stored in of . The type from which to map properties. Whether the file is optional. Whether the configuration should be reloaded if the file changes. A value indicating whether configuration keys should be normalized (_, - removed, changed to lowercase). The updated to use to access the file. The . Adds a YAML configuration source to . The to which to add. Configures the source. The updated . A YAML file based . Initializes a new instance of the class. The source settings. Loads the YAML data from a stream. The stream to read. Represents a YAML file as an . Gets or sets the type from which to map properties. Gets or sets a value indicating whether configuration keys should be normalized (_, - removed, changed to lowercase). Builds the for this source. The . A . AES utility methods. Decrypts the specified with the specified . The encrypted data to decrypt. The encryption key. The decrypted data. Encrypts the specified with the specified . The plain data to encrypt. The encryption key. The encrypted data. Generates a random key using the default key and block sizes. The generated key. PBKDF2/RFC 2898 utility methods. Gets a 256 bit (32 byte) key derived from the specified using PBKDF2/RFC 2898. The password from which to derive the key. The derived key. Gets a variable key derived from the specified and using PBKDF2/RFC 2898. The password from which to derive the key. The value with which to salt the key. The desired length of the key, in bytes. The derived key. X509 utility methods. Generates an X509 certificate for the specified . The certificate subject. The optional password for the certificate. The optional key storage flags for the certificate. The generated certificate. Validates an X509 certificate given a PFX and optional . The path to the PFX certificate file to validate. The optional password for the certificate. The error message, if the certificate is invalid. A value indicating whether the certificate is valid. Dumps the contents of the application's memory to a .dmp file using dotnet-dump. Monitor https://docs.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump for tool updates. Currently supported runtime IDs: Currently supported runtime IDs: https://aka.ms/dotnet-dump/win-x86 https://aka.ms/dotnet-dump/win-x64 https://aka.ms/dotnet-dump/win-arm https://aka.ms/dotnet-dump/win-arm64 https://aka.ms/dotnet-dump/osx-x64 https://aka.ms/dotnet-dump/linux-x64 https://aka.ms/dotnet-dump/linux-arm https://aka.ms/dotnet-dump/linux-arm64 https://aka.ms/dotnet-dump/linux-musl-x64 https://aka.ms/dotnet-dump/linux-musl-arm64 Represents a normal application shutdown. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents a normal application shutdown. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents an intentional client disconnect. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents errors that originate when a searched resource can't be located. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents errors that originate when a value falls out of an expected range. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents an error related to the slskd relay feature. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents errors that originate while attempting to execute retry logic. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents an error that occurs when multiple share scans are attempted concurrently. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents an error that occurs when multiple share scans are attempted concurrently. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents an error that occurs when multiple share scans are attempted concurrently. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents errors that originate from slskd logic. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. Represents errors that originate when a restricted resources is accessed without authorization. Initializes a new instance of the class. Initializes a new instance of the class with a specified error message. The message that describes the error. Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. The message that describes the error. The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. An exponential moving average. Initializes a new instance of the class. Initializes a new instance of the class. Gets the current value. Gets a value indicating whether the average has been initialized. Updates the average with a new value. Serializes IPAddress instances. Serializes IPAddress instances. Logs messages to stdout via . Provides observable read access for state objects. The type of the tracked state object. Gets the current state. Registers a listener to be called whenever the tracked state changes. Registers a listener to be called whenever state changes. An which should be disposed to stop listening for changes. Provides write access for state objects. The type of the tracked state object. Replaces the current state with the value resolved by the . Given the current state, resolves a new state value. The updated state. Provides point-in-time read access for state objects. The type of the tracked state object. Gets the snapshotted state. Provides observable management of state objects. The type of the tracked state object. Gets a point-in-time snapshot of the current state. ManagedState extension methods. Adds managed state of an object of the specified to the specified . A singleton instance of to be used by instances requiring full control over the state A singleton instance of to be used by instances requiring the ability to mutate the state A singleton instance of to be used by instances requiring observable read access to the state A transient instance of to be used by scoped or transient instances requiring the current state The type of the managed state object. The IServiceCollection to which the managed state is to be added. An optional anonymous function used to apply an initial state mutation. The IServiceCollection with managed state added. Provides a point-in-time snapshot of state objects. The type of the tracked state object. Initializes a new instance of the class. The current value of the state. Gets a snapshot of the current application state. Provides observable management of state objects. The type of the tracked state object. Gets the current application state. Gets a point-in-time snapshot of the current state. Registers a listener to be called whenever the tracked state changes. Registers a listener to be called whenever state changes. An which should be disposed to stop listening for changes. Replaces the current state with the value resolved by the . Given the current state, resolves a new state value. The updated state. Disables form value model binding for decorated controllers and endpoints. This prevents buffering when processing multipart upload requests. Adds the . Injects the specified into html files. Injects content into html files. Initializes a new instance of the class. Executes this middleware, returning the contents of the requested HTML file with the specified HTML appended. Adds the . Replaces the specified with the specified . Replaces parts of HTML files. Initializes a new instance of the class. Executes this middleware, returning the contents of the requested HTML file with the specified replacements made. Ensures a minimum interval between successive invocations of a delegate. Initializes a new instance of the class. The minimum interval between invocations. A value indicating whether pending action(s) should be executed during disposal. Releases all resources used by the . Invokes the specified , dropping invocations created prior to the elapse of the configured interval. The delegate to invoke. Releases all resources used by the . Redacts secrets within objects. Recursively scans the for properties marked with and redacts the values by overwriting them. Only works on properties of type . The object to redact. The string with which to replace redacted values. Indicates that a property or field contains a secret, allowing it to be redacted. Retry logic. Executes logic with the specified retry parameters. The logic to execute. A function returning a value indicating whether the last Exception is retryable. An action to execute on failure. The maximum number of retry attempts. The maximum delay in milliseconds. The token to monitor for cancellation requests. The execution context. Executes logic with the specified retry parameters. The logic to execute. A function returning a value indicating whether the last Exception is retryable. An action to execute on failure. The maximum number of retry attempts. The maximum delay in milliseconds. The token to monitor for cancellation requests. The Type of the logic return value. The execution context. Implements the 'token bucket' or 'leaky bucket' rate limiting algorithm. Gets the bucket capacity. Asynchronously retrieves the specified token from the bucket. If the requested exceeds the bucket , the request is lowered to the capacity of the bucket. If the bucket has tokens available, but fewer than the requested amount, the available tokens are returned. If the bucket has no tokens available, execution waits for the bucket to be replenished before servicing the request. The number of tokens to retrieve. The token to monitor for cancellation requests. A Task that completes when tokens have been provided. Returns the specified token to the bucket. This method should only be called if tokens were retrieved from the bucket, but were not used. If the specified count exceeds the bucket capacity, the count is lowered to the capacity. Effectively this allows the bucket to 'burst' up to 2x capacity to 'catch up' to the desired rate if tokens were wastefully retrieved. If the specified count is negative, no change is made to the available count. The number of tokens to return. Sets the bucket capacity to the supplied . Change takes effect on the next reset. The bucket capacity. Implements the 'token bucket' or 'leaky bucket' rate limiting algorithm. Initializes a new instance of the class. The bucket capacity. The interval at which tokens are replenished, in milliseconds. Gets the bucket capacity. Disposes this instance. Asynchronously retrieves the specified token from the bucket. If the requested exceeds the bucket , the request is lowered to the capacity of the bucket. If the bucket has tokens available, but fewer than the requested amount, the available tokens are returned. If the bucket has no tokens available, execution waits for the bucket to be replenished before servicing the request. The number of tokens to retrieve. The token to monitor for cancellation requests. A Task that completes when tokens have been provided. Returns the specified token to the bucket. This method should only be called if tokens were retrieved from the bucket, but were not used. If the specified count exceeds the bucket capacity, the count is lowered to the capacity. Effectively this allows the bucket to 'burst' up to 2x capacity to 'catch up' to the desired rate if tokens were wastefully retrieved. If the specified count is negative, no change is made to the available count. The number of tokens to return. Sets the bucket capacity to the supplied . Change takes effect on the next reset. The bucket capacity. Disposes this instance. A value indicating whether disposal is in progress. Caches user EndPoints. Initializes a new instance of the class. Caches or updates an entry. The username for which to cache the endpoint. The endpoint to cache. Gets the cached endpoint for the specified , if it exists. The username for which to retrieve the endpoint. The cached endpoint, if it exists. A value indicating whether the endpoint was found in the cache. The composite result of a recursive validation. Validates that the directory at the specified path exists. Initializes a new instance of the class. A value indicating that the provided path must be relative (not rooted) to the application directory. A value indicating that the provided path, if it exists, should be probed to ensure it is writeable. Validates that the value is a valid member of the specified . Extensions. Validates options. The options instance to validate. The result of the validation, if invalid. A value indicating whether the instance is valid. Validates that the file at the specified path exists. Validates that the string is a valid IPv4 or IPv6 IP address. Validates that the value is not null or whitespace. Indicates that attributed properties should be recursively validated. Extension methods for types involved with validation. Validates X509 certificate parameters specified through . Enables arbitrary await-able things. Gets the default timeout duration. Cancels the oldest wait matching the specified . The unique WaitKey for the wait. Cancels all waits. Completes the oldest wait matching the specified with the specified . The wait result type. The unique WaitKey for the wait. The wait result. Completes the oldest wait matching the specified . The unique WaitKey for the wait. Returns a value indicating whether the specified is being waited upon. The unique WaitKey to check. A value indicating whether the specified key is being waited upon. Throws the specified on the oldest wait matching the specified . The unique WaitKey for the wait. The Exception to throw. Causes the oldest wait matching the specified to time out. The unique WaitKey for the wait. Adds a new wait for the specified and with the specified . The wait result type. A unique WaitKey for the wait. The wait timeout. The cancellation token for the wait. A Task representing the wait. Adds a new wait for the specified and with the specified . A unique WaitKey for the wait. The wait timeout. The cancellation token for the wait. A Task representing the wait. Adds a new wait for the specified which does not time out. The wait result type. A unique WaitKey for the wait. The cancellation token for the wait. A Task representing the wait. Adds a new wait for the specified which does not time out. A unique WaitKey for the wait. The cancellation token for the wait. A Task representing the wait. Enables arbitrary await-able things. Initializes a new instance of the class with the default timeout. Initializes a new instance of the class with the specified . The default timeout duration for message waits. Gets the default timeout duration, in milliseconds. Cancels the oldest wait matching the specified . The unique WaitKey for the wait. Cancels all waits. Completes the oldest wait matching the specified with the specified . The wait result type. The unique WaitKey for the wait. The wait result. Completes the oldest wait matching the specified . The unique WaitKey for the wait. Returns a value indicating whether the specified is being waited upon. The unique WaitKey to check. A value indicating whether the specified key is being waited upon. Disposes this instance. Disposes this instance. A value indicating whether disposal is in progress. Throws the specified on the oldest wait matching the specified . The unique WaitKey for the wait. The Exception to throw. Causes the oldest wait matching the specified to time out. The unique WaitKey for the wait. Adds a new wait for the specified and with the specified . A unique WaitKey for the wait. The wait timeout, in milliseconds. The cancellation token for the wait. A Task representing the wait. Adds a new wait for the specified and with the specified . The wait result type. A unique WaitKey for the wait. The wait timeout, in milliseconds. The cancellation token for the wait. A Task representing the wait. Adds a new wait for the specified which does not time out. A unique WaitKey for the wait. The cancellation token for the wait. A Task representing the wait. Adds a new wait for the specified which does not time out. The wait result type. A unique WaitKey for the wait. The cancellation token for the wait. A Task representing the wait. The composite value for the wait dictionary. Initializes a new instance of the class. The task completion source for the wait task. The number of milliseconds after which the wait is to time out. The action to invoke when the task is cancelled. The action to invoke when the task times out. The cancellation token for the wait. Gets the task completion source for the wait task. Gets the number of milliseconds after which the wait is to time out. Releases the managed and unmanaged resources used by the . Register cancellation and timeout actions. Releases the managed and unmanaged resources used by the . A value indicating whether the object is being disposed. Uniquely identifies a Wait. Initializes a new instance of the class. The parts which make up the key. Gets the wait token. Gets the parts which make up the key. Compares the specified to this instance. The object to which to compare. A value indicating whether the specified object is equal to this instance. Compares the specified WaitKey to this instance. The WaitKey to which to compare. A value indicating whether the specified WaitKey is equal to this instance. Returns the hash code of this instance. The hash code of this instance. Returns the string representation of the key. The string representation of the key. Application. Gets the current state of the application. Stops the application. Restarts the application. Gets the current application version. Checks for updates. Forces garbage collection. Logs. Gets the last few application logs. Logs. Gets application metrics. Options. Gets the current application options. Gets the application options provided at startup. Gets the debug view of the current application options. Server. Connects the client. Disconnects the client. Retrieves the current state of the server. Session. Checks whether the provided authentication is valid. This is a no-op provided so that the application can test for an expired token on load. The authentication is valid. The authentication is is invalid. Checks whether security is enabled. True if security is enabled, false otherwise. Logs in. Login was successful. Bad request. Login failed. Gets the time at which the Access Token expires. Gets the time at which the Access Token was issued. Gets the value of the Name claim from the Access Token. Gets the value of the Not Before claim from the Access Token. Gets the Access Token string. Gets the Token type. Extension methods for the application SignalR hub. Broadcast the present application state. The hub. The state to broadcast. The operation context. Broadcast the present application options. The hub. The options to broadcast. The operation context. The application SignalR hub. Extension methods for the logs SignalR hub. Broadcast a log record. The hub. The log record to broadcast. The operation context. The logs SignalR hub. Blacklist file formats. Automatically detect format based on contents. CIDR format. . 1.2.4.0/24 1.2.8.0/24 1.9.96.105/32 P2P format. . China Internet Information Center (CNNIC):1.2.4.0-1.2.4.255 China Internet Information Center (CNNIC):1.2.8.0-1.2.8.255 Botnet on Telekom Malaysia:1.9.96.105-1.9.96.105 DAT format. . 001.002.004.000 - 001.002.004.255 , 000 , China Internet Information Center (CNNIC) 001.002.008.000 - 001.002.008.255 , 000 , China Internet Information Center (CNNIC) 001.009.096.105 - 001.009.096.105 , 000 , Botnet on Telekom Malaysia A managed blacklist for CIDRs. Gets the total number of loaded CIDRs. Examines the contents of the specified and attempts to determine the format. The fully qualified path to the file to examine. The detected format. Thrown if the specified filename can't be accessed. Thrown if the format can't be determined. Clears the contents of the Blacklist. Loads the contents of the specified into the Blacklist. The existing Blacklist contents are replaced atomically. The fully qualified path to the file to load. The optional blacklist file format. The operation context. Thrown if the specified filename can't be accessed. Thrown if any of the lines in the file do not match the specified or auto-detected . Thrown if the specified is and the format could not be detected. Returns a value indicating whether the specified is contained within the blacklist. The IP address to check. A value indicating whether the specified IP is contained within the blacklist. The application clock, used for time based events. Fires every 5 minutes. Fires every hour. Fires every minute. Fires every 30 minutes. Starts the clock. A Task that completes when all startup events have finished processing. Stops the clock. EventArgs for the application clock. Initializes a new instance of the class. A value indicating whether this event was raised when the clock was started. Gets a value indicating whether this event was raised when the click was started. Monitors the connection to the Soulseek server and reconnects with exponential backoff, if necessary. Gets a value indicating whether the watchdog is monitoring the server connection. Initializes the watchdog and makes the initial connection to the server. This should be called at application startup. Starts monitoring the server connection following a disconnect. This should be called when the connection is disconnected. Stops monitoring the server connection. This should be called when the application is reasonably certain that the connection is connected. Monitors the connection to the Soulseek network and reconnects with exponential backoff, if necessary. Initializes a new instance of the class. Gets a value indicating whether the watchdog is monitoring the server connection. Disposes this instance. Initializes the watchdog and makes the initial connection to the server. This should be called at application startup. Starts monitoring the server connection. This should be called when the connection is disconnected. Stops monitoring the server connection. This should be called when the application is reasonably certain that the connection is connected. Disposes this instance. Applies database migrations. Determines whether the migration needs to be applied. This method MUST be read-only and should contain no side effects. A value indicating whether the migration needs to be applied. Applies the migration. Updates the Transfers table to: * Add a new StateDescription (TEXT) column * Copy the current (string) contents of the State column to StateDescription * Change the type of the State column to INTEGER * Set the contents of the State column to the numeric representation of the existing State This is necessary because Entity Framework doesn't work with [Flags] enums that are stored as strings; it tries to use bitwise operators to apply HasFlags(), and these obviously don't work against strings. Not sure why EF didn't complain about this, but here we are. This is a copy of the TransferStates enum as it was at the time this migration was written. This exists to ensure that the migration can be applied to any version of the database, even if the enum changes in the future. Applies database migrations. Initializes a new instance of the class. A list of known databases. A map of all migrations, to be applied in the order they are specified (descending). Applies database migrations. Apply all migrations, regardless of whether there's evidence they have been applied already. Assistive class for inspecting SQLite database schemas. Retrieves the schema information for the specified SQLite database. The connection string for the database. The schema information. Thrown if the database can't be accessed, or something else goes wrong. Represents a SQLite database column. Represents a SQLite database column. Core extensions; extensions for types specific to Soulseek or slskd. Redacts this instance of Options, replacing properties marked with with '*****'. Creates a deep clone before redacting. The Options instance to redact. A redacted instance. Creates a copy of this instance with the specified parameters changed. The options instance to copy. The read buffer size for underlying TCP connections. The write buffer size for underlying TCP connections. The size of the write queue for double buffered writes. The connection timeout, in milliseconds, for client and peer TCP connections. The inactivity timeout, in milliseconds, for peer TCP connections. Optional SOCKS 5 proxy configuration options. The delegate invoked during instantiation to configure the server Socket instance. The new instance. Creates a new instance of from this instance of . The UserStatistics instance from which to copy data. The new instance. Builds metrics into a Prometheus-formatted string. A Prometheus-formatted string. Gets a histogram representing the time taken to resolve a response to an incoming search request, in milliseconds. Gets an EMA representing the average time taken to resolve a response to an incoming search request, in milliseconds. Gets a counter representing the total number of search requests received. Gets a counter representing the total number of search responses sent. Gets a histogram representing the time taken to resolve a response to an incoming browse request, in milliseconds. Gets an EMA representing the average time taken to resolve a response to an incoming search request, in milliseconds. Gets a counter representing the total number of browse requests received. Gets a counter representing the total number of browse responses sent. Gets a gauge representing the current number of connected distributed children. Gets a gauge representing the current distributed child limit. Gets a gauge indicating whether a distributed parent connection is established. Gets a gauge representing the current distributed branch level. Gets a gauge representing the most recent average time taken to broadcast incoming search requests to connected children. Gets a histogram representing the time taken to resolve a response to an incoming browse request, in milliseconds. Disambiguates options derived at startup from options that may update at run time. This class is added directly to dependency injection, but is not, so consumers must inject instead of to make it clear that these options will not change. Options that may change should be accessed by injecting or , depending on the lifetime of the component. Application options. This class contains all application options, which may be sourced from (in order of precedence): Defaults Default values, statically defined in this class. Environment Variables Environment variables set at either the system or user scope. YAML Configuration File A YAML file containing a mapping of this class. Command Line Options provided via the command line when starting the application. Only the YAML configuration source can change at runtime and consumers of this class must be aware of this, either injecting in components with a singleton lifetime, or for transient or scoped lifetimes. To obtain the Options specified at startup (discarding any updates that may have been applied since), inject . Options specified via the command line can not be overwritten by changes to the YAML file. This is by design due to the immutable nature of the command line string after the application is started. Gets a value indicating whether to display the application version. Gets a value indicating whether to display a list of command line arguments. Gets a value indicating whether to display a list of configuration environment variables. Gets a value indicating whether to generate an X509 certificate and password. Gets a value indicating whether to generate a random secret. Gets a value indicating whether the application should run in debug mode. Gets a value indicating whether the application should run in headless (no web UI) mode. Gets a value indicating whether remote configuration of options is allowed. Gets a value indicating whether remote file management is allowed. Gets the unique name for this instance. Gets optional flags. Gets the path where application data is saved. Gets the path where application data is saved. Gets relay options. Gets permission options. Gets directory options. Gets share options. Gets global options. Gets user groups. Gets blacklist options. Gets filter options. Gets a list of rooms to automatically join upon connection. Gets options for the web UI. Gets retention options. Gets logger options. Gets metrics options. Gets feature options. Gets options for the Soulseek client. Gets options for external integrations. Handles top-level validation that doesn't fit anywhere else. Optional flags. Gets a value indicating whether the logo should be suppressed on startup. Gets a value indicating whether the application should quit after initialization. Gets a value indicating whether the application should watch the configuration file for changes. Gets a value indicating whether the application should connect to the Soulseek network on startup. Gets a value indicating whether the application should scan shared directories on startup. Gets a value indicating whether shares should be forcibly re-scanned on startup. Gets a value indicating whether to force database migrations to be applied on startup. Gets a value indicating whether the application should check for a newer version on startup. Gets a value indicating whether Entity Framework queries should be logged. Gets a value indicating whether the application should run in experimental mode. Gets a value indicating whether the application should run in volatile mode. Gets a value indicating whether user-defined regular expressions are case sensitive. Gets a value indicating whether to use legacy TCP keepalive options, for Windows versions prior to Windows 10, version 1709 (and associated Server SKUs). Gets a value indicating whether to use the uploaded shares from Relay agents as the source of truth for file existence and size, instead of querying the agent prior to enqueueing the file. Relay options. Gets a value indicating whether the relay is enabled. Gets the relay mode. Gets the controller configuration. Gets the agent configuration. Relay controller configuration options. Gets the controller address. Gets a value indicating whether controller certificate errors should be ignored. Gets the controller API key. Gets the controller secret. Gets a value indicating whether to receive completed downloads from the controller. Relay agent configuration options. Gets the agent instance name. Gets the agent secret. Gets the comma separated list of CIDRs that are authorized to connect as this agent. Extended validation. Permission options. Gets file permission options. File permission options. Gets the permissions to apply to newly created files. Applicable to non-Windows operating systems, only. Extended validation. Directory options. Gets the path where incomplete downloads are saved. Gets the path where downloaded files are saved. Share options. Gets the list of paths to shared files. Gets the list of shared file filters. Share caching options. Extended validation. Share caching options. Gets the type of storage to use for the share cache. Gets the number of workers to use while scanning shares. Gets the time to retain the cache (the interval on which to re-scan automatically), in minutes. Global options. Gets global upload options. Gets global limits. Gets global download options. Global upload options. Gets the limit for the total number of upload slots. Gets the total upload speed limit, in kibibytes. Gets global download options. Gets the limit for the total number of download slots. Gets the total download speed limit, in kibibytes. Limit options. Gets limits for queued transfers. Gets daily limits for transfers. Gets weekly limits for transfers. Limits. Gets the limit for number of files. Gets the limit for number of megabytes. Gets the limit for number of failures. User groups. Gets options for the default user group. These options apply to users that are not privileged, have not been identified as leechers, and have not been added as a member of any group. Gets options for the leecher user group. These options apply to users that have been identified as leechers, and have not been added as a member of any group. Gets options for the blacklisted user group. Gets user defined groups and options. Extended validation. Options that are common to all groups. Gets upload options. Gets limit options. Built in user group options. Built in blacklisted group options. Gets the list of group member usernames. Gets the list of group CIDRs. Extended validation. Built in leecher group options. Gets leecher threshold options. Leecher threshold options. Gets the minimum number of shared files required to avoid being classified as a leecher. Gets the minimum number of shared directories required to avoid being classified as a leecher. User defined user group options. Gets the list of group member usernames. User group upload options. Gets the priority of the group. Gets the queue strategy for the group. Gets the limit for the total number of upload slots for the group. Gets the total upload speed limit for the group, in kibibytes. Feature options. Gets a value indicating whether swagger documentation and UI should be enabled. Blacklist options. Gets a value indicating whether blacklist file support should be enabled. Gets the path to the blacklist file. Extended validation. Filter options. Gets search filter options. Search filter options. Gets the list of search request filters. Extended validation. Logger options. Gets the URL to a Grafana Loki instance to which to log. Gets a value indicating whether to write logs to disk. Gets a value indicating whether to suppress colorization of console logs. Retention options. Gets the time to retain searches, in minutes. Gets transfer retention options. Gets file retention options. Gets the time to retain logs, in days. Transfer retention options. Gets upload retention options. Gets download retention options. Transfer retention options. Gets the time to retain successful transfers, in minutes. Gets the time to retain errored transfers, in minutes. Gets the time to retain cancelled transfers, in minutes. File retention options. Gets the time to retain completed files, in minutes. Gets the time to retain incomplete files, in minutes. Metrics options. Gets a value indicating whether the metrics endpoint should be enabled. Gets the url for the metrics endpoint. Gets metrics endpoint authentication options. Metrics endpoint authentication options. Gets a value indicating whether authentication should be disabled. Gets the username for the metrics endpoint. Gets the password for the metrics endpoint. Soulseek client options. Gets the address of the Soulseek server. Gets the port of the Soulseek server. Gets the username for the Soulseek network. Gets the password for the Soulseek network. Gets the description of the Soulseek user. Gets the file path for the user's profile picture. Gets the local IP address on which to listen for incoming connections. Gets the port on which to listen for incoming connections. Gets the minimum diagnostic level. Gets options for the distributed network. Gets connection options. Connection options. Gets connection timeout options. Gets connection buffer options. Gets connection proxy options. Connection buffer options. Gets the connection read buffer size, in bytes. Gets the connection write buffer size, in bytes. Gets the read/write buffer size for transfers, in bytes. Gets the size of the queue for double buffered writes. Connection timeout options. Gets the connection timeout value, in milliseconds. Gets the connection inactivity timeout, in milliseconds. Connection proxy options. Gets a value indicating whether the proxy is enabled. Gets the proxy address. Gets the proxy port. Gets the proxy username, if applicable. Gets the proxy password, if applicable. Extended validation. Distributed network options. Gets a value indicating whether the distributed network should be disabled. Gets a value indicating whether to accept distributed child connections. Gets the distributed child connection limit. Gets a value indicating whether distributed network logging should be enabled. Web server options. Gets the HTTP listen port. Gets HTTPS options. Gets the base url for web requests. Gets the path to static web content. Gets a value indicating whether HTTP request logging should be enabled. Gets authentication options. Authentication options. Gets a value indicating whether authentication should be disabled. Gets the username for the web UI. Gets the password for the web UI. Gets JWT options. Gets API keys. JWT options. Gets the key with which to sign JWTs. Gets the TTL for JWTs, in milliseconds. API key options. Gets the API key value. Gets the role for the key. Gets the comma separated list of CIDRs that are authorized to use the key. Extended validation. HTTPS options. Gets a value indicating whether HTTPS should be disabled. Gets the HTTPS listen port. Gets a value indicating whether HTTP requests should be redirected to HTTPS. Gets certificate options. Certificate options. Gets the path to the the X509 certificate .pfx file. Gets the password for the X509 certificate. Options for external integrations. Gets webhook configuration. Gets script configuration. Gets FTP options. Gets Pushbullet options. Webhook configuration. Gets the list of Event types that trigger the webhook. Gets details about the webhook call. Gets the time to wait before timing out, in milliseconds. Gets the retry configuration. Webhook HTTP options. Gets the fully qualified URL for the webhook. Gets the HTTP headers to include with the webhook. Gets a value indicating whether HTTPS certificate errors should be ignored. Webhook HTTP header configuration. Gets the name of the header. Gets the header's value. Retry configuration. Gets the number of attempts to make before failing. Script configuration. Gets the list of Event types that trigger the script. Gets the shell script to invoke. Script run options. Gets the shell command to run. Gets the executable to start. Gets the arguments to pass to the executable. Mutually exclusive with . Gets the list of arguments to pass to the executable. Mutually exclusive with . FTP options. Gets a value indicating whether the FTP integration is enabled. Gets the FTP address. Gets the FTP port. Gets the FTP encryption mode. Gets a value indicating whether FTP certificate errors should be ignored. Gets the FTP username. Gets the FTP password. Gets the remote path for uploads. Gets a value indicating whether existing files should be overwritten. Gets the connection timeout value, in milliseconds. Gets the number of times failing uploads will be retried. Extended validation. Pushbullet options. Gets a value indicating whether the Pushbullet integration is enabled. Gets the Pushbullet API access token. Gets the prefix for Pushbullet notification titles. Gets a value indicating whether a Pushbullet notification should be sent when a private message is received. Gets a value indicating whether a Pushbullet notification should be sent when the currently logged in user's username is mentioned in a room. Gets the number of times failing Pushbullet notifications will be retried. Gets the cooldown time for Pushbullet notifications, in milliseconds. Extended validation. Application service state. Share state. Gets a value indicating whether the cache is being filled. Gets a value indicating whether the cache is filled. Gets a value indicating whether the cache is faulted. Gets the current fill progress. Gets the number of cached directories. Gets the number of cached files. Gets the number of directories excluded by filters. Events. Retrieves a paginated list of past event records. The offset (number of records) at which to start the requested page. The page size. The list of records. The offset is less than zero, or if the limit is less than or equal to zero. Authentication credentials are omitted. Authentication is valid but not sufficient to access this endpoint. An unexpected error is encountered. The request completed successfully. Raises a sample event of the specified type. The type of event to raise. An optional string used to disambiguate generated events. The randomly generated event that was raised. The specified type is not a valid event type. Authentication credentials are omitted. Authentication is valid but not sufficient to access this endpoint. An unexpected error is encountered. The request completed successfully. The event bus supporting interoperability and ancillary functions. This "bus" is meant to mimic an event bus you'd find in a distributed system; fire and forget. If an Exception is encountered while an event is being raised, it will be logged and swallowed. It is also intended to be used *ONLY* for ancillary and/or third party logic that isn't part of the core application. The core application should continue to use regular old C# events and method calls to communicate within and among modules. This design was chosen over built-in C# events to give greater control over how events are dispatched, and bound. Initializes a new instance of the class. Gets the internal list of event subscriptions. Note that the value is a dictionary to prevent multiple subscriptions from the same subscriber, and to support unsubscribing. Raises an event. The event data. The Type of the event. Subscribes a 's to an event. The unique name of the subscriber. The callback function to execute when an event is raised. The Type of the event. Thrown if the specified is null or whitespace. Thrown if the specified is null. Unsubscribes a from an event. Will not throw if a subscription doesn't exist. The Type of the event. The unique name of the subscriber. Manages events. Initializes a new instance of the class. Gets list of events, optionally applying the specified and . The beginning offset for the page. The page size limit. The retrieved list. Thrown when the specified is less than zero. Thrown when the specified is zero. Gets the total number of events. The total number of events. Adds the specified event . To ensure proper construction of the record, use . The record to add. Thrown when the specified record is null. Converts the specified event into an instance of for the purpose of database storage. The property contains the event-specific data serialized as json, applying standard formatting such as camel cased property names and null value omission. This is important so that the values stored in the database will match the values exposed through other means. Maybe not *that* important, but standardizing json is a good practice. The Event to convert. The specific type of the Event. The converted EventRecord. Files. Lists the contents of the downloads directory. An optional value indicating whether to recursively list subdirectories and files. The request completed successfully. Authentication failed. Lists the contents of the specified subdirectory within the downloads directory. The relative, base 64 encoded, name of the subdirectory to list. An optional value indicating whether to recursively list subdirectories and files. The request completed successfully. Authentication failed. Access to the specified subdirectory was denied. The specified subdirectory does not exist. Deletes the specified subdirectory within the downloads directory. The relative, base 64 encoded, name of the subdirectory to delete. The request completed successfully. Authentication failed. Access to the specified subdirectory was denied. The specified subdirectory does not exist. Deletes the specified file within the downloads directory. The relative, base 64 encoded, name of the file to delete. The request completed successfully. Authentication failed. Access to the specified subdirectory was denied. The specified subdirectory does not exist. Lists the contents of the downloads directory. An optional value indicating whether to recursively list subdirectories and files. The request completed successfully. Authentication failed. Lists the contents of the specified subdirectory within the incomplete directory. The relative, base 64 encoded, name of the subdirectory to list. An optional value indicating whether to recursively list subdirectories and files. The request completed successfully. Authentication failed. Access to the specified subdirectory was denied. The specified subdirectory does not exist. Deletes the specified subdirectory within the downloads directory. The relative, base 64 encoded, name of the subdirectory to delete. The request completed successfully. Authentication failed. Access to the specified subdirectory was denied. The specified subdirectory does not exist. Deletes the specified file within the downloads directory. The relative, base 64 encoded, name of the file to delete. The request completed successfully. Authentication failed. Access to the specified subdirectory was denied. The specified subdirectory does not exist. Extension methods related to . Converts the specified string into an instance of . A 3 or 4 character string consisting of only 0-7, matching a Unix file permission (e.g. one used with 'chmod'). The converted UnixFileMode. Thrown if the specified string is null or consists of only whitespace. Thrown if the specified are not a 3 or 4 character string consisting of only 0-7. Manages files on disk. Initializes a new instance of the class. Resolves an instance of for the specified , following any symlinks that may be present to their final target. A non-null return value is guaranteed. The fully qualified filename for which to resolve the FileInfo instance. The resolved FileInfo instance. Thrown if the specified filename is null or contains only whitespace. Thrown if the specified or linked file is restricted. Thrown if the specified or linked file can't be resolved for some reason. Deletes the specified . Returns a dictionary keyed on directory name and containing a result for each specified directory. Exceptions are contained in the result, and are not thrown. The directories to delete. The operation context. Thrown if any of the specified directories have a relative path. Thrown if any of the directories is an exact match for an application-controlled directory. Thrown if a specified directory does not exist. Thrown if a specified directory is restricted. Deletes the specified . Returns a dictionary keyed on directory name and containing a result for each specified directory. Exceptions are contained in the result, and are not thrown. The list of files to delete. The operation context. Thrown if any of the specified files have a relative path. Thrown if a specified file does not exist. Thrown if a specified file is restricted. Lists the contents in the specified , optionally applying the specified . The directory from which to start the listing. Optional enumeration options to apply. The list of found contents. Thrown if the specified directory has a relative path. Thrown if the specified directory does not exist. Thrown if the specified root directory is restricted. Creates a new file with the specified fully qualified and the optional , returning a with which the contents of the file can be written. Reasonable defaults, including the Unix permissions from app configuration, have been applied. Be sure to review the defaults for each new use case and ensure they are appropriate. The fully qualified filename. An optional patch for the underlying . A Stream with which the contents of the file can be written. Thrown if the specified filename is null or contains only whitespace. Thrown if the underlying file or Stream can't be created for some reason. Moves the specified fully qualified, localized, to the specified fully qualified, localized, . If the destination file already exists and the option is not set, the destination filename will be modified to include the current time to avoid the collision while preserving both files. The fully qualified filename of the file to move. The fully qualified directory to which to move the source file. An optional value indicating whether the destination file should be overwritten if it already exists. An optional value indicating whether the parent directory of the source file should be deleted if it is empty after the move. The fully qualified filename of the resulting file. Thrown if either of the specified file or directories are null or contain only whitespace. Thrown if the specified does not exist. Thrown if the file can't be moved, or the option is set and the operation fails. A file directory on the host filesystem. The name of the directory. The fully qualified name of the directory. The directories' attributes. The timestamp at which the directory was created. The timestamp at which the directory was last modified. The files within the directory. The directories within the directory. Maps a from the specified . The DirectoryInfo instance from which to map. A new instance of FilesystemDirectory. A file on the host filesystem. The name of the file. The fully qualified name of the file. The size of the file, in bytes. The file's attributes. The timestamp at which the file was created. The timestamp at which the file was last modified. Maps a from the specified . The FileInfo instance from which to map. A new instance of FilesystemFile. FTP client factory. Initializes a new instance of the class. The options monitor used to derive application options. Creates an instance of . The created instance. FTP Integration service. Initializes a new instance of the class. The FTP client factory to use. The options monitor used to derive application options. The logger. Uploads the specified to the configured FTP server. The fully qualified name of the file to upload. The operation context. FTP client factory. Creates an instance of . The created instance. FTP Integration service. Uploads the specified to the configured FTP server. The fully qualified name of the file to upload. The operation context. Pushbullet integration service. Sends a push notification to Pushbullet. The notification title. A unique cache key for the notification. The notification body. The operation context. Pushbullet integration service. Initializes a new instance of the class. The HttpClientFactory to use. The options monitor used to derive application options. The logger. Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. Sends a push notification to Pushbullet. The notification title. A unique cache key for the notification. The notification body. The operation context. Handles the invocation of shell scripts. Conversations. Initializes a new instance of the class. Acknowledges the given message id for the given username. The request completed successfully. A conversation with the specified username, or a message matching the specified id could not be found. Acknowledges all messages from the given username. The request completed successfully. A conversation with the specified username could not be found. Closes the conversation associated with the given username. The request completed successfully. A conversation with the specified username could not be found. Gets all active conversations. The request completed successfully. Gets the conversation associated with the specified username. The username associated with the desired conversation. The request completed successfully. A matching search was not found. Sends a private message to the specified username. The request completed successfully. The specified message is null or empty. Server. Starts public chat. Stops public chat. Rooms. Gets all rooms. The request completed successfully. Gets the specified room. The request completed successfully. The specified roomName could not be found. Sends a message to the specified room. The request completed successfully. The specified roomName could not be found. Sets a ticker for the specified room. The request completed successfully. The specified roomName could not be found. Adds a member to a private room. The request completed successfully. The specified roomName could not be found. Gets the current list of users for the specified room. The request completed successfully. The specified roomName could not be found. Gets the current list of messages for the specified room. The request completed successfully. The specified roomName could not be found. Gets a list of rooms from the server. Joins a room. The request completed successfully. The room has already been joined. Leaves a room. The request completed successfully. The room has not been joined. Gets the room name. Gets the number of users in the room. Gets a value indicating whether the room is private. Gets a value indicating whether the room is owned by the currently logged in user. Gets a value indicating whether the room is moderated by the currently logged in user. The timestamp of the message. The username of the user who sent the message. The message. The room to which the message pertains. A value indicating whether this user data belongs to the currently logged in user. The room name. A value indicating whether the room is private. The number of operators in the room, if private. The operators in the room, if private. The owner of the room, if private. The list of users in the room. The list of messages. The average upload speed of the user. The user's country code, if provided. The number of directories shared by the user. The number of files shared by the user. A value indicating whether this user data belongs to the currently logged in user. The number of the user's free download slots, if provided. The status of the user (0 = offline, 1 = away, 2 = online). The number of uploads tracked by the server for the user. The username of the user. Manages private messages. Acknowledges all unacknowledged records from the specified . The username associated with the conversation. The operation context. Acknowledges the record associated with the specified and . The username associated with the conversation. The ID of the message. The operation context. Creates a new, or activates an existing, conversation with the specified . The username associated with the conversation. The operation context. Returns the record associated with the specified . The username associated with the conversation. A value indicating whether to include conversations marked as inactive. A value indicating whether records should be included in the return value. The operation context, including the located conversation, if one was found. Returns the record associated with the specified and . The username associated with the conversation. The ID of the message. The operation context, including the located message, if one was found. Returns the list of all records matching the specified . An optional expression used to locate conversations. The operation context, including the list of found conversations. Returns the list of all records matching the specified . An optional expression used to locate private messages. The operation context, including the list of found private messages. Handles the receipt of an inbound . The username associated with the message. The message. The operation context. Removes (marks inactive) the conversation with the specified . The username associated with the conversation. The operation context. Sends the specified to the specified . The username of the recipient. The message. The operation context. Acknowledges all unacknowledged records from the specified . The username associated with the conversation. The operation context. Acknowledges the record associated with the specified and . The username associated with the conversation. The ID of the message. The operation context. Creates a new, or activates an existing, conversation with the specified . The username associated with the conversation. The operation context. Returns the record associated with the specified . The username associated with the conversation. A value indicating whether to include conversations marked as inactive. A value indicating whether records should be included in the return value. The operation context, including the located conversation, if one was found. Returns the record associated with the specified and . The username associated with the conversation. The ID of the message. The operation context, including the located message, if one was found. Returns the list of all records matching the specified . An optional expression used to locate conversations. The operation context, including the list of found conversations. Returns the list of all records matching the specified . An optional expression used to locate private messages. The operation context, including the list of found private messages. Handles the receipt of an inbound . The username associated with the message. The message. The operation context. Removes (marks inactive) the conversation with the specified . The username associated with the conversation. The operation context. Sends the specified to the specified . The username of the recipient. The message. The operation context. Tracks rooms. Gets tracked rooms. Adds a room and appends the specified , or just appends the message if the room exists. Adds the specified room to the tracker. Adds the specified to the specified room. Returns the list of messages for the specified , if it is tracked. Removes a tracked room. Removes the specified from the specified room. Manages private and room messages. Gets the . Manages private and room messages. Initializes a new instance of the class. Gets the . Chat room management and event handling. Joins the specified . The name of the room to join. The operation context, including information about the room. Leaves the specified . The name of the room to leave. The operation context. Attempts to join the specified . Failures are logged but not thrown. Use JoinAsync() to trap Exceptions. The list of room names to join. The operation context. Chat room management and event handling. Initializes a new instance of the class. Joins the specified . The name of the room to join. The operation context, including information about the room. Leaves the specified . The name of the room to leave. The operation context. Attempts to join the specified . Failures are logged but not thrown. Use JoinAsync() to trap Exceptions. The list of room names to join. The operation context. Tracks rooms. Initializes a new instance of the class. Tracked rooms. Adds a room and appends the specified , or just appends the message if the room exists. Adds the specified room to the tracker. Adds the specified to the specified room. Removes a tracked room. Returns the list of messages for the specified , if it is tracked. Removes the specified from the specified room. A private message. The UTC timestamp of the message. The unique message id, used to acknowledge receipt. The username of the remote user. Gets or sets the message direction. The message. A value indicating whether the message has been acknowledged. The room name. A value indicating whether the room is private. The number of operators in the room, if private. The operators in the room, if private. The owner of the room, if private. The list of users in the room. The list of messages. A message sent to a room. The timestamp of the message. The username of the user who sent the message. The message. The room to which the message pertains. Gets or sets the message direction. Bootstraps configuration and handles primitive command-line instructions. The name of the application. The name of the local share host. The url to the issues/support site. The global prefix for environment variables. The default XML documentation filename. The default application data directory. Gets the unique Id of this application invocation. Gets the Id of the current application process. Inaccurate when running locally. Inaccurate when running locally. Occurs when a new log event is emitted. Gets the semantic application version. Gets the full application version, including both assembly and informational versions. Gets a value indicating whether the current version is a Canary build. Gets a value indicating whether the current version is a Development build. Gets a value indicating whether the application is being run in Relay Agent mode. Gets the application flags. Gets the path where application data is saved. Gets the fully qualified path to the application configuration file. Gets the path where persistent data is saved. Gets the path where backups of persistent data saved. Gets the default fully qualified path to the configuration file. Gets the default downloads directory. Gets the default incomplete download directory. Gets the path where application logs are saved. Gets the path where user-defined scripts are stored. Gets a buffer containing the last few log events. Gets the master cancellation token source for the program. The token from this source should be used (or linked) to any long-running asynchronous task, so that when the application begins to shut down these tasks also shut down in a timely manner. Actions that control the lifecycle of the program (POSIX signals, a restart from the API, etc) should cancel this source. Panic. An optional exit code. Entrypoint. Command line arguments. Relay. Initializes a new instance of the class. Connects to the configured controller. Disconnects from the connected controller. Downloads a file from the connected controller. The unique identifier for the request. Uploads a file to the connected controller. The unique identifier for the request. Uploads share information to the connected controller. The unique identifier for the request. Methods for the . Sends an authentication challenge token to the newly connected agent. The token. The operation context. Requests information about the specified from the agent. The name of the file. The unique identifier for the request. The operation context. Requests the specified from the agent. The name of the file. The starting offset for the transfer. The unique identifier for the request. The operation context. Notifies the agent that the download of the specified is complete and that the file is ready for downloading. The name of the newly downloaded file. The unique identifier for the request. The operation context. The relay SignalR hub. Initializes a new instance of the class. Executed when a new connection is established. Executed when a connection is disconnected. The Exception that caused the disconnect. Executed by the agent after receipt of an authentication challenge token, shortly after the connection is established. The agent's name. The response to the challenge token. Thrown when the challenge response is invalid. Executed by the agent to initiate the share upload workflow by generating and retrieving a request token. The generated token. Thrown when the agent is not fully authenticated. Executed by the agent to notify the controller that the agent was unable to upload the file requested by a call to . The unique identifier of the request. The Exception that caused the failure. Thrown when the agent is not fully authenticated. Executed by the agent to return the response to a call to . The unique identifier for the request. A value indicating whether the requested file exists on the agent's filesystem. The length of the file, or 0 if the file does not exist. Thrown when the agent is not fully authenticated. Relay client (agent). Gets the client state. Starts the client and connects to the controller. The token to monitor for cancellation requests. The operation context. Stops the client and disconnects from the controller. The token to monitor for cancellation requests. The operation context. Synchronizes state with the controller. The token to monitor for cancellation requests. The operation context. A non-operable Relay client. Gets the client state. Disposes this instance. Starts the client and connects to the controller. The token to monitor for cancellation requests. The operation context. Stops the client and disconnects from the controller. The token to monitor for cancellation requests. The operation context. Synchronizes state with the controller. The token to monitor for cancellation requests. The operation context. Disposes this instance. Disposing. Relay client (agent). Initializes a new instance of the class. Gets the client state. Disposes this instance. Starts the client and connects to the controller. The token to monitor for cancellation requests. The operation context. Stops the client and disconnects from the controller. The token to monitor for cancellation requests. The operation context. Synchronizes state with the controller. The token to monitor for cancellation requests. The operation context. Disposes this instance. Disposing. Handles relay (controller/agent) interactions. Gets the relay client (agent). Gets the collection of registered Agents. Gets the state monitor for the service. Generates a random authentication challenge token for the specified . The token is cached internally, and is only valid while it remains in the cache. The ID of the agent connection. The generated token. Retrieves a new share upload token for the specified . This is the first step in a multi-step workflow. The entire sequence is: A remote agent makes a request to the SignalR hub to retrieve a share upload token, which in turn calls . The token is generated and cached, and is only valid while it is in the cache. The remote agent makes an HTTP POST request containing a multipart upload including a backup of its shared database and a serialized list of locally configured shares, and the controller invokes . The name of the agent. The generated token. Retrieves information about the specified from the specified . This is the first step in a multi-step workflow. The entire sequence is: Upload service calls and awaits , which requests the file info from the remote agent, and waits for the response before returning it to the caller. The remote agent sends the response via the SignalR hub, and the hub invokes . The response is passed back to and returned to the caller. The agent from which to retrieve the file information. The file for which to retrieve information. An optional timeout value. A value indicating whether the file exists, and the length in bytes. Retrieves a stream of the specified from the specified . This is the first step in a multi-step workflow that enables proxying of file uploads through agents. The entire sequence is: Upload service calls and awaits , which requests the file from the remote agent, and waits for the stream to be returned before returning it to the caller. The remote agent makes an HTTP POST request containing a multipart upload including the file, and the API controller invokes and awaits . The stream is passed from this method back to the awaited , and the Upload service passes the stream to Soulseek.NET, streaming the data from the still-open HTTP request through to the remote Soulseek user. If the remote agent can't find or open the requested file, it invokes through the open SignalR connection, and throws with the given exception. If the remote agent fails to respond within the timeout period, throws a . When the Upload is complete (successfully or otherwise), the Upload service invokes , passing an optional if the transfer was not successful. This call signals the waiting to complete, passing control back to the API controller and completing the HTTP POST request from the agent. The agent from which to retrieve the file. The file to retrieve. The starting offset for the transfer. A unique ID for the stream. An optional timeout value. An optional token to monitor for cancellation requests. The operation context, including a stream containing the requested file. Handles the client response for a request. The name of the agent. The ID of the request. The client response to the request. Handles the client response for a request, returning when the corresponding file upload is complete. The name of the agent. The ID of the request. The client response to the request. The operation context. Handles incoming share uploads. The name of the agent. The ID obtained by the caller prior to uploading. The list of shares provided. The filename of the temporary file containing the upload. The operation context. Notifies connected agents that a file download has completed. The filename of the completed file, relative to the downloads directory. The operation context. Notifies the caller of of a failure to obtain a file stream from the requested agent. The unique ID for the stream. The remote exception that caused the failure. Registers the specified with the specified . The ID of the connection. The agent. Safely attempts to close a stream obtained with . The name of the agent. The unique ID for the stream. If the transfer associated with the stream failed, the exception that caused the failure. Attempts to remove the registration for the specified . The connection ID associated with the registration. The registration record, if removed. A value indicating whether a registration was removed. Attempts to retrieve the registration for the specified . The connection ID associated with the registration. The registration record, if found. A value indicating whether the registration exists. Validates an authentication challenge response. The ID of the agent connection. The agent name. The response credential. A value indicating whether the response is valid. Attempts to validate the file download response credential associated with the specified . The token. The name of the responding agent. The name of the file being downloaded. The response credential. A value indicating whether the credential is valid. Attempts to validate the file stream response credential associated with the specified . The token. The name of the responding agent. The name of the file being uploaded. The response credential. A value indicating whether the credential is valid. Attempts to validate the share upload response credential associated with the specified . The token. The name of the responding agent. The response credential. A value indicating whether the credential is valid. Handles relay (controller/agent) interactions. Initializes a new instance of the class. Gets the relay client (agent). Gets the collection of registered Agents. Gets the state monitor for the service. Generates a random authentication challenge token for the specified . The token is cached internally, and is only valid while it remains in the cache. The ID of the agent connection. The generated token. Retrieves a new share upload token for the specified . The token is cached internally, and is only valid while it remains in the cache. This is the first step in a multi-step workflow. The entire sequence is: A remote agent makes a request to the SignalR hub to retrieve a share upload token, which in turn calls . The token is generated and cached. The remote agent makes an HTTP POST request containing a multipart upload including a backup of its shared database and a serialized list of locally configured shares. The HTTP controller saves the database backup to a temporary file, validates it, and then adds (or updates) a share host for the agent. The name of the agent. The generated token. Retrieves information about the specified from the specified . This is the first step in a multi-step workflow. The entire sequence is: Upload service calls and awaits , which requests the file info from the remote agent, and waits for the response before returning it to the caller. The remote agent sends the response via the SignalR hub, and the hub invokes . The response is passed back to and returned to the caller. The agent from which to retrieve the file information. The file for which to retrieve information. An optional timeout value. A value indicating whether the file exists, and the length in bytes. Retrieves a stream of the specified from the specified . This is the first step in a multi-step workflow that enables proxying of file uploads through agents. The entire sequence is: Upload service calls and awaits , which requests the file from the remote agent, and waits for the stream to be returned before returning it to the caller. The remote agent makes an HTTP POST request containing a multipart upload including the file, and the API controller invokes and awaits . The stream is passed from this method back to the awaited , and the Upload service passes the stream to Soulseek.NET, streaming the data from the still-open HTTP request through to the remote Soulseek user. If the remote agent can't find or open the requested file, it invokes through the open SignalR connection, and throws with the given exception. If the remote agent fails to respond within the timeout period, throws a . When the Upload is complete (successfully or otherwise), the Upload service invokes , passing an optional if the transfer was not successful. This call signals the waiting to complete, passing control back to the API controller and completing the HTTP POST request from the agent. The agent from which to retrieve the file. The file to retrieve. The starting offset for the transfer. A unique ID for the stream. An optional timeout value. An optional token to monitor for cancellation requests. The operation context, including a stream containing the requested file. Handles the client response for a request. The name of the agent. The ID of the request. The client response to the request. Handles the client response for a request, returning when the corresponding file upload is complete. Assumes has previously been used to ensure the Id and agent match. The name of the agent. The ID of the request. The client response to the request. The operation context. Handles incoming share uploads. The name of the agent. The ID obtained by the caller prior to uploading. The list of shares provided. The filename of the temporary file containing the upload. The operation context. Notifies connected agents that a file download has completed. The filename of the completed file, relative to the downloads directory. The operation context. Notifies the caller of of a failure to obtain a file stream from the requested agent. The unique ID for the stream. The remote exception that caused the failure. Registers the specified name with the specified . The ID of the connection. The agent. Safely attempts to close a stream obtained with . The name of the agent. The unique ID for the stream. If the transfer associated with the stream failed, the exception that caused the failure. Attempts to remove the registration for the specified . The ID of the connection. The registration record, if one was removed. A value indicating whether a registration was removed. Attempts to retrieve the registration for the specified . The ID of the agent connection. The registration record, if one exists. A value indicating whether the registration exists. Validates an authentication challenge response. The ID of the agent connection. The agent name. The response credential. A value indicating whether the response is valid. Attempts to validate the file download response credential associated with the specified . The token. The name of the responding agent. The name of the file being downloaded. The response credential. A value indicating whether the credential is valid. Attempts to validate the file stream response credential associated with the specified . The token. The name of the responding agent. The name of the file being uploaded. The response credential. A value indicating whether the credential is valid. Attempts to validate the share upload response credential associated with the specified . The token. The name of the responding agent. The response credential. A value indicating whether the credential is valid. Tracking information for a Relay agent. The name of the agent. The IP address associated with the active connection. The state of a Relay client. Disconnected. Connected. Connecting. Reconnecting. The mode the Relay is operating under. Controller mode. Agent mode. Debug mode; enables operation as both a controller and agent. Search. Initializes a new instance of the class. Performs a search for the specified . The search request. The search completed successfully. The specified was malformed. The search terminated abnormally. Gets the state of the search corresponding to the specified . The unique id of the search. A value indicating whether to include search responses in the response. The request completed successfully. A matching search was not found. Gets the state of the search corresponding to the specified . The unique id of the search. The request completed successfully. A matching search was not found. Gets the list of active and completed searches. Stops the search corresponding to the specified . The unique id of the search. The search was stopped. The search was not in progress. Deletes the search corresponding to the specified . The unique id of the search. The search was deleted. A search with the specified id could not be found. A search request. Gets or sets the unique search identifier. Gets or sets the maximum number of file results to accept before the search is considered complete. (Default = 10,000). Gets or sets a value indicating whether responses are to be filtered. (Default = true). Gets or sets the maximum queue depth a peer may have in order for a response to be processed. (Default = 1000000). Gets or sets the minimum upload speed a peer must have in order for a response to be processed. (Default = 0). Gets or sets the minimum number of files a response must contain in order to be processed. (Default = 1). Gets or sets the maximum number of search results to accept before the search is considered complete. (Default = 100). Gets or sets the search text. Gets or sets the search timeout value, in seconds, used to determine when the search is complete. (Default = 15). The timeout duration is from the time of the last response. Gets or sets the search token. Maps to a new instance of . Extension methods for the search SignalR hub. Broadcast an update for a search. Responses are removed prior to sending. The hub. The search to broadcast. The operation context. Broadcast a newly received search response. The hub. The ID of the search associated with the response. The response to broadcast. The operation context. Broadcast the creation of a new search. Responses are removed prior to sending. The hub. The search to broadcast. The operation context. Broadcast the deletion of a search. Responses are removed prior to sending. The hub. The search to broadcast. The operation context. The search SignalR hub. Returns a copy of the specified with the specified actions bound, while retaining the existing actions. Returns a copy of the specified with the specified filter delegates overridden. Creates a projection over the specified which omits responses. Caches undelivered search responses. Initializes a new instance of the class. Caches or updates a response. The token for which the response is to be added or updated. The response and context to cache. Attempts to fetch a cached response and context for the specified . The token for the cached response. The cached response and context, if present. A value indicating whether a response for the specified responseToken is cached. Attempts to remove a cached Soulseek.SearchResponse and context for the specified . The token for the cached response. The cached response and context, if present. A value indicating whether a response for the specified responseToken was removed. Handles the lifecycle and persistence of searches. Deletes the specified search. The search to delete. The operation context. Finds a single search matching the specified . The expression to use to match searches. A value indicating whether to include search responses in the result. The found search, or default if not found. Thrown when an expression is not supplied. Returns a list of all completed and in-progress searches, with responses omitted, matching the optional . An optional expression used to match searches. The list of searches matching the specified expression, or all searches if no expression is specified. Updates the specified . Round-trips the database; use accordingly. The search to update. Performs a search for the specified and . A unique identifier for the search. The search query. The search scope. Search options. The completed search. Cancels the search matching the specified , if it is in progress. The unique identifier for the search. A value indicating whether the search was successfully cancelled. Removes searches older than the specified . The age after which records are eligible for pruning, in minutes. The number of pruned records. Handles the lifecycle and persistence of searches. Initializes a new instance of the class. The database context to use. Deletes the specified search. The search to delete. The operation context. Finds a single search matching the specified . The expression to use to match searches. A value indicating whether to include search responses in the result. The found search, or default if not found. Thrown when an expression is not supplied. Returns a list of all completed and in-progress searches, with responses omitted, matching the optional . An optional expression used to match searches. The list of searches matching the specified expression, or all searches if no expression is specified. Updates the specified . The search to update. Performs a search for the specified and . A unique identifier for the search. The search query. The search scope. Search options. The completed search. Cancels the search matching the specified , if it is in progress. The unique identifier for the search. A value indicating whether the search was successfully cancelled. Removes searches older than the specified . The age after which searches are eligible for pruning, in minutes. The number of pruned records. Transfers. Initializes a new instance of the class. Cancels the specified download. The username of the download source. The id of the download. A value indicating whether the tracked download should be removed after cancellation. The download was cancelled successfully. The specified download was not found. Removes all completed downloads, regardless of whether they failed or succeeded. The downloads were removed successfully. Cancels the specified upload. The username of the upload destination. The id of the upload. A value indicating whether the tracked upload should be removed after cancellation. The upload was cancelled successfully. The specified upload was not found. Removes all completed uploads, regardless of whether they failed or succeeded. The uploads were removed successfully. Enqueues the specified download. The username of the download source. The list of download requests. The download was successfully enqueued. The download was rejected. An unexpected error was encountered. Gets all downloads. The request completed successfully. Gets all downloads for the specified username. The request completed successfully. Gets the download for the specified username matching the specified filename, and requests the current place in the remote queue of the specified download. The username of the download source. The id of the download. The request completed successfully. The specified download was not found. Gets all uploads. The request completed successfully. Gets all uploads for the specified username. The request completed successfully. Gets the upload for the specified username matching the specified filename. The username of the upload destination. The id of the upload. The request completed successfully. Gets or sets the filename to download. Gets or sets the size of the file. A single file transfer. Gets the current average transfer speed. Gets the number of remaining bytes to be transferred. Gets the total number of bytes transferred. Gets the transfer direction. Gets the current duration of the transfer, if it has been started. Gets the UTC time at which the transfer transitioned into the state. Gets the filename of the file to be transferred. Gets the transfer id. Gets the ip endpoint of the remote transfer connection, if one has been established. Gets the current progress in percent. Gets the current place in queue, if it has been fetched. Gets the projected remaining duration of the transfer. Gets the remote unique token for the transfer. Gets the size of the file to be transferred, in bytes. Gets the starting offset of the transfer, in bytes. Gets the UTC time at which the transfer transitioned into the state. Gets the state of the transfer. Gets the unique token for the transfer. Gets the username of the peer to or from which the file is to be transferred. Gets the Exception that caused the failure of the transfer, if applicable. Manages downloads. Adds the specified . Supersedes any existing record for the same file and username. This should generally not be called; use EnqueueAsync() instead. Enqueues the requested list of . If one file in the specified collection fails, the rest will continue. An will be thrown after all files are dispositioned if any throws. The username of remote user. The list of files to enqueue. The operation context. Thrown when the username is null or an empty string. Thrown when no files are requested. Thrown when at least one of the requested files throws. Finds a single download matching the specified . The expression to use to match downloads. The found transfer, or default if not found. Retrieves the place in the remote queue for the download matching the specified . The unique identifier for the download. The retrieved place in queue. Returns a list of all downloads matching the optional . An optional expression used to match downloads. Optionally include downloads that have been removed previously. The list of downloads matching the specified expression, or all downloads if no expression is specified. Removes downloads older than the specified . The age after which downloads are eligible for pruning, in hours. An optional, additional state by which downloads are filtered for pruning. The number of pruned downloads. Removes the download matching the specified . This is a soft delete; the record is retained for historical retrieval. The unique identifier of the download. Cancels the download matching the specified , if it is in progress. The unique identifier for the download. A value indicating whether the download was successfully cancelled. Updates the specified . The transfer to update. Manages downloads. Adds the specified . Supersedes any existing record for the same file and username. This should generally not be called; use EnqueueAsync() instead. Enqueues the requested list of . If one file in the specified collection fails, the rest will continue. An will be thrown after all files are dispositioned if any throws. The username of the remote user. The list of files to enqueue. The operation context. Thrown when the username is null or an empty string. Thrown when no files are requested. Thrown when at least one of the requested files throws. Finds a single download matching the specified . The expression to use to match downloads. The found transfer, or default if not found. Retrieves the place in the remote queue for the download matching the specified . The unique identifier for the download. The retrieved place in queue. Returns a list of all downloads matching the optional . An optional expression used to match downloads. Optionally include downloads that have been removed previously. The list of downloads matching the specified expression, or all downloads if no expression is specified. Removes downloads older than the specified . The age after which downloads are eligible for pruning, in hours. An optional, additional state by which downloads are filtered for pruning. The number of pruned downloads. Removes the download matching the specified . This is a soft delete; the record is retained for historical retrieval. The unique identifier of the download. Cancels the download matching the specified , if it is in progress. The unique identifier for the download. A value indicating whether the download was successfully cancelled. Synchronously updates the specified . The transfer to update. Manages transfers. Gets the upload service. Gets the download service. Manages transfers. Initializes a new instance of the class. Gets the upload service. Gets the download service. Queue strategies. Uploads are prioritized based on the time they became ready. Uploads are prioritized based on the time they were enqueued. Gets the remote filename. Gets the string representation of the transfer . This is a hack to get the string into the database. *DO NOT* use this property in code and especially **DO NOT** set the value. The getter and setter can't be protected because EF Core needs them to be public. The time at which the transfer ended, or null if the transfer has not yet started or is in progress. Guaranteed to be set for transfers in a terminal state. Governs upload transfer speed. Asynchronously obtains a grant of for the requesting . This operation completes when any number of bytes can be granted. The amount returned may be smaller than the requested amount. The username of the requesting user. The number of requested bytes. The token to monitor for cancellation. The operation context, including the number of bytes granted. Returns wasted bytes for redistribution. The username of the user that generated the waste. The number of bytes that were attempted to be transferred. The number of bytes granted by all governors in the system. The actual number of bytes transferred. Governs upload transfer speed. Initializes a new instance of the class. The UserService instance to use. The OptionsMonitor instance to use. Asynchronously obtains a grant of for the requesting . This operation completes when any number of bytes can be granted. The amount returned may be smaller than the requested amount. The username of the requesting user. The number of requested bytes. The token to monitor for cancellation. The operation context, including the number of bytes granted. Returns wasted bytes for redistribution. The username of the user that generated the waste. The number of bytes that were attempted to be transferred. The number of bytes granted by all governors in the system. The actual number of bytes transferred. Orchestrates uploads. Awaits the start of an upload. The username of the remote user. The filename for which to await the start. The operation context. Signals the completion of an upload. The username of the remote user. The completed filename. Enqueues an upload. The username of the remote user. The filename to enqueue. Gets information about the specified . The name of the group. The group information. Computes the estimated queue position of the specified for the specified . The username associated with the file. The filename of the file for which the position is to be estimated. The estimated queue position of the file. Thrown if the specified filename is not enqueued. Computes the estimated queue position of the specified if they were to enqueue a file, or zero if the transfer could start immediately. The username for which to estimate. The estimated queue position if the user were to enqueue a file, or zero if the transfer could start immediately. Orchestrates uploads. Initializes a new instance of the class. The UserService instance to use. The OptionsMonitor instance to use. Awaits the start of an upload. The username of the remote user. The filename for which to await the start. The operation context. Signals the completion of an upload. The username of the remote user. The completed filename. Enqueues an upload. The username of the remote user. The filename to enqueue. Gets information about the specified . The name of the group. The group information. Computes the estimated queue position of the specified for the specified . The username associated with the file. The filename of the file for which the position is to be estimated. The estimated queue position of the file. Thrown if the specified filename is not enqueued. Computes the estimated queue position of the specified if they were to enqueue a file, or zero if the transfer could start immediately. The username for which to estimate. The estimated queue position if the user were to enqueue a file, or zero if the transfer could start immediately. Manages uploads. Gets the upload governor. Gets the upload queue. Adds the specified . Supersedes any existing record for the same file and username. This should generally not be called; use instead. Enqueues the requested file. The username of the requesting user. The local filename of the requested file. The operation context. Finds a single upload matching the specified . The expression to use to match uploads. The found transfer, or default if not found. Returns a summary of the uploads matching the specified . This can be expensive; consider caching. The expression used to select uploads for summarization. The generated summary, including the number of files and total size in bytes. Returns a list of all uploads matching the optional . An optional expression used to match uploads. A value indicating whether to include uploads that have been removed previously. The list of uploads matching the specified expression, or all uploads if no expression is specified. Removes uploads older than the specified . The age after which uploads are eligible for pruning, in minutes. An optional, additional state by which uploads are filtered for pruning. The number of pruned uploads. Removes the upload matching the specified . This is a soft delete; the record is retained for historical retrieval. The unique identifier of the upload. Cancels the upload matching the specified , if it is in progress. The unique identifier for the upload. A value indicating whether the upload was successfully cancelled. Synchronously updates the specified . The transfer to update. Manages uploads. Gets the upload governor. Gets the upload queue. Adds the specified . Supersedes any existing record for the same file and username. This should generally not be called; use instead. Enqueues the requested file. The username of the requesting user. The local filename of the requested file. The operation context. Finds a single upload matching the specified . The expression to use to match uploads. The found transfer, or default if not found. Returns a summary of the uploads matching the specified . This can be expensive; consider caching. The expression used to select uploads for summarization. The generated summary, including the number of files and total size in bytes. Returns a list of all uploads matching the optional . An optional expression used to match uploads. A value indicating whether to include uploads that have been removed previously. The list of uploads matching the specified expression, or all uploads if no expression is specified. Removes uploads older than the specified . The age after which uploads are eligible for pruning, in minutes. An optional, additional state by which uploads are filtered for pruning. The number of pruned uploads. Removes the upload matching the specified . This is a soft delete; the record is retained for historical retrieval. The unique identifier of the upload. Cancels the upload matching the specified , if it is in progress. The unique identifier for the upload. A value indicating whether the upload was successfully cancelled. Synchronously updates the specified . The transfer to update. Users. Initializes a new instance of the class. Retrieves the address of the specified . The username of the user. The request completed successfully. Retrieves the files shared by the specified . The username of the user. Retrieves the status of the current browse operation for the specified , if any. The username of the user. Retrieves the files from the specified directory from the specified . The username of the user. The directory contents request. Retrieves information about the specified . The username of the user. Retrieves status for the specified . The username of the user. The average upload speed of the user. The user's country code, if provided. The number of directories shared by the user. The number of files shared by the user. A value indicating whether this user data belongs to the currently logged in user. The number of the user's free download slots, if provided. The status of the user (0 = offline, 1 = away, 2 = online). The number of uploads tracked by the server for the user. The username of the user. Tracks browse operations. Tracked browse operations. Adds or updates a tracked browse operation. Removes a tracked browse operation for the specified user. Gets the browse progress for the specified user. Users extensions. Converts to . The UserStatistics instance to convert. The converted instance. Converts to . The UserStatus instance to convert. The converted instance. Converts to . The UserInfo instance to convert. The converted instance. Tracks browse operations. Tracked browse operations. Adds or updates a tracked browse operation. Gets the browse progress for the specified user. Removes a tracked browse operation for the specified user. Provides information and operations for network peers. This class maintains a UserDictionary that acts as a non-expiring cache of information collected about a user. This includes their statistics (share counts, speed, etc), their status (privileged, etc) and, if they are a member of a user-defined group, their group. This class also maintains a WatchedUsernamesDictionary to keep track of which usernames have been "watched" server side and for which we will therefore receive events when their status changes. If a user's information is in the UserDictionary, it's because we requested it at some point. If that user is also "watched", we can assume that the data in the dictionary is up to date and will be kept so. The data in the UserDictionary can continue to grow until -- unlikely -- it contains a record for every user on or that was on the network at any point since the last client connect. This is a calculated risk, roughly knowing the size of the network, the size of the data being stored, and balanced against the consequences of not having a user's data when it is needed (for queue positioning, speed limits, etc). The method acts on cached data _only_. This method should be called within hot paths, such as a transfer governor or from the upload queue. We care more that it is fast than if it is stale. If no data for the requested user is cached, that user is assumed to be in the default group. The method is similar to , except that if the requested user is not cached, it will fetch the user's data and cache it before returning. This method accepts an optional parameter that can be used to force a "refresh" of the requested user's data, useful for times when we want the latest data, and can afford to wait for it. Gets the list of tracked users. Gets the list of watched usernames. Gets the name of the group for the specified . The group name is fetched from cached data, and lookups should always be fast. The username of the peer. The group for the specified username. Retrieves peer . The username of the peer. The retrieved info. Retrieves a peer's IP endpoint, including their IP address and listen port. The username of the peer. The retrieved endpoint. Gets the name of the group for the specified , or, if the user's information isn't cached, fetches and caches the user's information from the server, then returns the group. The fetch of fresh data can be forced by specifying = true. The username of the peer. A value determining whether the user's information should be fetched from the server, regardless of local cache. The group for the specified username. Retrieves the current of a peer, and caches the result. The username of the peer. The retrieved statistics. Retrieves the current of a peer, and caches the result. The username of the peer. The retrieved status. Grants the specified peer the specified number of privilege days. The username of the peer. The number of days to grant. The operation context. Gets a value indicating whether the specified and/or are blacklisted. The username to check. The IPAddress to check, if available. A value indicating whether the specified user and/or IP are blacklisted. Retrieves a value indicating whether the specified peer is privileged. The username of the peer. A value indicating whether the specified peer is privileged. Gets a value indicating whether the specified is watched. The username of the peer. A value indicating whether the username is watched. Adds the specified username to the server-side user list. The username of the peer. The operation context. Gets the average upload speed of the user. Gets the number of directories shared by the user. Gets the number of files shared by the user. Gets the number of uploads tracked by the server for this user. User status. Gets a value indicating whether the user is privileged. Gets the user's presence. Gets the username of the user. Gets the user's configured group. Gets the user's statistics. Gets the user's status. Provides information and operations for network peers. This class maintains a that acts as a non-expiring cache of information collected about a user. This includes their statistics (share counts, speed, etc), their status (privileged, etc) and, if they are a member of a user-defined group, their group. This class also maintains a to keep track of which usernames have been "watched" server side and for which we will therefore receive events when their status changes. If a user's information is in the , it's because we requested it at some point. If that user is also "watched", we can assume that the data in the dictionary is up to date and will be kept so. The data in the can continue to grow until -- unlikely -- it contains a record for every user on or that was on the network at any point since the last client connect. This is a calculated risk, roughly knowing the size of the network, the size of the data being stored, and balanced against the consequences of not having a user's data when it is needed (for queue positioning, speed limits, etc). The method acts on cached data _only_. This method should be called within hot paths, such as a transfer governor or from the upload queue. We care more that it is fast than if it is stale. If no data for the requested user is cached, that user is assumed to be in the default group. The method is similar to , except that if the requested user is not cached, it will fetch the user's data and cache it before returning. This method accepts an optional parameter that can be used to force a "refresh" of the requested user's data, useful for times when we want the latest data, and can afford to wait for it. Initializes a new instance of the class. Gets the list of tracked users. Gets the list of watched usernames. Gets or sets the internal cache of User data. This method retrieves the requested user's information from a dictionary, and is therefore a 'get'. This information is needed to control who can do what, who is subject to what limits, how to control the upload queue, and how to govern speeds. The logic in this method is the 'hottest' in the application and *must* remain very simple and _fast_. If this method is called for a user who has not previously been cached, it will return the default group, meaning leech, privilege, and user defined group discrimination will not work. For this reason it is critical that user information is retrieved and cached upon first interaction with that user. Uploads can be cached indefinitely, and for that reason the user data cache must be filled indefinitely; meaning there is no invalidation and that user data will accrue for the lifetime of the application (instance). Gets the name of the group for the specified . The group name is fetched from cached data, and lookups should always be fast. The username of the peer. The group for the specified username. Retrieves peer . The username of the peer. The retrieved info. Retrieves a peer's IP endpoint, including their IP address and listen port. The username of the peer. The retrieved endpoint. Gets the name of the group for the specified , or, if the user's information isn't cached, fetches and caches the user's information from the server, then returns the group. The fetch of fresh data can be forced by specifying = true. The username of the peer. A value determining whether the user's information should be fetched from the server, regardless of local cache. The group for the specified username. Retrieves the current of a peer, and caches the result. The username of the peer. The retrieved statistics. Retrieves the current of a peer, and caches the result. The username of the peer. The retrieved status. Grants the specified peer the specified number of privilege days. The username of the peer. The number of days to grant. The operation context. Gets a value indicating whether the specified and/or are blacklisted. The username to check. The IPAddress to check, if available. A value indicating whether the specified user and/or IP are blacklisted. Retrieves a value indicating whether the specified peer is privileged. The username of the peer. A value indicating whether the specified peer is privileged. Gets a value indicating whether the specified is watched. The username of the peer. A value indicating whether the username is watched. Adds the specified username to the server-side user list. Idempotent; if a user is already watched, subsequent calls will only update their status and statistics. Any user we want to track in any way needs to be watched so that their statistics and status are updated properly via server side events. This seems extreme and wasteful, but the only alternative is to periodically spam the server for the information instead of letting the server spam the client when things change. The username of the peer. The operation context.