# IVR Component

The IVR component can be used to implement an Interactive Voice Response (IVR) menu.

## Syntax

```text
TipvIVR
```

## Remarks

The IVR component can be used to implement an IVR menu utilizing modern Voice over Internet Protocol (VoIP) technology. This softphone offers a comprehensive set of features, including the ability to handle incoming calls, detect touch-tone inputs from the caller, and perform other common Voice over Internet Protocol (VoIP) operations. With this, you have a level of flexibility and control when it comes to designing and customizing menu options.

### Registration

To begin, the first step is activating, or registering, the component. The [Server](#server-property-ivr-component), [Port](#port-property-ivr-component), [User](#user-property-ivr-component), and [Password](#password-property-ivr-component) properties must be set to the appropriate values to register with your SIP server/provider. Optionally, the Domain property may be set to specify the SIP domain associated with the account, as this value may differ from the [Server](#server-property-ivr-component) used to reach the provider (e.g., some providers route registration/media through one host but expect SIP URIs to reference a separate domain). If not specified, the component uses the [Server](#server-property-ivr-component) value as the default domain.

After these values are set, call [Activate](#activate-method-ivr-component). If the component has successfully activated/registered, the [Activated](#activated-event-ivr-component) event will fire, and [Active](#active-property-ivr-component) will be set to true. The component will now be able to make/receive phone calls. For example:

```text
component.OnActivated += (o, e) => {
  Console.WriteLine("Activation Successful");
};

component.User = "user";
component.Password = "password";
component.Server = "sip.example.com";
component.Domain = "example.com"; // Optional, only needed if it differs from the server
component.Port = 5060 // Default, 5061 is typical for SSL/TLS

component.Activate();
```

 Additionally, it's important to note that the registration of a SIP client will expire if not refreshed. The expiration time is negotiated with the server when registering. By default, the component will attempt to negotiate a value of 60 seconds. This value can be changed via the [RegistrationInterval](#RegistrationInterval) configuration. Note this is merely a suggestion to the server, and the server can change this accordingly. If the server does change this, [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval) will reflect the negotiated lifetime. Afterwards, the component will attempt to refresh the registration every [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval) seconds.

Clients may wish to refresh the registration prior to this interval to ensure the registration does not expire. To do so, the [RefreshInterval](#RefreshInterval) configuration can be set after successful registration. If set, this value should be less than or equal to [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval). For example, to refresh the registration *5* seconds prior to its expiration, the following can be performed after activation:

```csharp
component.Config("RegistrationInterval=120");
component.Activate();
int lifetime = component.Config("NegotiatedRegistrationInterval");

// Refresh the registration 5 seconds prior to expiration
component.Config("RefreshInterval=" + (lifetime - 5));
```

To prevent the registration from expiring, the component will refresh the registration within [DoEvents](#doevents-method-ivr-component) according to the value of [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval), or [RefreshInterval](#RefreshInterval) if specified. To ensure this occurs, we recommend calling [DoEvents](#doevents-method-ivr-component) frequently. For example, this could look something like:

```csharp
private void timer1_Tick(object sender, EventArgs e)
{
  component.DoEvents();
}

private System.Windows.Forms.Timer timer1;
timer1.Interval = 1000;
timer1.Tick += new System.EventHandler(this.timer1_Tick);
timer1.Enabled = true;
```

Note the above solution does not apply to console applications, as [DoEvents](#doevents-method-ivr-component) should already be called in a loop to provide efficient message processing.

### Security

By default, the component operates in plaintext for both SIP signaling and RTP (audio) communication. To enable completely secure communication using the component, both SIPS (Secure SIP) and SRTP (Secure RTP) must be enabled.

**Enable SIPS**

To enable SIPS (Secure SIP, or SIP over SSL/TLS), the [SIPTransportProtocol](#siptransportprotocol-property-ivr-component) property must be set to 2 (TLS). The [Port](#port-property-ivr-component) property will typically need to be set to 5061 (this may vary). Additionally, the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event may be handled, allowing users to check the server identity and other security attributes related to server authentication. Once this is complete, the component can then be activated. All subsequent SIP signaling will now be secured. For example:

```text
component.OnSSLServerAuthentication += (o, e) => {
  if (!e.Accept) {
    if (e.CertSubject == "SIPS_SAMPLE_SUBJECT" && e.CertIssuer == "SIPS_CERT_ISSUER") {
      e.Accept = true;
    }
  }
};

// Enable SIPS
component.SIPTransportProtocol = 2; // TLS

component.User = "sip_user";
component.Password = "sip_password";
component.Server = "sip_server";
component.Port = 5061; // 5061 is typical for SSL/TLS

component.Activate();
```

Information related to the SSL/TLS handshake will be available within the [SSLStatus](#sslstatus-event-ivr-component) event with the prefix *[SIP TLS]*.

**Enable SRTP**

While the above process secures SIP signaling, it does not secure RTP (audio) communication. The [RTPSecurityMode](#rtpsecuritymode-property-ivr-component) property can be used to specify the security mode that will be used when transmitting RTP packets. By default, this property is 0 (None), and RTP packets will remain unencrypted during communication with the remote party.

To ensure the audio data is encrypted and SRTP is enabled, the [RTPSecurityMode](#rtpsecuritymode-property-ivr-component) must be set to either of the following modes: 1 (SDES) or 2 (DTLS-SRTP). The selected mode will be used to securely derive a key used to encrypt and decrypt RTP packets, enabling secure audio communication with the remote party. The appropriate mode to use may depend on the service provider and configuration of a particular [User](#user-property-ivr-component). For example:

```text
component.OnSSLServerAuthentication += (o, e) => {
  if (!e.Accept) {
    if (e.CertSubject == "SIPS_SAMPLE_SUBJECT" && e.CertIssuer == "SIPS_CERT_ISSUER") {
      e.Accept = true;
    }
  }
};

component.RTPSecurityMode = 1; // Enable SRTP (SDES)
//component.RTPSecurityMode = 2; // Enable SRTP (DTLS-SRTP)

component.SIPTransportProtocol = 2; // TLS

component.User = "sip_user";
component.Password = "sip_password";
component.Server = "sip_server";
component.Port = 5061; // 5061 is typical for SSL/TLS

component.Activate();

component.Dial("123456789", "", true);
```

Note it is highly recommended that [SIPTransportProtocol](#siptransportprotocol-property-ivr-component) is set to *TLS* when enabling SRTP. Additionally, if SRTP is enabled, the remote party must support the selected mode; otherwise, no call will be established.

### Handle Incoming Calls

After successful activation, incoming calls will be detected, and [IncomingCall](#incomingcall-event-ivr-component) will fire for each call. Within this event, [Answer](#answer-method-ivr-component) or [Decline](#decline-method-ivr-component) can be used to handle these calls. For example:

```text
ivr1.OnIncomingCall += (o, e) => {
  ivr1.Answer(e.CallId);
};
```

### Automated Responses

Throughout the menu, there are various ways to prompt a caller. For example, you may want to play an initial message to an answered call. Once a call has been answered, the [CallReady](#callready-event-ivr-component) event will fire, where you can use either [PlayText](#playtext-method-ivr-component), [PlayFile](#playfile-method-ivr-component), or [PlayBytes](#playbytes-method-ivr-component) to do so. For example:

```text
ivr1.OnCallReady += (o, e) => {
  ivr1.PlayText(e.CallId, "Please press 1 to be transferred to sales. Press 2 to be transferred to support. Press 3 to hear the options again.");
};
```

Only audio data with a sampling rate of 8 kHz and a bit depth of 16 bits per sample can be played (PCM 8 kHz 16-bit format). Note that these methods are non-blocking. The component can play audio to multiple calls at once.

Once the audio has finished playing to a particular call, the [Played](#played-event-ivr-component) event will fire, with the CallId as a parameter. Please see [PlayBytes](#playbytes-method-ivr-component) and [Played](#played-event-ivr-component) for more information on expected behavior when playing bytes.

### Handle User Input

A main focus of an IVR menu revolves around handling user input. The component keeps track of the touch-tone inputs of a caller in the call's "UserInput" field. Additionally, the [Digit](#digit-event-ivr-component) event will fire whenever user input is detected. The event will contain parameters for the *Digit* pressed, and the associated *CallId*. The component can detect digits 0-9, *, and # tones. Based on current and previous inputs, you can implement various menu options, from transferring calls to certain extensions, checking a user's account status, placing user's on hold, etc. For example:

```text
ivr1.OnDigit += (o, e) => {
  if (e.Digit.Equals("1")) {
    ivr1.Transfer(e.CallId, "Sales Number");
  } else if (e.Digit.Equals("2")) {
    ivr1.Transfer(e.CallId, "Support Number");
  } else if (e.Digit.Equals("3")) {
    ivr1.PlayText(e.CallId, "Please press 1 to be transferred to sales. Press 2 to be transferred to support. Press 3 to hear the options again.");
  } else {
    // Unhandled input
  }
};
```

### Call Termination

Ongoing calls are terminated by passing the appropriate *CallId* to [Hangup](#hangup-method-ivr-component). All ongoing calls can be terminated with [HangupAll](#hangupall-method-ivr-component). When a call has been terminated (by either party), [CallTerminated](#callterminated-event-ivr-component) will fire.

## Property List

*The following is the full list of the properties of the component with short descriptions. Click on the links for further details.*

|  |  |
| --- | --- |
| [Active](#active-property-ivr-component) | The current activation status of the component. |
| [AudioEncoding](#audioencoding-property-ivr-component) | This property specifies the audio encoding format used when dynamically recording a call's audio, and when playing audio via PlayBytes . |
| [CallCount](#callcount-property-ivr-component) | The number of records in the Call arrays. |
| [CallId](#callid-property-ivr-component) | String representation of an immutable universally unique identifier (UUID) specific to the call. |
| [CallConferenceId](#callconferenceid-property-ivr-component) | A unique identifier for a conference call. |
| [CallDuration](#callduration-property-ivr-component) | Elapsed time, in seconds, since the call has begun. |
| [CallLastStatus](#calllaststatus-property-ivr-component) | This property indicates the call's last response code. |
| [CallLocalAddress](#calllocaladdress-property-ivr-component) | The name of the local host or user-assigned IP interface through which connections are initiated or accepted. |
| [CallLocalPort](#calllocalport-property-ivr-component) | The UDP port in the local host where UDP binds. |
| [CallMicrophone](#callmicrophone-property-ivr-component) | The microphone currently in use during the call. |
| [CallMuteMicrophone](#callmutemicrophone-property-ivr-component) | This property can be set to mute the Microphone being used by the component in the given call. |
| [CallMuteSpeaker](#callmutespeaker-property-ivr-component) | This property can be set to mute the Speaker being used by the component in the given call. |
| [CallOutgoing](#calloutgoing-property-ivr-component) | Indicates whether the current call is outgoing. |
| [CallPlaying](#callplaying-property-ivr-component) | Indicates whether the current call is playing audio via PlayText or PlayFile , or PlayBytes . |
| [CallRecording](#callrecording-property-ivr-component) | Indicates whether the current call is recording the received voice from the peer. |
| [CallRemoteAddress](#callremoteaddress-property-ivr-component) | The address of the remote host we are communicating with. |
| [CallRemotePort](#callremoteport-property-ivr-component) | The port of the remote host we are communicating with. |
| [CallRemoteURI](#callremoteuri-property-ivr-component) | This property communicates who to call via SIP. |
| [CallRemoteUser](#callremoteuser-property-ivr-component) | The username or telephone number of the remote user associated with the call. |
| [CallSpeaker](#callspeaker-property-ivr-component) | The speaker currently in use during the call. |
| [CallStartedAt](#callstartedat-property-ivr-component) | The number of milliseconds since 12:00:00 AM January 1, 1970 when this call started. |
| [CallState](#callstate-property-ivr-component) | This property indicates the state of the current call. |
| [CallUserInput](#calluserinput-property-ivr-component) | String representation of digits typed by the callee using their keypad. |
| [CallVia](#callvia-property-ivr-component) | The Via header sent in the most recent SIP request. |
| [LocalHost](#localhost-property-ivr-component) | The name of the local host or user-assigned IP interface through which connections are initiated or accepted. |
| [LocalPort](#localport-property-ivr-component) | This property includes the User Datagram Protocol (UDP) port in the local host where UDP binds. |
| [Password](#password-property-ivr-component) | The password that is used to authenticate with the SIP server. |
| [Port](#port-property-ivr-component) | The port on the SIP server the component is connecting to. |
| [RTPSecurityMode](#rtpsecuritymode-property-ivr-component) | Specifies the security mode that will be used when transmitting RTP. |
| [Server](#server-property-ivr-component) | The address of the SIP Server. |
| [SIPTransportProtocol](#siptransportprotocol-property-ivr-component) | Specifies the transport protocol the component will use for SIP signaling. |
| [SSLAcceptServerCertEffectiveDate](#sslacceptservercerteffectivedate-property-ivr-component) | The date on which this certificate becomes valid. |
| [SSLAcceptServerCertExpirationDate](#sslacceptservercertexpirationdate-property-ivr-component) | The date on which the certificate expires. |
| [SSLAcceptServerCertExtendedKeyUsage](#sslacceptservercertextendedkeyusage-property-ivr-component) | A comma-delimited list of extended key usage identifiers. |
| [SSLAcceptServerCertFingerprint](#sslacceptservercertfingerprint-property-ivr-component) | The hex-encoded, 16-byte MD5 fingerprint of the certificate. |
| [SSLAcceptServerCertFingerprintSHA1](#sslacceptservercertfingerprintsha1-property-ivr-component) | The hex-encoded, 20-byte SHA-1 fingerprint of the certificate. |
| [SSLAcceptServerCertFingerprintSHA256](#sslacceptservercertfingerprintsha256-property-ivr-component) | The hex-encoded, 32-byte SHA-256 fingerprint of the certificate. |
| [SSLAcceptServerCertIssuer](#sslacceptservercertissuer-property-ivr-component) | The issuer of the certificate. |
| [SSLAcceptServerCertPrivateKey](#sslacceptservercertprivatekey-property-ivr-component) | The private key of the certificate (if available). |
| [SSLAcceptServerCertPrivateKeyAvailable](#sslacceptservercertprivatekeyavailable-property-ivr-component) | Whether a PrivateKey is available for the selected certificate. |
| [SSLAcceptServerCertPrivateKeyContainer](#sslacceptservercertprivatekeycontainer-property-ivr-component) | The name of the PrivateKey container for the certificate (if available). |
| [SSLAcceptServerCertPublicKey](#sslacceptservercertpublickey-property-ivr-component) | The public key of the certificate. |
| [SSLAcceptServerCertPublicKeyAlgorithm](#sslacceptservercertpublickeyalgorithm-property-ivr-component) | The textual description of the certificate's public key algorithm. |
| [SSLAcceptServerCertPublicKeyLength](#sslacceptservercertpublickeylength-property-ivr-component) | The length of the certificate's public key (in bits). |
| [SSLAcceptServerCertSerialNumber](#sslacceptservercertserialnumber-property-ivr-component) | The serial number of the certificate encoded as a string. |
| [SSLAcceptServerCertSignatureAlgorithm](#sslacceptservercertsignaturealgorithm-property-ivr-component) | The text description of the certificate's signature algorithm. |
| [SSLAcceptServerCertStore](#sslacceptservercertstore-property-ivr-component) | The name of the certificate store for the client certificate. |
| [SSLAcceptServerCertStorePassword](#sslacceptservercertstorepassword-property-ivr-component) | If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store. |
| [SSLAcceptServerCertStoreType](#sslacceptservercertstoretype-property-ivr-component) | The type of certificate store for this certificate. |
| [SSLAcceptServerCertSubjectAltNames](#sslacceptservercertsubjectaltnames-property-ivr-component) | Comma-separated lists of alternative subject names for the certificate. |
| [SSLAcceptServerCertThumbprintMD5](#sslacceptservercertthumbprintmd5-property-ivr-component) | The MD5 hash of the certificate. |
| [SSLAcceptServerCertThumbprintSHA1](#sslacceptservercertthumbprintsha1-property-ivr-component) | The SHA-1 hash of the certificate. |
| [SSLAcceptServerCertThumbprintSHA256](#sslacceptservercertthumbprintsha256-property-ivr-component) | The SHA-256 hash of the certificate. |
| [SSLAcceptServerCertUsage](#sslacceptservercertusage-property-ivr-component) | The text description of UsageFlags . |
| [SSLAcceptServerCertUsageFlags](#sslacceptservercertusageflags-property-ivr-component) | The flags that show intended use for the certificate. |
| [SSLAcceptServerCertVersion](#sslacceptservercertversion-property-ivr-component) | The certificate's version number. |
| [SSLAcceptServerCertSubject](#sslacceptservercertsubject-property-ivr-component) | The subject of the certificate used for client authentication. |
| [SSLAcceptServerCertEncoded](#sslacceptservercertencoded-property-ivr-component) | The certificate (PEM/Base64 encoded). |
| [SSLCertEffectiveDate](#sslcerteffectivedate-property-ivr-component) | The date on which this certificate becomes valid. |
| [SSLCertExpirationDate](#sslcertexpirationdate-property-ivr-component) | The date on which the certificate expires. |
| [SSLCertExtendedKeyUsage](#sslcertextendedkeyusage-property-ivr-component) | A comma-delimited list of extended key usage identifiers. |
| [SSLCertFingerprint](#sslcertfingerprint-property-ivr-component) | The hex-encoded, 16-byte MD5 fingerprint of the certificate. |
| [SSLCertFingerprintSHA1](#sslcertfingerprintsha1-property-ivr-component) | The hex-encoded, 20-byte SHA-1 fingerprint of the certificate. |
| [SSLCertFingerprintSHA256](#sslcertfingerprintsha256-property-ivr-component) | The hex-encoded, 32-byte SHA-256 fingerprint of the certificate. |
| [SSLCertIssuer](#sslcertissuer-property-ivr-component) | The issuer of the certificate. |
| [SSLCertPrivateKey](#sslcertprivatekey-property-ivr-component) | The private key of the certificate (if available). |
| [SSLCertPrivateKeyAvailable](#sslcertprivatekeyavailable-property-ivr-component) | Whether a PrivateKey is available for the selected certificate. |
| [SSLCertPrivateKeyContainer](#sslcertprivatekeycontainer-property-ivr-component) | The name of the PrivateKey container for the certificate (if available). |
| [SSLCertPublicKey](#sslcertpublickey-property-ivr-component) | The public key of the certificate. |
| [SSLCertPublicKeyAlgorithm](#sslcertpublickeyalgorithm-property-ivr-component) | The textual description of the certificate's public key algorithm. |
| [SSLCertPublicKeyLength](#sslcertpublickeylength-property-ivr-component) | The length of the certificate's public key (in bits). |
| [SSLCertSerialNumber](#sslcertserialnumber-property-ivr-component) | The serial number of the certificate encoded as a string. |
| [SSLCertSignatureAlgorithm](#sslcertsignaturealgorithm-property-ivr-component) | The text description of the certificate's signature algorithm. |
| [SSLCertStore](#sslcertstore-property-ivr-component) | The name of the certificate store for the client certificate. |
| [SSLCertStorePassword](#sslcertstorepassword-property-ivr-component) | If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store. |
| [SSLCertStoreType](#sslcertstoretype-property-ivr-component) | The type of certificate store for this certificate. |
| [SSLCertSubjectAltNames](#sslcertsubjectaltnames-property-ivr-component) | Comma-separated lists of alternative subject names for the certificate. |
| [SSLCertThumbprintMD5](#sslcertthumbprintmd5-property-ivr-component) | The MD5 hash of the certificate. |
| [SSLCertThumbprintSHA1](#sslcertthumbprintsha1-property-ivr-component) | The SHA-1 hash of the certificate. |
| [SSLCertThumbprintSHA256](#sslcertthumbprintsha256-property-ivr-component) | The SHA-256 hash of the certificate. |
| [SSLCertUsage](#sslcertusage-property-ivr-component) | The text description of UsageFlags . |
| [SSLCertUsageFlags](#sslcertusageflags-property-ivr-component) | The flags that show intended use for the certificate. |
| [SSLCertVersion](#sslcertversion-property-ivr-component) | The certificate's version number. |
| [SSLCertSubject](#sslcertsubject-property-ivr-component) | The subject of the certificate used for client authentication. |
| [SSLCertEncoded](#sslcertencoded-property-ivr-component) | The certificate (PEM/Base64 encoded). |
| [User](#user-property-ivr-component) | The SIP username used to identify the component throughout the session. |

## Method List

*The following is the full list of the methods of the component with short descriptions. Click on the links for further details.*

|  |  |
| --- | --- |
| [Activate](#activate-method-ivr-component) | Activates the component. |
| [Answer](#answer-method-ivr-component) | Answers an incoming phone call. |
| [Config](#config-method-ivr-component) | Sets or retrieves a configuration setting. |
| [Deactivate](#deactivate-method-ivr-component) | Deactivates the component. |
| [Decline](#decline-method-ivr-component) | Declines an incoming phone call. |
| [Dial](#dial-method-ivr-component) | Used to make a call. |
| [DoEvents](#doevents-method-ivr-component) | This method processes events from the internal message queue. |
| [Hangup](#hangup-method-ivr-component) | Used to hang up a specific call. |
| [HangupAll](#hangupall-method-ivr-component) | Used to hang up all calls. |
| [Hold](#hold-method-ivr-component) | Places a call on hold. |
| [Ping](#ping-method-ivr-component) | Used to ping the server. |
| [PlayBytes](#playbytes-method-ivr-component) | This method is used to play bytes to a call. |
| [PlayFile](#playfile-method-ivr-component) | Plays audio from a WAV file to a call. |
| [PlayText](#playtext-method-ivr-component) | Plays audio from a string to a call using Text-to-Speech. |
| [Reset](#reset-method-ivr-component) | This method will reset the component. |
| [StartRecording](#startrecording-method-ivr-component) | Used to start recording the audio of a call. |
| [StopPlaying](#stopplaying-method-ivr-component) | Stops audio from playing to a call. |
| [StopRecording](#stoprecording-method-ivr-component) | Stops recording the audio of a call. |
| [Transfer](#transfer-method-ivr-component) | Transfers a call. |
| [Unhold](#unhold-method-ivr-component) | Takes a call off hold. |

## Event List

*The following is the full list of the events fired by the component with short descriptions. Click on the links for further details.*

|  |  |
| --- | --- |
| [Activated](#activated-event-ivr-component) | This event is fired immediately after the component is activated. |
| [CallReady](#callready-event-ivr-component) | This event is fired after a call has been answered, declined, or ignored. |
| [CallStateChanged](#callstatechanged-event-ivr-component) | This event is fired after a call's state has changed. |
| [CallTerminated](#callterminated-event-ivr-component) | This event is fired after a call has been terminated. |
| [Deactivated](#deactivated-event-ivr-component) | This event is fired immediately after the component is deactivated. |
| [DialCompleted](#dialcompleted-event-ivr-component) | This event is fired after the dial process has finished. |
| [Digit](#digit-event-ivr-component) | This event fires every time a digit is pressed using the keypad. |
| [Error](#error-event-ivr-component) | Fired when information is available about errors during data delivery. |
| [IncomingCall](#incomingcall-event-ivr-component) | This event is fired when an incoming call is received. |
| [Log](#log-event-ivr-component) | This event is fired once for each log message. |
| [OutgoingCall](#outgoingcall-event-ivr-component) | This event is fired when an outgoing call has been made. |
| [Played](#played-event-ivr-component) | This event is fired after the component finishes playing available audio. |
| [Record](#record-event-ivr-component) | This event is fired when recorded audio data is available. |
| [Silence](#silence-event-ivr-component) | This event is fired when the component detects silence from incoming audio streams. |
| [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) | Fired after the server presents its certificate to the client. |
| [SSLStatus](#sslstatus-event-ivr-component) | Fired when secure connection progress messages are available. |

## Config Settings

*The following is a list of config settings for the component with short descriptions. Click on the links for further details.*

|  |  |
| --- | --- |
| [AuthUser](#AuthUser) | Specifies the username to be used during client authentication. |
| [Codecs](#Codecs) | Comma-separated list of codecs the component can use. |
| [DeclineStatus](#DeclineStatus) | Specifies the status to send when declining an incoming call. |
| [DialTimeout](#DialTimeout) | Specifies the amount of time to wait for a response when making a call. |
| [DialToneFile](#DialToneFile) | Specifies the location of the WAV file to play when making a call. |
| [DisableRegistration](#DisableRegistration) | Can be used to disable SIP registration. |
| [DtmfMethod](#DtmfMethod) | The method used for delivering the signals/tones sent when typing a digit. |
| [EnableDynamicRecording](#EnableDynamicRecording) | Specifies whether dynamic recording is enabled when recording a call. |
| [LogEncodedAudioData](#LogEncodedAudioData) | Whether the component will log encoded audio data. |
| [LogLevel](#LogLevel) | The level of detail that is logged. |
| [LogRTPPackets](#LogRTPPackets) | Whether the component will log RTP packets. |
| [MatchRequestToUser](#MatchRequestToUser) | Whether the component will match incoming requests to the specified user. |
| [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval) | Specifies the negotiated lifetime of the current registration after successful activation. |
| [P2PMode](#P2PMode) | Enables peer-to-peer communication without the need for a server. |
| [RecordType](#RecordType) | The type of recording the component will use. |
| [RedirectLimit](#RedirectLimit) | The maximum number of redirects an outgoing call can experience. |
| [RefreshInterval](#RefreshInterval) | Used to manually specify the interval between subsequent registration messages after successful activation. |
| [RegistrationInterval](#RegistrationInterval) | Used to specify the desired lifetime of the registration to the server prior to activation. |
| [RemoteDisplayName](#RemoteDisplayName) | Specifies the display name from the remote party's From header. |
| [RingtoneFile](#RingtoneFile) | Specifies location of a WAV file to play when receiving an incoming call. |
| [SilenceInterval](#SilenceInterval) | Specifies the interval the component uses to detect periods of silence. |
| [STUNPort](#STUNPort) | The port of the STUN server. |
| [STUNServer](#STUNServer) | The address of the STUN Server. |
| [UnregisterOnActivate](#UnregisterOnActivate) | Specifies whether the component will unregister from the SIP Server before registration. |
| [UserAgent](#UserAgent) | Information about the user agent (client). |
| [VoiceIndex](#VoiceIndex) | The voice that will be used when playing text. |
| [VoiceRate](#VoiceRate) | The speaking rate of the voice when playing text. |
| [CaptureIPPacketInfo](#CaptureIPPacketInfo) | Used to capture the packet information. |
| [DelayHostResolution](#DelayHostResolution) | Whether the hostname is resolved when RemoteHost is set. |
| [DestinationAddress](#DestinationAddress) | Used to get the destination address from the packet information. |
| [DontFragment](#DontFragment) | Used to set the Don't Fragment flag of outgoing packets. |
| [LocalHost](#LocalHost) | The name of the local host through which connections are initiated or accepted. |
| [LocalPort](#LocalPort) | The port in the local host where the component binds. |
| [MaxPacketSize](#MaxPacketSize) | The maximum length of the packets that can be received. |
| [QOSDSCPValue](#QOSDSCPValue) | Used to specify an arbitrary QOS/DSCP setting (optional). |
| [QOSTrafficType](#QOSTrafficType) | Used to specify QOS/DSCP settings (optional). |
| [ShareLocalPort](#ShareLocalPort) | If set to True, allows more than one instance of the component to be active on the same local port. |
| [SourceIPAddress](#SourceIPAddress) | Used to set the source IP address used when sending a packet. |
| [SourceMacAddress](#SourceMacAddress) | Used to set the source MAC address used when sending a packet. |
| [UseConnection](#UseConnection) | Determines whether to use a connected socket. |
| [UseIPv6](#UseIPv6) | Whether or not to use IPv6. |
| [AbsoluteTimeout](#AbsoluteTimeout) | Determines whether timeouts are inactivity timeouts or absolute timeouts. |
| [AbsoluteTimeout](#AbsoluteTimeout) | Determines whether timeouts are inactivity timeouts or absolute timeouts. |
| [FirewallData](#FirewallData) | Used to send extra data to the firewall. |
| [FirewallData](#FirewallData) | Used to send extra data to the firewall. |
| [InBufferSize](#InBufferSize) | The size in bytes of the incoming queue of the socket. |
| [InBufferSize](#InBufferSize) | The size in bytes of the incoming queue of the socket. |
| [OutBufferSize](#OutBufferSize) | The size in bytes of the outgoing queue of the socket. |
| [OutBufferSize](#OutBufferSize) | The size in bytes of the outgoing queue of the socket. |
| [ConnectionTimeout](#ConnectionTimeout) | Sets a separate timeout value for establishing a connection. |
| [EnableFallback](#EnableFallback) | Whether to try the other addresses the remote host resolves to when a connection attempt fails. |
| [FallbackTimeout](#FallbackTimeout) | The maximum time in milliseconds to spend on connection attempts when EnableFallback is enabled. |
| [FirewallAutoDetect](#FirewallAutoDetect) | Tells the component whether or not to automatically detect and use firewall system settings, if available. |
| [FirewallHost](#FirewallHost) | Name or IP address of firewall (optional). |
| [FirewallHTTPVersion](#FirewallHTTPVersion) | The HTTP version to be used when connecting through a tunneling proxy. |
| [FirewallPassword](#FirewallPassword) | Password to be used if authentication is to be used when connecting through the firewall. |
| [FirewallPort](#FirewallPort) | The TCP port for the FirewallHost;. |
| [FirewallTunnelAuthScheme](#FirewallTunnelAuthScheme) | This configuration setting specifies the authentication mechanism to use when authenticating to a tunneling proxy. |
| [FirewallType](#FirewallType) | Determines the type of firewall to connect through. |
| [FirewallUser](#FirewallUser) | A user name if authentication is to be used connecting through a firewall. |
| [KeepAliveInterval](#KeepAliveInterval) | The retry interval, in milliseconds, to be used when a TCP keep-alive packet is sent and no response is received. |
| [KeepAliveTime](#KeepAliveTime) | The inactivity time in milliseconds before a TCP keep-alive packet is sent. |
| [Linger](#Linger) | When set to True, connections are terminated gracefully. |
| [LingerTime](#LingerTime) | Time in seconds to have the connection linger. |
| [LocalHost](#LocalHost) | The name of the local host through which connections are initiated or accepted. |
| [LocalPort](#LocalPort) | The port in the local host where the component binds. |
| [MaxLineLength](#MaxLineLength) | The maximum amount of data to accumulate when no EOL is found. |
| [MaxTransferRate](#MaxTransferRate) | The transfer rate limit in bytes per second. |
| [ProxyExceptionsList](#ProxyExceptionsList) | A semicolon separated list of hosts and IPs to bypass when using a proxy. |
| [TCPKeepAlive](#TCPKeepAlive) | Determines whether or not the keep alive socket option is enabled. |
| [TcpNoDelay](#TcpNoDelay) | Whether or not to delay when sending packets. |
| [UseIPv6](#UseIPv6) | Whether to use IPv6. |
| [UseNTLMv2](#UseNTLMv2) | Whether to use NTLM V2. |
| [LogSSLPackets](#LogSSLPackets) | Controls whether SSL packets are logged when using the internal security API. |
| [LogSSLPackets](#LogSSLPackets) | Controls whether SSL packets are logged when using the internal security API. |
| [OpenSSLCADir](#OpenSSLCADir) | The path to a directory containing CA certificates. |
| [OpenSSLCADir](#OpenSSLCADir) | The path to a directory containing CA certificates. |
| [OpenSSLCAFile](#OpenSSLCAFile) | Name of the file containing the list of CA's trusted by your application. |
| [OpenSSLCAFile](#OpenSSLCAFile) | Name of the file containing the list of CA's trusted by your application. |
| [OpenSSLCipherList](#OpenSSLCipherList) | A string that controls the ciphers to be used by SSL. |
| [OpenSSLCipherList](#OpenSSLCipherList) | A string that controls the ciphers to be used by SSL. |
| [OpenSSLPrngSeedData](#OpenSSLPrngSeedData) | The data to seed the pseudo random number generator (PRNG). |
| [OpenSSLPrngSeedData](#OpenSSLPrngSeedData) | The data to seed the pseudo random number generator (PRNG). |
| [ReuseSSLSession](#ReuseSSLSession) | Determines if the SSL session is reused. |
| [ReuseSSLSession](#ReuseSSLSession) | Determines if the SSL session is reused. |
| [SSLCACertFilePaths](#SSLCACertFilePaths) | The paths to CA certificate files on Unix/Linux. |
| [SSLCACertFilePaths](#SSLCACertFilePaths) | The paths to CA certificate files on Unix/Linux. |
| [SSLCACerts](#SSLCACerts) | A newline separated list of CA certificates to be included when performing an SSL handshake. |
| [SSLCACerts](#SSLCACerts) | A newline separated list of CA certificates to be included when performing an SSL handshake. |
| [SSLCheckCRL](#SSLCheckCRL) | Whether to check the Certificate Revocation List for the server certificate. |
| [SSLCheckCRL](#SSLCheckCRL) | Whether to check the Certificate Revocation List for the server certificate. |
| [SSLCheckOCSP](#SSLCheckOCSP) | Whether to use OCSP to check the status of the server certificate. |
| [SSLCheckOCSP](#SSLCheckOCSP) | Whether to use OCSP to check the status of the server certificate. |
| [SSLCipherStrength](#SSLCipherStrength) | The minimum cipher strength used for bulk encryption. |
| [SSLCipherStrength](#SSLCipherStrength) | The minimum cipher strength used for bulk encryption. |
| [SSLClientCACerts](#SSLClientCACerts) | A newline separated list of CA certificates to use during SSL client certificate validation. |
| [SSLClientCACerts](#SSLClientCACerts) | A newline separated list of CA certificates to use during SSL client certificate validation. |
| [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) | The cipher suite to be used in an SSL negotiation. |
| [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) | The cipher suite to be used in an SSL negotiation. |
| [SSLEnabledProtocols](#SSLEnabledProtocols) | Used to enable/disable the supported security protocols. |
| [SSLEnabledProtocols](#SSLEnabledProtocols) | Used to enable/disable the supported security protocols. |
| [SSLEnableRenegotiation](#SSLEnableRenegotiation) | Whether the renegotiation_info SSL extension is supported. |
| [SSLEnableRenegotiation](#SSLEnableRenegotiation) | Whether the renegotiation_info SSL extension is supported. |
| [SSLIncludeCertChain](#SSLIncludeCertChain) | Whether the entire certificate chain is included in the SSLServerAuthentication event. |
| [SSLIncludeCertChain](#SSLIncludeCertChain) | Whether the entire certificate chain is included in the SSLServerAuthentication event. |
| [SSLKeyLogFile](#SSLKeyLogFile) | The location of a file where per-session secrets are written for debugging purposes. |
| [SSLKeyLogFile](#SSLKeyLogFile) | The location of a file where per-session secrets are written for debugging purposes. |
| [SSLNegotiatedCipher](#SSLNegotiatedCipher) | Returns the negotiated cipher suite. |
| [SSLNegotiatedCipher](#SSLNegotiatedCipher) | Returns the negotiated cipher suite. |
| [SSLNegotiatedCipherStrength](#SSLNegotiatedCipherStrength) | Returns the negotiated cipher suite strength. |
| [SSLNegotiatedCipherStrength](#SSLNegotiatedCipherStrength) | Returns the negotiated cipher suite strength. |
| [SSLNegotiatedCipherSuite](#SSLNegotiatedCipherSuite) | Returns the negotiated cipher suite. |
| [SSLNegotiatedCipherSuite](#SSLNegotiatedCipherSuite) | Returns the negotiated cipher suite. |
| [SSLNegotiatedKeyExchange](#SSLNegotiatedKeyExchange) | Returns the negotiated key exchange algorithm. |
| [SSLNegotiatedKeyExchange](#SSLNegotiatedKeyExchange) | Returns the negotiated key exchange algorithm. |
| [SSLNegotiatedKeyExchangeStrength](#SSLNegotiatedKeyExchangeStrength) | Returns the negotiated key exchange algorithm strength. |
| [SSLNegotiatedKeyExchangeStrength](#SSLNegotiatedKeyExchangeStrength) | Returns the negotiated key exchange algorithm strength. |
| [SSLNegotiatedVersion](#SSLNegotiatedVersion) | Returns the negotiated protocol version. |
| [SSLNegotiatedVersion](#SSLNegotiatedVersion) | Returns the negotiated protocol version. |
| [SSLSecurityFlags](#SSLSecurityFlags) | Flags that control certificate verification. |
| [SSLSecurityFlags](#SSLSecurityFlags) | Flags that control certificate verification. |
| [SSLServerCACerts](#SSLServerCACerts) | A newline separated list of CA certificates to use during SSL server certificate validation. |
| [SSLServerCACerts](#SSLServerCACerts) | A newline separated list of CA certificates to use during SSL server certificate validation. |
| [TLS12SignatureAlgorithms](#TLS12SignatureAlgorithms) | Defines the allowed TLS 1.2 signature algorithms when SSLProvider is set to Internal. |
| [TLS12SignatureAlgorithms](#TLS12SignatureAlgorithms) | Defines the allowed TLS 1.2 signature algorithms when SSLProvider is set to Internal. |
| [TLS12SupportedGroups](#TLS12SupportedGroups) | The supported groups for ECC. |
| [TLS12SupportedGroups](#TLS12SupportedGroups) | The supported groups for ECC. |
| [TLS13KeyShareGroups](#TLS13KeyShareGroups) | The groups for which to pregenerate key shares. |
| [TLS13KeyShareGroups](#TLS13KeyShareGroups) | The groups for which to pregenerate key shares. |
| [TLS13SignatureAlgorithms](#TLS13SignatureAlgorithms) | The allowed certificate signature algorithms. |
| [TLS13SignatureAlgorithms](#TLS13SignatureAlgorithms) | The allowed certificate signature algorithms. |
| [TLS13SupportedGroups](#TLS13SupportedGroups) | The supported groups for (EC)DHE key exchange. |
| [TLS13SupportedGroups](#TLS13SupportedGroups) | The supported groups for (EC)DHE key exchange. |
| [BuildInfo](#BuildInfo) | Information about the product's build. |
| [CodePage](#CodePage) | The system code page used for Unicode to Multibyte translations. |
| [LicenseInfo](#LicenseInfo) | Information about the current license. |
| [MaskSensitiveData](#MaskSensitiveData) | Whether sensitive data is masked in log messages. |
| [ProcessIdleEvents](#ProcessIdleEvents) | Whether the component uses its internal event loop to process events when the main thread is idle. |
| [SelectWaitMillis](#SelectWaitMillis) | The length of time in milliseconds the component will wait when DoEvents is called if there are no events to process. |
| [UseFIPSCompliantAPI](#UseFIPSCompliantAPI) | Tells the component whether or not to use FIPS certified APIs. |
| [UseInternalSecurityAPI](#UseInternalSecurityAPI) | Whether or not to use the system security libraries or an internal implementation. |

# Active Property ([IVR](#ivr-component) Component)

The current activation status of the component.

## Syntax

*C++ Builder Syntax*

```text
__property bool Active = { read=FActive };
```

## Default Value

false

## Remarks

This property indicates the activation status of the component. Active will be *True* if the component has been successfully activated (registered) with the SIP Server, and *False* otherwise. If *False*, the component is not registered and will not be able to make or receive calls.

The component can be activated via [Activate](#activate-method-ivr-component) and deactivated through [Deactivate](#deactivate-method-ivr-component).

This property is read-only and not available at design time.

## Data Type

Boolean

# AudioEncoding Property ([IVR](#ivr-component) Component)

This property specifies the audio encoding format used when dynamically recording a call's audio, and when playing audio via PlayBytes .

## Syntax

*C++ Builder Syntax*

```text
__property int AudioEncoding = { read=FAudioEncoding, write=FSetAudioEncoding };
```

## Default Value

-1

## Remarks

This property controls the format, or expected format, of raw audio bytes passed to and from the component in the following cases:

- When recording dynamically ([StartRecording](#startrecording-method-ivr-component) is called with no *FileName* parameter), the audio made available via the *RecordedDataB* parameter in [Record](#record-event-ivr-component) will be encoded in this format.
- When calling [PlayBytes](#playbytes-method-ivr-component), the audio provided via the *BytesToPlay* parameter is expected to be provided in this format.

Possible values are:

|  |  |
| --- | --- |
| -1 | PCM 8kHz 16-bit (default) |
| 0 | PCMU (G.711 u-law) |
| 8 | PCMA (G.711 a-law) |

By default, this property is set to *-1*, and audio exchanged in both scenarios above will be in the PCM 8 kHz 16-bit format.

Note that this property is applied per call, the first time audio is played or recorded for that call. Changing this property after a call has already started playing or recording audio will not affect that call. This property should be set prior to using [StartRecording](#startrecording-method-ivr-component) and [PlayBytes](#playbytes-method-ivr-component) for any given call.

This property is not available at design time.

## Data Type

Integer

# CallCount Property ([IVR](#ivr-component) Component)

The number of records in the Call arrays.

## Syntax

*C++ Builder Syntax*

```text
__property int CallCount = { read=FCallCount };
```

## Default Value

0

## Remarks

This property controls the size of the following arrays:

- [CallConferenceId](#callconferenceid-property-ivr-component)
- [CallDuration](#callduration-property-ivr-component)
- [CallId](#callid-property-ivr-component)
- [CallLastStatus](#calllaststatus-property-ivr-component)
- [CallLocalAddress](#calllocaladdress-property-ivr-component)
- [CallLocalPort](#calllocalport-property-ivr-component)
- [CallMicrophone](#callmicrophone-property-ivr-component)
- [CallMuteMicrophone](#callmutemicrophone-property-ivr-component)
- [CallMuteSpeaker](#callmutespeaker-property-ivr-component)
- [CallOutgoing](#calloutgoing-property-ivr-component)
- [CallPlaying](#callplaying-property-ivr-component)
- [CallRecording](#callrecording-property-ivr-component)
- [CallRemoteAddress](#callremoteaddress-property-ivr-component)
- [CallRemotePort](#callremoteport-property-ivr-component)
- [CallRemoteURI](#callremoteuri-property-ivr-component)
- [CallRemoteUser](#callremoteuser-property-ivr-component)
- [CallSpeaker](#callspeaker-property-ivr-component)
- [CallStartedAt](#callstartedat-property-ivr-component)
- [CallState](#callstate-property-ivr-component)
- [CallUserInput](#calluserinput-property-ivr-component)
- [CallVia](#callvia-property-ivr-component)

The array indices start at *0* and end at *CallCount - 1*.

This property is read-only and not available at design time.

## Data Type

Integer

# CallId Property ([IVR](#ivr-component) Component)

String representation of an immutable universally unique identifier (UUID) specific to the call.

## Syntax

*C++ Builder Syntax*

```text
__property String CallId[int CallIndex] = { read=FCallId };
```

## Default Value

""

## Remarks

String representation of an immutable universally unique identifier (UUID) specific to the call.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallConferenceId Property ([IVR](#ivr-component) Component)

A unique identifier for a conference call.

## Syntax

*C++ Builder Syntax*

```text
__property String CallConferenceId[int CallIndex] = { read=FCallConferenceId };
```

## Default Value

""

## Remarks

A unique identifier for a conference call.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallDuration Property ([IVR](#ivr-component) Component)

Elapsed time, in seconds, since the call has begun.

## Syntax

*C++ Builder Syntax*

```text
__property int CallDuration[int CallIndex] = { read=FCallDuration };
```

## Default Value

0

## Remarks

Elapsed time, in seconds, since the call has begun. Calculated using the value in [CallStartedAt](#callstartedat-property-ivr-component).

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Integer

# CallLastStatus Property ([IVR](#ivr-component) Component)

This property indicates the call's last response code.

## Syntax

*C++ Builder Syntax*

```text
__property int CallLastStatus[int CallIndex] = { read=FCallLastStatus };
```

## Default Value

0

## Remarks

This field indicates the call's last response code. Response codes are defined in RFC 3261.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Integer

# CallLocalAddress Property ([IVR](#ivr-component) Component)

The name of the local host or user-assigned IP interface through which connections are initiated or accepted.

## Syntax

*C++ Builder Syntax*

```text
__property String CallLocalAddress[int CallIndex] = { read=FCallLocalAddress };
```

## Default Value

""

## Remarks

The name of the local host or user-assigned IP interface through which connections are initiated or accepted.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallLocalPort Property ([IVR](#ivr-component) Component)

The UDP port in the local host where UDP binds.

## Syntax

*C++ Builder Syntax*

```text
__property int CallLocalPort[int CallIndex] = { read=FCallLocalPort };
```

## Default Value

0

## Remarks

The UDP port in the local host where UDP binds.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Integer

# CallMicrophone Property ([IVR](#ivr-component) Component)

The microphone currently in use during the call.

## Syntax

*C++ Builder Syntax*

```text
__property String CallMicrophone[int CallIndex] = { read=FCallMicrophone };
```

## Default Value

""

## Remarks

The microphone currently in use during the call. Set through SetMicrophone.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallMuteMicrophone Property ([IVR](#ivr-component) Component)

This property can be set to mute the Microphone being used by the component in the given call.

## Syntax

*C++ Builder Syntax*

```text
__property bool CallMuteMicrophone[int CallIndex] = { read=FCallMuteMicrophone, write=FSetCallMuteMicrophone };
```

## Default Value

False

## Remarks

This field can be set to mute the [CallMicrophone](#callmicrophone-property-ivr-component) being used by the component in the given call. When *True*, the [CallMicrophone](#callmicrophone-property-ivr-component) is muted.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is not available at design time.

## Data Type

Boolean

# CallMuteSpeaker Property ([IVR](#ivr-component) Component)

This property can be set to mute the Speaker being used by the component in the given call.

## Syntax

*C++ Builder Syntax*

```text
__property bool CallMuteSpeaker[int CallIndex] = { read=FCallMuteSpeaker, write=FSetCallMuteSpeaker };
```

## Default Value

False

## Remarks

This field can be set to mute the [CallSpeaker](#callspeaker-property-ivr-component) being used by the component in the given call. When *True*, the [CallSpeaker](#callspeaker-property-ivr-component) is muted.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is not available at design time.

## Data Type

Boolean

# CallOutgoing Property ([IVR](#ivr-component) Component)

Indicates whether the current call is outgoing.

## Syntax

*C++ Builder Syntax*

```text
__property bool CallOutgoing[int CallIndex] = { read=FCallOutgoing };
```

## Default Value

False

## Remarks

Indicates whether the current call is outgoing. If false, the call is incoming.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Boolean

# CallPlaying Property ([IVR](#ivr-component) Component)

Indicates whether the current call is playing audio via PlayText or PlayFile , or PlayBytes .

## Syntax

*C++ Builder Syntax*

```text
__property bool CallPlaying[int CallIndex] = { read=FCallPlaying };
```

## Default Value

False

## Remarks

Indicates whether the current call is playing audio via PlayText or PlayFile, or PlayBytes. After audio transmission is complete, or stopped using StopPlaying, this flag will be false.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Boolean

# CallRecording Property ([IVR](#ivr-component) Component)

Indicates whether the current call is recording the received voice from the peer.

## Syntax

*C++ Builder Syntax*

```text
__property bool CallRecording[int CallIndex] = { read=FCallRecording };
```

## Default Value

False

## Remarks

Indicates whether the current call is recording the received voice from the peer. When the recording is done, this flag will be false. If the recording is stopped via StopRecording, this flag will be false.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Boolean

# CallRemoteAddress Property ([IVR](#ivr-component) Component)

The address of the remote host we are communicating with.

## Syntax

*C++ Builder Syntax*

```text
__property String CallRemoteAddress[int CallIndex] = { read=FCallRemoteAddress };
```

## Default Value

""

## Remarks

The address of the remote host we are communicating with.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallRemotePort Property ([IVR](#ivr-component) Component)

The port of the remote host we are communicating with.

## Syntax

*C++ Builder Syntax*

```text
__property int CallRemotePort[int CallIndex] = { read=FCallRemotePort };
```

## Default Value

0

## Remarks

The port of the remote host we are communicating with. This field is typically 5060.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Integer

# CallRemoteURI Property ([IVR](#ivr-component) Component)

This property communicates who to call via SIP.

## Syntax

*C++ Builder Syntax*

```text
__property String CallRemoteURI[int CallIndex] = { read=FCallRemoteURI };
```

## Default Value

""

## Remarks

This field communicates who to call via SIP. This value contains the [CallRemoteUser](#callremoteuser-property-ivr-component), [CallRemoteAddress](#callremoteaddress-property-ivr-component), and the [CallRemotePort](#callremoteport-property-ivr-component), and has the following format:

sip:user@host:port

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallRemoteUser Property ([IVR](#ivr-component) Component)

The username or telephone number of the remote user associated with the call.

## Syntax

*C++ Builder Syntax*

```text
__property String CallRemoteUser[int CallIndex] = { read=FCallRemoteUser };
```

## Default Value

""

## Remarks

The username or telephone number of the remote user associated with the call.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallSpeaker Property ([IVR](#ivr-component) Component)

The speaker currently in use during the call.

## Syntax

*C++ Builder Syntax*

```text
__property String CallSpeaker[int CallIndex] = { read=FCallSpeaker };
```

## Default Value

""

## Remarks

The speaker currently in use during the call. Set through SetSpeaker.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallStartedAt Property ([IVR](#ivr-component) Component)

The number of milliseconds since 12:00:00 AM January 1, 1970 when this call started.

## Syntax

*C++ Builder Syntax*

```text
__property __int64 CallStartedAt[int CallIndex] = { read=FCallStartedAt };
```

## Default Value

0

## Remarks

The number of milliseconds since 12:00:00 AM January 1, 1970 when this call started.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Long64

# CallState Property ([IVR](#ivr-component) Component)

This property indicates the state of the current call.

## Syntax

*C++ Builder Syntax*

```text
__property TipvIVRCallStates CallState[int CallIndex] = { read=FCallState };
enum TipvIVRCallStates {
  csInactive=0,
  csConnecting=1,
  csAutConnecting=2,
  csRinging=3,
  csActive=4,
  csActiveInConference=5,
  csDisconnecting=6,
  csAutDisconnecting=7,
  csHolding=8,
  csOnHold=9,
  csUnholding=10,
  csTransferring=11,
  csAutTransferring=12
};
```

## Default Value

csInactive

## Remarks

This property indicates the state of the current call. The applicable values are as follows:

|  |  |
| --- | --- |
| csInactive (0) | The call is inactive (default setting). |
| csConnecting (1) | The call is establishing a connection to the callee. |
| csAutConnecting (2) | The call is establishing a connection to the callee with authorization credentials. |
| csRinging (3) | The call is ringing. |
| csActive (4) | The call is active. |
| csActiveInConference (5) | The call is active and in a conference. |
| csDisconnecting (6) | The call is disconnecting with the callee. |
| csAutDisconnecting (7) | The call is disconnecting with the callee with authorization credentials. |
| csHolding (8) | The call is currently being placed on hold, but the Hold operation has not finished. |
| csOnHold (9) | The call is currently on hold. |
| csUnholding (10) | The call is currently being unheld, but the Unhold operation has not finished. |
| csTransferring (11) | The call is currently being transferred. |
| csAutTransferring (12) | The call is currently being transferred with authorization credentials. |

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

Integer

# CallUserInput Property ([IVR](#ivr-component) Component)

String representation of digits typed by the callee using their keypad.

## Syntax

*C++ Builder Syntax*

```text
__property String CallUserInput[int CallIndex] = { read=FCallUserInput };
```

## Default Value

""

## Remarks

String representation of digits typed by the callee using their keypad.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# CallVia Property ([IVR](#ivr-component) Component)

The Via header sent in the most recent SIP request.

## Syntax

*C++ Builder Syntax*

```text
__property String CallVia[int CallIndex] = { read=FCallVia };
```

## Default Value

""

## Remarks

The Via header sent in the most recent SIP request. Identifies the protocol name/version, transport type, IP Address of the User Agent Client, and port of the request.

The *CallIndex* parameter specifies the index of the item in the array. The size of the array is controlled by the [CallCount](#callcount-property-ivr-component) property.

This property is read-only and not available at design time.

## Data Type

String

# LocalHost Property ([IVR](#ivr-component) Component)

The name of the local host or user-assigned IP interface through which connections are initiated or accepted.

## Syntax

*C++ Builder Syntax*

```text
__property String LocalHost = { read=FLocalHost, write=FSetLocalHost };
```

## Default Value

""

## Remarks

This property contains the name of the local host as obtained by the *gethostname()* system call, or if the user has assigned an IP address, the value of that address.

In multihomed hosts (machines with more than one IP interface) setting LocalHost to the IP address of an interface will make the component initiate connections (or accept in the case of server components) only through that interface. It is recommended to provide an IP address rather than a hostname when setting this property to ensure the desired interface is used.

If the component is connected, the LocalHost property shows the IP address of the interface through which the connection is made in internet dotted format (aaa.bbb.ccc.ddd). In most cases, this is the address of the local host, except for multihomed hosts (machines with more than one IP interface).

NOTE: LocalHost is not persistent. You must always set it in code, and never in the property window.

## Data Type

String

# LocalPort Property ([IVR](#ivr-component) Component)

This property includes the User Datagram Protocol (UDP) port in the local host where UDP binds.

## Syntax

*C++ Builder Syntax*

```text
__property int LocalPort = { read=FLocalPort, write=FSetLocalPort };
```

## Default Value

0

## Remarks

The LocalPort property must be set before UDP is activated ([Active](#active-property-ivr-component) is set to True). This instructs the component to bind to a specific port (or communication endpoint) in the local machine.

Setting it to *0* (default) enables the Transmission Control Protocol (TCP)/IP stack to choose a port at random. The chosen port will be shown by the LocalPort property after the connection is established.

LocalPort cannot be changed once the component is [Active](#active-property-ivr-component). Any attempt to set the LocalPort property when the component is [Active](#active-property-ivr-component) will generate an error.

The LocalPort property is useful when trying to connect to services that require a trusted port on the client side.

## Data Type

Integer

# Password Property ([IVR](#ivr-component) Component)

The password that is used to authenticate with the SIP server.

## Syntax

*C++ Builder Syntax*

```text
__property String Password = { read=FPassword, write=FSetPassword };
```

## Default Value

""

## Remarks

This property specifies the password used to authenticate with the SIP server. It is used in response to challenges issued by the server (401/407). This property may be set before calling [Activate](#activate-method-ivr-component).

This property is not available at design time.

## Data Type

String

# Port Property ([IVR](#ivr-component) Component)

The port on the SIP server the component is connecting to.

## Syntax

*C++ Builder Syntax*

```text
__property int Port = { read=FPort, write=FSetPort };
```

## Default Value

5060

## Remarks

This property specifies the port on the SIP server that the component will connect to. This value will be used when activating the component via [Activate](#activate-method-ivr-component).

## Data Type

Integer

# RTPSecurityMode Property ([IVR](#ivr-component) Component)

Specifies the security mode that will be used when transmitting RTP.

## Syntax

*C++ Builder Syntax*

```text
__property TipvIVRRTPSecurityModes RTPSecurityMode = { read=FRTPSecurityMode, write=FSetRTPSecurityMode };
enum TipvIVRRTPSecurityModes {
  etNone=0,
  etSDES=1,
  etDTLS=2
};
```

## Default Value

etNone

## Remarks

This property is used to specify the security mode that will be used when transmitting RTP (audio data). Possible modes are:

|  |  |
| --- | --- |
| 0 (None) | SRTP is disabled. |
| 1 (SDES) | SRTP is enabled, utilizing SDES. |
| 2 (DTLS) | SRTP is enabled, utilizing DTLS (DTLS-SRTP). |

By default, the security mode will be 0 (None), and RTP packets will remain unencrypted during communication with the remote party. To enable SRTP (Secure RTP), the security mode must be set to either: 1 (SDES) or 2 (DTLS).

When SRTP is enabled, the selected mode will be used to securely derive a key used to encrypt and decrypt RTP packets, enabling secure audio communication with the remote party. The appropriate mode to use may depend on the service provider and configuration of a particular [User](#user-property-ivr-component). Additionally, if SRTP is enabled, the remote party must support the selected mode; otherwise, no call will be established.

Note that it is highly recommended that [SIPTransportProtocol](#siptransportprotocol-property-ivr-component) is set to *TLS* when enabling SRTP.

## Data Type

Integer

# Server Property ([IVR](#ivr-component) Component)

The address of the SIP Server.

## Syntax

*C++ Builder Syntax*

```text
__property String Server = { read=FServer, write=FSetServer };
```

## Default Value

""

## Remarks

This property contains the address of the SIP Server the component will attempt to connect to. This value will be used when activating the component via [Activate](#activate-method-ivr-component).

## Data Type

String

# SIPTransportProtocol Property ([IVR](#ivr-component) Component)

Specifies the transport protocol the component will use for SIP signaling.

## Syntax

*C++ Builder Syntax*

```text
__property TipvIVRSIPTransportProtocols SIPTransportProtocol = { read=FSIPTransportProtocol, write=FSetSIPTransportProtocol };
enum TipvIVRSIPTransportProtocols {
  tpUDP=0,
  tpTCP=1,
  tpTLS=2
};
```

## Default Value

tpUDP

## Remarks

This property specifies which transport protocol (UDP, TCP, TLS) the component will use for SIP signaling and can be used to enable SIPS (Secure SIP). Note that it is important to set the SIPTransportProtocol property before setting any additional properties and configurations.

This value is 0 (UDP) by default. Possible values are:

|  |  |
| --- | --- |
| 0 (UDP - Default) | Signaling will be performed over UDP (plaintext). |
| 1 (TCP) | Signaling will be performed over TCP (plaintext). |
| 2 (TLS) | Signaling will be performed using TLS over TCP (SIPS). |

Note when *TLS* is specified, the [Port](#port-property-ivr-component) will typically need to be set to *5061*.

## Data Type

Integer

# SSLAcceptServerCertEffectiveDate Property ([IVR](#ivr-component) Component)

The date on which this certificate becomes valid.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertEffectiveDate = { read=FSSLAcceptServerCertEffectiveDate };
```

## Default Value

""

## Remarks

The date on which this certificate becomes valid. Before this date, it is not valid. The date is localized to the system's time zone. The following example illustrates the format of an encoded date:

23-Jan-2000 15:00:00.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertExpirationDate Property ([IVR](#ivr-component) Component)

The date on which the certificate expires.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertExpirationDate = { read=FSSLAcceptServerCertExpirationDate };
```

## Default Value

""

## Remarks

The date on which the certificate expires. After this date, the certificate will no longer be valid. The date is localized to the system's time zone. The following example illustrates the format of an encoded date:

23-Jan-2001 15:00:00.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertExtendedKeyUsage Property ([IVR](#ivr-component) Component)

A comma-delimited list of extended key usage identifiers.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertExtendedKeyUsage = { read=FSSLAcceptServerCertExtendedKeyUsage };
```

## Default Value

""

## Remarks

A comma-delimited list of extended key usage identifiers. These are the same as ASN.1 object identifiers (OIDs).

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertFingerprint Property ([IVR](#ivr-component) Component)

The hex-encoded, 16-byte MD5 fingerprint of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertFingerprint = { read=FSSLAcceptServerCertFingerprint };
```

## Default Value

""

## Remarks

The hex-encoded, 16-byte MD5 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.

The following example illustrates the format: *bc:2a:72:af:fe:58:17:43:7a:5f:ba:5a:7c:90:f7:02*

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertFingerprintSHA1 Property ([IVR](#ivr-component) Component)

The hex-encoded, 20-byte SHA-1 fingerprint of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertFingerprintSHA1 = { read=FSSLAcceptServerCertFingerprintSHA1 };
```

## Default Value

""

## Remarks

The hex-encoded, 20-byte SHA-1 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.

The following example illustrates the format: *30:7b:fa:38:65:83:ff:da:b4:4e:07:3f:17:b8:a4:ed:80:be:ff:84*

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertFingerprintSHA256 Property ([IVR](#ivr-component) Component)

The hex-encoded, 32-byte SHA-256 fingerprint of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertFingerprintSHA256 = { read=FSSLAcceptServerCertFingerprintSHA256 };
```

## Default Value

""

## Remarks

The hex-encoded, 32-byte SHA-256 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.

The following example illustrates the format: *6a:80:5c:33:a9:43:ea:b0:96:12:8a:64:96:30:ef:4a:8a:96:86:ce:f4:c7:be:10:24:8e:2b:60:9e:f3:59:53*

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertIssuer Property ([IVR](#ivr-component) Component)

The issuer of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertIssuer = { read=FSSLAcceptServerCertIssuer };
```

## Default Value

""

## Remarks

The issuer of the certificate. This property contains a string representation of the name of the issuing authority for the certificate.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertPrivateKey Property ([IVR](#ivr-component) Component)

The private key of the certificate (if available).

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertPrivateKey = { read=FSSLAcceptServerCertPrivateKey };
```

## Default Value

""

## Remarks

The private key of the certificate (if available). The key is provided as PEM/Base64-encoded data.

NOTE: The [SSLAcceptServerCertPrivateKey](#sslacceptservercertprivatekey-property-ivr-component) may be available but not exportable. In this case, [SSLAcceptServerCertPrivateKey](#sslacceptservercertprivatekey-property-ivr-component) returns an empty string.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertPrivateKeyAvailable Property ([IVR](#ivr-component) Component)

Whether a PrivateKey is available for the selected certificate.

## Syntax

*C++ Builder Syntax*

```text
__property bool SSLAcceptServerCertPrivateKeyAvailable = { read=FSSLAcceptServerCertPrivateKeyAvailable };
```

## Default Value

false

## Remarks

Whether a [SSLAcceptServerCertPrivateKey](#sslacceptservercertprivatekey-property-ivr-component) is available for the selected certificate. If [SSLAcceptServerCertPrivateKeyAvailable](#sslacceptservercertprivatekeyavailable-property-ivr-component) is True, the certificate may be used for authentication purposes (e.g., server authentication).

This property is read-only and not available at design time.

## Data Type

Boolean

# SSLAcceptServerCertPrivateKeyContainer Property ([IVR](#ivr-component) Component)

The name of the PrivateKey container for the certificate (if available).

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertPrivateKeyContainer = { read=FSSLAcceptServerCertPrivateKeyContainer };
```

## Default Value

""

## Remarks

The name of the [SSLAcceptServerCertPrivateKey](#sslacceptservercertprivatekey-property-ivr-component) container for the certificate (if available). This functionality is available only on Windows platforms.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertPublicKey Property ([IVR](#ivr-component) Component)

The public key of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertPublicKey = { read=FSSLAcceptServerCertPublicKey };
```

## Default Value

""

## Remarks

The public key of the certificate. The key is provided as PEM/Base64-encoded data.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertPublicKeyAlgorithm Property ([IVR](#ivr-component) Component)

The textual description of the certificate's public key algorithm.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertPublicKeyAlgorithm = { read=FSSLAcceptServerCertPublicKeyAlgorithm };
```

## Default Value

""

## Remarks

The textual description of the certificate's public key algorithm. The property contains either the name of the algorithm (e.g., "RSA" or "RSA_DH") or an object identifier (OID) string representing the algorithm.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertPublicKeyLength Property ([IVR](#ivr-component) Component)

The length of the certificate's public key (in bits).

## Syntax

*C++ Builder Syntax*

```text
__property int SSLAcceptServerCertPublicKeyLength = { read=FSSLAcceptServerCertPublicKeyLength };
```

## Default Value

0

## Remarks

The length of the certificate's public key (in bits). Common values are 512, 1024, and 2048.

This property is read-only and not available at design time.

## Data Type

Integer

# SSLAcceptServerCertSerialNumber Property ([IVR](#ivr-component) Component)

The serial number of the certificate encoded as a string.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertSerialNumber = { read=FSSLAcceptServerCertSerialNumber };
```

## Default Value

""

## Remarks

The serial number of the certificate encoded as a string. The number is encoded as a series of hexadecimal digits, with each pair representing a byte of the serial number.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertSignatureAlgorithm Property ([IVR](#ivr-component) Component)

The text description of the certificate's signature algorithm.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertSignatureAlgorithm = { read=FSSLAcceptServerCertSignatureAlgorithm };
```

## Default Value

""

## Remarks

The text description of the certificate's signature algorithm. The property contains either the name of the algorithm (e.g., "RSA" or "RSA_MD5RSA") or an object identifier (OID) string representing the algorithm.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertStore Property ([IVR](#ivr-component) Component)

The name of the certificate store for the client certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertStore = { read=FSSLAcceptServerCertStore, write=FSetSSLAcceptServerCertStore };
__property DynamicArray<Byte> SSLAcceptServerCertStoreB = { read=FSSLAcceptServerCertStoreB, write=FSetSSLAcceptServerCertStoreB };
```

## Default Value

"MY"

## Remarks

The name of the certificate store for the client certificate.

The [SSLAcceptServerCertStoreType](#sslacceptservercertstoretype-property-ivr-component) property denotes the type of the certificate store specified by [SSLAcceptServerCertStore](#sslacceptservercertstore-property-ivr-component). If the store is password-protected, specify the password in [SSLAcceptServerCertStorePassword](#sslacceptservercertstorepassword-property-ivr-component).

[SSLAcceptServerCertStore](#sslacceptservercertstore-property-ivr-component) is used in conjunction with the [SSLAcceptServerCertSubject](#sslacceptservercertsubject-property-ivr-component) property to specify client certificates. If [SSLAcceptServerCertStore](#sslacceptservercertstore-property-ivr-component) has a value, and [SSLAcceptServerCertSubject](#sslacceptservercertsubject-property-ivr-component) or [SSLAcceptServerCertEncoded](#sslacceptservercertencoded-property-ivr-component) is set, a search for a certificate is initiated. Please see the [SSLAcceptServerCertSubject](#sslacceptservercertsubject-property-ivr-component) property for details.

 Designations of certificate stores are platform dependent.

The following designations are the most common User and Machine certificate stores in Windows:

|  |  |
| --- | --- |
| MY | A certificate store holding personal certificates with their associated private keys. |
| CA | Certifying authority certificates. |
| ROOT | Root certificates. |

When the certificate store type is *cstPFXFile*, this property must be set to the name of the file. When the type is *cstPFXBlob*, the property must be set to the binary contents of a PFX file (i.e., PKCS#12 certificate store).

This property is not available at design time.

## Data Type

Byte Array

# SSLAcceptServerCertStorePassword Property ([IVR](#ivr-component) Component)

If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertStorePassword = { read=FSSLAcceptServerCertStorePassword, write=FSetSSLAcceptServerCertStorePassword };
```

## Default Value

""

## Remarks

If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store.

This property is not available at design time.

## Data Type

String

# SSLAcceptServerCertStoreType Property ([IVR](#ivr-component) Component)

The type of certificate store for this certificate.

## Syntax

*C++ Builder Syntax*

```text
__property TipvIVRSSLAcceptServerCertStoreTypes SSLAcceptServerCertStoreType = { read=FSSLAcceptServerCertStoreType, write=FSetSSLAcceptServerCertStoreType };
enum TipvIVRSSLAcceptServerCertStoreTypes {
  cstUser=0,
  cstMachine=1,
  cstPFXFile=2,
  cstPFXBlob=3,
  cstJKSFile=4,
  cstJKSBlob=5,
  cstPEMKeyFile=6,
  cstPEMKeyBlob=7,
  cstPublicKeyFile=8,
  cstPublicKeyBlob=9,
  cstSSHPublicKeyBlob=10,
  cstP7BFile=11,
  cstP7BBlob=12,
  cstSSHPublicKeyFile=13,
  cstPPKFile=14,
  cstPPKBlob=15,
  cstXMLFile=16,
  cstXMLBlob=17,
  cstJWKFile=18,
  cstJWKBlob=19,
  cstSecurityKey=20,
  cstBCFKSFile=21,
  cstBCFKSBlob=22,
  cstPKCS11=23,
  cstAuto=99
};
```

## Default Value

cstUser

## Remarks

The type of certificate store for this certificate.

 The component supports both public and private keys in a variety of formats. When the *cstAuto* value is used, the component will automatically determine the type. This property can take one of the following values:

```csharp
sftp.SSHCert = new Certificate(CertStoreTypes.cstPKCS11,
                               @"C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll",
                               "123456", // PIN
                               "CN=cert_subject");
sftp.SSHUser = "test";
sftp.SSHLogon("myhost", 22);
```

```csharp
certmgr.CertStoreType = CertStoreTypes.cstPKCS11;
certmgr.OnCertList += (s, e) => {
  secKeyBlob = e.CertEncoded;
};
certmgr.CertStore = @"C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll";
certmgr.CertStorePassword = "123456"; // PIN
certmgr.ListStoreCertificates();

sftp.SSHCert = new Certificate(CertStoreTypes.cstPKCS11, secKeyBlob, "123456", "*");
sftp.SSHUser = "test";
sftp.SSHLogon("myhost", 22);
```

|  |  |
| --- | --- |
| 0 (cstUser - default) | For Windows, this specifies that the certificate store is a certificate store owned by the current user. NOTE: This store type is not available in Java. |
| 1 (cstMachine) | For Windows, this specifies that the certificate store is a machine store. NOTE: This store type is not available in Java. |
| 2 (cstPFXFile) | The certificate store is the name of a PFX (PKCS#12) file containing certificates. |
| 3 (cstPFXBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in PFX (PKCS#12) format. |
| 4 (cstJKSFile) | The certificate store is the name of a Java Key Store (JKS) file containing certificates. NOTE: This store type is only available in Java. |
| 5 (cstJKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in Java Key Store (JKS) format. NOTE: This store type is only available in Java. |
| 6 (cstPEMKeyFile) | The certificate store is the name of a PEM-encoded file that contains a private key and an optional certificate. |
| 7 (cstPEMKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a private key and an optional certificate. |
| 8 (cstPublicKeyFile) | The certificate store is the name of a file that contains a PEM- or DER-encoded public key certificate. |
| 9 (cstPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a PEM- or DER-encoded public key certificate. |
| 10 (cstSSHPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains an SSH-style public key. |
| 11 (cstP7BFile) | The certificate store is the name of a PKCS#7 file containing certificates. |
| 12 (cstP7BBlob) | The certificate store is a string (binary) representing a certificate store in PKCS#7 format. |
| 13 (cstSSHPublicKeyFile) | The certificate store is the name of a file that contains an SSH-style public key. |
| 14 (cstPPKFile) | The certificate store is the name of a file that contains a PPK (PuTTY Private Key). |
| 15 (cstPPKBlob) | The certificate store is a string (binary) that contains a PPK (PuTTY Private Key). |
| 16 (cstXMLFile) | The certificate store is the name of a file that contains a certificate in XML format. |
| 17 (cstXMLBlob) | The certificate store is a string that contains a certificate in XML format. |
| 18 (cstJWKFile) | The certificate store is the name of a file that contains a JWK (JSON Web Key). |
| 19 (cstJWKBlob) | The certificate store is a string that contains a JWK (JSON Web Key). |
| 21 (cstBCFKSFile) | The certificate store is the name of a file that contains a BCFKS (Bouncy Castle FIPS Key Store). NOTE: This store type is only available in Java and .NET. |
| 22 (cstBCFKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in BCFKS (Bouncy Castle FIPS Key Store) format. NOTE: This store type is only available in Java and .NET. |
| 23 (cstPKCS11) | The certificate is present on a physical security key accessible via a PKCS#11 interface. To use a security key, create a new [Certificate](#Type_Certificate) object and pass cstPKCS11 as the [SSLAcceptServerCertStoreType](#sslacceptservercertstoretype-property-ivr-component), the full path of the PKCS#11 DLL as the [SSLAcceptServerCertStore](#sslacceptservercertstore-property-ivr-component), and the PIN as the [SSLAcceptServerCertStorePassword](#sslacceptservercertstorepassword-property-ivr-component). Code Example. SSH Authentication with Security Key (without CertMgr): Alternatively, collect the necessary data using the [CertMgr](#CertMgr) component by calling the [ListStoreCertificates](#CertMgr_m_ListStoreCertificates) method after setting the corresponding properties accordingly. The certificate information returned in the [CertList](#CertMgr_e_CertList) event's CertEncoded parameter may be saved for later use. When using a certificate obtained with this approach, pass the previously saved security key information as the [SSLAcceptServerCertStore](#sslacceptservercertstore-property-ivr-component) and set [SSLAcceptServerCertStorePassword](#sslacceptservercertstorepassword-property-ivr-component) to the PIN. Code Example. SSH Authentication with Security Key (with CertMgr): |
| 99 (cstAuto) | The store type is automatically detected from the input data. This setting may be used with both public and private keys and can detect any of the supported formats automatically. |

This property is not available at design time.

## Data Type

Integer

# SSLAcceptServerCertSubjectAltNames Property ([IVR](#ivr-component) Component)

Comma-separated lists of alternative subject names for the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertSubjectAltNames = { read=FSSLAcceptServerCertSubjectAltNames };
```

## Default Value

""

## Remarks

Comma-separated lists of alternative subject names for the certificate.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertThumbprintMD5 Property ([IVR](#ivr-component) Component)

The MD5 hash of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertThumbprintMD5 = { read=FSSLAcceptServerCertThumbprintMD5 };
```

## Default Value

""

## Remarks

The MD5 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertThumbprintSHA1 Property ([IVR](#ivr-component) Component)

The SHA-1 hash of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertThumbprintSHA1 = { read=FSSLAcceptServerCertThumbprintSHA1 };
```

## Default Value

""

## Remarks

The SHA-1 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertThumbprintSHA256 Property ([IVR](#ivr-component) Component)

The SHA-256 hash of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertThumbprintSHA256 = { read=FSSLAcceptServerCertThumbprintSHA256 };
```

## Default Value

""

## Remarks

The SHA-256 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertUsage Property ([IVR](#ivr-component) Component)

The text description of UsageFlags .

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertUsage = { read=FSSLAcceptServerCertUsage };
```

## Default Value

""

## Remarks

The text description of [SSLAcceptServerCertUsageFlags](#sslacceptservercertusageflags-property-ivr-component).

This value will be one or more of the following strings and will be separated by commas:

- Digital Signature
- Non-Repudiation
- Key Encipherment
- Data Encipherment
- Key Agreement
- Certificate Signing
- CRL Signing
- Encipher Only

If the provider is OpenSSL, the value is a comma-separated list of X.509 certificate extension names.

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertUsageFlags Property ([IVR](#ivr-component) Component)

The flags that show intended use for the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property int SSLAcceptServerCertUsageFlags = { read=FSSLAcceptServerCertUsageFlags };
```

## Default Value

0

## Remarks

The flags that show intended use for the certificate. The value of [SSLAcceptServerCertUsageFlags](#sslacceptservercertusageflags-property-ivr-component) is a combination of the following flags:

|  |  |
| --- | --- |
| 0x80 | Digital Signature |
| 0x40 | Non-Repudiation |
| 0x20 | Key Encipherment |
| 0x10 | Data Encipherment |
| 0x08 | Key Agreement |
| 0x04 | Certificate Signing |
| 0x02 | CRL Signing |
| 0x01 | Encipher Only |

Please see the [SSLAcceptServerCertUsage](#sslacceptservercertusage-property-ivr-component) property for a text representation of [SSLAcceptServerCertUsageFlags](#sslacceptservercertusageflags-property-ivr-component).

This functionality currently is not available when the provider is OpenSSL.

This property is read-only and not available at design time.

## Data Type

Integer

# SSLAcceptServerCertVersion Property ([IVR](#ivr-component) Component)

The certificate's version number.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertVersion = { read=FSSLAcceptServerCertVersion };
```

## Default Value

""

## Remarks

The certificate's version number. The possible values are the strings "V1", "V2", and "V3".

This property is read-only and not available at design time.

## Data Type

String

# SSLAcceptServerCertSubject Property ([IVR](#ivr-component) Component)

The subject of the certificate used for client authentication.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertSubject = { read=FSSLAcceptServerCertSubject, write=FSetSSLAcceptServerCertSubject };
```

## Default Value

""

## Remarks

The subject of the certificate used for client authentication.

This property must be set after all other certificate properties are set. When this property is set, a search is performed in the current certificate store to locate a certificate with a matching subject.

If a matching certificate is found, the property is set to the full subject of the matching certificate.

If an exact match is not found, the store is searched for subjects containing the value of the property.

If a match is still not found, the property is set to an empty string, and no certificate is selected.

The special value "*" picks a random certificate in the certificate store.

The certificate subject is a comma-separated list of distinguished name fields and values. For instance, "CN=www.server.com, OU=test, C=US, E=example@email.com". Common fields and their meanings are as follows:

| Field | Meaning |
| --- | --- |
| CN | Common Name. This is commonly a hostname like www.server.com. |
| O | Organization |
| OU | Organizational Unit |
| L | Locality |
| S | State |
| C | Country |
| E | Email Address |

If a field value contains a comma, it must be quoted.

This property is not available at design time.

## Data Type

String

# SSLAcceptServerCertEncoded Property ([IVR](#ivr-component) Component)

The certificate (PEM/Base64 encoded).

## Syntax

*C++ Builder Syntax*

```text
__property String SSLAcceptServerCertEncoded = { read=FSSLAcceptServerCertEncoded, write=FSetSSLAcceptServerCertEncoded };
__property DynamicArray<Byte> SSLAcceptServerCertEncodedB = { read=FSSLAcceptServerCertEncodedB, write=FSetSSLAcceptServerCertEncodedB };
```

## Default Value

""

## Remarks

The certificate (PEM/Base64 encoded). This property is used to assign a specific certificate. The [SSLAcceptServerCertStore](#sslacceptservercertstore-property-ivr-component) and [SSLAcceptServerCertSubject](#sslacceptservercertsubject-property-ivr-component) properties also may be used to specify a certificate.

When [SSLAcceptServerCertEncoded](#sslacceptservercertencoded-property-ivr-component) is set, a search is initiated in the current [SSLAcceptServerCertStore](#sslacceptservercertstore-property-ivr-component) for the private key of the certificate. If the key is found, [SSLAcceptServerCertSubject](#sslacceptservercertsubject-property-ivr-component) is updated to reflect the full subject of the selected certificate; otherwise, [SSLAcceptServerCertSubject](#sslacceptservercertsubject-property-ivr-component) is set to an empty string.

This property is not available at design time.

## Data Type

Byte Array

# SSLCertEffectiveDate Property ([IVR](#ivr-component) Component)

The date on which this certificate becomes valid.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertEffectiveDate = { read=FSSLCertEffectiveDate };
```

## Default Value

""

## Remarks

The date on which this certificate becomes valid. Before this date, it is not valid. The date is localized to the system's time zone. The following example illustrates the format of an encoded date:

23-Jan-2000 15:00:00.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertExpirationDate Property ([IVR](#ivr-component) Component)

The date on which the certificate expires.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertExpirationDate = { read=FSSLCertExpirationDate };
```

## Default Value

""

## Remarks

The date on which the certificate expires. After this date, the certificate will no longer be valid. The date is localized to the system's time zone. The following example illustrates the format of an encoded date:

23-Jan-2001 15:00:00.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertExtendedKeyUsage Property ([IVR](#ivr-component) Component)

A comma-delimited list of extended key usage identifiers.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertExtendedKeyUsage = { read=FSSLCertExtendedKeyUsage };
```

## Default Value

""

## Remarks

A comma-delimited list of extended key usage identifiers. These are the same as ASN.1 object identifiers (OIDs).

This property is read-only and not available at design time.

## Data Type

String

# SSLCertFingerprint Property ([IVR](#ivr-component) Component)

The hex-encoded, 16-byte MD5 fingerprint of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertFingerprint = { read=FSSLCertFingerprint };
```

## Default Value

""

## Remarks

The hex-encoded, 16-byte MD5 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.

The following example illustrates the format: *bc:2a:72:af:fe:58:17:43:7a:5f:ba:5a:7c:90:f7:02*

This property is read-only and not available at design time.

## Data Type

String

# SSLCertFingerprintSHA1 Property ([IVR](#ivr-component) Component)

The hex-encoded, 20-byte SHA-1 fingerprint of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertFingerprintSHA1 = { read=FSSLCertFingerprintSHA1 };
```

## Default Value

""

## Remarks

The hex-encoded, 20-byte SHA-1 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.

The following example illustrates the format: *30:7b:fa:38:65:83:ff:da:b4:4e:07:3f:17:b8:a4:ed:80:be:ff:84*

This property is read-only and not available at design time.

## Data Type

String

# SSLCertFingerprintSHA256 Property ([IVR](#ivr-component) Component)

The hex-encoded, 32-byte SHA-256 fingerprint of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertFingerprintSHA256 = { read=FSSLCertFingerprintSHA256 };
```

## Default Value

""

## Remarks

The hex-encoded, 32-byte SHA-256 fingerprint of the certificate. This property is primarily used for keys which do not have a corresponding X.509 public certificate, such as PEM keys that only contain a private key. It is commonly used for SSH keys.

The following example illustrates the format: *6a:80:5c:33:a9:43:ea:b0:96:12:8a:64:96:30:ef:4a:8a:96:86:ce:f4:c7:be:10:24:8e:2b:60:9e:f3:59:53*

This property is read-only and not available at design time.

## Data Type

String

# SSLCertIssuer Property ([IVR](#ivr-component) Component)

The issuer of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertIssuer = { read=FSSLCertIssuer };
```

## Default Value

""

## Remarks

The issuer of the certificate. This property contains a string representation of the name of the issuing authority for the certificate.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertPrivateKey Property ([IVR](#ivr-component) Component)

The private key of the certificate (if available).

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertPrivateKey = { read=FSSLCertPrivateKey };
```

## Default Value

""

## Remarks

The private key of the certificate (if available). The key is provided as PEM/Base64-encoded data.

NOTE: The [SSLCertPrivateKey](#sslcertprivatekey-property-ivr-component) may be available but not exportable. In this case, [SSLCertPrivateKey](#sslcertprivatekey-property-ivr-component) returns an empty string.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertPrivateKeyAvailable Property ([IVR](#ivr-component) Component)

Whether a PrivateKey is available for the selected certificate.

## Syntax

*C++ Builder Syntax*

```text
__property bool SSLCertPrivateKeyAvailable = { read=FSSLCertPrivateKeyAvailable };
```

## Default Value

false

## Remarks

Whether a [SSLCertPrivateKey](#sslcertprivatekey-property-ivr-component) is available for the selected certificate. If [SSLCertPrivateKeyAvailable](#sslcertprivatekeyavailable-property-ivr-component) is True, the certificate may be used for authentication purposes (e.g., server authentication).

This property is read-only and not available at design time.

## Data Type

Boolean

# SSLCertPrivateKeyContainer Property ([IVR](#ivr-component) Component)

The name of the PrivateKey container for the certificate (if available).

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertPrivateKeyContainer = { read=FSSLCertPrivateKeyContainer };
```

## Default Value

""

## Remarks

The name of the [SSLCertPrivateKey](#sslcertprivatekey-property-ivr-component) container for the certificate (if available). This functionality is available only on Windows platforms.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertPublicKey Property ([IVR](#ivr-component) Component)

The public key of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertPublicKey = { read=FSSLCertPublicKey };
```

## Default Value

""

## Remarks

The public key of the certificate. The key is provided as PEM/Base64-encoded data.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertPublicKeyAlgorithm Property ([IVR](#ivr-component) Component)

The textual description of the certificate's public key algorithm.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertPublicKeyAlgorithm = { read=FSSLCertPublicKeyAlgorithm };
```

## Default Value

""

## Remarks

The textual description of the certificate's public key algorithm. The property contains either the name of the algorithm (e.g., "RSA" or "RSA_DH") or an object identifier (OID) string representing the algorithm.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertPublicKeyLength Property ([IVR](#ivr-component) Component)

The length of the certificate's public key (in bits).

## Syntax

*C++ Builder Syntax*

```text
__property int SSLCertPublicKeyLength = { read=FSSLCertPublicKeyLength };
```

## Default Value

0

## Remarks

The length of the certificate's public key (in bits). Common values are 512, 1024, and 2048.

This property is read-only and not available at design time.

## Data Type

Integer

# SSLCertSerialNumber Property ([IVR](#ivr-component) Component)

The serial number of the certificate encoded as a string.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertSerialNumber = { read=FSSLCertSerialNumber };
```

## Default Value

""

## Remarks

The serial number of the certificate encoded as a string. The number is encoded as a series of hexadecimal digits, with each pair representing a byte of the serial number.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertSignatureAlgorithm Property ([IVR](#ivr-component) Component)

The text description of the certificate's signature algorithm.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertSignatureAlgorithm = { read=FSSLCertSignatureAlgorithm };
```

## Default Value

""

## Remarks

The text description of the certificate's signature algorithm. The property contains either the name of the algorithm (e.g., "RSA" or "RSA_MD5RSA") or an object identifier (OID) string representing the algorithm.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertStore Property ([IVR](#ivr-component) Component)

The name of the certificate store for the client certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertStore = { read=FSSLCertStore, write=FSetSSLCertStore };
__property DynamicArray<Byte> SSLCertStoreB = { read=FSSLCertStoreB, write=FSetSSLCertStoreB };
```

## Default Value

"MY"

## Remarks

The name of the certificate store for the client certificate.

The [SSLCertStoreType](#sslcertstoretype-property-ivr-component) property denotes the type of the certificate store specified by [SSLCertStore](#sslcertstore-property-ivr-component). If the store is password-protected, specify the password in [SSLCertStorePassword](#sslcertstorepassword-property-ivr-component).

[SSLCertStore](#sslcertstore-property-ivr-component) is used in conjunction with the [SSLCertSubject](#sslcertsubject-property-ivr-component) property to specify client certificates. If [SSLCertStore](#sslcertstore-property-ivr-component) has a value, and [SSLCertSubject](#sslcertsubject-property-ivr-component) or [SSLCertEncoded](#sslcertencoded-property-ivr-component) is set, a search for a certificate is initiated. Please see the [SSLCertSubject](#sslcertsubject-property-ivr-component) property for details.

 Designations of certificate stores are platform dependent.

The following designations are the most common User and Machine certificate stores in Windows:

|  |  |
| --- | --- |
| MY | A certificate store holding personal certificates with their associated private keys. |
| CA | Certifying authority certificates. |
| ROOT | Root certificates. |

When the certificate store type is *cstPFXFile*, this property must be set to the name of the file. When the type is *cstPFXBlob*, the property must be set to the binary contents of a PFX file (i.e., PKCS#12 certificate store).

This property is not available at design time.

## Data Type

Byte Array

# SSLCertStorePassword Property ([IVR](#ivr-component) Component)

If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertStorePassword = { read=FSSLCertStorePassword, write=FSetSSLCertStorePassword };
```

## Default Value

""

## Remarks

If the type of certificate store requires a password, this property is used to specify the password needed to open the certificate store.

This property is not available at design time.

## Data Type

String

# SSLCertStoreType Property ([IVR](#ivr-component) Component)

The type of certificate store for this certificate.

## Syntax

*C++ Builder Syntax*

```text
__property TipvIVRSSLCertStoreTypes SSLCertStoreType = { read=FSSLCertStoreType, write=FSetSSLCertStoreType };
enum TipvIVRSSLCertStoreTypes {
  cstUser=0,
  cstMachine=1,
  cstPFXFile=2,
  cstPFXBlob=3,
  cstJKSFile=4,
  cstJKSBlob=5,
  cstPEMKeyFile=6,
  cstPEMKeyBlob=7,
  cstPublicKeyFile=8,
  cstPublicKeyBlob=9,
  cstSSHPublicKeyBlob=10,
  cstP7BFile=11,
  cstP7BBlob=12,
  cstSSHPublicKeyFile=13,
  cstPPKFile=14,
  cstPPKBlob=15,
  cstXMLFile=16,
  cstXMLBlob=17,
  cstJWKFile=18,
  cstJWKBlob=19,
  cstSecurityKey=20,
  cstBCFKSFile=21,
  cstBCFKSBlob=22,
  cstPKCS11=23,
  cstAuto=99
};
```

## Default Value

cstUser

## Remarks

The type of certificate store for this certificate.

 The component supports both public and private keys in a variety of formats. When the *cstAuto* value is used, the component will automatically determine the type. This property can take one of the following values:

```csharp
sftp.SSHCert = new Certificate(CertStoreTypes.cstPKCS11,
                               @"C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll",
                               "123456", // PIN
                               "CN=cert_subject");
sftp.SSHUser = "test";
sftp.SSHLogon("myhost", 22);
```

```csharp
certmgr.CertStoreType = CertStoreTypes.cstPKCS11;
certmgr.OnCertList += (s, e) => {
  secKeyBlob = e.CertEncoded;
};
certmgr.CertStore = @"C:\Program Files\OpenSC Project\OpenSC\pkcs11\opensc-pkcs11.dll";
certmgr.CertStorePassword = "123456"; // PIN
certmgr.ListStoreCertificates();

sftp.SSHCert = new Certificate(CertStoreTypes.cstPKCS11, secKeyBlob, "123456", "*");
sftp.SSHUser = "test";
sftp.SSHLogon("myhost", 22);
```

|  |  |
| --- | --- |
| 0 (cstUser - default) | For Windows, this specifies that the certificate store is a certificate store owned by the current user. NOTE: This store type is not available in Java. |
| 1 (cstMachine) | For Windows, this specifies that the certificate store is a machine store. NOTE: This store type is not available in Java. |
| 2 (cstPFXFile) | The certificate store is the name of a PFX (PKCS#12) file containing certificates. |
| 3 (cstPFXBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in PFX (PKCS#12) format. |
| 4 (cstJKSFile) | The certificate store is the name of a Java Key Store (JKS) file containing certificates. NOTE: This store type is only available in Java. |
| 5 (cstJKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in Java Key Store (JKS) format. NOTE: This store type is only available in Java. |
| 6 (cstPEMKeyFile) | The certificate store is the name of a PEM-encoded file that contains a private key and an optional certificate. |
| 7 (cstPEMKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a private key and an optional certificate. |
| 8 (cstPublicKeyFile) | The certificate store is the name of a file that contains a PEM- or DER-encoded public key certificate. |
| 9 (cstPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains a PEM- or DER-encoded public key certificate. |
| 10 (cstSSHPublicKeyBlob) | The certificate store is a string (binary or Base64-encoded) that contains an SSH-style public key. |
| 11 (cstP7BFile) | The certificate store is the name of a PKCS#7 file containing certificates. |
| 12 (cstP7BBlob) | The certificate store is a string (binary) representing a certificate store in PKCS#7 format. |
| 13 (cstSSHPublicKeyFile) | The certificate store is the name of a file that contains an SSH-style public key. |
| 14 (cstPPKFile) | The certificate store is the name of a file that contains a PPK (PuTTY Private Key). |
| 15 (cstPPKBlob) | The certificate store is a string (binary) that contains a PPK (PuTTY Private Key). |
| 16 (cstXMLFile) | The certificate store is the name of a file that contains a certificate in XML format. |
| 17 (cstXMLBlob) | The certificate store is a string that contains a certificate in XML format. |
| 18 (cstJWKFile) | The certificate store is the name of a file that contains a JWK (JSON Web Key). |
| 19 (cstJWKBlob) | The certificate store is a string that contains a JWK (JSON Web Key). |
| 21 (cstBCFKSFile) | The certificate store is the name of a file that contains a BCFKS (Bouncy Castle FIPS Key Store). NOTE: This store type is only available in Java and .NET. |
| 22 (cstBCFKSBlob) | The certificate store is a string (binary or Base64-encoded) representing a certificate store in BCFKS (Bouncy Castle FIPS Key Store) format. NOTE: This store type is only available in Java and .NET. |
| 23 (cstPKCS11) | The certificate is present on a physical security key accessible via a PKCS#11 interface. To use a security key, create a new [Certificate](#Type_Certificate) object and pass cstPKCS11 as the [SSLCertStoreType](#sslcertstoretype-property-ivr-component), the full path of the PKCS#11 DLL as the [SSLCertStore](#sslcertstore-property-ivr-component), and the PIN as the [SSLCertStorePassword](#sslcertstorepassword-property-ivr-component). Code Example. SSH Authentication with Security Key (without CertMgr): Alternatively, collect the necessary data using the [CertMgr](#CertMgr) component by calling the [ListStoreCertificates](#CertMgr_m_ListStoreCertificates) method after setting the corresponding properties accordingly. The certificate information returned in the [CertList](#CertMgr_e_CertList) event's CertEncoded parameter may be saved for later use. When using a certificate obtained with this approach, pass the previously saved security key information as the [SSLCertStore](#sslcertstore-property-ivr-component) and set [SSLCertStorePassword](#sslcertstorepassword-property-ivr-component) to the PIN. Code Example. SSH Authentication with Security Key (with CertMgr): |
| 99 (cstAuto) | The store type is automatically detected from the input data. This setting may be used with both public and private keys and can detect any of the supported formats automatically. |

This property is not available at design time.

## Data Type

Integer

# SSLCertSubjectAltNames Property ([IVR](#ivr-component) Component)

Comma-separated lists of alternative subject names for the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertSubjectAltNames = { read=FSSLCertSubjectAltNames };
```

## Default Value

""

## Remarks

Comma-separated lists of alternative subject names for the certificate.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertThumbprintMD5 Property ([IVR](#ivr-component) Component)

The MD5 hash of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertThumbprintMD5 = { read=FSSLCertThumbprintMD5 };
```

## Default Value

""

## Remarks

The MD5 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertThumbprintSHA1 Property ([IVR](#ivr-component) Component)

The SHA-1 hash of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertThumbprintSHA1 = { read=FSSLCertThumbprintSHA1 };
```

## Default Value

""

## Remarks

The SHA-1 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertThumbprintSHA256 Property ([IVR](#ivr-component) Component)

The SHA-256 hash of the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertThumbprintSHA256 = { read=FSSLCertThumbprintSHA256 };
```

## Default Value

""

## Remarks

The SHA-256 hash of the certificate. It is primarily used for X.509 certificates. If the hash does not already exist, it is automatically computed.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertUsage Property ([IVR](#ivr-component) Component)

The text description of UsageFlags .

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertUsage = { read=FSSLCertUsage };
```

## Default Value

""

## Remarks

The text description of [SSLCertUsageFlags](#sslcertusageflags-property-ivr-component).

This value will be one or more of the following strings and will be separated by commas:

- Digital Signature
- Non-Repudiation
- Key Encipherment
- Data Encipherment
- Key Agreement
- Certificate Signing
- CRL Signing
- Encipher Only

If the provider is OpenSSL, the value is a comma-separated list of X.509 certificate extension names.

This property is read-only and not available at design time.

## Data Type

String

# SSLCertUsageFlags Property ([IVR](#ivr-component) Component)

The flags that show intended use for the certificate.

## Syntax

*C++ Builder Syntax*

```text
__property int SSLCertUsageFlags = { read=FSSLCertUsageFlags };
```

## Default Value

0

## Remarks

The flags that show intended use for the certificate. The value of [SSLCertUsageFlags](#sslcertusageflags-property-ivr-component) is a combination of the following flags:

|  |  |
| --- | --- |
| 0x80 | Digital Signature |
| 0x40 | Non-Repudiation |
| 0x20 | Key Encipherment |
| 0x10 | Data Encipherment |
| 0x08 | Key Agreement |
| 0x04 | Certificate Signing |
| 0x02 | CRL Signing |
| 0x01 | Encipher Only |

Please see the [SSLCertUsage](#sslcertusage-property-ivr-component) property for a text representation of [SSLCertUsageFlags](#sslcertusageflags-property-ivr-component).

This functionality currently is not available when the provider is OpenSSL.

This property is read-only and not available at design time.

## Data Type

Integer

# SSLCertVersion Property ([IVR](#ivr-component) Component)

The certificate's version number.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertVersion = { read=FSSLCertVersion };
```

## Default Value

""

## Remarks

The certificate's version number. The possible values are the strings "V1", "V2", and "V3".

This property is read-only and not available at design time.

## Data Type

String

# SSLCertSubject Property ([IVR](#ivr-component) Component)

The subject of the certificate used for client authentication.

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertSubject = { read=FSSLCertSubject, write=FSetSSLCertSubject };
```

## Default Value

""

## Remarks

The subject of the certificate used for client authentication.

This property must be set after all other certificate properties are set. When this property is set, a search is performed in the current certificate store to locate a certificate with a matching subject.

If a matching certificate is found, the property is set to the full subject of the matching certificate.

If an exact match is not found, the store is searched for subjects containing the value of the property.

If a match is still not found, the property is set to an empty string, and no certificate is selected.

The special value "*" picks a random certificate in the certificate store.

The certificate subject is a comma-separated list of distinguished name fields and values. For instance, "CN=www.server.com, OU=test, C=US, E=example@email.com". Common fields and their meanings are as follows:

| Field | Meaning |
| --- | --- |
| CN | Common Name. This is commonly a hostname like www.server.com. |
| O | Organization |
| OU | Organizational Unit |
| L | Locality |
| S | State |
| C | Country |
| E | Email Address |

If a field value contains a comma, it must be quoted.

This property is not available at design time.

## Data Type

String

# SSLCertEncoded Property ([IVR](#ivr-component) Component)

The certificate (PEM/Base64 encoded).

## Syntax

*C++ Builder Syntax*

```text
__property String SSLCertEncoded = { read=FSSLCertEncoded, write=FSetSSLCertEncoded };
__property DynamicArray<Byte> SSLCertEncodedB = { read=FSSLCertEncodedB, write=FSetSSLCertEncodedB };
```

## Default Value

""

## Remarks

The certificate (PEM/Base64 encoded). This property is used to assign a specific certificate. The [SSLCertStore](#sslcertstore-property-ivr-component) and [SSLCertSubject](#sslcertsubject-property-ivr-component) properties also may be used to specify a certificate.

When [SSLCertEncoded](#sslcertencoded-property-ivr-component) is set, a search is initiated in the current [SSLCertStore](#sslcertstore-property-ivr-component) for the private key of the certificate. If the key is found, [SSLCertSubject](#sslcertsubject-property-ivr-component) is updated to reflect the full subject of the selected certificate; otherwise, [SSLCertSubject](#sslcertsubject-property-ivr-component) is set to an empty string.

This property is not available at design time.

## Data Type

Byte Array

# User Property ([IVR](#ivr-component) Component)

The SIP username used to identify the component throughout the session.

## Syntax

*C++ Builder Syntax*

```text
__property String User = { read=FUser, write=FSetUser };
```

## Default Value

""

## Remarks

This property specifies the SIP username. It serves as the component's SIP identity for the entire session.

This property will be used in the *From* header in all outgoing requests, in the Contact URI, and as the username for authentication when the server issues a challenge. This may be set before calling [Activate](#activate-method-ivr-component), and should not be changed while the component is active.

This property is not available at design time.

## Data Type

String

# Activate Method ([IVR](#ivr-component) Component)

Activates the component.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Activate();
```

## Remarks

This method is used to activate the component by registering to a SIP Server specified in the [Server](#server-property-ivr-component) and [Port](#port-property-ivr-component) properties. The username and password of the SIP Server must be provided via the [User](#user-property-ivr-component) and [Password](#password-property-ivr-component) properties for authorization, if applicable.

**Example:**

```text
ipphone.User = "MyUsername";
ipphone.Password = "MyPassword";
ipphone.Server = "HostNameOrIP";
ipphone.Port = 5060;
ipphone.Activate();
```

 Upon successful activation, the [Activated](#activated-event-ivr-component) event will fire.

# Answer Method ([IVR](#ivr-component) Component)

Answers an incoming phone call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Answer(String CallId);
```

## Remarks

This method can be used to answer an incoming phone call, specified by *CallId*. This method can be used in conjunction with the [IncomingCall](#incomingcall-event-ivr-component) event, for example:

```text
ipphone.onIncomingCall += (sender, e) => {
  ipphone.Answer(e.CallId);
};
```

 If successful, [CallReady](#callready-event-ivr-component) will fire.

# Config Method ([IVR](#ivr-component) Component)

Sets or retrieves a configuration setting.

## Syntax

*C++ Builder Syntax*

```text
String __fastcall Config(String ConfigurationString);
```

## Remarks

Config is a generic method available in every component. It is used to set and retrieve [configuration settings](#config-settings-ivr-component) for the component.

These settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the component, access to these *internal properties* is provided through the Config method.

To set a configuration setting named *PROPERTY*, you must call *Config("PROPERTY=VALUE")*, where *VALUE* is the value of the setting expressed as a string. For boolean values, use the strings "True", "False", "0", "1", "Yes", or "No" (case does not matter).

To read (query) the value of a [configuration setting](#config-settings-ivr-component), you must call *Config("PROPERTY")*. The value will be returned as a string.

# Deactivate Method ([IVR](#ivr-component) Component)

Deactivates the component.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Deactivate();
```

## Remarks

This method is used to unregister the component from the SIP Server. If deactivation is successful, [Deactivated](#deactivated-event-ivr-component) will fire.

# Decline Method ([IVR](#ivr-component) Component)

Declines an incoming phone call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Decline(String CallId);
```

## Remarks

This method can be used to decline an incoming phone call, specified by *CallId*. This method can be used in conjunction with the [IncomingCall](#incomingcall-event-ivr-component) event, for example:

```text
ipphone.onIncomingCall += (sender, e) => {
  ipphone.Decline(e.CallId);
};
```

# Dial Method ([IVR](#ivr-component) Component)

Used to make a call.

## Syntax

*C++ Builder Syntax*

```text
String __fastcall Dial(String Number, String CallerNumber, bool Wait);
```

## Remarks

This method is used to make a call to a particular user, given by *Number*. This method should only be called after the component has been successfully activated via [Activate](#activate-method-ivr-component). Initially, the [OutgoingCall](#outgoingcall-event-ivr-component) event will fire after calling this method. [DialCompleted](#dialcompleted-event-ivr-component) may fire when the dial process is complete. If successful, [CallReady](#callready-event-ivr-component) will fire after the outgoing call has been answered, declined, or ignored. If the call is declined or ignored, the component will be sent to voicemail, which can be ended with [Hangup](#hangup-method-ivr-component).

The *CallerNumber* parameter specifies the optional caller ID. If given, the P-Asserted-Identity Header, specified in RFC 3325, will be sent in requests to the connected SIP Server. If left as an empty string, this header will not be sent.

The *Wait* parameter specifies whether the component should connect synchronously or asynchronously to the call. If *True*, the component will connect synchronously, and won't return until the call has been answered, declined, or ignored. If *False*, the component will connect asynchronously. The call's status can be checked through various events, such as [OutgoingCall](#outgoingcall-event-ivr-component), [CallReady](#callready-event-ivr-component), and [CallStateChanged](#callstatechanged-event-ivr-component), or found in the call's *State* field. Exceptions throughout the call process will be reported in [DialCompleted](#dialcompleted-event-ivr-component), along with other call details.

**NOTE: **This method will return the *CallId* field of the call. This returned value may not always reflect the accurate *CallId*. In the case that *Wait* is true, this method will always return the accurate value. In the case that *Wait* is false, the returned value may not be accurate if the outgoing call is forwarded, or redirected, as the component must change this field. Both the updated and original *CallId* will be present within the [DialCompleted](#dialcompleted-event-ivr-component) event. Any references to the original *CallId* must be updated accordingly. Please see [DialCompleted](#dialcompleted-event-ivr-component) for more details. The below examples assume the outgoing call has been answered:

 **Example: "wait" is true**

```text
string callId = "";
bool connected = false;

ipphone.OnCallReady += (sender, e) => {
  connected = true;
}

try {
  callId = ipphone.Dial("123456789", "", true);
} catch (IPWorksVoIPException e) {
  MessageBox.Show(e.Code + ": " + e.Message);
}

if (connected) {
  ipphone.PlayText(callId, "Hello");
}
```

 **Example: "wait" is false**

```text
bool connected = false;
string callId = "";

ipphone.OnDialCompleted += (sender, e) => {
  if (e.ErrorCode != 0) {
    MessageBox.Show(e.ErrorCode + ": " + e.Description);
    // Handle error
  }
  if (e.OriginalCallId != e.CallId) {
    callId = e.CallId; // Update callId if redirect occurred
  }
}

ipphone.OnCallReady += (sender, e) => {
  connected = true;
}

string callId = ipphone.Dial("123456789", "", false);
...
...
...
// Somewhere else...
if (connected) {
  ipphone.PlayText(callId, "Hello");
}
```

# DoEvents Method ([IVR](#ivr-component) Component)

This method processes events from the internal message queue.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall DoEvents();
```

## Remarks

When DoEvents is called, the component processes any available events. If no events are available, it waits for a preset period of time, and then returns.

# Hangup Method ([IVR](#ivr-component) Component)

Used to hang up a specific call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Hangup(String CallId);
```

## Remarks

This method is used to terminate a specific call, specified by *CallId*. After the call has been successfully terminated, [CallTerminated](#callterminated-event-ivr-component) will fire.

# HangupAll Method ([IVR](#ivr-component) Component)

Used to hang up all calls.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall HangupAll();
```

## Remarks

This method is used to terminate all calls currently in the **Call*** properties. [CallTerminated](#callterminated-event-ivr-component) will fire for each successfully terminated call.

# Hold Method ([IVR](#ivr-component) Component)

Places a call on hold.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Hold(String CallId);
```

## Remarks

This method is used to place a call, specified by *CallId*, on hold.

# Ping Method ([IVR](#ivr-component) Component)

Used to ping the server.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Ping(int Timeout);
```

## Remarks

This method is used to ping the SIP server by sending an OPTIONS request. If no server response is received by the component in *Timeout* seconds, Ping will throw an error.

Note that this method is only applicable when the component is active.

# PlayBytes Method ([IVR](#ivr-component) Component)

This method is used to play bytes to a call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall PlayBytes(String CallId, DynamicArray<Byte> BytesToPlay, bool LastBlock);
```

## Remarks

This method is used to play bytes to a call, specified by the *CallId* parameter.

These bytes are expected to be in the format specified by the [AudioEncoding](#audioencoding-property-ivr-component) property, which defaults to a sampling rate of 8 kHz and a bit depth of 16 bits per sample (PCM 8 kHz 16-bit format). The *BytesToPlay* parameter specifies the bytes that will be sent to the call. Internally, these bytes will be stored within a buffer. Once all bytes have been played and the buffer is empty, the [Played](#played-event-ivr-component) event will fire.

The *LastBlock* parameter indicates whether the component will expect further uses of PlayBytes. When true, this indicates that no additional bytes will be provided for this particular audio stream, and [Played](#played-event-ivr-component) will fire once after the bytes have been played. Until this parameter is specified as true, the component will be considered to be playing audio.

If *LastBlock* is false, this indicates that the component should expect more calls to PlayBytes. Once all bytes have played and the buffer is empty, [Played](#played-event-ivr-component) will fire as expected and will continue firing until the *LastBlock* parameter is set to true. Within [Played](#played-event-ivr-component), the user can provide further bytes to PlayBytes. Please see below for detailed examples on how to use this method with [Played](#played-event-ivr-component).

 **Example: Playing audio from a stream**

```text
MemoryStream playBytesStream = new MemoryStream(byteSource);
phone.PlayBytes("callId", new byte[0], false);

phone.OnPlayed += (o, e) => {
  if (e.Completed) {
    Console.WriteLine("Playing Bytes Completed");
  } else {
    byte[] data = new byte[4096]; // Arbitrary length
    int dataLen = playBytesStream.Read(data, 0, data.Length);
    if (dataLen > 0) {
      byte[] newData = new byte[dataLen];
      Array.Copy(data, newData, dataLen) // Normalize array
      phone.PlayBytes(e.CallId, newData, false);
    } else {
      phone.PlayBytes(e.CallId, null, true);
    }
  }
};
```

 **Example: Playing single audio block**

```text
MemoryStream playBytesStream = new MemoryStream(byteSource);
phone.PlayBytes("callId", playBytesStream.ToArray(), true);

phone.OnPlayed += (o, e) => {
  Console.WriteLine("Done!"); // No further calls to PlayBytes are expected in this case
}
```

# PlayFile Method ([IVR](#ivr-component) Component)

Plays audio from a WAV file to a call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall PlayFile(String CallId, String WavFile);
```

## Remarks

This method is used to play the audio from a WAV file to a particular call, given by *CallId*. Audio transmission will only occur when the call has connected and [CallReady](#callready-event-ivr-component) has fired. Only WAV files with a sampling rate of 8 kHz and a bit depth of 16 bits per sample are supported (PCM 8 kHz 16-bit format).

Note that this component can handle playing audio to concurrent calls. This method is non-blocking and will return immediately. The [Played](#played-event-ivr-component) event will fire when the audio for the specified call has finished playing. Consecutive uses of [PlayText](#playtext-method-ivr-component) or PlayFile can prevent prior audio transmissions from being completed. In the example below, [Played](#played-event-ivr-component) will only fire for the second call to [PlayText](#playtext-method-ivr-component):

```text
ipphone.PlayFile("callId", "C:\\hello.wav"); // Played will not fire for this
ipphone.PlayText("callId", "This will interrupt the previous use if it has not finished playing.");
```

The *WavFile* parameter specifies the path to the WAV file.

# PlayText Method ([IVR](#ivr-component) Component)

Plays audio from a string to a call using Text-to-Speech.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall PlayText(String CallId, String Text);
```

## Remarks

This method is used to play the text from a string to a particular call, given by *CallId*, using Text-to-Speech. Audio transmission will only occur when the call has connected and [CallReady](#callready-event-ivr-component) has fired.

Note that this component can handle playing audio to concurrent calls. This method is non-blocking and will return immediately. The [Played](#played-event-ivr-component) event will fire when the audio for the specified call has finished playing. Consecutive uses of PlayText and [PlayFile](#playfile-method-ivr-component) can prevent prior audio transmissions from completing. In the below example, [Played](#played-event-ivr-component) will only fire for the second call to PlayText:

```text
ipphone.PlayFile("callId", "C:\\hello.wav"); // Played will not fire for this
ipphone.PlayText("callId", "This will interrupt the previous use if it has not finished playing.");
```

The *Text* parameter must be a string representation of the text to be transmitted.

# Reset Method ([IVR](#ivr-component) Component)

This method will reset the component.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Reset();
```

## Remarks

This method will reset the component's properties to their default values.

# StartRecording Method ([IVR](#ivr-component) Component)

Used to start recording the audio of a call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall StartRecording(String CallId, String FileName);
```

## Remarks

This method is used to start recording the incoming and outgoing audio of a call, specified by *CallId*. If you wish to record the audio directly to a WAV file, you may specify the *FileName* parameter.

If you leave the *FileName* parameter blank, the component will instead record the call dynamically by default, giving you direct control over the recorded data as it is captured. In this mode, the [Record](#record-event-ivr-component) event fires repeatedly in real time as audio is captured during the call. During the [Record](#record-event-ivr-component) event, a chunk of the call's recorded audio is made available to the user via the *RecordedDataB* parameter. Additionally, the *Direction* parameter can be used to indicate whether the audio is incoming from the remote party or outgoing from the local client. This behavior is controlled by the [EnableDynamicRecording](#EnableDynamicRecording) configuration setting, which is enabled by default. If disabled, the [Record](#record-event-ivr-component) event will instead fire only once, containing the full recorded audio, after the recording has finished.

In both scenarios, you can stop recording the call's audio via [StopRecording](#stoprecording-method-ivr-component). By default, the recording will end if the call is terminated. Note that the recorded audio will have a sampling rate of 8 kHz and a bit depth of 16 bits per sample (PCM 8 kHz 16-bit format).

**Example: Using the 'Record' event to handle dynamically recorded audio**

```text
phone.StartRecording("callId", "");

phone.OnRecord += (o, e) => {
  string direction = e.Direction == 1 ? "Incoming" : "Outgoing";
  Console.WriteLine($"Received {e.RecordedDataB.Length} bytes of {direction} audio");
};
```

**Example: Disabling dynamic recording to buffer audio until the recording finishes**

```text
MemoryStream recordStream = new MemoryStream();

phone.Config("EnableDynamicRecording=false");
phone.StartRecording("callId", "");

phone.OnRecord += (o, e) => {
  recordStream.Write(e.RecordedDataB, 0, e.RecordedDataB.Length);
  File.WriteAllBytes(recordFile, recordStream.ToArray());
};
```

# StopPlaying Method ([IVR](#ivr-component) Component)

Stops audio from playing to a call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall StopPlaying(String CallId);
```

## Remarks

This method is used to stop the audio playing to a call, given by *CallId*. Note that this will not stop audio from transmitting with an external device set using SetMicrophone; however, it will stop audio transmission from usage of [PlayText](#playtext-method-ivr-component), [PlayFile](#playfile-method-ivr-component), and [PlayBytes](#playbytes-method-ivr-component).

Note that [Played](#played-event-ivr-component) will not fire when this method is used.

# StopRecording Method ([IVR](#ivr-component) Component)

Stops recording the audio of a call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall StopRecording(String CallId);
```

## Remarks

This method is used to stop recording the audio of a call, given by *CallId*. The component will automatically stop recording upon call termination.

# Transfer Method ([IVR](#ivr-component) Component)

Transfers a call.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Transfer(String CallId, String Number);
```

## Remarks

This method is used to transfer a call, specified by *CallId*, to the phone number given by *Number*. The component supports the following types of transfers:

**Basic Transfers**

Basic transfers are very simple to perform. First, the user must establish a call with the number they will be transferring (transferee). After the call is established, the user can transfer the call to the appropriate number (transfer target). The call will then be removed. For example:

```text
string callId = ipphone1.Dial("123456789", "", true); // Establish call with transferee, hold if needed
//ipphone1.Hold(callId);

ipphone1.Transfer(callId, "number");
```

**Attended Transfers**

Typically, attended transfers are used to manually check if the *Number* (or transfer target) is available for a call, provide extra information about the call, etc., before transferring. In addition to establishing a call with the transferee, the component must also establish a call with the transfer target. Once both of these calls are active, you may perform an attended transfer by calling Transfer at any moment. Afterwards, a session between these calls will be established, and they will be removed. Note that Transfer must be used with the *CallId* of the call you wish to transfer (transferee) and the *Number* of the call you wish to transfer to (transfer target). For example:

```text
string callId1 = ipphone1.Dial("123456789", "", true); // Establish call with Transferee, hold if needed
//ipphone1.Hold(callId1);

string callId2 = ipphone1.Dial("number", "", true); // Establish call with Transfer Target, hold if needed
//ipphone1.Hold(callId2);

ipphone1.Transfer(callId1, "number");
```

Note in these examples, [Hold](#hold-method-ivr-component) can be used to place a call on hold before a transfer. This is optional.

# Unhold Method ([IVR](#ivr-component) Component)

Takes a call off hold.

## Syntax

*C++ Builder Syntax*

```text
void __fastcall Unhold(String CallId);
```

## Remarks

This method is used to take a call, specified by *CallId*, off hold.

# Activated Event ([IVR](#ivr-component) Component)

This event is fired immediately after the component is activated.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
} TipvIVRActivatedEventParams;
typedef void __fastcall (__closure *TipvIVRActivatedEvent)(System::TObject* Sender, TipvIVRActivatedEventParams *e);
__property TipvIVRActivatedEvent OnActivated = { read=FOnActivated, write=FOnActivated };
```

## Remarks

The Activated event will fire after the component has successfully registered with the SIP Server via [Activate](#activate-method-ivr-component).

# CallReady Event ([IVR](#ivr-component) Component)

This event is fired after a call has been answered, declined, or ignored.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
} TipvIVRCallReadyEventParams;
typedef void __fastcall (__closure *TipvIVRCallReadyEvent)(System::TObject* Sender, TipvIVRCallReadyEventParams *e);
__property TipvIVRCallReadyEvent OnCallReady = { read=FOnCallReady, write=FOnCallReady };
```

## Remarks

For all calls, this event will fire when audio can be transmitted and received. For incoming calls, it will fire after the call has been answered.

For outgoing calls, this event will fire after the call has either been answered, declined, or ignored. In the case that the call is declined or ignored, it will fire, and the component will be sent to voicemail. [Hangup](#hangup-method-ivr-component) can be used to end the call in all scenarios.

Note that this event will fire after [OutgoingCall](#outgoingcall-event-ivr-component) and [DialCompleted](#dialcompleted-event-ivr-component), assuming [Dial](#dial-method-ivr-component) was successful.

The *CallId* parameter is the unique ID of the call.

# CallStateChanged Event ([IVR](#ivr-component) Component)

This event is fired after a call's state has changed.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
  int State;
} TipvIVRCallStateChangedEventParams;
typedef void __fastcall (__closure *TipvIVRCallStateChangedEvent)(System::TObject* Sender, TipvIVRCallStateChangedEventParams *e);
__property TipvIVRCallStateChangedEvent OnCallStateChanged = { read=FOnCallStateChanged, write=FOnCallStateChanged };
```

## Remarks

The CallStateChanged event will fire each time the state of a call has changed.

The *CallId* parameter is the unique ID of the call.

The *State* parameter denotes the state the call has changed to. The following values are applicable:

|  |  |
| --- | --- |
| csInactive (0) | The call is inactive (default setting). |
| csConnecting (1) | The call is establishing a connection to the callee. |
| csAutConnecting (2) | The call is establishing a connection to the callee with authorization credentials. |
| csRinging (3) | The call is ringing. |
| csActive (4) | The call is active. |
| csActiveInConference (5) | The call is active and in a conference. |
| csDisconnecting (6) | The call is disconnecting with the callee. |
| csAutDisconnecting (7) | The call is disconnecting with the callee with authorization credentials. |
| csHolding (8) | The call is currently being placed on hold, but the [Hold](#hold-method-ivr-component) operation has not finished. |
| csOnHold (9) | The call is currently on hold. |
| csUnholding (10) | The call is currently being unheld, but the [Unhold](#unhold-method-ivr-component) operation has not finished. |
| csTransferring (11) | The call is currently being transferred. |
| csAutTransferring (12) | The call is currently being transferred with authorization credentials. |

# CallTerminated Event ([IVR](#ivr-component) Component)

This event is fired after a call has been terminated.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
} TipvIVRCallTerminatedEventParams;
typedef void __fastcall (__closure *TipvIVRCallTerminatedEvent)(System::TObject* Sender, TipvIVRCallTerminatedEventParams *e);
__property TipvIVRCallTerminatedEvent OnCallTerminated = { read=FOnCallTerminated, write=FOnCallTerminated };
```

## Remarks

The CallTerminated event will fire after a call has been terminated by either end of the call.

The *CallId* parameter is the unique ID of the call.

# Deactivated Event ([IVR](#ivr-component) Component)

This event is fired immediately after the component is deactivated.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
} TipvIVRDeactivatedEventParams;
typedef void __fastcall (__closure *TipvIVRDeactivatedEvent)(System::TObject* Sender, TipvIVRDeactivatedEventParams *e);
__property TipvIVRDeactivatedEvent OnDeactivated = { read=FOnDeactivated, write=FOnDeactivated };
```

## Remarks

The Deactivated event will fire after the component has unregistered from the SIP Server via [Deactivate](#deactivate-method-ivr-component).

# DialCompleted Event ([IVR](#ivr-component) Component)

This event is fired after the dial process has finished.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String OriginalCallId;
  String CallId;
  String Caller;
  String Callee;
  int ErrorCode;
  String Description;
} TipvIVRDialCompletedEventParams;
typedef void __fastcall (__closure *TipvIVRDialCompletedEvent)(System::TObject* Sender, TipvIVRDialCompletedEventParams *e);
__property TipvIVRDialCompletedEvent OnDialCompleted = { read=FOnDialCompleted, write=FOnDialCompleted };
```

## Remarks

This event will fire when the dial process, initiated by calling [Dial](#dial-method-ivr-component), has completed. Note that this event will not fire if an exception occurs when the "wait" parameter of [Dial](#dial-method-ivr-component) is true. In this case, the component will throw an exception. However, it will fire if "wait" is true and no exception occurs, indicating [Dial](#dial-method-ivr-component) was successful.

The *OriginalCallId* parameter is the value returned by [Dial](#dial-method-ivr-component).

The value of the *CallId* parameter depends on the redirection status of the call. There are two scenarios:

1. The outgoing call has not been redirected. In this case, *CallId* is equal to *OriginalCallId*, and the value returned by [Dial](#dial-method-ivr-component) is correct.
2. The outgoing call has been redirected any number of times. In this case, the *OriginalCallId* is no longer applicable, and the *CallId* parameter is the new unique identifier for this call. Any reference to the past value, *OriginalCallId*, should be updated accordingly to reflect the change due to redirection. This would also include references to the original value returned by [Dial](#dial-method-ivr-component).

 The *Caller* parameter specifies the user that initially made the call. The *Callee* parameter specifies the final recipient of the call.

Errors during the dial process are reported via the *ErrorCode* and *Description* parameters. An error code of 0 and description of "Dialed Successfully" indicate [Dial](#dial-method-ivr-component) has completed with no issues. A list of error codes can be found in the [Error Codes](#trappable-errors-ivr-component) section. In the case of a non-zero *ErrorCode*, the *Description* parameter will contain the error message (and SIP response code, if applicable), for example, "Dial Timeout" or "486: Busy Here".

# Digit Event ([IVR](#ivr-component) Component)

This event fires every time a digit is pressed using the keypad.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
  String Digit;
} TipvIVRDigitEventParams;
typedef void __fastcall (__closure *TipvIVRDigitEvent)(System::TObject* Sender, TipvIVRDigitEventParams *e);
__property TipvIVRDigitEvent OnDigit = { read=FOnDigit, write=FOnDigit };
```

## Remarks

The Digit event will fire after every detected keypad input from a call.

The detected input will be present in the *Digit* parameter. Note that this event will not fire after the component's inputs via TypeDigit. Detectable inputs include: 0-9, *, #

The *CallId* parameter is the unique ID of the call.

# Error Event ([IVR](#ivr-component) Component)

Fired when information is available about errors during data delivery.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  int ErrorCode;
  String Description;
} TipvIVRErrorEventParams;
typedef void __fastcall (__closure *TipvIVRErrorEvent)(System::TObject* Sender, TipvIVRErrorEventParams *e);
__property TipvIVRErrorEvent OnError = { read=FOnError, write=FOnError };
```

## Remarks

The Error event is fired in case of exceptional conditions during message processing. Normally the component raises an exception.

The *ErrorCode* parameter contains an error code, and the *Description* parameter contains a textual description of the error. For a list of valid error codes and their descriptions, please refer to the [Error Codes](#trappable-errors-ivr-component) section.

# IncomingCall Event ([IVR](#ivr-component) Component)

This event is fired when an incoming call is received.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
  String RemoteUser;
  String RequestURI;
  String ToURI;
} TipvIVRIncomingCallEventParams;
typedef void __fastcall (__closure *TipvIVRIncomingCallEvent)(System::TObject* Sender, TipvIVRIncomingCallEventParams *e);
__property TipvIVRIncomingCallEvent OnIncomingCall = { read=FOnIncomingCall, write=FOnIncomingCall };
```

## Remarks

The IncomingCall event will fire when an incoming call is received.

The *CallId* parameter specifies the unique ID of the call, and can be used to [Answer](#answer-method-ivr-component) or [Decline](#decline-method-ivr-component) the call.

The *RemoteUser* parameter indicates the username or telephone number of the remote user associated with the call.

The *RequestURI* parameter specifies the contact information of the current recipient associated with the call. This parameter is typically of the format *sip:user@domain:port*.

The *ToURI* parameter specifies the URI present in the *To* header. This URI contains the contact information of the original recipient associated with the call. This parameter is typically of the format *sip:user@domain*.

Note the user and domain within the *ToURI* indicate the original recipient of the call as initially specified by the caller. This value may not reflect the current (or final) recipient of the call as denoted by the *RequestURI*.

# Log Event ([IVR](#ivr-component) Component)

This event is fired once for each log message.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  int LogLevel;
  String Message;
  String LogType;
} TipvIVRLogEventParams;
typedef void __fastcall (__closure *TipvIVRLogEvent)(System::TObject* Sender, TipvIVRLogEventParams *e);
__property TipvIVRLogEvent OnLog = { read=FOnLog, write=FOnLog };
```

## Remarks

This event fires once for each log message generated by the component. The verbosity is controlled by the [LogLevel](#LogLevel) configuration.

*LogLevel* indicates the detail level of the message. Possible values are:

|  |  |
| --- | --- |
| 0 (None) | No messages are logged. |
| 1 (Info - Default) | Informational events such as a call's status are logged. |
| 2 (Verbose) | Detailed data such as SIP/SDP packet information is logged. |
| 3 (Debug) | Debug data including all relevant sent and received audio bytes are logged. |

 **Note: **When *LogLevel* is set to 3 (Debug), we strongly advise against performing long-running operations inside this event due to large amounts of sent and received audio bytes. For example, continuously updating an interface displaying the Log data will cause major performance issues in an application. It is recommended to set *LogLevel* to 3 only when writing Log data to a stream or file. There will be no performance issues in this case.

*Message* is the log message.

*LogType* identifies the type of log entry. Possible values are as follows:

- Info
- Packet
- RTP

# OutgoingCall Event ([IVR](#ivr-component) Component)

This event is fired when an outgoing call has been made.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
  String RemoteUser;
} TipvIVROutgoingCallEventParams;
typedef void __fastcall (__closure *TipvIVROutgoingCallEvent)(System::TObject* Sender, TipvIVROutgoingCallEventParams *e);
__property TipvIVROutgoingCallEvent OnOutgoingCall = { read=FOnOutgoingCall, write=FOnOutgoingCall };
```

## Remarks

The OutgoingCall event is fired when an outgoing call has been made using [Dial](#dial-method-ivr-component). This event signifies the start of the invite process.

The *CallId* parameter is the unique ID of the call.

The *RemoteUser* parameter indicates the username or telephone number of the remote user associated with the call.

# Played Event ([IVR](#ivr-component) Component)

This event is fired after the component finishes playing available audio.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
  bool Completed;
} TipvIVRPlayedEventParams;
typedef void __fastcall (__closure *TipvIVRPlayedEvent)(System::TObject* Sender, TipvIVRPlayedEventParams *e);
__property TipvIVRPlayedEvent OnPlayed = { read=FOnPlayed, write=FOnPlayed };
```

## Remarks

The Played event will fire after the component finishes playing available audio to a call. When using [PlayText](#playtext-method-ivr-component) or [PlayFile](#playfile-method-ivr-component), *Completed* will always be true. However, this will not always be the case when using [PlayBytes](#playbytes-method-ivr-component).

When playing audio via [PlayBytes](#playbytes-method-ivr-component), this event will fire when the internal byte queue is empty. In the event that the internal byte queue is empty and the component is still expecting calls to [PlayBytes](#playbytes-method-ivr-component) (i.e., *lastBlock* is false), this event will continue to fire with the *Completed* parameter as false. In this case, additional bytes are expected to be provided. *Completed* will be true once all bytes have been played and the component is no longer expecting calls to [PlayBytes](#playbytes-method-ivr-component) (i.e., *lastBlock* is true). Please see the method description for more details.

The *CallId* parameter is the unique ID of the call.

# Record Event ([IVR](#ivr-component) Component)

This event is fired when recorded audio data is available.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
  String RecordedData;
  DynamicArray<Byte> RecordedDataB;
  int Direction;
} TipvIVRRecordEventParams;
typedef void __fastcall (__closure *TipvIVRRecordEvent)(System::TObject* Sender, TipvIVRRecordEventParams *e);
__property TipvIVRRecordEvent OnRecord = { read=FOnRecord, write=FOnRecord };
```

## Remarks

This event is fired when a call's recorded audio data is available. Note that for this event to fire, [StartRecording](#startrecording-method-ivr-component) must be called with no *FileName* parameter.

By default, this event fires repeatedly in real time as audio is captured during the call (dynamic recording). This behavior is controlled by the [EnableDynamicRecording](#EnableDynamicRecording) configuration, which is enabled by default. If disabled, this event will instead fire only once, containing the full recorded audio, after the recording has finished (i.e., when [StopRecording](#stoprecording-method-ivr-component) is called or the call is terminated).

The *CallId* parameter is the unique ID of the call.

The recorded audio data is available in the *RecordedDataB* parameter. When dynamic recording is enabled, this data will be in the format specified by [AudioEncoding](#audioencoding-property-ivr-component) (PCM 8 kHz 16-bit by default). When dynamic recording is disabled, this parameter instead contains the full recording, always in the PCM 8 kHz 16-bit format, regardless of [AudioEncoding](#audioencoding-property-ivr-component).

The *Direction* parameter indicates the direction of the audio made available while dynamic recording is enabled. A value of *0* indicates the audio is outgoing (from the local client). A value of *1* indicates the audio is incoming (from the remote party). When dynamic recording is disabled, this parameter should not be interpreted, as the event instead contains the full mixed audio of the call.

**Example: Handling dynamically recorded audio**

```text
phone.StartRecording("CallId", "");

phone.OnRecord += (o, e) => {
  string direction = e.Direction == 1 ? "Incoming" : "Outgoing";
  Console.WriteLine($"Received {e.RecordedDataB.Length} bytes of {direction} audio");
};
```

# Silence Event ([IVR](#ivr-component) Component)

This event is fired when the component detects silence from incoming audio streams.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CallId;
} TipvIVRSilenceEventParams;
typedef void __fastcall (__closure *TipvIVRSilenceEvent)(System::TObject* Sender, TipvIVRSilenceEventParams *e);
__property TipvIVRSilenceEvent OnSilence = { read=FOnSilence, write=FOnSilence };
```

## Remarks

The Silence event will fire every second the component detects silence from a call's incoming audio stream. Note that this event can fire while an outgoing call is ringing.

The *CallId* parameter is the unique ID of the call.

# SSLServerAuthentication Event ([IVR](#ivr-component) Component)

Fired after the server presents its certificate to the client.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String CertEncoded;
  DynamicArray<Byte> CertEncodedB;
  String CertSubject;
  String CertIssuer;
  String Status;
  bool Accept;
} TipvIVRSSLServerAuthenticationEventParams;
typedef void __fastcall (__closure *TipvIVRSSLServerAuthenticationEvent)(System::TObject* Sender, TipvIVRSSLServerAuthenticationEventParams *e);
__property TipvIVRSSLServerAuthenticationEvent OnSSLServerAuthentication = { read=FOnSSLServerAuthentication, write=FOnSSLServerAuthentication };
```

## Remarks

During this event, the client can decide whether or not to continue with the connection process. The *Accept* parameter is a recommendation on whether to continue or close the connection. This is just a suggestion: application software must use its own logic to determine whether or not to continue.

 When *Accept* is False, *Status* shows why the verification failed (otherwise, *Status* contains the string *OK*). If it is decided to continue, you can override and accept the certificate by setting the *Accept* parameter to True.

# SSLStatus Event ([IVR](#ivr-component) Component)

Fired when secure connection progress messages are available.

## Syntax

*C++ Builder Syntax*

```text
typedef struct {
  String Message;
} TipvIVRSSLStatusEventParams;
typedef void __fastcall (__closure *TipvIVRSSLStatusEvent)(System::TObject* Sender, TipvIVRSSLStatusEventParams *e);
__property TipvIVRSSLStatusEvent OnSSLStatus = { read=FOnSSLStatus, write=FOnSSLStatus };
```

## Remarks

The event is fired for informational and logging purposes only. This event tracks the progress of the connection.

# Config Settings ([IVR](#ivr-component) Component)

 The component accepts one or more of the following *configuration settings*. Configuration settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the component, access to these *internal properties* is provided through the [Config](#config-method-ivr-component) method.

### IPPhone Config Settings

**AuthUser**: Specifies the username to be used during client authentication.This config is used to specify the username to be used when authenticating a SIP client, for example, when registering or initiating a call. When specified, this value will replace the [User](#user-property-ivr-component) property within the *Authorization* and *Proxy-Authorization* headers sent in the mentioned requests.

By default, this value is empty, and the [User](#user-property-ivr-component) property will be used within the mentioned headers.

**Codecs**: Comma-separated list of codecs the component can use.This config contains a comma-separated list of codecs, represented as integers, that the component can use to compress call data. By default, this value is:

8,0,3

The following integers correspond to these supported codecs:

|  |  |
| --- | --- |
| 0 | PCMU (G711MU) |
| 3 | GSM |
| 8 | PCMA (G711A) |

**DeclineStatus**: Specifies the status to send when declining an incoming call.This config is used to specify the status to send when declining an incoming call. By default, this config will be empty and the component will send *486 Busy Here* when calling [Decline](#decline-method-ivr-component). Valid responses when declining a call can be found in RFC 3261 Section 21. Note this config must be set to the response code **and** description, for example:

```csharp
Component.Config("DeclineStatus=600 Busy Everywhere")
```

**DialTimeout**: Specifies the amount of time to wait for a response when making a call.This config is used to specify the amount of time (in seconds) the component will wait for the outgoing call to be answered, declined, or ignored when using [Dial](#dial-method-ivr-component). Note this value will be 60 by default.

When using [Dial](#dial-method-ivr-component) with the *Wait* parameter as false, the timeout will be reported within [DialCompleted](#dialcompleted-event-ivr-component).

**DialToneFile**: Specifies the location of the WAV file to play when making a call.This config is used to specify the WAV file to play when making a call. Once the call is answered or terminated, the file will stop playing. Note this file will play when making a call, but only in the case that early media has not been established by the server. In the event the server has established early media, the server's dial tone will be heard instead. Only WAV files with a sampling rate of 8 kHz and a bit depth of 16 bits per sample are supported (PCM 8 kHz 16-bit format).

**DisableRegistration**: Can be used to disable SIP registration.This config can be used to disable SIP registration. By default, this config is set to *False* and registration is enabled. When set to *True* and [Activate](#activate-method-ivr-component) is called, the component will attempt to establish a connection with the server using the underlying transport protocol specified by [SIPTransportProtocol](#siptransportprotocol-property-ivr-component). After a successful connection, the component will be considered active until the connection is removed by either end.

NOTE: It is recommended to enable this config only if [SIPTransportProtocol](#siptransportprotocol-property-ivr-component) is set to TCP or TLS.

**DtmfMethod**: The method used for delivering the signals/tones sent when typing a digit.This config is used to describe the method being used to transmit the signals/tones when calling TypeDigit. Possible values of supported methods are:

|  |  |
| --- | --- |
| 1 | Inband (Default) |
| 2 | RFC 2833 |
| 3 | Info (SIP Info) |

**EnableDynamicRecording**: Specifies whether dynamic recording is enabled when recording a call.This config is used to specify whether dynamic recording is enabled when recording a call. By default, this config is enabled (true). When enabled (true), and [StartRecording](#startrecording-method-ivr-component) was called with no filename parameter specified, [Record](#record-event-ivr-component) will fire when incoming audio is sent and received. Within [Record](#record-event-ivr-component), the data will either be incoming or outgoing audio. This can be determined by querying the *Direction* parameter within [Record](#record-event-ivr-component).

**LogEncodedAudioData**: Whether the component will log encoded audio data.This config controls whether the component will log encoded audio data when [LogLevel](#LogLevel) is set to 3 (Debug). By default, this config is false, and the component will only log raw audio data.

**LogLevel**: The level of detail that is logged.This config controls the level of detail that is logged through the [Log](#log-event-ivr-component) event. Possible values are:

|  |  |
| --- | --- |
| 0 (None) | No messages are logged. |
| 1 (Info - Default) | Informational events such as a call's status are logged. |
| 2 (Verbose) | Detailed data such as SIP/SDP packet information is logged. |
| 3 (Debug) | Debug data including all relevant sent and received audio bytes are logged. |

 **Note: **When [LogLevel](#LogLevel) is set to 3 (Debug), we strongly advise against performing long-running operations inside of this event due to large amounts of sent and received audio bytes. For example, continuously updating an interface displaying the Log data will cause major performance issues in an application. It is recommended to set [LogLevel](#LogLevel) to 3 only when writing Log data to a stream or file. There will be no performance issues in this case.

**LogRTPPackets**: Whether the component will log RTP packets.This config controls whether the component will log received RTP packets when [LogLevel](#LogLevel) is set to 3 (Debug). By default, this config is false, and the component will only log audio data.

**MatchRequestToUser**: Whether the component will match incoming requests to the specified user.This config determines whether the component will match incoming requests to the specified [User](#user-property-ivr-component). By default, this is true, and the component will ignore requests that are not meant for this user. When set to false, the component will process requests regardless of the intended user, acting as if all requests are intended for the component.

**NegotiatedRegistrationInterval**: Specifies the negotiated lifetime of the current registration after successful activation.After successful activation, this config specifies the lifetime (in seconds) of the current registration as determined by the server. If [RefreshInterval](#RefreshInterval) is set, it should be less than or equal to the value returned by this config.

**P2PMode**: Enables peer-to-peer communication without the need for a server.This config can be set to enable peer-to-peer communication, removing the need for a SIP server. By default, this config is false, and peer-to-peer mode is disabled.

When set to true, the component can communicate directly with other peers that also support serverless communication. In this mode, the component will not attempt to register with a SIP server, so setting [DisableRegistration](#DisableRegistration) is unnecessary. Please note that this mode is only supported when [SIPTransportProtocol](#siptransportprotocol-property-ivr-component) is set to *UDP*.

When set to true, the [LocalHost](#localhost-property-ivr-component) and [LocalPort](#localport-property-ivr-component) properties should be set to the interface the component will listen on, and should be set before calling [Activate](#activate-method-ivr-component). Other endpoints can send requests to this interface, and the component will process them as expected.

To reach other endpoints, set the [Server](#server-property-ivr-component) and [Port](#port-property-ivr-component) properties before calling [Dial](#dial-method-ivr-component). In this mode, the first parameter of [Dial](#dial-method-ivr-component) may be set to an empty string.

Since there is no registration in P2P mode, the [User](#user-property-ivr-component) property does not need to be specified, as the component identity is instead determined by the configured [LocalHost](#localhost-property-ivr-component) and [LocalPort](#localport-property-ivr-component).

**RecordType**: The type of recording the component will use.This config sets the recording type the component will use when calling [StartRecording](#startrecording-method-ivr-component). Possible values are 0 (Mono) and 1 (Stereo - Default).

**RedirectLimit**: The maximum number of redirects an outgoing call can experience.This config limits the number of redirects, also known as forwards or diversions, an outgoing call can experience. If the number of redirects exceeds this value, an exception will be thrown. Note this value is 0 by default.

**RefreshInterval**: Used to manually specify the interval between subsequent registration messages after successful activation.By default, this config is set to *0*, and [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval) will denote the interval at which the current registration is refreshed. When set to a positive value, this config denotes the interval at which the current registration is refreshed, in seconds.

If the client wishes to refresh the registration prior to the expected expiration, this config should be set appropriately. To do so, after successful activation, the [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval) should be queried to determine the existing lifetime. This config should then be set to a value less than or equal to the queried [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval). For example:

```csharp
component.Config("RefreshInterval=120"); // proposed registration lifetime
component.Activate();
int lifetime = component.Config("NegotiatedRegistrationInterval"); // negotiated registration lifetime

// Refresh the registration halfway through its lifetime.
component.Config("RefreshInterval=" + (lifetime / 2));
```

**RegistrationInterval**: Used to specify the desired lifetime of the registration to the server prior to activation.Prior to activation, this config can be used to specify the clients desired lifetime for the current registration, in seconds. Note that this is merely a suggestion to the server, as the server determines the final lifetime of the registration. By default, this config is set to *60*.

After successfully calling [Activate](#activate-method-ivr-component), the [NegotiatedRegistrationInterval](#NegotiatedRegistrationInterval) config will contain the actual, negotiated lifetime of the registration.

**RemoteDisplayName**: Specifies the display name from the remote party's From header.This config is used to expose the optional display-name portion of the SIP *From* header for incoming calls, and may be queried during the [IncomingCall](#incomingcall-event-ivr-component) event. When an incoming call is received, this value will contain the display name (if present) as parsed from the header. For example, given the following *From* header:

*From: "Test 9995" <sip:9995@95.123.123.123>;tag=asdf1234ad*

The result of querying this config given the above header would be *"Test 9995"*. The display name may or may not be enclosed in double quotes, and no additional processing (such as removing the quotes) is performed.

**RingtoneFile**: Specifies location of a WAV file to play when receiving an incoming call.This config is used to specify a WAV file to play when receiving an incoming call. The ringtone will play until all incoming calls are answered declined, or ignored. Only WAV files with a sampling rate of 8 kHz and a bit depth of 16 bits per sample are supported (PCM 8 kHz 16-bit format).

**SilenceInterval**: Specifies the interval the component uses to detect periods of silence.This config is used to specify the interval (in milliseconds) that the component uses to detect silence from a call's incoming audio stream. This will also directly control the rate that [Silence](#silence-event-ivr-component) will fire in the case silence is detected. Note this value is 1000 by default.

**STUNPort**: The port of the STUN server.This config sets the port of the corresponding [STUNServer](#STUNServer). This value will be 3478 by default.

**STUNServer**: The address of the STUN Server.This config sets the address of the STUN Server the component will use to communicate with the SIP Server.

**UnregisterOnActivate**: Specifies whether the component will unregister from the SIP Server before registration.When calling [Activate](#activate-method-ivr-component), this config will specify whether the component will unregister with the SIP Server before the initial registration. If False (default), the component will not attempt to unregister first, and will only perform registration.

**UserAgent**: Information about the user agent (client).This config specifies information about the user agent (client). The value specified here will be supplied in the SIP *User-Agent* header.

By default, this value is empty, and no User-Agent header will be sent. If set, the User-Agent header will be present in all outgoing requests.

**VoiceIndex**: The voice that will be used when playing text.This config sets the voice that will be used when calling [PlayText](#playtext-method-ivr-component). The available voice tokens are listed in the registry under *HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens*. Note this value will be 0 by default.

**VoiceRate**: The speaking rate of the voice when playing text.This config specifies the speaking rate of the voice when calling [PlayText](#playtext-method-ivr-component). Supported values range from -10 (slowest) to 10 (fastest). Note this value will be 0 by default.

### UDP Config Settings

**CaptureIPPacketInfo**: Used to capture the packet information.If this is set to True, the component will capture the IP packet information.

The default value for this setting is False.

NOTE: This configuration setting is available only in Windows.

**DelayHostResolution**: Whether the hostname is resolved when RemoteHost is set.This configuration setting specifies whether a hostname is resolved immediately when RemoteHost is set. If *true* the component will resolve the hostname and the IP address will be present in the RemoteHost property. If *false*, the hostname is not resolved until needed by the component when a method to connect or send data is called. If desired, ResolveRemoteHost may be called to manually resolve the value in RemoteHost at any time.

The default value is *false*.

**DestinationAddress**: Used to get the destination address from the packet information.If [CaptureIPPacketInfo](#CaptureIPPacketInfo) is set to True, then this will be populated with the packet's destination address when a packet is received. This information will be accessible in the DataIn event.

NOTE: This configuration setting is available only in Windows.

**DontFragment**: Used to set the Don't Fragment flag of outgoing packets.When set to True, packets sent by the component will have the Don't Fragment flag set. The default value is False.

**LocalHost**: The name of the local host through which connections are initiated or accepted. The [LocalHost](#localhost-property-ivr-component) setting contains the name of the local host as obtained by the *gethostname()* system call, or if the user has assigned an IP address, the value of that address.

In multihomed hosts (machines with more than one IP interface), setting LocalHost to the value of an interface will make the component initiate connections (or accept in the case of server components) only through that interface.

If the component is connected, the [LocalHost](#localhost-property-ivr-component) setting shows the IP address of the interface through which the connection is made in internet dotted format (aaa.bbb.ccc.ddd). In most cases, this is the address of the local host, except for multihomed hosts (machines with more than one IP interface).

**LocalPort**: The port in the local host where the component binds. This configuration setting must be set before a connection is attempted. It instructs the component to bind to a specific port (or communication endpoint) in the local machine.

Setting this to 0 (default) enables the system to choose a port at random. The chosen port will be shown by [LocalPort](#localport-property-ivr-component) after the connection is established.

[LocalPort](#localport-property-ivr-component) cannot be changed once a connection is made. Any attempt to set this when a connection is active will generate an error.

This configuration setting is useful when trying to connect to services that require a trusted port on the client side. An example is the remote shell (rsh) service in UNIX systems.

**MaxPacketSize**: The maximum length of the packets that can be received.This configuration setting specifies the maximum size of the datagrams that the component will accept without truncation.

**QOSDSCPValue**: Used to specify an arbitrary QOS/DSCP setting (optional).[UseConnection](#UseConnection) must be True to use this configuration setting. This option allows you to specify an arbitrary DSCP value between 0 and 63. The default is 0. When set to the default value, the component will not set a DSCP value.

NOTE: This configuration setting uses the qWAVE API and is available only on Windows 7, Windows Server 2008 R2, and later.

**QOSTrafficType**: Used to specify QOS/DSCP settings (optional).[UseConnection](#UseConnection) must be True to use this setting. You may specify either the text or integer values: BestEffort (0), Background (1), ExcellentEffort (2), AudioVideo (3), Voice (4), and Control (5).

NOTE: This configuration setting uses the qWAVE API and is available only on Windows Vista and Windows Server 2008 or above.

NOTE: QOSTrafficType must be set before setting [Active](#active-property-ivr-component) to True.

**ShareLocalPort**: If set to True, allows more than one instance of the component to be active on the same local port.This option must be set before the component is activated through the [Active](#active-property-ivr-component) property or it will have no effect.

The default value for this setting is False.

**SourceIPAddress**: Used to set the source IP address used when sending a packet.This configuration setting can be used to override the source IP address when sending a packet.

NOTE: This configuration setting is available only in Windows and requires that the winpcap library be installed (or npcap with winpcap compatibility).

**SourceMacAddress**: Used to set the source MAC address used when sending a packet.This configuration setting can be used to override the source MAC address when sending a packet.

NOTE: This configuration setting is available only in Windows and requires that the winpcap library be installed (or npcap with winpcap compatibility).

**UseConnection**: Determines whether to use a connected socket.[UseConnection](#UseConnection) specifies whether or not the component should use a connected socket. The connection is defined as an association in between the local address/port and the remote address/port. As such, this is not a connection in the traditional Transmission Control Protocol (TCP) sense. It means only that the component will send and receive data to and from the specified destination.

The default value for this setting is False.

**UseIPv6**: Whether or not to use IPv6.By default, the component expects an IPv4 address for local and remote host properties, and it will create an IPv4 socket. To use IPv6 instead, set this to True.

### Socket Config Settings

**AbsoluteTimeout**: Determines whether timeouts are inactivity timeouts or absolute timeouts.If [AbsoluteTimeout](#AbsoluteTimeout) is set to True, any method that does not complete within Timeout seconds will be aborted. By default, *AbsoluteTimeout* is False, and the timeout is an inactivity timeout.

NOTE: This option is not valid for User Datagram Protocol (UDP) ports.

 Determines whether timeouts are inactivity timeouts or absolute timeouts.If [AbsoluteTimeout](#AbsoluteTimeout) is set to True, any method that does not complete within Timeout seconds will be aborted. By default, *AbsoluteTimeout* is False, and the timeout is an inactivity timeout.

NOTE: This option is not valid for User Datagram Protocol (UDP) ports.

**AbsoluteTimeout**: Determines whether timeouts are inactivity timeouts or absolute timeouts.If [AbsoluteTimeout](#AbsoluteTimeout) is set to True, any method that does not complete within Timeout seconds will be aborted. By default, *AbsoluteTimeout* is False, and the timeout is an inactivity timeout.

NOTE: This option is not valid for User Datagram Protocol (UDP) ports.

 Determines whether timeouts are inactivity timeouts or absolute timeouts.If [AbsoluteTimeout](#AbsoluteTimeout) is set to True, any method that does not complete within Timeout seconds will be aborted. By default, *AbsoluteTimeout* is False, and the timeout is an inactivity timeout.

NOTE: This option is not valid for User Datagram Protocol (UDP) ports.

**FirewallData**: Used to send extra data to the firewall.When the firewall is a tunneling proxy, use this property to send custom (additional) headers to the firewall (e.g., headers for custom authentication schemes). Used to send extra data to the firewall.When the firewall is a tunneling proxy, use this property to send custom (additional) headers to the firewall (e.g., headers for custom authentication schemes).

**FirewallData**: Used to send extra data to the firewall.When the firewall is a tunneling proxy, use this property to send custom (additional) headers to the firewall (e.g., headers for custom authentication schemes). Used to send extra data to the firewall.When the firewall is a tunneling proxy, use this property to send custom (additional) headers to the firewall (e.g., headers for custom authentication schemes).

**InBufferSize**: The size in bytes of the incoming queue of the socket.This is the size of an internal queue in the Transmission Control Protocol (TCP)/IP stack. You can increase or decrease its size depending on the amount of data that you will be receiving. In some cases, increasing the value of the *InBufferSize* setting can provide significant improvements in performance.

Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when the component is activated the *InBufferSize* reverts to its defined size. The same happens if you attempt to make it too large or too small.

 The size in bytes of the incoming queue of the socket.This is the size of an internal queue in the Transmission Control Protocol (TCP)/IP stack. You can increase or decrease its size depending on the amount of data that you will be receiving. In some cases, increasing the value of the *InBufferSize* setting can provide significant improvements in performance.

Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when the component is activated the *InBufferSize* reverts to its defined size. The same happens if you attempt to make it too large or too small.

**InBufferSize**: The size in bytes of the incoming queue of the socket.This is the size of an internal queue in the Transmission Control Protocol (TCP)/IP stack. You can increase or decrease its size depending on the amount of data that you will be receiving. In some cases, increasing the value of the *InBufferSize* setting can provide significant improvements in performance.

Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when the component is activated the *InBufferSize* reverts to its defined size. The same happens if you attempt to make it too large or too small.

 The size in bytes of the incoming queue of the socket.This is the size of an internal queue in the Transmission Control Protocol (TCP)/IP stack. You can increase or decrease its size depending on the amount of data that you will be receiving. In some cases, increasing the value of the *InBufferSize* setting can provide significant improvements in performance.

Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when the component is activated the *InBufferSize* reverts to its defined size. The same happens if you attempt to make it too large or too small.

**OutBufferSize**: The size in bytes of the outgoing queue of the socket.This is the size of an internal queue in the TCP/IP stack. You can increase or decrease its size depending on the amount of data that you will be sending. In some cases, increasing the value of the *OutBufferSize* setting can provide significant improvements in performance.

Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when the component is activated the *OutBufferSize* reverts to its defined size. The same happens if you attempt to make it too large or too small.

 The size in bytes of the outgoing queue of the socket.This is the size of an internal queue in the TCP/IP stack. You can increase or decrease its size depending on the amount of data that you will be sending. In some cases, increasing the value of the *OutBufferSize* setting can provide significant improvements in performance.

Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when the component is activated the *OutBufferSize* reverts to its defined size. The same happens if you attempt to make it too large or too small.

**OutBufferSize**: The size in bytes of the outgoing queue of the socket.This is the size of an internal queue in the TCP/IP stack. You can increase or decrease its size depending on the amount of data that you will be sending. In some cases, increasing the value of the *OutBufferSize* setting can provide significant improvements in performance.

Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when the component is activated the *OutBufferSize* reverts to its defined size. The same happens if you attempt to make it too large or too small.

 The size in bytes of the outgoing queue of the socket.This is the size of an internal queue in the TCP/IP stack. You can increase or decrease its size depending on the amount of data that you will be sending. In some cases, increasing the value of the *OutBufferSize* setting can provide significant improvements in performance.

Some TCP/IP implementations do not support variable buffer sizes. If that is the case, when the component is activated the *OutBufferSize* reverts to its defined size. The same happens if you attempt to make it too large or too small.

### TCPClient Config Settings

**ConnectionTimeout**: Sets a separate timeout value for establishing a connection.When set, this configuration setting allows you to specify a different timeout value for establishing a connection. Otherwise, the component will use Timeout for establishing a connection and transmitting/receiving data.

**EnableFallback**: Whether to try the other addresses the remote host resolves to when a connection attempt fails.When set to True and RemoteHost resolves to more than one address, the component will try the remaining addresses in turn if the connection to the first one fails, and only raises an exception once every address has been tried. The error reported is the one from the last attempt. Use [FallbackTimeout](#FallbackTimeout) to limit the total time spent.

NOTE: Only addresses of the same IP version as the first one are tried, this setting does not fall back from IPv6 to IPv4. Selecting between IPv6 and IPv4 is done by [UseIPv6](#UseIPv6) when the host is resolved.

This setting must be set before the connection is established. The default value for this setting is False.

**FallbackTimeout**: The maximum time in milliseconds to spend on connection attempts when EnableFallback is enabled.This setting limits the total time that the component will spend on all of the connection attempts made when [EnableFallback](#EnableFallback) is enabled. The default value is 0, in which case each attempt uses the operating system's own connection timeout.

NOTE: This setting only applies when [EnableFallback](#EnableFallback) is True. It is unrelated to [ConnectionTimeout](#ConnectionTimeout), which is specified in seconds and applies to the Connected operation as a whole.

**FirewallAutoDetect**: Tells the component whether or not to automatically detect and use firewall system settings, if available.This configuration setting is provided for use by components that do not directly expose Firewall properties.

**FirewallHost**: Name or IP address of firewall (optional).If a [FirewallHost](#FirewallHost) is given, requested connections will be authenticated through the specified firewall when connecting.

If the [FirewallHost](#FirewallHost) setting is set to a Domain Name, a DNS request is initiated. Upon successful termination of the request, the [FirewallHost](#FirewallHost) setting is set to the corresponding address. If the search is not successful, an error is returned.

NOTE: This setting is provided for use by components that do not directly expose Firewall properties.

**FirewallHTTPVersion**: The HTTP version to be used when connecting through a tunneling proxy.When [FirewallType](#FirewallType) is set to a tunneling proxy, this setting dictates which HTTP version is used when connecting.

**FirewallPassword**: Password to be used if authentication is to be used when connecting through the firewall.If [FirewallHost](#FirewallHost) is specified, the [FirewallUser](#FirewallUser) and [FirewallPassword](#FirewallPassword) settings are used to connect and authenticate to the given firewall. If the authentication fails, the component raises an exception.

NOTE: This setting is provided for use by components that do not directly expose Firewall properties.

**FirewallPort**: The TCP port for the FirewallHost;.The [FirewallPort](#FirewallPort) is set automatically when [FirewallType](#FirewallType) is set to a valid value.

NOTE: This configuration setting is provided for use by components that do not directly expose Firewall properties.

**FirewallTunnelAuthScheme**: This configuration setting specifies the authentication mechanism to use when authenticating to a tunneling proxy.Possible values are as follows:

|  |  |
| --- | --- |
| 1 | AuthDigest |
| 3 | AuthNone |
| 4 | AuthNTLM |
| 5 | AuthNegotiate |

**FirewallType**: Determines the type of firewall to connect through.Possible values are as follows:

|  |  |
| --- | --- |
| 0 | No firewall (default setting). |
| 1 | Connect through a tunneling proxy. [FirewallPort](#FirewallPort) is set to 80. |
| 2 | Connect through a SOCKS4 Proxy. [FirewallPort](#FirewallPort) is set to 1080. |
| 3 | Connect through a SOCKS5 Proxy. [FirewallPort](#FirewallPort) is set to 1080. |
| 10 | Connect through a SOCKS4A Proxy. [FirewallPort](#FirewallPort) is set to 1080. |

NOTE: This setting is provided for use by components that do not directly expose Firewall properties.

**FirewallUser**: A user name if authentication is to be used connecting through a firewall.If the [FirewallHost](#FirewallHost) is specified, the [FirewallUser](#FirewallUser) and [FirewallPassword](#FirewallPassword) settings are used to connect and authenticate to the Firewall. If the authentication fails, the component raises an exception.

NOTE: This setting is provided for use by components that do not directly expose Firewall properties.

**KeepAliveInterval**: The retry interval, in milliseconds, to be used when a TCP keep-alive packet is sent and no response is received.When set, [TCPKeepAlive](#TCPKeepAlive) will automatically be set to True. A TCP keep-alive packet will be sent after a period of inactivity as defined by [KeepAliveTime](#KeepAliveTime). If no acknowledgment is received from the remote host, the keep-alive packet will be sent again. This configuration setting specifies the interval at which the successive keep-alive packets are sent in milliseconds. This system default if this value is not specified here is 1 second.

NOTE: This value is not applicable in macOS.

**KeepAliveTime**: The inactivity time in milliseconds before a TCP keep-alive packet is sent.When set, [TCPKeepAlive](#TCPKeepAlive) will automatically be set to True. By default, the operating system will determine the time a connection is idle before a Transmission Control Protocol (TCP) keep-alive packet is sent. This system default if this value is not specified here is 2 hours. In many cases, a shorter interval is more useful. Set this value to the desired interval in milliseconds.

**Linger**: When set to True, connections are terminated gracefully.This property controls how a connection is closed. The default is True.

In the case that Linger is True (default), two scenarios determine how long the connection will linger. In the first, if [LingerTime](#LingerTime) is 0 (default), the system will attempt to send pending data for a connection until the default IP timeout expires.

In the second scenario, if [LingerTime](#LingerTime) is a positive value, the system will attempt to send pending data until the specified [LingerTime](#LingerTime) is reached. If this attempt fails, then the system will reset the connection.

The default behavior (which is also the default mode for stream sockets) might result in a long delay in closing the connection. Although the component returns control immediately, the system could hold system resources until all pending data are sent (even after your application closes).

Setting this property to False forces an immediate disconnection. If you know that the other side has received all the data you sent (e.g., by a client acknowledgment), setting this property to False might be the appropriate course of action.

**LingerTime**: Time in seconds to have the connection linger. LingerTime is the time, in seconds, the socket connection will linger. This value is 0 by default, which means it will use the default IP timeout.

**LocalHost**: The name of the local host through which connections are initiated or accepted. The [LocalHost](#localhost-property-ivr-component) setting contains the name of the local host as obtained by the *gethostname()* system call, or if the user has assigned an IP address, the value of that address.

In multihomed hosts (machines with more than one IP interface), setting LocalHost to the value of an interface will make the component initiate connections (or accept in the case of server components) only through that interface.

If the component is connected, the [LocalHost](#localhost-property-ivr-component) setting shows the IP address of the interface through which the connection is made in internet dotted format (aaa.bbb.ccc.ddd). In most cases, this is the address of the local host, except for multihomed hosts (machines with more than one IP interface).

**LocalPort**: The port in the local host where the component binds. This configuration setting must be set before a connection is attempted. It instructs the component to bind to a specific port (or communication endpoint) in the local machine.

Setting this to 0 (default) enables the system to choose a port at random. The chosen port will be shown by [LocalPort](#localport-property-ivr-component) after the connection is established.

[LocalPort](#localport-property-ivr-component) cannot be changed once a connection is made. Any attempt to set this when a connection is active will generate an error.

This configuration setting is useful when trying to connect to services that require a trusted port on the client side. An example is the remote shell (rsh) service in UNIX systems.

**MaxLineLength**: The maximum amount of data to accumulate when no EOL is found.[MaxLineLength](#MaxLineLength) is the size of an internal buffer, which holds received data while waiting for an EOL string.

If an EOL string is found in the input stream before [MaxLineLength](#MaxLineLength) bytes are received, the DataIn event is fired with the *EOL* parameter set to True, and the buffer is reset.

If no EOL is found, and [MaxLineLength](#MaxLineLength) bytes are accumulated in the buffer, the DataIn event is fired with the *EOL* parameter set to False, and the buffer is reset.

The minimum value for [MaxLineLength](#MaxLineLength) is 256 bytes. The default value is 2048 bytes.

**MaxTransferRate**: The transfer rate limit in bytes per second.This configuration setting can be used to throttle outbound TCP traffic. Set this to the number of bytes to be sent per second. By default, this is not set and there is no limit.

**ProxyExceptionsList**: A semicolon separated list of hosts and IPs to bypass when using a proxy.This configuration setting optionally specifies a semicolon-separated list of hostnames or IP addresses to bypass when a proxy is in use. When requests are made to hosts specified in this property, the proxy will not be used. For instance:

*www.google.com;www.example.com*

**TCPKeepAlive**: Determines whether or not the keep alive socket option is enabled.If set to True, the socket's keep-alive option is enabled and keep-alive packets will be sent periodically to maintain the connection. Set [KeepAliveTime](#KeepAliveTime) and [KeepAliveInterval](#KeepAliveInterval) to configure the timing of the keep-alive packets.

NOTE: This value is not applicable in Java.

**TcpNoDelay**: Whether or not to delay when sending packets. When set to True, the socket will send all data that are ready to send at once. When set to False, the socket will send smaller buffered packets of data at small intervals. This is known as the Nagle algorithm.

By default, this configuration setting is set to False.

**UseIPv6**: Whether to use IPv6.When set to *0* (default), the component will use IPv4 exclusively. When set to *1*, the component will use IPv6 exclusively. To instruct the component to prefer IPv6 addresses, but use IPv4 if IPv6 is not supported on the system, this setting should be set to *2*. The default value is *0*. Possible values are as follows:

|  |  |
| --- | --- |
| 0 | IPv4 only |
| 1 | IPv6 only |
| 2 | IPv6 with IPv4 fallback |

**UseNTLMv2**: Whether to use NTLM V2.When authenticating with NTLM, this setting specifies whether NTLM V2 is used. By default this value is True and NTLM V2 will be used. Set this to False to use NTLM V1.

### SSL Config Settings

**LogSSLPackets**: Controls whether SSL packets are logged when using the internal security API.When SSLProvider is set to *Internal*, this configuration setting controls whether Secure Sockets Layer (SSL) packets should be logged. By default, this configuration setting is *False*, as it is useful only for debugging purposes.

When enabled, SSL packet logs are output using the [SSLStatus](#sslstatus-event-ivr-component) event, which will fire each time an SSL packet is sent or received.

Enabling this configuration setting has no effect if SSLProvider is set to *Platform*.

 Controls whether SSL packets are logged when using the internal security API.When SSLProvider is set to *Internal*, this configuration setting controls whether Secure Sockets Layer (SSL) packets should be logged. By default, this configuration setting is *False*, as it is useful only for debugging purposes.

When enabled, SSL packet logs are output using the [SSLStatus](#sslstatus-event-ivr-component) event, which will fire each time an SSL packet is sent or received.

Enabling this configuration setting has no effect if SSLProvider is set to *Platform*.

**LogSSLPackets**: Controls whether SSL packets are logged when using the internal security API.When SSLProvider is set to *Internal*, this configuration setting controls whether Secure Sockets Layer (SSL) packets should be logged. By default, this configuration setting is *False*, as it is useful only for debugging purposes.

When enabled, SSL packet logs are output using the [SSLStatus](#sslstatus-event-ivr-component) event, which will fire each time an SSL packet is sent or received.

Enabling this configuration setting has no effect if SSLProvider is set to *Platform*.

 Controls whether SSL packets are logged when using the internal security API.When SSLProvider is set to *Internal*, this configuration setting controls whether Secure Sockets Layer (SSL) packets should be logged. By default, this configuration setting is *False*, as it is useful only for debugging purposes.

When enabled, SSL packet logs are output using the [SSLStatus](#sslstatus-event-ivr-component) event, which will fire each time an SSL packet is sent or received.

Enabling this configuration setting has no effect if SSLProvider is set to *Platform*.

**OpenSSLCADir**: The path to a directory containing CA certificates.This functionality is available only when the provider is OpenSSL.

The path set by this property should point to a directory containing CA certificates in PEM format. The files each contain one CA certificate. The files are looked up by the CA subject name hash value, which must hence be available. If more than one CA certificate with the same name hash value exist, the extension must be different (e.g., 9d66eef0.0, 9d66eef0.1). OpenSSL recommends the use of the c_rehash utility to create the necessary links. Please refer to the OpenSSL man page SSL_CTX_load_verify_locations(3) for details.

 The path to a directory containing CA certificates.This functionality is available only when the provider is OpenSSL.

The path set by this property should point to a directory containing CA certificates in PEM format. The files each contain one CA certificate. The files are looked up by the CA subject name hash value, which must hence be available. If more than one CA certificate with the same name hash value exist, the extension must be different (e.g., 9d66eef0.0, 9d66eef0.1). OpenSSL recommends the use of the c_rehash utility to create the necessary links. Please refer to the OpenSSL man page SSL_CTX_load_verify_locations(3) for details.

**OpenSSLCADir**: The path to a directory containing CA certificates.This functionality is available only when the provider is OpenSSL.

The path set by this property should point to a directory containing CA certificates in PEM format. The files each contain one CA certificate. The files are looked up by the CA subject name hash value, which must hence be available. If more than one CA certificate with the same name hash value exist, the extension must be different (e.g., 9d66eef0.0, 9d66eef0.1). OpenSSL recommends the use of the c_rehash utility to create the necessary links. Please refer to the OpenSSL man page SSL_CTX_load_verify_locations(3) for details.

 The path to a directory containing CA certificates.This functionality is available only when the provider is OpenSSL.

The path set by this property should point to a directory containing CA certificates in PEM format. The files each contain one CA certificate. The files are looked up by the CA subject name hash value, which must hence be available. If more than one CA certificate with the same name hash value exist, the extension must be different (e.g., 9d66eef0.0, 9d66eef0.1). OpenSSL recommends the use of the c_rehash utility to create the necessary links. Please refer to the OpenSSL man page SSL_CTX_load_verify_locations(3) for details.

**OpenSSLCAFile**: Name of the file containing the list of CA's trusted by your application.This functionality is available only when the provider is OpenSSL.

The file set by this property should contain a list of CA certificates in PEM format. The file can contain several CA certificates identified by the following sequences:

 -----BEGIN CERTIFICATE-----

 ... (CA certificate in base64 encoding) ...

 -----END CERTIFICATE-----

 Before, between, and after the certificate text is allowed, which can be used, for example, for descriptions of the certificates. Refer to the OpenSSL man page SSL_CTX_load_verify_locations(3) for details.

 Name of the file containing the list of CA's trusted by your application.This functionality is available only when the provider is OpenSSL.

The file set by this property should contain a list of CA certificates in PEM format. The file can contain several CA certificates identified by the following sequences:

 -----BEGIN CERTIFICATE-----

 ... (CA certificate in base64 encoding) ...

 -----END CERTIFICATE-----

 Before, between, and after the certificate text is allowed, which can be used, for example, for descriptions of the certificates. Refer to the OpenSSL man page SSL_CTX_load_verify_locations(3) for details.

**OpenSSLCAFile**: Name of the file containing the list of CA's trusted by your application.This functionality is available only when the provider is OpenSSL.

The file set by this property should contain a list of CA certificates in PEM format. The file can contain several CA certificates identified by the following sequences:

 -----BEGIN CERTIFICATE-----

 ... (CA certificate in base64 encoding) ...

 -----END CERTIFICATE-----

 Before, between, and after the certificate text is allowed, which can be used, for example, for descriptions of the certificates. Refer to the OpenSSL man page SSL_CTX_load_verify_locations(3) for details.

 Name of the file containing the list of CA's trusted by your application.This functionality is available only when the provider is OpenSSL.

The file set by this property should contain a list of CA certificates in PEM format. The file can contain several CA certificates identified by the following sequences:

 -----BEGIN CERTIFICATE-----

 ... (CA certificate in base64 encoding) ...

 -----END CERTIFICATE-----

 Before, between, and after the certificate text is allowed, which can be used, for example, for descriptions of the certificates. Refer to the OpenSSL man page SSL_CTX_load_verify_locations(3) for details.

**OpenSSLCipherList**: A string that controls the ciphers to be used by SSL.This functionality is available only when the provider is OpenSSL.

The format of this string is described in the OpenSSL man page ciphers(1) section "CIPHER LIST FORMAT". Please refer to it for details. The default string "DEFAULT" is determined at compile time and is normally equivalent to "ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH".

 A string that controls the ciphers to be used by SSL.This functionality is available only when the provider is OpenSSL.

The format of this string is described in the OpenSSL man page ciphers(1) section "CIPHER LIST FORMAT". Please refer to it for details. The default string "DEFAULT" is determined at compile time and is normally equivalent to "ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH".

**OpenSSLCipherList**: A string that controls the ciphers to be used by SSL.This functionality is available only when the provider is OpenSSL.

The format of this string is described in the OpenSSL man page ciphers(1) section "CIPHER LIST FORMAT". Please refer to it for details. The default string "DEFAULT" is determined at compile time and is normally equivalent to "ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH".

 A string that controls the ciphers to be used by SSL.This functionality is available only when the provider is OpenSSL.

The format of this string is described in the OpenSSL man page ciphers(1) section "CIPHER LIST FORMAT". Please refer to it for details. The default string "DEFAULT" is determined at compile time and is normally equivalent to "ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH".

**OpenSSLPrngSeedData**: The data to seed the pseudo random number generator (PRNG).This functionality is available only when the provider is OpenSSL.

By default, OpenSSL uses the device file "/dev/urandom" to seed the PRNG, and setting OpenSSLPrngSeedData is not required. If set, the string specified is used to seed the PRNG.

 The data to seed the pseudo random number generator (PRNG).This functionality is available only when the provider is OpenSSL.

By default, OpenSSL uses the device file "/dev/urandom" to seed the PRNG, and setting OpenSSLPrngSeedData is not required. If set, the string specified is used to seed the PRNG.

**OpenSSLPrngSeedData**: The data to seed the pseudo random number generator (PRNG).This functionality is available only when the provider is OpenSSL.

By default, OpenSSL uses the device file "/dev/urandom" to seed the PRNG, and setting OpenSSLPrngSeedData is not required. If set, the string specified is used to seed the PRNG.

 The data to seed the pseudo random number generator (PRNG).This functionality is available only when the provider is OpenSSL.

By default, OpenSSL uses the device file "/dev/urandom" to seed the PRNG, and setting OpenSSLPrngSeedData is not required. If set, the string specified is used to seed the PRNG.

**ReuseSSLSession**: Determines if the SSL session is reused.

If set to True, the component will reuse the context if and only if the following criteria are met:

- The target host name is the same.
- The system cache entry has not expired (default timeout is 10 hours).
- The application process that calls the function is the same.
- The logon session is the same.
- The instance of the component is the same.

 Determines if the SSL session is reused.

If set to True, the component will reuse the context if and only if the following criteria are met:

- The target host name is the same.
- The system cache entry has not expired (default timeout is 10 hours).
- The application process that calls the function is the same.
- The logon session is the same.
- The instance of the component is the same.

**ReuseSSLSession**: Determines if the SSL session is reused.

If set to True, the component will reuse the context if and only if the following criteria are met:

- The target host name is the same.
- The system cache entry has not expired (default timeout is 10 hours).
- The application process that calls the function is the same.
- The logon session is the same.
- The instance of the component is the same.

 Determines if the SSL session is reused.

If set to True, the component will reuse the context if and only if the following criteria are met:

- The target host name is the same.
- The system cache entry has not expired (default timeout is 10 hours).
- The application process that calls the function is the same.
- The logon session is the same.
- The instance of the component is the same.

**SSLCACertFilePaths**: The paths to CA certificate files on Unix/Linux.This configuration setting specifies the paths on disk to CA certificate files on Unix/Linux.

The value is formatted as a list of paths separated by semicolons. The component will check for the existence of each file in the order specified. When a file is found, the CA certificates within the file will be loaded and used to determine the validity of server or client certificates.

The default value is as follows:

*/etc/ssl/ca-bundle.pem;/etc/pki/tls/certs/ca-bundle.crt;/etc/ssl/certs/ca-certificates.crt;/etc/pki/tls/cacert.pem*

 The paths to CA certificate files on Unix/Linux.This configuration setting specifies the paths on disk to CA certificate files on Unix/Linux.

The value is formatted as a list of paths separated by semicolons. The component will check for the existence of each file in the order specified. When a file is found, the CA certificates within the file will be loaded and used to determine the validity of server or client certificates.

The default value is as follows:

*/etc/ssl/ca-bundle.pem;/etc/pki/tls/certs/ca-bundle.crt;/etc/ssl/certs/ca-certificates.crt;/etc/pki/tls/cacert.pem*

**SSLCACertFilePaths**: The paths to CA certificate files on Unix/Linux.This configuration setting specifies the paths on disk to CA certificate files on Unix/Linux.

The value is formatted as a list of paths separated by semicolons. The component will check for the existence of each file in the order specified. When a file is found, the CA certificates within the file will be loaded and used to determine the validity of server or client certificates.

The default value is as follows:

*/etc/ssl/ca-bundle.pem;/etc/pki/tls/certs/ca-bundle.crt;/etc/ssl/certs/ca-certificates.crt;/etc/pki/tls/cacert.pem*

 The paths to CA certificate files on Unix/Linux.This configuration setting specifies the paths on disk to CA certificate files on Unix/Linux.

The value is formatted as a list of paths separated by semicolons. The component will check for the existence of each file in the order specified. When a file is found, the CA certificates within the file will be loaded and used to determine the validity of server or client certificates.

The default value is as follows:

*/etc/ssl/ca-bundle.pem;/etc/pki/tls/certs/ca-bundle.crt;/etc/ssl/certs/ca-certificates.crt;/etc/pki/tls/cacert.pem*

**SSLCACerts**: A newline separated list of CA certificates to be included when performing an SSL handshake.When SSLProvider is set to *Internal*, this configuration setting specifies one or more CA certificates to be included with the SSLCert property. Some servers or clients require the entire chain, including CA certificates, to be presented when performing SSL authentication. The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert ...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert ...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

 A newline separated list of CA certificates to be included when performing an SSL handshake.When SSLProvider is set to *Internal*, this configuration setting specifies one or more CA certificates to be included with the SSLCert property. Some servers or clients require the entire chain, including CA certificates, to be presented when performing SSL authentication. The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert ...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert ...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

**SSLCACerts**: A newline separated list of CA certificates to be included when performing an SSL handshake.When SSLProvider is set to *Internal*, this configuration setting specifies one or more CA certificates to be included with the SSLCert property. Some servers or clients require the entire chain, including CA certificates, to be presented when performing SSL authentication. The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert ...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert ...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

 A newline separated list of CA certificates to be included when performing an SSL handshake.When SSLProvider is set to *Internal*, this configuration setting specifies one or more CA certificates to be included with the SSLCert property. Some servers or clients require the entire chain, including CA certificates, to be presented when performing SSL authentication. The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert ...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert ...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

**SSLCheckCRL**: Whether to check the Certificate Revocation List for the server certificate.This configuration setting specifies whether the component will check the Certificate Revocation List (CRL) specified by the server certificate. If set to 1 or 2, the component will first obtain the list of CRL URLs from the server certificate's CRL distribution points extension. The component will then make HTTP requests to each CRL endpoint to check the validity of the server's certificate. If the certificate has been revoked or any other issues are found during validation the component raises an exception.

When set to 0 (default), the CRL check will not be performed by the component. When set to 1, it will attempt to perform the CRL check, but it will continue without an error if the server's certificate does not support CRL. When set to 2, it will perform the CRL check and will throw an error if CRL is not supported.

This configuration setting is supported only in the Java, C#, and C++ editions. In the C++ edition, it is supported only on Windows operating systems.

 Whether to check the Certificate Revocation List for the server certificate.This configuration setting specifies whether the component will check the Certificate Revocation List (CRL) specified by the server certificate. If set to 1 or 2, the component will first obtain the list of CRL URLs from the server certificate's CRL distribution points extension. The component will then make HTTP requests to each CRL endpoint to check the validity of the server's certificate. If the certificate has been revoked or any other issues are found during validation the component raises an exception.

When set to 0 (default), the CRL check will not be performed by the component. When set to 1, it will attempt to perform the CRL check, but it will continue without an error if the server's certificate does not support CRL. When set to 2, it will perform the CRL check and will throw an error if CRL is not supported.

This configuration setting is supported only in the Java, C#, and C++ editions. In the C++ edition, it is supported only on Windows operating systems.

**SSLCheckCRL**: Whether to check the Certificate Revocation List for the server certificate.This configuration setting specifies whether the component will check the Certificate Revocation List (CRL) specified by the server certificate. If set to 1 or 2, the component will first obtain the list of CRL URLs from the server certificate's CRL distribution points extension. The component will then make HTTP requests to each CRL endpoint to check the validity of the server's certificate. If the certificate has been revoked or any other issues are found during validation the component raises an exception.

When set to 0 (default), the CRL check will not be performed by the component. When set to 1, it will attempt to perform the CRL check, but it will continue without an error if the server's certificate does not support CRL. When set to 2, it will perform the CRL check and will throw an error if CRL is not supported.

This configuration setting is supported only in the Java, C#, and C++ editions. In the C++ edition, it is supported only on Windows operating systems.

 Whether to check the Certificate Revocation List for the server certificate.This configuration setting specifies whether the component will check the Certificate Revocation List (CRL) specified by the server certificate. If set to 1 or 2, the component will first obtain the list of CRL URLs from the server certificate's CRL distribution points extension. The component will then make HTTP requests to each CRL endpoint to check the validity of the server's certificate. If the certificate has been revoked or any other issues are found during validation the component raises an exception.

When set to 0 (default), the CRL check will not be performed by the component. When set to 1, it will attempt to perform the CRL check, but it will continue without an error if the server's certificate does not support CRL. When set to 2, it will perform the CRL check and will throw an error if CRL is not supported.

This configuration setting is supported only in the Java, C#, and C++ editions. In the C++ edition, it is supported only on Windows operating systems.

**SSLCheckOCSP**: Whether to use OCSP to check the status of the server certificate.This configuration setting specifies whether the component will use OCSP to check the validity of the server certificate. If set to 1 or 2, the component will first obtain the Online Certificate Status Protocol (OCSP) URL from the server certificate's OCSP extension. The component will then locate the issuing certificate and make an HTTP request to the OCSP endpoint to check the validity of the server's certificate. If the certificate has been revoked or any other issues are found during validation, the component raises an exception.

When set to 0 (default), the component will not perform an OCSP check. When set to 1, it will attempt to perform the OCSP check, but it will continue without an error if the server's certificate does not support OCSP. When set to 2, it will perform the OCSP check and will throw an error if OCSP is not supported.

This configuration setting is supported only in the Java, C#, and C++ editions. In the C++ edition, it is supported only on Windows operating systems.

 Whether to use OCSP to check the status of the server certificate.This configuration setting specifies whether the component will use OCSP to check the validity of the server certificate. If set to 1 or 2, the component will first obtain the Online Certificate Status Protocol (OCSP) URL from the server certificate's OCSP extension. The component will then locate the issuing certificate and make an HTTP request to the OCSP endpoint to check the validity of the server's certificate. If the certificate has been revoked or any other issues are found during validation, the component raises an exception.

When set to 0 (default), the component will not perform an OCSP check. When set to 1, it will attempt to perform the OCSP check, but it will continue without an error if the server's certificate does not support OCSP. When set to 2, it will perform the OCSP check and will throw an error if OCSP is not supported.

This configuration setting is supported only in the Java, C#, and C++ editions. In the C++ edition, it is supported only on Windows operating systems.

**SSLCheckOCSP**: Whether to use OCSP to check the status of the server certificate.This configuration setting specifies whether the component will use OCSP to check the validity of the server certificate. If set to 1 or 2, the component will first obtain the Online Certificate Status Protocol (OCSP) URL from the server certificate's OCSP extension. The component will then locate the issuing certificate and make an HTTP request to the OCSP endpoint to check the validity of the server's certificate. If the certificate has been revoked or any other issues are found during validation, the component raises an exception.

When set to 0 (default), the component will not perform an OCSP check. When set to 1, it will attempt to perform the OCSP check, but it will continue without an error if the server's certificate does not support OCSP. When set to 2, it will perform the OCSP check and will throw an error if OCSP is not supported.

This configuration setting is supported only in the Java, C#, and C++ editions. In the C++ edition, it is supported only on Windows operating systems.

 Whether to use OCSP to check the status of the server certificate.This configuration setting specifies whether the component will use OCSP to check the validity of the server certificate. If set to 1 or 2, the component will first obtain the Online Certificate Status Protocol (OCSP) URL from the server certificate's OCSP extension. The component will then locate the issuing certificate and make an HTTP request to the OCSP endpoint to check the validity of the server's certificate. If the certificate has been revoked or any other issues are found during validation, the component raises an exception.

When set to 0 (default), the component will not perform an OCSP check. When set to 1, it will attempt to perform the OCSP check, but it will continue without an error if the server's certificate does not support OCSP. When set to 2, it will perform the OCSP check and will throw an error if OCSP is not supported.

This configuration setting is supported only in the Java, C#, and C++ editions. In the C++ edition, it is supported only on Windows operating systems.

**SSLCipherStrength**: The minimum cipher strength used for bulk encryption. This minimum cipher strength is largely dependent on the security modules installed on the system. If the cipher strength specified is not supported, an error will be returned when connections are initiated.

NOTE: This configuration setting contains the minimum cipher strength requested from the security library. The actual cipher strength used for the connection is shown by the [SSLStatus](#sslstatus-event-ivr-component) event.

Use this configuration setting with caution. Requesting a lower cipher strength than necessary could potentially cause serious security vulnerabilities in your application.

When the provider is OpenSSL, [SSLCipherStrength](#SSLCipherStrength) is currently not supported. This functionality is instead made available through the [OpenSSLCipherList](#OpenSSLCipherList) configuration setting.

 The minimum cipher strength used for bulk encryption. This minimum cipher strength is largely dependent on the security modules installed on the system. If the cipher strength specified is not supported, an error will be returned when connections are initiated.

NOTE: This configuration setting contains the minimum cipher strength requested from the security library. The actual cipher strength used for the connection is shown by the [SSLStatus](#sslstatus-event-ivr-component) event.

Use this configuration setting with caution. Requesting a lower cipher strength than necessary could potentially cause serious security vulnerabilities in your application.

When the provider is OpenSSL, [SSLCipherStrength](#SSLCipherStrength) is currently not supported. This functionality is instead made available through the [OpenSSLCipherList](#OpenSSLCipherList) configuration setting.

**SSLCipherStrength**: The minimum cipher strength used for bulk encryption. This minimum cipher strength is largely dependent on the security modules installed on the system. If the cipher strength specified is not supported, an error will be returned when connections are initiated.

NOTE: This configuration setting contains the minimum cipher strength requested from the security library. The actual cipher strength used for the connection is shown by the [SSLStatus](#sslstatus-event-ivr-component) event.

Use this configuration setting with caution. Requesting a lower cipher strength than necessary could potentially cause serious security vulnerabilities in your application.

When the provider is OpenSSL, [SSLCipherStrength](#SSLCipherStrength) is currently not supported. This functionality is instead made available through the [OpenSSLCipherList](#OpenSSLCipherList) configuration setting.

 The minimum cipher strength used for bulk encryption. This minimum cipher strength is largely dependent on the security modules installed on the system. If the cipher strength specified is not supported, an error will be returned when connections are initiated.

NOTE: This configuration setting contains the minimum cipher strength requested from the security library. The actual cipher strength used for the connection is shown by the [SSLStatus](#sslstatus-event-ivr-component) event.

Use this configuration setting with caution. Requesting a lower cipher strength than necessary could potentially cause serious security vulnerabilities in your application.

When the provider is OpenSSL, [SSLCipherStrength](#SSLCipherStrength) is currently not supported. This functionality is instead made available through the [OpenSSLCipherList](#OpenSSLCipherList) configuration setting.

**SSLClientCACerts**: A newline separated list of CA certificates to use during SSL client certificate validation.This configuration setting is only applicable to server components (e.g., TCPServer) see [SSLServerCACerts](#SSLServerCACerts) for client components (e.g., TCPClient). This setting can be used to optionally specify one or more CA certificates to be used when verifying the client certificate that is presented by the client during the SSL handshake when SSLAuthenticateClients is enabled. When verifying the client's certificate, the certificates trusted by the system will be used as part of the verification process. If the client's CA certificates are not installed to the trusted system store, they may be specified here so they are included when performing the verification process. This configuration setting should be set only if the client's CA certificates are not already trusted on the system and cannot be installed to the trusted system store.

The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert ...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert ...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

 A newline separated list of CA certificates to use during SSL client certificate validation.This configuration setting is only applicable to server components (e.g., TCPServer) see [SSLServerCACerts](#SSLServerCACerts) for client components (e.g., TCPClient). This setting can be used to optionally specify one or more CA certificates to be used when verifying the client certificate that is presented by the client during the SSL handshake when SSLAuthenticateClients is enabled. When verifying the client's certificate, the certificates trusted by the system will be used as part of the verification process. If the client's CA certificates are not installed to the trusted system store, they may be specified here so they are included when performing the verification process. This configuration setting should be set only if the client's CA certificates are not already trusted on the system and cannot be installed to the trusted system store.

The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert ...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert ...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

**SSLClientCACerts**: A newline separated list of CA certificates to use during SSL client certificate validation.This configuration setting is only applicable to server components (e.g., TCPServer) see [SSLServerCACerts](#SSLServerCACerts) for client components (e.g., TCPClient). This setting can be used to optionally specify one or more CA certificates to be used when verifying the client certificate that is presented by the client during the SSL handshake when SSLAuthenticateClients is enabled. When verifying the client's certificate, the certificates trusted by the system will be used as part of the verification process. If the client's CA certificates are not installed to the trusted system store, they may be specified here so they are included when performing the verification process. This configuration setting should be set only if the client's CA certificates are not already trusted on the system and cannot be installed to the trusted system store.

The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert ...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert ...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

 A newline separated list of CA certificates to use during SSL client certificate validation.This configuration setting is only applicable to server components (e.g., TCPServer) see [SSLServerCACerts](#SSLServerCACerts) for client components (e.g., TCPClient). This setting can be used to optionally specify one or more CA certificates to be used when verifying the client certificate that is presented by the client during the SSL handshake when SSLAuthenticateClients is enabled. When verifying the client's certificate, the certificates trusted by the system will be used as part of the verification process. If the client's CA certificates are not installed to the trusted system store, they may be specified here so they are included when performing the verification process. This configuration setting should be set only if the client's CA certificates are not already trusted on the system and cannot be installed to the trusted system store.

The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert ...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert ...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

**SSLEnabledCipherSuites**: The cipher suite to be used in an SSL negotiation.This configuration setting enables the cipher suites to be used in SSL negotiation.

By default, the enabled cipher suites will include all available ciphers ("*").

The special value "*" means that the component will pick all of the supported cipher suites. If [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) is set to any other value, only the specified cipher suites will be considered.

Multiple cipher suites are separated by semicolons.

Example values when SSLProvider is set to *Platform* include the following:

```text
obj.config("SSLEnabledCipherSuites=*");
obj.config("SSLEnabledCipherSuites=CALG_AES_256");
obj.config("SSLEnabledCipherSuites=CALG_AES_256;CALG_3DES");
```

 Possible values when SSLProvider is set to *Platform* include the following:

- CALG_3DES
- CALG_3DES_112
- CALG_AES
- CALG_AES_128
- CALG_AES_192
- CALG_AES_256
- CALG_AGREEDKEY_ANY
- CALG_CYLINK_MEK
- CALG_DES
- CALG_DESX
- CALG_DH_EPHEM
- CALG_DH_SF
- CALG_DSS_SIGN
- CALG_ECDH
- CALG_ECDH_EPHEM
- CALG_ECDSA
- CALG_ECMQV
- CALG_HASH_REPLACE_OWF
- CALG_HUGHES_MD5
- CALG_HMAC
- CALG_KEA_KEYX
- CALG_MAC
- CALG_MD2
- CALG_MD4
- CALG_MD5
- CALG_NO_SIGN
- CALG_OID_INFO_CNG_ONLY
- CALG_OID_INFO_PARAMETERS
- CALG_PCT1_MASTER
- CALG_RC2
- CALG_RC4
- CALG_RC5
- CALG_RSA_KEYX
- CALG_RSA_SIGN
- CALG_SCHANNEL_ENC_KEY
- CALG_SCHANNEL_MAC_KEY
- CALG_SCHANNEL_MASTER_HASH
- CALG_SEAL
- CALG_SHA
- CALG_SHA1
- CALG_SHA_256
- CALG_SHA_384
- CALG_SHA_512
- CALG_SKIPJACK
- CALG_SSL2_MASTER
- CALG_SSL3_MASTER
- CALG_SSL3_SHAMD5
- CALG_TEK
- CALG_TLS1_MASTER
- CALG_TLS1PRF

 Example values when SSLProvider is set to *Internal*include the following:

```text
obj.config("SSLEnabledCipherSuites=*");
obj.config("SSLEnabledCipherSuites=TLS_DHE_DSS_WITH_AES_128_CBC_SHA");
obj.config("SSLEnabledCipherSuites=TLS_DHE_DSS_WITH_AES_128_CBC_SHA;TLS_ECDH_RSA_WITH_AES_128_CBC_SHA");
```

 Possible values when SSLProvider is set to *Internal* include the following:

- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_DES_CBC_SHA
- TLS_DHE_RSA_WITH_DES_CBC_SHA
- TLS_DHE_DSS_WITH_DES_CBC_SHA
- TLS_RSA_WITH_RC4_128_MD5
- TLS_RSA_WITH_RC4_128_SHA

When TLS 1.3 is negotiated (see [SSLEnabledProtocols](#SSLEnabledProtocols)), only the following cipher suites are supported:

- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256

[SSLEnabledCipherSuites](#SSLEnabledCipherSuites) is used together with [SSLCipherStrength](#SSLCipherStrength).

 The cipher suite to be used in an SSL negotiation.This configuration setting enables the cipher suites to be used in SSL negotiation.

By default, the enabled cipher suites will include all available ciphers ("*").

The special value "*" means that the component will pick all of the supported cipher suites. If [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) is set to any other value, only the specified cipher suites will be considered.

Multiple cipher suites are separated by semicolons.

Example values when SSLProvider is set to *Platform* include the following:

```text
obj.config("SSLEnabledCipherSuites=*");
obj.config("SSLEnabledCipherSuites=CALG_AES_256");
obj.config("SSLEnabledCipherSuites=CALG_AES_256;CALG_3DES");
```

 Possible values when SSLProvider is set to *Platform* include the following:

- CALG_3DES
- CALG_3DES_112
- CALG_AES
- CALG_AES_128
- CALG_AES_192
- CALG_AES_256
- CALG_AGREEDKEY_ANY
- CALG_CYLINK_MEK
- CALG_DES
- CALG_DESX
- CALG_DH_EPHEM
- CALG_DH_SF
- CALG_DSS_SIGN
- CALG_ECDH
- CALG_ECDH_EPHEM
- CALG_ECDSA
- CALG_ECMQV
- CALG_HASH_REPLACE_OWF
- CALG_HUGHES_MD5
- CALG_HMAC
- CALG_KEA_KEYX
- CALG_MAC
- CALG_MD2
- CALG_MD4
- CALG_MD5
- CALG_NO_SIGN
- CALG_OID_INFO_CNG_ONLY
- CALG_OID_INFO_PARAMETERS
- CALG_PCT1_MASTER
- CALG_RC2
- CALG_RC4
- CALG_RC5
- CALG_RSA_KEYX
- CALG_RSA_SIGN
- CALG_SCHANNEL_ENC_KEY
- CALG_SCHANNEL_MAC_KEY
- CALG_SCHANNEL_MASTER_HASH
- CALG_SEAL
- CALG_SHA
- CALG_SHA1
- CALG_SHA_256
- CALG_SHA_384
- CALG_SHA_512
- CALG_SKIPJACK
- CALG_SSL2_MASTER
- CALG_SSL3_MASTER
- CALG_SSL3_SHAMD5
- CALG_TEK
- CALG_TLS1_MASTER
- CALG_TLS1PRF

 Example values when SSLProvider is set to *Internal*include the following:

```text
obj.config("SSLEnabledCipherSuites=*");
obj.config("SSLEnabledCipherSuites=TLS_DHE_DSS_WITH_AES_128_CBC_SHA");
obj.config("SSLEnabledCipherSuites=TLS_DHE_DSS_WITH_AES_128_CBC_SHA;TLS_ECDH_RSA_WITH_AES_128_CBC_SHA");
```

 Possible values when SSLProvider is set to *Internal* include the following:

- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_DES_CBC_SHA
- TLS_DHE_RSA_WITH_DES_CBC_SHA
- TLS_DHE_DSS_WITH_DES_CBC_SHA
- TLS_RSA_WITH_RC4_128_MD5
- TLS_RSA_WITH_RC4_128_SHA

When TLS 1.3 is negotiated (see [SSLEnabledProtocols](#SSLEnabledProtocols)), only the following cipher suites are supported:

- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256

[SSLEnabledCipherSuites](#SSLEnabledCipherSuites) is used together with [SSLCipherStrength](#SSLCipherStrength).

**SSLEnabledCipherSuites**: The cipher suite to be used in an SSL negotiation.This configuration setting enables the cipher suites to be used in SSL negotiation.

By default, the enabled cipher suites will include all available ciphers ("*").

The special value "*" means that the component will pick all of the supported cipher suites. If [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) is set to any other value, only the specified cipher suites will be considered.

Multiple cipher suites are separated by semicolons.

Example values when SSLProvider is set to *Platform* include the following:

```text
obj.config("SSLEnabledCipherSuites=*");
obj.config("SSLEnabledCipherSuites=CALG_AES_256");
obj.config("SSLEnabledCipherSuites=CALG_AES_256;CALG_3DES");
```

 Possible values when SSLProvider is set to *Platform* include the following:

- CALG_3DES
- CALG_3DES_112
- CALG_AES
- CALG_AES_128
- CALG_AES_192
- CALG_AES_256
- CALG_AGREEDKEY_ANY
- CALG_CYLINK_MEK
- CALG_DES
- CALG_DESX
- CALG_DH_EPHEM
- CALG_DH_SF
- CALG_DSS_SIGN
- CALG_ECDH
- CALG_ECDH_EPHEM
- CALG_ECDSA
- CALG_ECMQV
- CALG_HASH_REPLACE_OWF
- CALG_HUGHES_MD5
- CALG_HMAC
- CALG_KEA_KEYX
- CALG_MAC
- CALG_MD2
- CALG_MD4
- CALG_MD5
- CALG_NO_SIGN
- CALG_OID_INFO_CNG_ONLY
- CALG_OID_INFO_PARAMETERS
- CALG_PCT1_MASTER
- CALG_RC2
- CALG_RC4
- CALG_RC5
- CALG_RSA_KEYX
- CALG_RSA_SIGN
- CALG_SCHANNEL_ENC_KEY
- CALG_SCHANNEL_MAC_KEY
- CALG_SCHANNEL_MASTER_HASH
- CALG_SEAL
- CALG_SHA
- CALG_SHA1
- CALG_SHA_256
- CALG_SHA_384
- CALG_SHA_512
- CALG_SKIPJACK
- CALG_SSL2_MASTER
- CALG_SSL3_MASTER
- CALG_SSL3_SHAMD5
- CALG_TEK
- CALG_TLS1_MASTER
- CALG_TLS1PRF

 Example values when SSLProvider is set to *Internal*include the following:

```text
obj.config("SSLEnabledCipherSuites=*");
obj.config("SSLEnabledCipherSuites=TLS_DHE_DSS_WITH_AES_128_CBC_SHA");
obj.config("SSLEnabledCipherSuites=TLS_DHE_DSS_WITH_AES_128_CBC_SHA;TLS_ECDH_RSA_WITH_AES_128_CBC_SHA");
```

 Possible values when SSLProvider is set to *Internal* include the following:

- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_DES_CBC_SHA
- TLS_DHE_RSA_WITH_DES_CBC_SHA
- TLS_DHE_DSS_WITH_DES_CBC_SHA
- TLS_RSA_WITH_RC4_128_MD5
- TLS_RSA_WITH_RC4_128_SHA

When TLS 1.3 is negotiated (see [SSLEnabledProtocols](#SSLEnabledProtocols)), only the following cipher suites are supported:

- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256

[SSLEnabledCipherSuites](#SSLEnabledCipherSuites) is used together with [SSLCipherStrength](#SSLCipherStrength).

 The cipher suite to be used in an SSL negotiation.This configuration setting enables the cipher suites to be used in SSL negotiation.

By default, the enabled cipher suites will include all available ciphers ("*").

The special value "*" means that the component will pick all of the supported cipher suites. If [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) is set to any other value, only the specified cipher suites will be considered.

Multiple cipher suites are separated by semicolons.

Example values when SSLProvider is set to *Platform* include the following:

```text
obj.config("SSLEnabledCipherSuites=*");
obj.config("SSLEnabledCipherSuites=CALG_AES_256");
obj.config("SSLEnabledCipherSuites=CALG_AES_256;CALG_3DES");
```

 Possible values when SSLProvider is set to *Platform* include the following:

- CALG_3DES
- CALG_3DES_112
- CALG_AES
- CALG_AES_128
- CALG_AES_192
- CALG_AES_256
- CALG_AGREEDKEY_ANY
- CALG_CYLINK_MEK
- CALG_DES
- CALG_DESX
- CALG_DH_EPHEM
- CALG_DH_SF
- CALG_DSS_SIGN
- CALG_ECDH
- CALG_ECDH_EPHEM
- CALG_ECDSA
- CALG_ECMQV
- CALG_HASH_REPLACE_OWF
- CALG_HUGHES_MD5
- CALG_HMAC
- CALG_KEA_KEYX
- CALG_MAC
- CALG_MD2
- CALG_MD4
- CALG_MD5
- CALG_NO_SIGN
- CALG_OID_INFO_CNG_ONLY
- CALG_OID_INFO_PARAMETERS
- CALG_PCT1_MASTER
- CALG_RC2
- CALG_RC4
- CALG_RC5
- CALG_RSA_KEYX
- CALG_RSA_SIGN
- CALG_SCHANNEL_ENC_KEY
- CALG_SCHANNEL_MAC_KEY
- CALG_SCHANNEL_MASTER_HASH
- CALG_SEAL
- CALG_SHA
- CALG_SHA1
- CALG_SHA_256
- CALG_SHA_384
- CALG_SHA_512
- CALG_SKIPJACK
- CALG_SSL2_MASTER
- CALG_SSL3_MASTER
- CALG_SSL3_SHAMD5
- CALG_TEK
- CALG_TLS1_MASTER
- CALG_TLS1PRF

 Example values when SSLProvider is set to *Internal*include the following:

```text
obj.config("SSLEnabledCipherSuites=*");
obj.config("SSLEnabledCipherSuites=TLS_DHE_DSS_WITH_AES_128_CBC_SHA");
obj.config("SSLEnabledCipherSuites=TLS_DHE_DSS_WITH_AES_128_CBC_SHA;TLS_ECDH_RSA_WITH_AES_128_CBC_SHA");
```

 Possible values when SSLProvider is set to *Internal* include the following:

- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
- TLS_DHE_RSA_WITH_AES_256_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
- TLS_DHE_DSS_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_RSA_WITH_AES_128_CBC_SHA
- TLS_DHE_DSS_WITH_AES_128_CBC_SHA
- TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
- TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_3DES_EDE_CBC_SHA
- TLS_RSA_WITH_DES_CBC_SHA
- TLS_DHE_RSA_WITH_DES_CBC_SHA
- TLS_DHE_DSS_WITH_DES_CBC_SHA
- TLS_RSA_WITH_RC4_128_MD5
- TLS_RSA_WITH_RC4_128_SHA

When TLS 1.3 is negotiated (see [SSLEnabledProtocols](#SSLEnabledProtocols)), only the following cipher suites are supported:

- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_GCM_SHA256

[SSLEnabledCipherSuites](#SSLEnabledCipherSuites) is used together with [SSLCipherStrength](#SSLCipherStrength).

**SSLEnabledProtocols**: Used to enable/disable the supported security protocols.This configuration setting is used to enable or disable the supported security protocols.

Not all supported protocols are enabled by default. The default value is *4032* for client components, and *3072* for server components. To specify a combination of enabled protocol versions set this config to the binary *OR* of one or more of the following values:

|  |  |
| --- | --- |
| TLS1.3 | 12288 (Hex 3000) |
| TLS1.2 | 3072 (Hex C00) (Default - Client and Server) |
| TLS1.1 | 768 (Hex 300) (Default - Client) |
| TLS1 | 192 (Hex C0) (Default - Client) |
| SSL3 | 48 (Hex 30) |
| SSL2 | 12 (Hex 0C) |

Note that only TLS 1.2 is enabled for server components that accept incoming connections. This adheres to industry standards to ensure a secure connection. Client components enable TLS 1.0, TLS 1.1, and TLS 1.2 by default and will negotiate the highest mutually supported version when connecting to a server, which should be TLS 1.2 in most cases.

**SSLEnabledProtocols: Transport Layer Security (TLS) 1.3 Notes:**

By default when TLS 1.3 is enabled, the component will first try to use the platform TLS 1.3 implementation when the SSLProvider is set to Automatic for all editions. If the platform TLS 1.3 implementation is not available, the internal implementation will be used.

In editions that are designed to run on Windows, SSLProvider can be set to Platform to use the platform implementation instead of the internal implementation. When configured in this manner, please note that the platform provider is supported only on Windows 11/Windows Server 2022 and up. The default internal provider is available on all platforms and is not restricted to any specific OS version.

If set to *1* (Platform provider), please be aware of the following notes:

- The platform provider is available only on Windows 11/Windows Server 2022 and up.
- [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) and other similar SSL configuration settings are not supported.
- If [SSLEnabledProtocols](#SSLEnabledProtocols) includes both TLS 1.3 and TLS 1.2, these restrictions are still applicable even if TLS 1.2 is negotiated. Enabling TLS 1.3 with the platform provider changes the implementation used for all TLS versions.

**SSLEnabledProtocols: SSL2 and SSL3 Notes: **

SSL 2.0 and 3.0 are not supported by the component when the SSLProvider is set to internal. To use SSL 2.0 or SSL 3.0, the platform security API must have the protocols enabled and SSLProvider needs to be set to platform.

 Used to enable/disable the supported security protocols.This configuration setting is used to enable or disable the supported security protocols.

Not all supported protocols are enabled by default. The default value is *4032* for client components, and *3072* for server components. To specify a combination of enabled protocol versions set this config to the binary *OR* of one or more of the following values:

|  |  |
| --- | --- |
| TLS1.3 | 12288 (Hex 3000) |
| TLS1.2 | 3072 (Hex C00) (Default - Client and Server) |
| TLS1.1 | 768 (Hex 300) (Default - Client) |
| TLS1 | 192 (Hex C0) (Default - Client) |
| SSL3 | 48 (Hex 30) |
| SSL2 | 12 (Hex 0C) |

Note that only TLS 1.2 is enabled for server components that accept incoming connections. This adheres to industry standards to ensure a secure connection. Client components enable TLS 1.0, TLS 1.1, and TLS 1.2 by default and will negotiate the highest mutually supported version when connecting to a server, which should be TLS 1.2 in most cases.

**SSLEnabledProtocols: Transport Layer Security (TLS) 1.3 Notes:**

By default when TLS 1.3 is enabled, the component will first try to use the platform TLS 1.3 implementation when the SSLProvider is set to Automatic for all editions. If the platform TLS 1.3 implementation is not available, the internal implementation will be used.

In editions that are designed to run on Windows, SSLProvider can be set to Platform to use the platform implementation instead of the internal implementation. When configured in this manner, please note that the platform provider is supported only on Windows 11/Windows Server 2022 and up. The default internal provider is available on all platforms and is not restricted to any specific OS version.

If set to *1* (Platform provider), please be aware of the following notes:

- The platform provider is available only on Windows 11/Windows Server 2022 and up.
- [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) and other similar SSL configuration settings are not supported.
- If [SSLEnabledProtocols](#SSLEnabledProtocols) includes both TLS 1.3 and TLS 1.2, these restrictions are still applicable even if TLS 1.2 is negotiated. Enabling TLS 1.3 with the platform provider changes the implementation used for all TLS versions.

**SSLEnabledProtocols: SSL2 and SSL3 Notes: **

SSL 2.0 and 3.0 are not supported by the component when the SSLProvider is set to internal. To use SSL 2.0 or SSL 3.0, the platform security API must have the protocols enabled and SSLProvider needs to be set to platform.

**SSLEnabledProtocols**: Used to enable/disable the supported security protocols.This configuration setting is used to enable or disable the supported security protocols.

Not all supported protocols are enabled by default. The default value is *4032* for client components, and *3072* for server components. To specify a combination of enabled protocol versions set this config to the binary *OR* of one or more of the following values:

|  |  |
| --- | --- |
| TLS1.3 | 12288 (Hex 3000) |
| TLS1.2 | 3072 (Hex C00) (Default - Client and Server) |
| TLS1.1 | 768 (Hex 300) (Default - Client) |
| TLS1 | 192 (Hex C0) (Default - Client) |
| SSL3 | 48 (Hex 30) |
| SSL2 | 12 (Hex 0C) |

Note that only TLS 1.2 is enabled for server components that accept incoming connections. This adheres to industry standards to ensure a secure connection. Client components enable TLS 1.0, TLS 1.1, and TLS 1.2 by default and will negotiate the highest mutually supported version when connecting to a server, which should be TLS 1.2 in most cases.

**SSLEnabledProtocols: Transport Layer Security (TLS) 1.3 Notes:**

By default when TLS 1.3 is enabled, the component will first try to use the platform TLS 1.3 implementation when the SSLProvider is set to Automatic for all editions. If the platform TLS 1.3 implementation is not available, the internal implementation will be used.

In editions that are designed to run on Windows, SSLProvider can be set to Platform to use the platform implementation instead of the internal implementation. When configured in this manner, please note that the platform provider is supported only on Windows 11/Windows Server 2022 and up. The default internal provider is available on all platforms and is not restricted to any specific OS version.

If set to *1* (Platform provider), please be aware of the following notes:

- The platform provider is available only on Windows 11/Windows Server 2022 and up.
- [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) and other similar SSL configuration settings are not supported.
- If [SSLEnabledProtocols](#SSLEnabledProtocols) includes both TLS 1.3 and TLS 1.2, these restrictions are still applicable even if TLS 1.2 is negotiated. Enabling TLS 1.3 with the platform provider changes the implementation used for all TLS versions.

**SSLEnabledProtocols: SSL2 and SSL3 Notes: **

SSL 2.0 and 3.0 are not supported by the component when the SSLProvider is set to internal. To use SSL 2.0 or SSL 3.0, the platform security API must have the protocols enabled and SSLProvider needs to be set to platform.

 Used to enable/disable the supported security protocols.This configuration setting is used to enable or disable the supported security protocols.

Not all supported protocols are enabled by default. The default value is *4032* for client components, and *3072* for server components. To specify a combination of enabled protocol versions set this config to the binary *OR* of one or more of the following values:

|  |  |
| --- | --- |
| TLS1.3 | 12288 (Hex 3000) |
| TLS1.2 | 3072 (Hex C00) (Default - Client and Server) |
| TLS1.1 | 768 (Hex 300) (Default - Client) |
| TLS1 | 192 (Hex C0) (Default - Client) |
| SSL3 | 48 (Hex 30) |
| SSL2 | 12 (Hex 0C) |

Note that only TLS 1.2 is enabled for server components that accept incoming connections. This adheres to industry standards to ensure a secure connection. Client components enable TLS 1.0, TLS 1.1, and TLS 1.2 by default and will negotiate the highest mutually supported version when connecting to a server, which should be TLS 1.2 in most cases.

**SSLEnabledProtocols: Transport Layer Security (TLS) 1.3 Notes:**

By default when TLS 1.3 is enabled, the component will first try to use the platform TLS 1.3 implementation when the SSLProvider is set to Automatic for all editions. If the platform TLS 1.3 implementation is not available, the internal implementation will be used.

In editions that are designed to run on Windows, SSLProvider can be set to Platform to use the platform implementation instead of the internal implementation. When configured in this manner, please note that the platform provider is supported only on Windows 11/Windows Server 2022 and up. The default internal provider is available on all platforms and is not restricted to any specific OS version.

If set to *1* (Platform provider), please be aware of the following notes:

- The platform provider is available only on Windows 11/Windows Server 2022 and up.
- [SSLEnabledCipherSuites](#SSLEnabledCipherSuites) and other similar SSL configuration settings are not supported.
- If [SSLEnabledProtocols](#SSLEnabledProtocols) includes both TLS 1.3 and TLS 1.2, these restrictions are still applicable even if TLS 1.2 is negotiated. Enabling TLS 1.3 with the platform provider changes the implementation used for all TLS versions.

**SSLEnabledProtocols: SSL2 and SSL3 Notes: **

SSL 2.0 and 3.0 are not supported by the component when the SSLProvider is set to internal. To use SSL 2.0 or SSL 3.0, the platform security API must have the protocols enabled and SSLProvider needs to be set to platform.

**SSLEnableRenegotiation**: Whether the renegotiation_info SSL extension is supported.This configuration setting specifies whether the renegotiation_info SSL extension will be used in the request when using the internal security API. This configuration setting is *false* by default, but it can be set to *true* to enable the extension.

This configuration setting is applicable only when SSLProvider is set to *Internal*.

 Whether the renegotiation_info SSL extension is supported.This configuration setting specifies whether the renegotiation_info SSL extension will be used in the request when using the internal security API. This configuration setting is *false* by default, but it can be set to *true* to enable the extension.

This configuration setting is applicable only when SSLProvider is set to *Internal*.

**SSLEnableRenegotiation**: Whether the renegotiation_info SSL extension is supported.This configuration setting specifies whether the renegotiation_info SSL extension will be used in the request when using the internal security API. This configuration setting is *false* by default, but it can be set to *true* to enable the extension.

This configuration setting is applicable only when SSLProvider is set to *Internal*.

 Whether the renegotiation_info SSL extension is supported.This configuration setting specifies whether the renegotiation_info SSL extension will be used in the request when using the internal security API. This configuration setting is *false* by default, but it can be set to *true* to enable the extension.

This configuration setting is applicable only when SSLProvider is set to *Internal*.

**SSLIncludeCertChain**: Whether the entire certificate chain is included in the SSLServerAuthentication event.This configuration setting specifies whether the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event contains the full certificate chain. By default this value is False and only the leaf certificate will be present in the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event.

If set to True, all certificates returned by the server will be present in the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event. This includes the leaf certificate, any intermediate certificate, and the root certificate.

 Whether the entire certificate chain is included in the SSLServerAuthentication event.This configuration setting specifies whether the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event contains the full certificate chain. By default this value is False and only the leaf certificate will be present in the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event.

If set to True, all certificates returned by the server will be present in the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event. This includes the leaf certificate, any intermediate certificate, and the root certificate.

**SSLIncludeCertChain**: Whether the entire certificate chain is included in the SSLServerAuthentication event.This configuration setting specifies whether the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event contains the full certificate chain. By default this value is False and only the leaf certificate will be present in the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event.

If set to True, all certificates returned by the server will be present in the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event. This includes the leaf certificate, any intermediate certificate, and the root certificate.

 Whether the entire certificate chain is included in the SSLServerAuthentication event.This configuration setting specifies whether the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event contains the full certificate chain. By default this value is False and only the leaf certificate will be present in the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event.

If set to True, all certificates returned by the server will be present in the Encoded parameter of the [SSLServerAuthentication](#sslserverauthentication-event-ivr-component) event. This includes the leaf certificate, any intermediate certificate, and the root certificate.

**SSLKeyLogFile**: The location of a file where per-session secrets are written for debugging purposes.This configuration setting optionally specifies the full path to a file on disk where per-session secrets are stored for debugging purposes.

When set, the component will save the session secrets in the same format as the SSLKEYLOGFILE environment variable functionality used by most major browsers and tools, such as Chrome, Firefox, and cURL. This file can then be used in tools such as Wireshark to decrypt TLS traffic for debugging purposes. When writing to this file, the component will only append, it will not overwrite previous values.

NOTE: This configuration setting is applicable only when SSLProvider is set to *Internal*.

 The location of a file where per-session secrets are written for debugging purposes.This configuration setting optionally specifies the full path to a file on disk where per-session secrets are stored for debugging purposes.

When set, the component will save the session secrets in the same format as the SSLKEYLOGFILE environment variable functionality used by most major browsers and tools, such as Chrome, Firefox, and cURL. This file can then be used in tools such as Wireshark to decrypt TLS traffic for debugging purposes. When writing to this file, the component will only append, it will not overwrite previous values.

NOTE: This configuration setting is applicable only when SSLProvider is set to *Internal*.

**SSLKeyLogFile**: The location of a file where per-session secrets are written for debugging purposes.This configuration setting optionally specifies the full path to a file on disk where per-session secrets are stored for debugging purposes.

When set, the component will save the session secrets in the same format as the SSLKEYLOGFILE environment variable functionality used by most major browsers and tools, such as Chrome, Firefox, and cURL. This file can then be used in tools such as Wireshark to decrypt TLS traffic for debugging purposes. When writing to this file, the component will only append, it will not overwrite previous values.

NOTE: This configuration setting is applicable only when SSLProvider is set to *Internal*.

 The location of a file where per-session secrets are written for debugging purposes.This configuration setting optionally specifies the full path to a file on disk where per-session secrets are stored for debugging purposes.

When set, the component will save the session secrets in the same format as the SSLKEYLOGFILE environment variable functionality used by most major browsers and tools, such as Chrome, Firefox, and cURL. This file can then be used in tools such as Wireshark to decrypt TLS traffic for debugging purposes. When writing to this file, the component will only append, it will not overwrite previous values.

NOTE: This configuration setting is applicable only when SSLProvider is set to *Internal*.

**SSLNegotiatedCipher**: Returns the negotiated cipher suite.This configuration setting returns the cipher suite negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipher[connId]");
```

 Returns the negotiated cipher suite.This configuration setting returns the cipher suite negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipher[connId]");
```

**SSLNegotiatedCipher**: Returns the negotiated cipher suite.This configuration setting returns the cipher suite negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipher[connId]");
```

 Returns the negotiated cipher suite.This configuration setting returns the cipher suite negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipher[connId]");
```

**SSLNegotiatedCipherStrength**: Returns the negotiated cipher suite strength.This configuration setting returns the strength of the cipher suite negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipherStrength[connId]");
```

 Returns the negotiated cipher suite strength.This configuration setting returns the strength of the cipher suite negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipherStrength[connId]");
```

**SSLNegotiatedCipherStrength**: Returns the negotiated cipher suite strength.This configuration setting returns the strength of the cipher suite negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipherStrength[connId]");
```

 Returns the negotiated cipher suite strength.This configuration setting returns the strength of the cipher suite negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipherStrength[connId]");
```

**SSLNegotiatedCipherSuite**: Returns the negotiated cipher suite.This configuration setting returns the cipher suite negotiated during the SSL handshake represented as a single string.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipherSuite[connId]");
```

 Returns the negotiated cipher suite.This configuration setting returns the cipher suite negotiated during the SSL handshake represented as a single string.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipherSuite[connId]");
```

**SSLNegotiatedCipherSuite**: Returns the negotiated cipher suite.This configuration setting returns the cipher suite negotiated during the SSL handshake represented as a single string.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipherSuite[connId]");
```

 Returns the negotiated cipher suite.This configuration setting returns the cipher suite negotiated during the SSL handshake represented as a single string.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedCipherSuite[connId]");
```

**SSLNegotiatedKeyExchange**: Returns the negotiated key exchange algorithm.This configuration setting returns the key exchange algorithm negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedKeyExchange[connId]");
```

 Returns the negotiated key exchange algorithm.This configuration setting returns the key exchange algorithm negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedKeyExchange[connId]");
```

**SSLNegotiatedKeyExchange**: Returns the negotiated key exchange algorithm.This configuration setting returns the key exchange algorithm negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedKeyExchange[connId]");
```

 Returns the negotiated key exchange algorithm.This configuration setting returns the key exchange algorithm negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedKeyExchange[connId]");
```

**SSLNegotiatedKeyExchangeStrength**: Returns the negotiated key exchange algorithm strength.This configuration setting returns the strength of the key exchange algorithm negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedKeyExchangeStrength[connId]");
```

 Returns the negotiated key exchange algorithm strength.This configuration setting returns the strength of the key exchange algorithm negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedKeyExchangeStrength[connId]");
```

**SSLNegotiatedKeyExchangeStrength**: Returns the negotiated key exchange algorithm strength.This configuration setting returns the strength of the key exchange algorithm negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedKeyExchangeStrength[connId]");
```

 Returns the negotiated key exchange algorithm strength.This configuration setting returns the strength of the key exchange algorithm negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedKeyExchangeStrength[connId]");
```

**SSLNegotiatedVersion**: Returns the negotiated protocol version.This configuration setting returns the protocol version negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedVersion[connId]");
```

 Returns the negotiated protocol version.This configuration setting returns the protocol version negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedVersion[connId]");
```

**SSLNegotiatedVersion**: Returns the negotiated protocol version.This configuration setting returns the protocol version negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedVersion[connId]");
```

 Returns the negotiated protocol version.This configuration setting returns the protocol version negotiated during the SSL handshake.

NOTE: For server components (e.g., TCPServer), this is a per-connection configuration setting accessed by passing the ConnectionId. For example:

```csharp
server.Config("SSLNegotiatedVersion[connId]");
```

**SSLSecurityFlags**: Flags that control certificate verification.The following flags are defined (specified in hexadecimal notation). They can be ORed together to exclude multiple conditions:

|  |  |
| --- | --- |
| 0x00000001 | Ignore time validity status of certificate. |
| 0x00000002 | Ignore time validity status of CTL. |
| 0x00000004 | Ignore non-nested certificate times. |
| 0x00000010 | Allow unknown certificate authority. |
| 0x00000020 | Ignore wrong certificate usage. |
| 0x00000100 | Ignore unknown certificate revocation status. |
| 0x00000200 | Ignore unknown CTL signer revocation status. |
| 0x00000400 | Ignore unknown certificate authority revocation status. |
| 0x00000800 | Ignore unknown root revocation status. |
| 0x00008000 | Allow test root certificate. |
| 0x00004000 | Trust test root certificate. |
| 0x80000000 | Ignore non-matching CN (certificate CN non-matching server name). |

This functionality is currently not available when the provider is OpenSSL.

 Flags that control certificate verification.The following flags are defined (specified in hexadecimal notation). They can be ORed together to exclude multiple conditions:

|  |  |
| --- | --- |
| 0x00000001 | Ignore time validity status of certificate. |
| 0x00000002 | Ignore time validity status of CTL. |
| 0x00000004 | Ignore non-nested certificate times. |
| 0x00000010 | Allow unknown certificate authority. |
| 0x00000020 | Ignore wrong certificate usage. |
| 0x00000100 | Ignore unknown certificate revocation status. |
| 0x00000200 | Ignore unknown CTL signer revocation status. |
| 0x00000400 | Ignore unknown certificate authority revocation status. |
| 0x00000800 | Ignore unknown root revocation status. |
| 0x00008000 | Allow test root certificate. |
| 0x00004000 | Trust test root certificate. |
| 0x80000000 | Ignore non-matching CN (certificate CN non-matching server name). |

This functionality is currently not available when the provider is OpenSSL.

**SSLSecurityFlags**: Flags that control certificate verification.The following flags are defined (specified in hexadecimal notation). They can be ORed together to exclude multiple conditions:

|  |  |
| --- | --- |
| 0x00000001 | Ignore time validity status of certificate. |
| 0x00000002 | Ignore time validity status of CTL. |
| 0x00000004 | Ignore non-nested certificate times. |
| 0x00000010 | Allow unknown certificate authority. |
| 0x00000020 | Ignore wrong certificate usage. |
| 0x00000100 | Ignore unknown certificate revocation status. |
| 0x00000200 | Ignore unknown CTL signer revocation status. |
| 0x00000400 | Ignore unknown certificate authority revocation status. |
| 0x00000800 | Ignore unknown root revocation status. |
| 0x00008000 | Allow test root certificate. |
| 0x00004000 | Trust test root certificate. |
| 0x80000000 | Ignore non-matching CN (certificate CN non-matching server name). |

This functionality is currently not available when the provider is OpenSSL.

 Flags that control certificate verification.The following flags are defined (specified in hexadecimal notation). They can be ORed together to exclude multiple conditions:

|  |  |
| --- | --- |
| 0x00000001 | Ignore time validity status of certificate. |
| 0x00000002 | Ignore time validity status of CTL. |
| 0x00000004 | Ignore non-nested certificate times. |
| 0x00000010 | Allow unknown certificate authority. |
| 0x00000020 | Ignore wrong certificate usage. |
| 0x00000100 | Ignore unknown certificate revocation status. |
| 0x00000200 | Ignore unknown CTL signer revocation status. |
| 0x00000400 | Ignore unknown certificate authority revocation status. |
| 0x00000800 | Ignore unknown root revocation status. |
| 0x00008000 | Allow test root certificate. |
| 0x00004000 | Trust test root certificate. |
| 0x80000000 | Ignore non-matching CN (certificate CN non-matching server name). |

This functionality is currently not available when the provider is OpenSSL.

**SSLServerCACerts**: A newline separated list of CA certificates to use during SSL server certificate validation.This configuration setting is only used by client components (e.g., TCPClient) see [SSLClientCACerts](#SSLClientCACerts) for server components (e.g., TCPServer). This configuration setting can be used to optionally specify one or more CA certificates to be used when connecting to the server and verifying the server certificate. When verifying the server's certificate, the certificates trusted by the system will be used as part of the verification process. If the server's CA certificates are not installed to the trusted system store, they may be specified here so they are included when performing the verification process. This configuration setting should be set only if the server's CA certificates are not already trusted on the system and cannot be installed to the trusted system store.

The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

 A newline separated list of CA certificates to use during SSL server certificate validation.This configuration setting is only used by client components (e.g., TCPClient) see [SSLClientCACerts](#SSLClientCACerts) for server components (e.g., TCPServer). This configuration setting can be used to optionally specify one or more CA certificates to be used when connecting to the server and verifying the server certificate. When verifying the server's certificate, the certificates trusted by the system will be used as part of the verification process. If the server's CA certificates are not installed to the trusted system store, they may be specified here so they are included when performing the verification process. This configuration setting should be set only if the server's CA certificates are not already trusted on the system and cannot be installed to the trusted system store.

The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

**SSLServerCACerts**: A newline separated list of CA certificates to use during SSL server certificate validation.This configuration setting is only used by client components (e.g., TCPClient) see [SSLClientCACerts](#SSLClientCACerts) for server components (e.g., TCPServer). This configuration setting can be used to optionally specify one or more CA certificates to be used when connecting to the server and verifying the server certificate. When verifying the server's certificate, the certificates trusted by the system will be used as part of the verification process. If the server's CA certificates are not installed to the trusted system store, they may be specified here so they are included when performing the verification process. This configuration setting should be set only if the server's CA certificates are not already trusted on the system and cannot be installed to the trusted system store.

The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

 A newline separated list of CA certificates to use during SSL server certificate validation.This configuration setting is only used by client components (e.g., TCPClient) see [SSLClientCACerts](#SSLClientCACerts) for server components (e.g., TCPServer). This configuration setting can be used to optionally specify one or more CA certificates to be used when connecting to the server and verifying the server certificate. When verifying the server's certificate, the certificates trusted by the system will be used as part of the verification process. If the server's CA certificates are not installed to the trusted system store, they may be specified here so they are included when performing the verification process. This configuration setting should be set only if the server's CA certificates are not already trusted on the system and cannot be installed to the trusted system store.

The value of this configuration setting is a newline-separated (CR/LF) list of certificates. For instance:

```text
-----BEGIN CERTIFICATE-----
MIIEKzCCAxOgAwIBAgIRANTET4LIkxdH6P+CFIiHvTowDQYJKoZIhvcNAQELBQAw
... Intermediate Cert...
eWHV5OW1K53o/atv59sOiW5K3crjFhsBOd5Q+cJJnU+SWinPKtANXMht+EDvYY2w
F0I1XhM+pKj7FjDr+XNj
-----END CERTIFICATE-----
\r \n
-----BEGIN CERTIFICATE-----
MIIEFjCCAv6gAwIBAgIQetu1SMxpnENAnnOz1P+PtTANBgkqhkiG9w0BAQUFADBp
... Root Cert...
d8q23djXZbVYiIfE9ebr4g3152BlVCHZ2GyPdjhIuLeH21VbT/dyEHHA
-----END CERTIFICATE-----
```

**TLS12SignatureAlgorithms**: Defines the allowed TLS 1.2 signature algorithms when SSLProvider is set to Internal.This configuration setting specifies the allowed server certificate signature algorithms when SSLProvider is set to *Internal* and [SSLEnabledProtocols](#SSLEnabledProtocols) is set to allow TLS 1.2.

When specified the component will verify that the server certificate signature algorithm is among the values specified in this configuration setting. If the server certificate signature algorithm is unsupported, the component raises an exception.

The format of this value is a comma-separated list of hash-signature combinations. For instance:

```csharp
component.SSLProvider = TCPClientSSLProviders.sslpInternal;
component.Config("SSLEnabledProtocols=3072"); //TLS 1.2
component.Config("TLS12SignatureAlgorithms=sha256-rsa,sha256-dsa,sha1-rsa,sha1-dsa");
```

 The default value for this configuration setting is *sha512-ecdsa,sha512-rsa,sha512-dsa,sha384-ecdsa,sha384-rsa,sha384-dsa,sha256-ecdsa,sha256-rsa,sha256-dsa,sha224-ecdsa,sha224-rsa,sha224-dsa,sha1-ecdsa,sha1-rsa,sha1-dsa*.

To not restrict the server's certificate signature algorithm, specify an empty string as the value for this configuration setting, which will cause the signature_algorithms TLS 1.2 extension to not be sent.

 Defines the allowed TLS 1.2 signature algorithms when SSLProvider is set to Internal.This configuration setting specifies the allowed server certificate signature algorithms when SSLProvider is set to *Internal* and [SSLEnabledProtocols](#SSLEnabledProtocols) is set to allow TLS 1.2.

When specified the component will verify that the server certificate signature algorithm is among the values specified in this configuration setting. If the server certificate signature algorithm is unsupported, the component raises an exception.

The format of this value is a comma-separated list of hash-signature combinations. For instance:

```csharp
component.SSLProvider = TCPClientSSLProviders.sslpInternal;
component.Config("SSLEnabledProtocols=3072"); //TLS 1.2
component.Config("TLS12SignatureAlgorithms=sha256-rsa,sha256-dsa,sha1-rsa,sha1-dsa");
```

 The default value for this configuration setting is *sha512-ecdsa,sha512-rsa,sha512-dsa,sha384-ecdsa,sha384-rsa,sha384-dsa,sha256-ecdsa,sha256-rsa,sha256-dsa,sha224-ecdsa,sha224-rsa,sha224-dsa,sha1-ecdsa,sha1-rsa,sha1-dsa*.

To not restrict the server's certificate signature algorithm, specify an empty string as the value for this configuration setting, which will cause the signature_algorithms TLS 1.2 extension to not be sent.

**TLS12SignatureAlgorithms**: Defines the allowed TLS 1.2 signature algorithms when SSLProvider is set to Internal.This configuration setting specifies the allowed server certificate signature algorithms when SSLProvider is set to *Internal* and [SSLEnabledProtocols](#SSLEnabledProtocols) is set to allow TLS 1.2.

When specified the component will verify that the server certificate signature algorithm is among the values specified in this configuration setting. If the server certificate signature algorithm is unsupported, the component raises an exception.

The format of this value is a comma-separated list of hash-signature combinations. For instance:

```csharp
component.SSLProvider = TCPClientSSLProviders.sslpInternal;
component.Config("SSLEnabledProtocols=3072"); //TLS 1.2
component.Config("TLS12SignatureAlgorithms=sha256-rsa,sha256-dsa,sha1-rsa,sha1-dsa");
```

 The default value for this configuration setting is *sha512-ecdsa,sha512-rsa,sha512-dsa,sha384-ecdsa,sha384-rsa,sha384-dsa,sha256-ecdsa,sha256-rsa,sha256-dsa,sha224-ecdsa,sha224-rsa,sha224-dsa,sha1-ecdsa,sha1-rsa,sha1-dsa*.

To not restrict the server's certificate signature algorithm, specify an empty string as the value for this configuration setting, which will cause the signature_algorithms TLS 1.2 extension to not be sent.

 Defines the allowed TLS 1.2 signature algorithms when SSLProvider is set to Internal.This configuration setting specifies the allowed server certificate signature algorithms when SSLProvider is set to *Internal* and [SSLEnabledProtocols](#SSLEnabledProtocols) is set to allow TLS 1.2.

When specified the component will verify that the server certificate signature algorithm is among the values specified in this configuration setting. If the server certificate signature algorithm is unsupported, the component raises an exception.

The format of this value is a comma-separated list of hash-signature combinations. For instance:

```csharp
component.SSLProvider = TCPClientSSLProviders.sslpInternal;
component.Config("SSLEnabledProtocols=3072"); //TLS 1.2
component.Config("TLS12SignatureAlgorithms=sha256-rsa,sha256-dsa,sha1-rsa,sha1-dsa");
```

 The default value for this configuration setting is *sha512-ecdsa,sha512-rsa,sha512-dsa,sha384-ecdsa,sha384-rsa,sha384-dsa,sha256-ecdsa,sha256-rsa,sha256-dsa,sha224-ecdsa,sha224-rsa,sha224-dsa,sha1-ecdsa,sha1-rsa,sha1-dsa*.

To not restrict the server's certificate signature algorithm, specify an empty string as the value for this configuration setting, which will cause the signature_algorithms TLS 1.2 extension to not be sent.

**TLS12SupportedGroups**: The supported groups for ECC.This configuration setting specifies a comma-separated list of named groups used in TLS 1.2 for ECC.

The default value is *ecdhe_secp256r1,ecdhe_secp384r1,ecdhe_secp521r1*.

When using TLS 1.2 and SSLProvider is set to *Internal*, the values refer to the supported groups for ECC. The following values are supported:

- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1" (default)

 The supported groups for ECC.This configuration setting specifies a comma-separated list of named groups used in TLS 1.2 for ECC.

The default value is *ecdhe_secp256r1,ecdhe_secp384r1,ecdhe_secp521r1*.

When using TLS 1.2 and SSLProvider is set to *Internal*, the values refer to the supported groups for ECC. The following values are supported:

- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1" (default)

**TLS12SupportedGroups**: The supported groups for ECC.This configuration setting specifies a comma-separated list of named groups used in TLS 1.2 for ECC.

The default value is *ecdhe_secp256r1,ecdhe_secp384r1,ecdhe_secp521r1*.

When using TLS 1.2 and SSLProvider is set to *Internal*, the values refer to the supported groups for ECC. The following values are supported:

- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1" (default)

 The supported groups for ECC.This configuration setting specifies a comma-separated list of named groups used in TLS 1.2 for ECC.

The default value is *ecdhe_secp256r1,ecdhe_secp384r1,ecdhe_secp521r1*.

When using TLS 1.2 and SSLProvider is set to *Internal*, the values refer to the supported groups for ECC. The following values are supported:

- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1" (default)

**TLS13KeyShareGroups**: The groups for which to pregenerate key shares.This configuration setting specifies a comma-separated list of named groups used in TLS 1.3 for key exchange. The groups specified here will have key share data pregenerated locally before establishing a connection. This can prevent an additional roundtrip during the handshake if the group is supported by the server.

The default value is set to balance common supported groups and the computational resources required to generate key shares. As a result, only some groups are included by default in this configuration setting.

NOTE: All supported groups can always be used during the handshake even if not listed here, but if a group is used that is not present in this list, it will incur an additional roundtrip and time to generate the key share for that group.

In most cases, this configuration setting does not need to be modified. This should be modified only if there is a specific reason to do so.

The default value is *ecdhe_x25519,ecdhe_secp256r1,ecdhe_secp384r1,ffdhe_2048,ffdhe_3072*

The values are ordered from most preferred to least preferred. The following values are supported:

- "ecdhe_x25519" (default)
- "ecdhe_x448"
- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1"
- "ffdhe_2048" (default)
- "ffdhe_3072" (default)
- "ffdhe_4096"
- "ffdhe_6144"
- "ffdhe_8192"

 The groups for which to pregenerate key shares.This configuration setting specifies a comma-separated list of named groups used in TLS 1.3 for key exchange. The groups specified here will have key share data pregenerated locally before establishing a connection. This can prevent an additional roundtrip during the handshake if the group is supported by the server.

The default value is set to balance common supported groups and the computational resources required to generate key shares. As a result, only some groups are included by default in this configuration setting.

NOTE: All supported groups can always be used during the handshake even if not listed here, but if a group is used that is not present in this list, it will incur an additional roundtrip and time to generate the key share for that group.

In most cases, this configuration setting does not need to be modified. This should be modified only if there is a specific reason to do so.

The default value is *ecdhe_x25519,ecdhe_secp256r1,ecdhe_secp384r1,ffdhe_2048,ffdhe_3072*

The values are ordered from most preferred to least preferred. The following values are supported:

- "ecdhe_x25519" (default)
- "ecdhe_x448"
- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1"
- "ffdhe_2048" (default)
- "ffdhe_3072" (default)
- "ffdhe_4096"
- "ffdhe_6144"
- "ffdhe_8192"

**TLS13KeyShareGroups**: The groups for which to pregenerate key shares.This configuration setting specifies a comma-separated list of named groups used in TLS 1.3 for key exchange. The groups specified here will have key share data pregenerated locally before establishing a connection. This can prevent an additional roundtrip during the handshake if the group is supported by the server.

The default value is set to balance common supported groups and the computational resources required to generate key shares. As a result, only some groups are included by default in this configuration setting.

NOTE: All supported groups can always be used during the handshake even if not listed here, but if a group is used that is not present in this list, it will incur an additional roundtrip and time to generate the key share for that group.

In most cases, this configuration setting does not need to be modified. This should be modified only if there is a specific reason to do so.

The default value is *ecdhe_x25519,ecdhe_secp256r1,ecdhe_secp384r1,ffdhe_2048,ffdhe_3072*

The values are ordered from most preferred to least preferred. The following values are supported:

- "ecdhe_x25519" (default)
- "ecdhe_x448"
- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1"
- "ffdhe_2048" (default)
- "ffdhe_3072" (default)
- "ffdhe_4096"
- "ffdhe_6144"
- "ffdhe_8192"

 The groups for which to pregenerate key shares.This configuration setting specifies a comma-separated list of named groups used in TLS 1.3 for key exchange. The groups specified here will have key share data pregenerated locally before establishing a connection. This can prevent an additional roundtrip during the handshake if the group is supported by the server.

The default value is set to balance common supported groups and the computational resources required to generate key shares. As a result, only some groups are included by default in this configuration setting.

NOTE: All supported groups can always be used during the handshake even if not listed here, but if a group is used that is not present in this list, it will incur an additional roundtrip and time to generate the key share for that group.

In most cases, this configuration setting does not need to be modified. This should be modified only if there is a specific reason to do so.

The default value is *ecdhe_x25519,ecdhe_secp256r1,ecdhe_secp384r1,ffdhe_2048,ffdhe_3072*

The values are ordered from most preferred to least preferred. The following values are supported:

- "ecdhe_x25519" (default)
- "ecdhe_x448"
- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1"
- "ffdhe_2048" (default)
- "ffdhe_3072" (default)
- "ffdhe_4096"
- "ffdhe_6144"
- "ffdhe_8192"

**TLS13SignatureAlgorithms**: The allowed certificate signature algorithms.This configuration setting holds a comma-separated list of allowed signature algorithms. Possible values include the following:

- "ed25519" (default)
- "ed448" (default)
- "ecdsa_secp256r1_sha256" (default)
- "ecdsa_secp384r1_sha384" (default)
- "ecdsa_secp521r1_sha512" (default)
- "rsa_pkcs1_sha256" (default)
- "rsa_pkcs1_sha384" (default)
- "rsa_pkcs1_sha512" (default)
- "rsa_pss_sha256" (default)
- "rsa_pss_sha384" (default)
- "rsa_pss_sha512" (default)

 The default value is *rsa_pss_sha256,rsa_pss_sha384,rsa_pss_sha512,rsa_pkcs1_sha256,rsa_pkcs1_sha384,rsa_pkcs1_sha512,ecdsa_secp256r1_sha256,ecdsa_secp384r1_sha384,ecdsa_secp521r1_sha512,ed25519,ed448*. This configuration setting is applicable only when [SSLEnabledProtocols](#SSLEnabledProtocols) includes TLS 1.3. The allowed certificate signature algorithms.This configuration setting holds a comma-separated list of allowed signature algorithms. Possible values include the following:

- "ed25519" (default)
- "ed448" (default)
- "ecdsa_secp256r1_sha256" (default)
- "ecdsa_secp384r1_sha384" (default)
- "ecdsa_secp521r1_sha512" (default)
- "rsa_pkcs1_sha256" (default)
- "rsa_pkcs1_sha384" (default)
- "rsa_pkcs1_sha512" (default)
- "rsa_pss_sha256" (default)
- "rsa_pss_sha384" (default)
- "rsa_pss_sha512" (default)

 The default value is *rsa_pss_sha256,rsa_pss_sha384,rsa_pss_sha512,rsa_pkcs1_sha256,rsa_pkcs1_sha384,rsa_pkcs1_sha512,ecdsa_secp256r1_sha256,ecdsa_secp384r1_sha384,ecdsa_secp521r1_sha512,ed25519,ed448*. This configuration setting is applicable only when [SSLEnabledProtocols](#SSLEnabledProtocols) includes TLS 1.3.

**TLS13SignatureAlgorithms**: The allowed certificate signature algorithms.This configuration setting holds a comma-separated list of allowed signature algorithms. Possible values include the following:

- "ed25519" (default)
- "ed448" (default)
- "ecdsa_secp256r1_sha256" (default)
- "ecdsa_secp384r1_sha384" (default)
- "ecdsa_secp521r1_sha512" (default)
- "rsa_pkcs1_sha256" (default)
- "rsa_pkcs1_sha384" (default)
- "rsa_pkcs1_sha512" (default)
- "rsa_pss_sha256" (default)
- "rsa_pss_sha384" (default)
- "rsa_pss_sha512" (default)

 The default value is *rsa_pss_sha256,rsa_pss_sha384,rsa_pss_sha512,rsa_pkcs1_sha256,rsa_pkcs1_sha384,rsa_pkcs1_sha512,ecdsa_secp256r1_sha256,ecdsa_secp384r1_sha384,ecdsa_secp521r1_sha512,ed25519,ed448*. This configuration setting is applicable only when [SSLEnabledProtocols](#SSLEnabledProtocols) includes TLS 1.3. The allowed certificate signature algorithms.This configuration setting holds a comma-separated list of allowed signature algorithms. Possible values include the following:

- "ed25519" (default)
- "ed448" (default)
- "ecdsa_secp256r1_sha256" (default)
- "ecdsa_secp384r1_sha384" (default)
- "ecdsa_secp521r1_sha512" (default)
- "rsa_pkcs1_sha256" (default)
- "rsa_pkcs1_sha384" (default)
- "rsa_pkcs1_sha512" (default)
- "rsa_pss_sha256" (default)
- "rsa_pss_sha384" (default)
- "rsa_pss_sha512" (default)

 The default value is *rsa_pss_sha256,rsa_pss_sha384,rsa_pss_sha512,rsa_pkcs1_sha256,rsa_pkcs1_sha384,rsa_pkcs1_sha512,ecdsa_secp256r1_sha256,ecdsa_secp384r1_sha384,ecdsa_secp521r1_sha512,ed25519,ed448*. This configuration setting is applicable only when [SSLEnabledProtocols](#SSLEnabledProtocols) includes TLS 1.3.

**TLS13SupportedGroups**: The supported groups for (EC)DHE key exchange.This configuration setting specifies a comma-separated list of named groups used in TLS 1.3 for key exchange. This configuration setting should be modified only if there is a specific reason to do so.

The default value is *ecdhe_x25519,ecdhe_x448,ecdhe_secp256r1,ecdhe_secp384r1,ecdhe_secp521r1,ffdhe_2048,ffdhe_3072,ffdhe_4096,ffdhe_6144,ffdhe_8192,mlkem_512,mlkem_768,mlkem_1024,x25519_mlkem_768,secp256r1_mlkem_768*

The values are ordered from most preferred to least preferred. The following values are supported:

- "ecdhe_x25519" (default)
- "ecdhe_x448" (default)
- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1" (default)
- "ffdhe_2048" (default)
- "ffdhe_3072" (default)
- "ffdhe_4096" (default)
- "ffdhe_6144" (default)
- "ffdhe_8192" (default)
- "mlkem_512" (default)
- "mlkem_768" (default)
- "mlkem_1024" (default)
- "x25519_mlkem_768" (default)
- "secp256r1_mlkem_768" (default)

Post-quantum algorithms (*mlkem_512,mlkem_768,mlkem_1024,x25519_mlkem_768,secp256r1_mlkem_768*) in our components rely on the operating system's underlying cryptographic primitives. The following platforms are currently supported:

-  Windows Server 2025
-  Windows 11 24H2
-  Windows 11 25H2

 The supported groups for (EC)DHE key exchange.This configuration setting specifies a comma-separated list of named groups used in TLS 1.3 for key exchange. This configuration setting should be modified only if there is a specific reason to do so.

The default value is *ecdhe_x25519,ecdhe_x448,ecdhe_secp256r1,ecdhe_secp384r1,ecdhe_secp521r1,ffdhe_2048,ffdhe_3072,ffdhe_4096,ffdhe_6144,ffdhe_8192,mlkem_512,mlkem_768,mlkem_1024,x25519_mlkem_768,secp256r1_mlkem_768*

The values are ordered from most preferred to least preferred. The following values are supported:

- "ecdhe_x25519" (default)
- "ecdhe_x448" (default)
- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1" (default)
- "ffdhe_2048" (default)
- "ffdhe_3072" (default)
- "ffdhe_4096" (default)
- "ffdhe_6144" (default)
- "ffdhe_8192" (default)
- "mlkem_512" (default)
- "mlkem_768" (default)
- "mlkem_1024" (default)
- "x25519_mlkem_768" (default)
- "secp256r1_mlkem_768" (default)

Post-quantum algorithms (*mlkem_512,mlkem_768,mlkem_1024,x25519_mlkem_768,secp256r1_mlkem_768*) in our components rely on the operating system's underlying cryptographic primitives. The following platforms are currently supported:

-  Windows Server 2025
-  Windows 11 24H2
-  Windows 11 25H2

**TLS13SupportedGroups**: The supported groups for (EC)DHE key exchange.This configuration setting specifies a comma-separated list of named groups used in TLS 1.3 for key exchange. This configuration setting should be modified only if there is a specific reason to do so.

The default value is *ecdhe_x25519,ecdhe_x448,ecdhe_secp256r1,ecdhe_secp384r1,ecdhe_secp521r1,ffdhe_2048,ffdhe_3072,ffdhe_4096,ffdhe_6144,ffdhe_8192,mlkem_512,mlkem_768,mlkem_1024,x25519_mlkem_768,secp256r1_mlkem_768*

The values are ordered from most preferred to least preferred. The following values are supported:

- "ecdhe_x25519" (default)
- "ecdhe_x448" (default)
- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1" (default)
- "ffdhe_2048" (default)
- "ffdhe_3072" (default)
- "ffdhe_4096" (default)
- "ffdhe_6144" (default)
- "ffdhe_8192" (default)
- "mlkem_512" (default)
- "mlkem_768" (default)
- "mlkem_1024" (default)
- "x25519_mlkem_768" (default)
- "secp256r1_mlkem_768" (default)

Post-quantum algorithms (*mlkem_512,mlkem_768,mlkem_1024,x25519_mlkem_768,secp256r1_mlkem_768*) in our components rely on the operating system's underlying cryptographic primitives. The following platforms are currently supported:

-  Windows Server 2025
-  Windows 11 24H2
-  Windows 11 25H2

 The supported groups for (EC)DHE key exchange.This configuration setting specifies a comma-separated list of named groups used in TLS 1.3 for key exchange. This configuration setting should be modified only if there is a specific reason to do so.

The default value is *ecdhe_x25519,ecdhe_x448,ecdhe_secp256r1,ecdhe_secp384r1,ecdhe_secp521r1,ffdhe_2048,ffdhe_3072,ffdhe_4096,ffdhe_6144,ffdhe_8192,mlkem_512,mlkem_768,mlkem_1024,x25519_mlkem_768,secp256r1_mlkem_768*

The values are ordered from most preferred to least preferred. The following values are supported:

- "ecdhe_x25519" (default)
- "ecdhe_x448" (default)
- "ecdhe_secp256r1" (default)
- "ecdhe_secp384r1" (default)
- "ecdhe_secp521r1" (default)
- "ffdhe_2048" (default)
- "ffdhe_3072" (default)
- "ffdhe_4096" (default)
- "ffdhe_6144" (default)
- "ffdhe_8192" (default)
- "mlkem_512" (default)
- "mlkem_768" (default)
- "mlkem_1024" (default)
- "x25519_mlkem_768" (default)
- "secp256r1_mlkem_768" (default)

Post-quantum algorithms (*mlkem_512,mlkem_768,mlkem_1024,x25519_mlkem_768,secp256r1_mlkem_768*) in our components rely on the operating system's underlying cryptographic primitives. The following platforms are currently supported:

-  Windows Server 2025
-  Windows 11 24H2
-  Windows 11 25H2

### Base Config Settings

**BuildInfo**: Information about the product's build.When queried, this setting will return a string containing information about the product's build.

**CodePage**: The system code page used for Unicode to Multibyte translations.The default code page is Unicode UTF-8 (65001).

The following is a list of valid code page identifiers:

|  |  |
| --- | --- |
| Identifier | Name |
| 037 | IBM EBCDIC - U.S./Canada |
| 437 | OEM - United States |
| 500 | IBM EBCDIC - International |
| 708 | Arabic - ASMO 708 |
| 709 | Arabic - ASMO 449+, BCON V4 |
| 710 | Arabic - Transparent Arabic |
| 720 | Arabic - Transparent ASMO |
| 737 | OEM - Greek (formerly 437G) |
| 775 | OEM - Baltic |
| 850 | OEM - Multilingual Latin I |
| 852 | OEM - Latin II |
| 855 | OEM - Cyrillic (primarily Russian) |
| 857 | OEM - Turkish |
| 858 | OEM - Multilingual Latin I + Euro symbol |
| 860 | OEM - Portuguese |
| 861 | OEM - Icelandic |
| 862 | OEM - Hebrew |
| 863 | OEM - Canadian-French |
| 864 | OEM - Arabic |
| 865 | OEM - Nordic |
| 866 | OEM - Russian |
| 869 | OEM - Modern Greek |
| 870 | IBM EBCDIC - Multilingual/ROECE (Latin-2) |
| 874 | ANSI/OEM - Thai (same as 28605, ISO 8859-15) |
| 875 | IBM EBCDIC - Modern Greek |
| 932 | ANSI/OEM - Japanese, Shift-JIS |
| 936 | ANSI/OEM - Simplified Chinese (PRC, Singapore) |
| 949 | ANSI/OEM - Korean (Unified Hangul Code) |
| 950 | ANSI/OEM - Traditional Chinese (Taiwan; Hong Kong SAR, PRC) |
| 1026 | IBM EBCDIC - Turkish (Latin-5) |
| 1047 | IBM EBCDIC - Latin 1/Open System |
| 1140 | IBM EBCDIC - U.S./Canada (037 + Euro symbol) |
| 1141 | IBM EBCDIC - Germany (20273 + Euro symbol) |
| 1142 | IBM EBCDIC - Denmark/Norway (20277 + Euro symbol) |
| 1143 | IBM EBCDIC - Finland/Sweden (20278 + Euro symbol) |
| 1144 | IBM EBCDIC - Italy (20280 + Euro symbol) |
| 1145 | IBM EBCDIC - Latin America/Spain (20284 + Euro symbol) |
| 1146 | IBM EBCDIC - United Kingdom (20285 + Euro symbol) |
| 1147 | IBM EBCDIC - France (20297 + Euro symbol) |
| 1148 | IBM EBCDIC - International (500 + Euro symbol) |
| 1149 | IBM EBCDIC - Icelandic (20871 + Euro symbol) |
| 1200 | Unicode UCS-2 Little-Endian (BMP of ISO 10646) |
| 1201 | Unicode UCS-2 Big-Endian |
| 1250 | ANSI - Central European |
| 1251 | ANSI - Cyrillic |
| 1252 | ANSI - Latin I |
| 1253 | ANSI - Greek |
| 1254 | ANSI - Turkish |
| 1255 | ANSI - Hebrew |
| 1256 | ANSI - Arabic |
| 1257 | ANSI - Baltic |
| 1258 | ANSI/OEM - Vietnamese |
| 1361 | Korean (Johab) |
| 10000 | MAC - Roman |
| 10001 | MAC - Japanese |
| 10002 | MAC - Traditional Chinese (Big5) |
| 10003 | MAC - Korean |
| 10004 | MAC - Arabic |
| 10005 | MAC - Hebrew |
| 10006 | MAC - Greek I |
| 10007 | MAC - Cyrillic |
| 10008 | MAC - Simplified Chinese (GB 2312) |
| 10010 | MAC - Romania |
| 10017 | MAC - Ukraine |
| 10021 | MAC - Thai |
| 10029 | MAC - Latin II |
| 10079 | MAC - Icelandic |
| 10081 | MAC - Turkish |
| 10082 | MAC - Croatia |
| 12000 | Unicode UCS-4 Little-Endian |
| 12001 | Unicode UCS-4 Big-Endian |
| 20000 | CNS - Taiwan |
| 20001 | TCA - Taiwan |
| 20002 | Eten - Taiwan |
| 20003 | IBM5550 - Taiwan |
| 20004 | TeleText - Taiwan |
| 20005 | Wang - Taiwan |
| 20105 | IA5 IRV International Alphabet No. 5 (7-bit) |
| 20106 | IA5 German (7-bit) |
| 20107 | IA5 Swedish (7-bit) |
| 20108 | IA5 Norwegian (7-bit) |
| 20127 | US-ASCII (7-bit) |
| 20261 | T.61 |
| 20269 | ISO 6937 Non-Spacing Accent |
| 20273 | IBM EBCDIC - Germany |
| 20277 | IBM EBCDIC - Denmark/Norway |
| 20278 | IBM EBCDIC - Finland/Sweden |
| 20280 | IBM EBCDIC - Italy |
| 20284 | IBM EBCDIC - Latin America/Spain |
| 20285 | IBM EBCDIC - United Kingdom |
| 20290 | IBM EBCDIC - Japanese Katakana Extended |
| 20297 | IBM EBCDIC - France |
| 20420 | IBM EBCDIC - Arabic |
| 20423 | IBM EBCDIC - Greek |
| 20424 | IBM EBCDIC - Hebrew |
| 20833 | IBM EBCDIC - Korean Extended |
| 20838 | IBM EBCDIC - Thai |
| 20866 | Russian - KOI8-R |
| 20871 | IBM EBCDIC - Icelandic |
| 20880 | IBM EBCDIC - Cyrillic (Russian) |
| 20905 | IBM EBCDIC - Turkish |
| 20924 | IBM EBCDIC - Latin-1/Open System (1047 + Euro symbol) |
| 20932 | JIS X 0208-1990 & 0121-1990 |
| 20936 | Simplified Chinese (GB2312) |
| 21025 | IBM EBCDIC - Cyrillic (Serbian, Bulgarian) |
| 21027 | Extended Alpha Lowercase |
| 21866 | Ukrainian (KOI8-U) |
| 28591 | ISO 8859-1 Latin I |
| 28592 | ISO 8859-2 Central Europe |
| 28593 | ISO 8859-3 Latin 3 |
| 28594 | ISO 8859-4 Baltic |
| 28595 | ISO 8859-5 Cyrillic |
| 28596 | ISO 8859-6 Arabic |
| 28597 | ISO 8859-7 Greek |
| 28598 | ISO 8859-8 Hebrew |
| 28599 | ISO 8859-9 Latin 5 |
| 28605 | ISO 8859-15 Latin 9 |
| 29001 | Europa 3 |
| 38598 | ISO 8859-8 Hebrew |
| 50220 | ISO 2022 Japanese with no halfwidth Katakana |
| 50221 | ISO 2022 Japanese with halfwidth Katakana |
| 50222 | ISO 2022 Japanese JIS X 0201-1989 |
| 50225 | ISO 2022 Korean |
| 50227 | ISO 2022 Simplified Chinese |
| 50229 | ISO 2022 Traditional Chinese |
| 50930 | Japanese (Katakana) Extended |
| 50931 | US/Canada and Japanese |
| 50933 | Korean Extended and Korean |
| 50935 | Simplified Chinese Extended and Simplified Chinese |
| 50936 | Simplified Chinese |
| 50937 | US/Canada and Traditional Chinese |
| 50939 | Japanese (Latin) Extended and Japanese |
| 51932 | EUC - Japanese |
| 51936 | EUC - Simplified Chinese |
| 51949 | EUC - Korean |
| 51950 | EUC - Traditional Chinese |
| 52936 | HZ-GB2312 Simplified Chinese |
| 54936 | Windows XP: GB18030 Simplified Chinese (4 Byte) |
| 57002 | ISCII Devanagari |
| 57003 | ISCII Bengali |
| 57004 | ISCII Tamil |
| 57005 | ISCII Telugu |
| 57006 | ISCII Assamese |
| 57007 | ISCII Oriya |
| 57008 | ISCII Kannada |
| 57009 | ISCII Malayalam |
| 57010 | ISCII Gujarati |
| 57011 | ISCII Punjabi |
| 65000 | Unicode UTF-7 |
| 65001 | Unicode UTF-8 |

 The following is a list of valid code page identifiers for Mac OS only:

|  |  |
| --- | --- |
| Identifier | Name |
| 1 | ASCII |
| 2 | NEXTSTEP |
| 3 | JapaneseEUC |
| 4 | UTF8 |
| 5 | ISOLatin1 |
| 6 | Symbol |
| 7 | NonLossyASCII |
| 8 | ShiftJIS |
| 9 | ISOLatin2 |
| 10 | Unicode |
| 11 | WindowsCP1251 |
| 12 | WindowsCP1252 |
| 13 | WindowsCP1253 |
| 14 | WindowsCP1254 |
| 15 | WindowsCP1250 |
| 21 | ISO2022JP |
| 30 | MacOSRoman |
| 10 | UTF16String |
| 0x90000100 | UTF16BigEndian |
| 0x94000100 | UTF16LittleEndian |
| 0x8c000100 | UTF32String |
| 0x98000100 | UTF32BigEndian |
| 0x9c000100 | UTF32LittleEndian |
| 65536 | Proprietary |

**LicenseInfo**: Information about the current license.When queried, this setting will return a string containing information about the license this instance of a component is using. It will return the following information:

- Product: The product the license is for.
- Product Key: The key the license was generated from.
- License Source: Where the license was found (e.g., RuntimeLicense, License File).
- License Type: The type of license installed (e.g., Royalty Free, Single Server).
- Last Valid Build: The last valid build number for which the license will work.

**MaskSensitiveData**: Whether sensitive data is masked in log messages.In certain circumstances it may be beneficial to mask sensitive data, like passwords, in log messages. Set this to *true* to mask sensitive data. The default is *true*.

**ProcessIdleEvents**: Whether the component uses its internal event loop to process events when the main thread is idle.If set to False, the component will not fire internal idle events. Set this to False to use the component in a background thread on Mac OS. By default, this setting is True.

**SelectWaitMillis**: The length of time in milliseconds the component will wait when DoEvents is called if there are no events to process.If there are no events to process when [DoEvents](#doevents-method-ivr-component) is called, the component will wait for the amount of time specified here before returning. The default value is 20.

**UseFIPSCompliantAPI**: Tells the component whether or not to use FIPS certified APIs.When set to *true*, the component will utilize the underlying operating system's certified APIs. Java editions, regardless of OS, utilize Bouncy Castle Federal Information Processing Standards (FIPS), while all other Windows editions make use of Microsoft security libraries.

FIPS mode can be enabled by setting the *UseFIPSCompliantAPI* configuration setting to *true*. This is a static setting that applies to all instances of all components of the toolkit within the process. It is recommended to enable or disable this setting once before the component has been used to establish a connection. Enabling FIPS while an instance of the component is active and connected may result in unexpected behavior.

For more details, please see the [FIPS 140-2 Compliance](https://www.nsoftware.com/kb/articles/fips.rst) article.

NOTE: This setting is applicable only on Windows.

NOTE: Enabling FIPS compliance requires a special license; please contact [sales@nsoftware.com](mailto:sales@nsoftware.com) for details.

**UseInternalSecurityAPI**: Whether or not to use the system security libraries or an internal implementation. When set to *false*, the component will use the system security libraries by default to perform cryptographic functions where applicable.

Setting this configuration setting to *true* tells the component to use the internal implementation instead of using the system security libraries.

 This setting is set to *false* by default on all platforms.

# Trappable Errors ([IVR](#ivr-component) Component)

### IPPHONE Errors

|  |  |
| --- | --- |
| 201 | Timeout error. The error description contains detailed information. |
| 202 | Invalid argument error. The error description contains detailed information. |
| 601 | Protocol error. The error description contains detailed information. |

### UDP Errors

|  |  |
| --- | --- |
| 104 | UDP is already [Active](#active-property-ivr-component). |
| 106 | You cannot change the [LocalPort](#localport-property-ivr-component) while the component is [Active](#active-property-ivr-component). |
| 107 | You cannot change the [LocalHost](#localhost-property-ivr-component) at this time. A connection is in progress. |
| 109 | The component must be [Active](#active-property-ivr-component) for this operation. |
| 112 | You cannot change [MaxPacketSize](#MaxPacketSize) while the component is [Active](#active-property-ivr-component). |
| 113 | You cannot change [ShareLocalPort](#ShareLocalPort) option while the component is [Active](#active-property-ivr-component). |
| 114 | You cannot change RemoteHost when [UseConnection](#UseConnection) is set and the component [Active](#active-property-ivr-component). |
| 115 | You cannot change RemotePort when [UseConnection](#UseConnection) is set and the component is [Active](#active-property-ivr-component). |
| 116 | RemotePort cannot be zero when [UseConnection](#UseConnection) is set. Please specify a valid service port number. |
| 117 | You cannot change [UseConnection](#UseConnection) while the component is [Active](#active-property-ivr-component). |
| 118 | Message cannot be longer than [MaxPacketSize](#MaxPacketSize). |
| 119 | Message is too short. |
| 434 | Unable to convert string to selected CodePage |

### SSL Errors

|  |  |
| --- | --- |
| 270 | Cannot load specified security library. |
| 271 | Cannot open certificate store. |
| 272 | Cannot find specified certificate. |
| 273 | Cannot acquire security credentials. |
| 274 | Cannot find certificate chain. |
| 275 | Cannot verify certificate chain. |
| 276 | Error during handshake. |
| 280 | Error verifying certificate. |
| 281 | Could not find client certificate. |
| 282 | Could not find server certificate. |
| 283 | Error encrypting data. |
| 284 | Error decrypting data. |

### TCP/IP Errors

|  |  |
| --- | --- |
| 10004 | [10004] Interrupted system call. |
| 10009 | [10009] Bad file number. |
| 10013 | [10013] Access denied. |
| 10014 | [10014] Bad address. |
| 10022 | [10022] Invalid argument. |
| 10024 | [10024] Too many open files. |
| 10035 | [10035] Operation would block. |
| 10036 | [10036] Operation now in progress. |
| 10037 | [10037] Operation already in progress. |
| 10038 | [10038] Socket operation on nonsocket. |
| 10039 | [10039] Destination address required. |
| 10040 | [10040] Message is too long. |
| 10041 | [10041] Protocol wrong type for socket. |
| 10042 | [10042] Bad protocol option. |
| 10043 | [10043] Protocol is not supported. |
| 10044 | [10044] Socket type is not supported. |
| 10045 | [10045] Operation is not supported on socket. |
| 10046 | [10046] Protocol family is not supported. |
| 10047 | [10047] Address family is not supported by protocol family. |
| 10048 | [10048] Address already in use. |
| 10049 | [10049] Cannot assign requested address. |
| 10050 | [10050] Network is down. |
| 10051 | [10051] Network is unreachable. |
| 10052 | [10052] Net dropped connection or reset. |
| 10053 | [10053] Software caused connection abort. |
| 10054 | [10054] Connection reset by peer. |
| 10055 | [10055] No buffer space available. |
| 10056 | [10056] Socket is already connected. |
| 10057 | [10057] Socket is not connected. |
| 10058 | [10058] Cannot send after socket shutdown. |
| 10059 | [10059] Too many references, cannot splice. |
| 10060 | [10060] Connection timed out. |
| 10061 | [10061] Connection refused. |
| 10062 | [10062] Too many levels of symbolic links. |
| 10063 | [10063] File name is too long. |
| 10064 | [10064] Host is down. |
| 10065 | [10065] No route to host. |
| 10066 | [10066] Directory is not empty |
| 10067 | [10067] Too many processes. |
| 10068 | [10068] Too many users. |
| 10069 | [10069] Disc Quota Exceeded. |
| 10070 | [10070] Stale NFS file handle. |
| 10071 | [10071] Too many levels of remote in path. |
| 10091 | [10091] Network subsystem is unavailable. |
| 10092 | [10092] WINSOCK DLL Version out of range. |
| 10093 | [10093] Winsock is not loaded yet. |
| 11001 | [11001] Host not found. |
| 11002 | [11002] Nonauthoritative 'Host not found' (try again or check DNS setup). |
| 11003 | [11003] Nonrecoverable errors: FORMERR, REFUSED, NOTIMP. |
| 11004 | [11004] Valid name, no data record (check DNS setup). |
