diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 016f151..4054568 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -8,7 +8,7 @@ jobs:
# This workflow contains a single job called "build"
Linux:
# The type of runner that the job will run on
- runs-on: ubuntu-latest
+ runs-on: ubuntu-20.04
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
diff --git a/Jenkinsfile b/Jenkinsfile
index f8d0c5a..ba92a3e 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -8,4 +8,4 @@ library 'jenkins-pipeline-library@main'
stage('Build') {
builder.goapi()
-}
\ No newline at end of file
+}
diff --git a/internal/ccsmp/ccsmp_core.go b/internal/ccsmp/ccsmp_core.go
index 5105352..a51c685 100644
--- a/internal/ccsmp/ccsmp_core.go
+++ b/internal/ccsmp/ccsmp_core.go
@@ -478,3 +478,18 @@ func handleCcsmpError(f func() SolClientReturnCode) *SolClientErrorInfoWrapper {
}
return nil
}
+
+func (session *SolClientSession) SolClientModifySessionProperties(properties []string) *SolClientErrorInfoWrapper {
+ sessionPropsP, sessionPropertiesFreeFunction := ToCArray(properties, true)
+ defer sessionPropertiesFreeFunction()
+
+ solClientErrorInfo := handleCcsmpError(func() SolClientReturnCode {
+ return C.solClient_session_modifyProperties(session.pointer, sessionPropsP)
+ })
+ // If there was an error, return the error
+ if solClientErrorInfo != nil {
+ return solClientErrorInfo
+ }
+ // If there was no error, return nil
+ return nil
+}
diff --git a/internal/ccsmp/ccsmp_endpoint_prop_generated.go b/internal/ccsmp/ccsmp_endpoint_prop_generated.go
index 3fce5e4..5e02a80 100644
--- a/internal/ccsmp/ccsmp_endpoint_prop_generated.go
+++ b/internal/ccsmp/ccsmp_endpoint_prop_generated.go
@@ -40,7 +40,7 @@ const (
SolClientEndpointPropMaxmsgSize = C.SOLCLIENT_ENDPOINT_PROP_MAXMSG_SIZE
// SolClientEndpointPropRespectsMsgTTL: The endpoint observes message Time-to-Live (TTL) values and can remove expired messages. Default: ::SOLCLIENT_ENDPOINT_PROP_DEFAULT_RESPECTS_MSG_TTL
SolClientEndpointPropRespectsMsgTTL = C.SOLCLIENT_ENDPOINT_PROP_RESPECTS_MSG_TTL
- // SolClientEndpointPropDiscardBehavior: When a message cannot be added to an endpoint (for example, maximum quota (::ENDPOINT_QUOTA_MB) exceeded), this property controls the action the appliance will perform towards the publisher.
+ // SolClientEndpointPropDiscardBehavior: When a message cannot be added to an endpoint (for example, maximum quota (::SOLCLIENT_ENDPOINT_PROP_QUOTA_MB) exceeded), this property controls the action the broker will perform towards the publisher.
SolClientEndpointPropDiscardBehavior = C.SOLCLIENT_ENDPOINT_PROP_DISCARD_BEHAVIOR
// SolClientEndpointPropMaxmsgRedelivery: Defines how many message redelivery retries before discarding or moving the message to the DMQ. The valid ranges is {0..255} where 0 means retry forever. Default: 0
SolClientEndpointPropMaxmsgRedelivery = C.SOLCLIENT_ENDPOINT_PROP_MAXMSG_REDELIVERY
diff --git a/internal/ccsmp/ccsmp_flow_prop_generated.go b/internal/ccsmp/ccsmp_flow_prop_generated.go
index 247c9a7..97748c9 100644
--- a/internal/ccsmp/ccsmp_flow_prop_generated.go
+++ b/internal/ccsmp/ccsmp_flow_prop_generated.go
@@ -32,9 +32,9 @@ const (
SolClientFlowPropBindEntityID = C.SOLCLIENT_FLOW_PROP_BIND_ENTITY_ID
// SolClientFlowPropBindEntityDurable: The durability of the object to which this Flow is bound. Default: ::SOLCLIENT_PROP_ENABLE_VAL, which means the endpoint is durable. When set to SOLCLIENT_PROP_DISABLE_VAL, a temporary endpoint is created.
SolClientFlowPropBindEntityDurable = C.SOLCLIENT_FLOW_PROP_BIND_ENTITY_DURABLE
- // SolClientFlowPropBindName: The name of the Queue or Topic Endpoint that is the target of the bind. This property is ignored when the BIND_ENTITY_ID is ::SOLCLIENT_FLOW_PROP_BIND_ENTITY_SUB. The maximum length (not including NULL terminator) is ::SOLCLIENT_BUFINFO_MAX_QUEUENAME_SIZE except for durable queues, which has a limit of ::SOLCLIENT_BUFINFO_MAX_DURABLE_QUEUENAME_SIZE. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BIND_NAME
+ // SolClientFlowPropBindName: The name of the Queue or Topic Endpoint that is the target of the bind. This property is ignored when the BIND_ENTITY_ID is ::SOLCLIENT_FLOW_PROP_BIND_ENTITY_SUB. The maximum length (not including NULL terminator) is ::SOLCLIENT_BUFINFO_MAX_QUEUENAME_SIZE. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BIND_NAME
SolClientFlowPropBindName = C.SOLCLIENT_FLOW_PROP_BIND_NAME
- // SolClientFlowPropWindowsize: The Guaranteed message window size for the Flow. This sets the maximum number of messages that can be in transit (that is, the messages are sent from the appliance but are not yet delivered to the application). The valid range is 1..255. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_WINDOWSIZE
+ // SolClientFlowPropWindowsize: The Guaranteed message window size for the Flow. This sets the maximum number of messages that can be in transit (that is, the messages are sent from the broker but are not yet delivered to the application). The valid range is 1..255. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_WINDOWSIZE
SolClientFlowPropWindowsize = C.SOLCLIENT_FLOW_PROP_WINDOWSIZE
// SolClientFlowPropAutoack: Deprecated: When set to ::SOLCLIENT_PROP_ENABLE_VAL, the API generates application level acknowledgments when the receive callback function returns. This property is ignored if ::SOLCLIENT_FLOW_PROP_ACKMODE is specified. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_AUTOACK
SolClientFlowPropAutoack = C.SOLCLIENT_FLOW_PROP_AUTOACK
@@ -52,13 +52,13 @@ const (
SolClientFlowPropStartState = C.SOLCLIENT_FLOW_PROP_START_STATE
// SolClientFlowPropSelector: A Java Message System (JMS) defined selector.
SolClientFlowPropSelector = C.SOLCLIENT_FLOW_PROP_SELECTOR
- // SolClientFlowPropNoLocal: When a Flow has the No Local property enabled, messages published on the Session cannot appear in a Flow created in the same Session, even if the endpoint contains a subscription that matches the published message. The appliance that the Session connects to must have the No Local capability, and the capability must be enabled. If the appliance the Session is connected to does not support No Local, a call to solClient_session_createFlow() returns SOLCLIENT_FAIL and subcode ::SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED set.
+ // SolClientFlowPropNoLocal: When a Flow has the No Local property enabled, messages published on the Session cannot appear in a Flow created in the same Session, even if the endpoint contains a subscription that matches the published message. The broker that the Session connects to must have the No Local capability, and the capability must be enabled. If the broker the Session is connected to does not support No Local, a call to solClient_session_createFlow() returns SOLCLIENT_FAIL and subcode ::SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED set.
SolClientFlowPropNoLocal = C.SOLCLIENT_FLOW_PROP_NO_LOCAL
- // SolClientFlowPropMaxUnackedMessages: This property may only be set when the Flow property ::SOLCLIENT_FLOW_PROP_ACKMODE is set to ::SOLCLIENT_FLOW_PROP_ACKMODE_CLIENT. When set to a positive value, this property controls the maximum number of messages that may be unacknowledged on the Flow (solClient_flow_sendAck() is called to acknowledge messages and remove those messages from the message spool). This property cannot be used to increase the appliance configured maximum number of acknowledged messages on the endpoint. When set to -1, the appliance configured maximum controls how many unacknowledged messages may be received by the application. Valid values are -1 and >0. Default ::SOLCLIENT_FLOW_PROP_DEFAULT_MAX_UNACKED_MESSAGES
+ // SolClientFlowPropMaxUnackedMessages: This property may only be set when the Flow property ::SOLCLIENT_FLOW_PROP_ACKMODE is set to ::SOLCLIENT_FLOW_PROP_ACKMODE_CLIENT. When set to a positive value, this property controls the maximum number of messages that may be unacknowledged on the Flow (solClient_flow_sendAck() is called to acknowledge messages and remove those messages from the message spool). This property cannot be used to increase the broker configured maximum number of acknowledged messages on the endpoint. When set to -1, the broker configured maximum controls how many unacknowledged messages may be received by the application. Valid values are -1 and >0. Default ::SOLCLIENT_FLOW_PROP_DEFAULT_MAX_UNACKED_MESSAGES
SolClientFlowPropMaxUnackedMessages = C.SOLCLIENT_FLOW_PROP_MAX_UNACKED_MESSAGES
- // SolClientFlowPropBrowser: Set browser mode on flow and signal it is a browser flow to appliance on bind. A browser flow allows client applications to look at messages spooled on Endpoints without removing them. Messages are browsed from oldest to newest. The flow window size will be reduced as messages are received. Applications have to call ::solClient_flow_start() to get more messages. After being browsed, messages are still available for consumption over normal flows. However, it is possible to selectively remove messages (by calling ::solClient_flow_sendAck()) from the persistent store of an Endpoint, in this case, these removed messages will no longer be available for consumption. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BROWSER \n\n
+ // SolClientFlowPropBrowser: Set browser mode on flow and signal it is a browser flow to broker on bind. A browser flow allows client applications to look at messages spooled on Endpoints without removing them. Messages are browsed from oldest to newest. The flow window size will be reduced as messages are received. Applications have to call ::solClient_flow_start() to get more messages. After being browsed, messages are still available for consumption over normal flows. However, it is possible to selectively remove messages (by calling ::solClient_flow_sendAck()) from the persistent store of an Endpoint, in this case, these removed messages will no longer be available for consumption. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BROWSER \n\n
SolClientFlowPropBrowser = C.SOLCLIENT_FLOW_PROP_BROWSER
- // SolClientFlowPropActiveFlowInd: When a Flow has the Active Flow Indication property enabled, the application will receive flow events when the flow becomes active, or inactive. If the underlying session capabilities indicate that the appliance does not support active flow indications, then solClient_session_createFlow() will fail immediately (SOLCLIENT_FAIL) and set the subCode SOLCLIENT_SUBCODE_FLOW_ACTIVE_FLOW_INDICATION_UNSUPPORTED. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_ACTIVE_FLOW_IND
+ // SolClientFlowPropActiveFlowInd: When a Flow has the Active Flow Indication property enabled, the application will receive flow events when the flow becomes active, or inactive. If the underlying session capabilities indicate that the broker does not support active flow indications, then solClient_session_createFlow() will fail immediately (SOLCLIENT_FAIL) and set the subCode SOLCLIENT_SUBCODE_FLOW_ACTIVE_FLOW_INDICATION_UNSUPPORTED. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_ACTIVE_FLOW_IND
SolClientFlowPropActiveFlowInd = C.SOLCLIENT_FLOW_PROP_ACTIVE_FLOW_IND
// SolClientFlowPropReplayStartLocation: When a Flow is created, the application may request replay of messages from the replay log, even messages that have been previously delivered and removed the from topic endpoint or queue. The replay start location may be ::SOLCLIENT_FLOW_PROP_REPLAY_START_LOCATION_BEGINNING to indicate that all messages available should be replayed. Or the replay start location may be a string that begins with "DATE:" followed by a date in one of two formats. The date may be a string representing a long integer, which is the number of seconds since the epoch - 0:00:00 Jan 1, 1970. The date may be a string as specified in RFC3339 - 'YYYY-MM-DDTHH:MM:SS[.1*DIGIT]Z' or 'YYYY-MM-DDTHH:MM:SS[.1*DIGIT]("+"/"-")HH:MM'. Additionally, the replay start location may be a replication-group-message-id string as returned by solClient_replicationGroupMessageId_toString(). Such a string starts with "rmid1:" and is a ::solClient_replicationGroupMessageId_t.
SolClientFlowPropReplayStartLocation = C.SOLCLIENT_FLOW_PROP_REPLAY_START_LOCATION
diff --git a/internal/ccsmp/ccsmp_log_level_generated.go b/internal/ccsmp/ccsmp_log_level_generated.go
index 435b009..6d808d7 100644
--- a/internal/ccsmp/ccsmp_log_level_generated.go
+++ b/internal/ccsmp/ccsmp_log_level_generated.go
@@ -34,9 +34,9 @@ const (
SolClientLogLevelError SolClientLogLevel = C.SOLCLIENT_LOG_ERROR
// SolClientLogLevelWarning: An unexpected condition within the API that is not expected to affect its operation.
SolClientLogLevelWarning SolClientLogLevel = C.SOLCLIENT_LOG_WARNING
- // SolClientLogLevelNotice: Significant informational messages about the normal operation of the API. These messages are never output in the normal process of sending or receiving a message from the appliance.
+ // SolClientLogLevelNotice: Significant informational messages about the normal operation of the API. These messages are never output in the normal process of sending or receiving a message from the broker.
SolClientLogLevelNotice SolClientLogLevel = C.SOLCLIENT_LOG_NOTICE
- // SolClientLogLevelInfo: Informational messages about the normal operation of the API. These might include information related to sending or receiving messages from the appliance.
+ // SolClientLogLevelInfo: Informational messages about the normal operation of the API. These might include information related to sending or receiving messages from the broker.
SolClientLogLevelInfo SolClientLogLevel = C.SOLCLIENT_LOG_INFO
// SolClientLogLevelDebug: Debugging information generally useful to API developers (very verbose).
SolClientLogLevelDebug SolClientLogLevel = C.SOLCLIENT_LOG_DEBUG
diff --git a/internal/ccsmp/ccsmp_session_event_generated.go b/internal/ccsmp/ccsmp_session_event_generated.go
index 469c915..f9b3ff9 100644
--- a/internal/ccsmp/ccsmp_session_event_generated.go
+++ b/internal/ccsmp/ccsmp_session_event_generated.go
@@ -30,9 +30,9 @@ const (
SolClientSessionEventDownError SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_DOWN_ERROR
// SolClientSessionEventConnectFailedError: The Session attempted to connect but was unsuccessful.
SolClientSessionEventConnectFailedError SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_CONNECT_FAILED_ERROR
- // SolClientSessionEventRejectedMsgError: The appliance rejected a published message.
+ // SolClientSessionEventRejectedMsgError: The broker rejected a published message.
SolClientSessionEventRejectedMsgError SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_REJECTED_MSG_ERROR
- // SolClientSessionEventSubscriptionError: The appliance rejected a subscription (add or remove).
+ // SolClientSessionEventSubscriptionError: The broker rejected a subscription (add or remove).
SolClientSessionEventSubscriptionError SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_ERROR
// SolClientSessionEventRxMsgTooBigError: The API discarded a received message that exceeded the Session buffer size.
SolClientSessionEventRxMsgTooBigError SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_RX_MSG_TOO_BIG_ERROR
@@ -40,9 +40,9 @@ const (
SolClientSessionEventAcknowledgement SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT
// SolClientSessionEventAssuredPublishingUp: Deprecated -- see notes in solClient_session_startAssuredPublishing. The AD Handshake (that is, Guaranteed Delivery handshake) has completed for the publisher and Guaranteed messages can be sent.
SolClientSessionEventAssuredPublishingUp SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_ASSURED_PUBLISHING_UP
- // SolClientSessionEventAssuredConnectFailed: Deprecated -- see notes in solClient_session_startAssuredPublishing. The appliance rejected the AD Handshake to start Guaranteed publishing. Use ::SOLCLIENT_SESSION_EVENT_ASSURED_DELIVERY_DOWN instead.
+ // SolClientSessionEventAssuredConnectFailed: Deprecated -- see notes in solClient_session_startAssuredPublishing. The broker rejected the AD Handshake to start Guaranteed publishing. Use ::SOLCLIENT_SESSION_EVENT_ASSURED_DELIVERY_DOWN instead.
SolClientSessionEventAssuredConnectFailed SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_ASSURED_CONNECT_FAILED
- // SolClientSessionEventAssuredDeliveryDown: Guaranteed Delivery publishing is not available. The guaranteed delivery capability on the session has been disabled by some action on the appliance.
+ // SolClientSessionEventAssuredDeliveryDown: Guaranteed Delivery publishing is not available. The guaranteed delivery capability on the session has been disabled by some action on the broker.
SolClientSessionEventAssuredDeliveryDown SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_ASSURED_DELIVERY_DOWN
// SolClientSessionEventTeUnsubscribeError: The Topic Endpoint unsubscribe command failed.
SolClientSessionEventTeUnsubscribeError SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_TE_UNSUBSCRIBE_ERROR
@@ -60,7 +60,7 @@ const (
SolClientSessionEventProvisionOk SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_PROVISION_OK
// SolClientSessionEventSubscriptionOk: The subscribe or unsubscribe operation has succeeded.
SolClientSessionEventSubscriptionOk SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_OK
- // SolClientSessionEventVirtualRouterNameChanged: The appliance's Virtual Router Name changed during a reconnect operation. This could render existing queues or temporary topics invalid.
+ // SolClientSessionEventVirtualRouterNameChanged: The broker's Virtual Router Name changed during a reconnect operation. This could render existing queues or temporary topics invalid.
SolClientSessionEventVirtualRouterNameChanged SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_VIRTUAL_ROUTER_NAME_CHANGED
// SolClientSessionEventModifypropOk: The session property modification completed.
SolClientSessionEventModifypropOk SolClientSessionEvent = C.SOLCLIENT_SESSION_EVENT_MODIFYPROP_OK
diff --git a/internal/ccsmp/ccsmp_session_prop_generated.go b/internal/ccsmp/ccsmp_session_prop_generated.go
index 6c55bfc..ad29619 100644
--- a/internal/ccsmp/ccsmp_session_prop_generated.go
+++ b/internal/ccsmp/ccsmp_session_prop_generated.go
@@ -34,15 +34,15 @@ const (
SolClientSessionPropPassword = C.SOLCLIENT_SESSION_PROP_PASSWORD
// SolClientSessionPropHost: The IPv4 or IPv6 address or host name to connect to. @ref host-list "Multiple entries" (up to ::SOLCLIENT_SESSION_PROP_MAX_HOSTS) are allowed, separated by commas. @ref host-entry "The entry for the SOLCLIENT_SESSION_PROP_HOST property should provide a protocol, host, and port". See @ref host-list "Configuring Multiple Hosts for Redundancy and Failover" for a discussion of Guaranteed Messaging considerations. May be set as an environment variable (See @ref SessionProps). Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_HOST
SolClientSessionPropHost = C.SOLCLIENT_SESSION_PROP_HOST
- // SolClientSessionPropPort: Deprecated. While still supported, the port number can also now be specified as part of the host in ::SOLCLIENT_SESSION_PROP_HOST (for example, "hostname:55555"). In general, port numbers are not needed except in special situations, because the API chooses the correct port to connect to the appliance. If ::SOLCLIENT_SESSION_PROP_PORT is set, this port number is used for all entries in ::SOLCLIENT_SESSION_PROP_HOST that do not explicitly specify port. The port number to connect to. The valid range is 1..65535. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_PORT or ::SOLCLIENT_SESSION_PROP_DEFAULT_PORT_COMPRESSION, based on setting of ::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL
+ // SolClientSessionPropPort: Deprecated. While still supported, the port number can also now be specified as part of the host in ::SOLCLIENT_SESSION_PROP_HOST (for example, "hostname:55555"). In general, port numbers are not needed except in special situations, because the API chooses the correct port to connect to the broker. If ::SOLCLIENT_SESSION_PROP_PORT is set, this port number is used for all entries in ::SOLCLIENT_SESSION_PROP_HOST that do not explicitly specify port. The port number to connect to. The valid range is 1..65535. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_PORT or ::SOLCLIENT_SESSION_PROP_DEFAULT_PORT_COMPRESSION, based on setting of ::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL
SolClientSessionPropPort = C.SOLCLIENT_SESSION_PROP_PORT
// SolClientSessionPropBufferSize: The maximum amount of messages to buffer (in bytes) when the TCP session is flow controlled (see \ref message-buffer "Message Buffer Size Configuration"). The valid range is > 0. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_BUFFER_SIZE
SolClientSessionPropBufferSize = C.SOLCLIENT_SESSION_PROP_BUFFER_SIZE
// SolClientSessionPropConnectBlocking: Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking connect operation. A blocking connect operation suspends until the Session is successfully connected, including restoring all remembered subscriptions if ::SOLCLIENT_SESSION_PROP_REAPPLY_SUBSCRIPTIONS is enabled. Otherwise solClient_session_connect() returns SOLCLIENT_IN_PROGRESS. @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_CONNECT_BLOCKING
SolClientSessionPropConnectBlocking = C.SOLCLIENT_SESSION_PROP_CONNECT_BLOCKING
- // SolClientSessionPropSendBlocking: Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking send operation. A blocking send operation suspends when the Session is transport flow controlled, otherwise the send operation returns SOLCLIENT_WOULD_BLOCK. Successful return from a blocking send operation only means the message has been accepted by the transport, it does not guarantee the message has been processed by the appliance. For the latter you must used Guaranteed Message Delivery mode and wait for the session event (::SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT) that acknowledges the message. @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SEND_BLOCKING
+ // SolClientSessionPropSendBlocking: Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking send operation. A blocking send operation suspends when the Session is transport flow controlled, otherwise the send operation returns SOLCLIENT_WOULD_BLOCK. Successful return from a blocking send operation only means the message has been accepted by the transport, it does not guarantee the message has been processed by the broker. For the latter you must used Guaranteed Message Delivery mode and wait for the session event (::SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT) that acknowledges the message. @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SEND_BLOCKING
SolClientSessionPropSendBlocking = C.SOLCLIENT_SESSION_PROP_SEND_BLOCKING
- // SolClientSessionPropSubscribeBlocking: Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking subscribe/unsubscribe operation. A blocking subscribe operation will suspend when the Session is transport flow controlled, otherwise the subscribe operation returns SOLCLIENT_WOULD_BLOCK. A successful return from a blocking subscribe operation only means the subscription has been accepted by the transport, it does not guarantee the subscription has been processed by the appliance. For the latter you must use a confirmed operation (see ::SOLCLIENT_SUBSCRIBE_FLAGS_WAITFORCONFIRM) @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SUBSCRIBE_BLOCKING
+ // SolClientSessionPropSubscribeBlocking: Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking subscribe/unsubscribe operation. A blocking subscribe operation will suspend when the Session is transport flow controlled, otherwise the subscribe operation returns SOLCLIENT_WOULD_BLOCK. A successful return from a blocking subscribe operation only means the subscription has been accepted by the transport, it does not guarantee the subscription has been processed by the broker. For the latter you must use a confirmed operation (see ::SOLCLIENT_SUBSCRIBE_FLAGS_WAITFORCONFIRM) @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SUBSCRIBE_BLOCKING
SolClientSessionPropSubscribeBlocking = C.SOLCLIENT_SESSION_PROP_SUBSCRIBE_BLOCKING
// SolClientSessionPropBlockWhileConnecting: Use ::SOLCLIENT_PROP_ENABLE_VAL to block the calling thread on operations such as sending a message, subscribing, or unsubscribing when the Session is being connected or reconnected. The operation must already be blocking (see ::SOLCLIENT_SESSION_PROP_SEND_BLOCKING and ::SOLCLIENT_SESSION_PROP_SUBSCRIBE_BLOCKING). Otherwise, ::SOLCLIENT_NOT_READY is returned if the Session is being connected. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_BLOCK_WHILE_CONNECTING
SolClientSessionPropBlockWhileConnecting = C.SOLCLIENT_SESSION_PROP_BLOCK_WHILE_CONNECTING
@@ -60,25 +60,25 @@ const (
SolClientSessionPropSocketSendBufSize = C.SOLCLIENT_SESSION_PROP_SOCKET_SEND_BUF_SIZE
// SolClientSessionPropSocketRcvBufSize: The value for socket receive buffer size (in bytes). 0 indicates do not set and leave at operating system default. The valid range is 0 or >= 1024. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SOCKET_RCV_BUF_SIZE
SolClientSessionPropSocketRcvBufSize = C.SOLCLIENT_SESSION_PROP_SOCKET_RCV_BUF_SIZE
- // SolClientSessionPropKeepAliveIntMs: The amount of time (in milliseconds) to wait between sending out Keep-Alive messages. Typically, this feature should be enabled for message receivers. Use 0 to disable Keep-Alives (0 is required before appliance release 4.2). The valid range is 0 (disabled) or >= 50. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_KEEP_ALIVE_INT_MS
+ // SolClientSessionPropKeepAliveIntMs: The amount of time (in milliseconds) to wait between sending out Keep-Alive messages. Typically, this feature should be enabled for message receivers. Use 0 to disable Keep-Alives (0 is required before broker release 4.2). The valid range is 0 (disabled) or >= 50. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_KEEP_ALIVE_INT_MS
SolClientSessionPropKeepAliveIntMs = C.SOLCLIENT_SESSION_PROP_KEEP_ALIVE_INT_MS
// SolClientSessionPropKeepAliveLimit: The maximum number of consecutive Keep-Alive messages that can be sent without receiving a response before the connection is closed by the API. The valid range is >= 3. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_KEEP_ALIVE_LIMIT
SolClientSessionPropKeepAliveLimit = C.SOLCLIENT_SESSION_PROP_KEEP_ALIVE_LIMIT
// SolClientSessionPropApplicationDescription: A string that uniquely describes the application instance. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_APPLICATION_DESCRIPTION
SolClientSessionPropApplicationDescription = C.SOLCLIENT_SESSION_PROP_APPLICATION_DESCRIPTION
- // SolClientSessionPropClientMode: Deprecated. The CCSMP API detects the appliance capabilities, so it is no longer necessary to specify to use 'clientMode' or not. This property is ignored when specified.
+ // SolClientSessionPropClientMode: Deprecated. The CCSMP API detects the broker capabilities, so it is no longer necessary to specify to use 'clientMode' or not. This property is ignored when specified.
SolClientSessionPropClientMode = C.SOLCLIENT_SESSION_PROP_CLIENT_MODE
// SolClientSessionPropBindIP: (Optional) The hostname or IP address of the machine on which the application is running. On a multihomed machine, it is strongly recommended to provide this parameter to ensure that the API uses the correct network interface at Session connect time. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_BIND_IP
SolClientSessionPropBindIP = C.SOLCLIENT_SESSION_PROP_BIND_IP
- // SolClientSessionPropPubWindowSize: The publisher window size for Guaranteed messages. The Guaranteed Message Publish Window Size property limits the maximum number of messages that can be published before the API must receive an acknowledgment from the appliance. The valid range is 1..255, or 0 to disable publishing Guaranteed messages. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_PUB_WINDOW_SIZE
+ // SolClientSessionPropPubWindowSize: The publisher window size for Guaranteed messages. The Guaranteed Message Publish Window Size property limits the maximum number of messages that can be published before the API must receive an acknowledgment from the broker. The valid range is 1..255, or 0 to disable publishing Guaranteed messages. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_PUB_WINDOW_SIZE
SolClientSessionPropPubWindowSize = C.SOLCLIENT_SESSION_PROP_PUB_WINDOW_SIZE
// SolClientSessionPropPubAckTimer: The duration of publisher acknowledgment timer (in milliseconds). When a published message is not acknowledged within the time specified for this timer, the API automatically retransmits the message. There is no limit on the number of retransmissions for any message. However, while the API is resending, applications can become flow controlled. The flow control behavior is controlled by ::SOLCLIENT_SESSION_PROP_SEND_BLOCKING and ::SOLCLIENT_SESSION_PROP_BLOCKING_WRITE_TIMEOUT_MS. The valid range is 20..60000. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_PUB_ACK_TIMER
SolClientSessionPropPubAckTimer = C.SOLCLIENT_SESSION_PROP_PUB_ACK_TIMER
- // SolClientSessionPropVpnName: The name of the Message VPN to attempt to join when connecting to an appliance running SolOS-TR. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_VPN_NAME
+ // SolClientSessionPropVpnName: The name of the Message VPN to attempt to join when connecting to an broker running SolOS-TR. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_VPN_NAME
SolClientSessionPropVpnName = C.SOLCLIENT_SESSION_PROP_VPN_NAME
// SolClientSessionPropVpnNameInUse: A read-only Session property that indicates which Message VPN the Session is connected to. When not connected, an empty string is returned.
SolClientSessionPropVpnNameInUse = C.SOLCLIENT_SESSION_PROP_VPN_NAME_IN_USE
- // SolClientSessionPropClientName: The Session client name that is used during client login to create a unique Session. An empty string causes a unique client name to be generated automatically. If specified, it must be a valid Topic name, and a maximum of 160 bytes in length. For all appliances (SolOS-TR or SolOS-CR) the SOLCLIENT_SESSION_PROP_CLIENT_NAME is also used to uniquely identify the sender in a message's senderId field if ::SOLCLIENT_SESSION_PROP_GENERATE_SENDER_ID is set. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_CLIENT_NAME
+ // SolClientSessionPropClientName: The Session client name that is used during client login to create a unique Session. An empty string causes a unique client name to be generated automatically. If specified, it must be a valid Topic name, and a maximum of 160 bytes in length. For all brokers (SolOS-TR or SolOS-CR) the SOLCLIENT_SESSION_PROP_CLIENT_NAME is also used to uniquely identify the sender in a message's senderId field if ::SOLCLIENT_SESSION_PROP_GENERATE_SENDER_ID is set. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_CLIENT_NAME
SolClientSessionPropClientName = C.SOLCLIENT_SESSION_PROP_CLIENT_NAME
// SolClientSessionPropCompressionLevel: Enables messages to be compressed with ZLIB before transmission and decompressed on receive. The valid range is 0 (off) or 1..9, where 1 is less compression (fastest) and 9 is most compression (slowest). Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_COMPRESSION_LEVEL
SolClientSessionPropCompressionLevel = C.SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL
@@ -92,9 +92,9 @@ const (
SolClientSessionPropGenerateSequenceNumber = C.SOLCLIENT_SESSION_PROP_GENERATE_SEQUENCE_NUMBER
// SolClientSessionPropConnectRetriesPerHost: When using a host list, this property defines how many times to try to connect or reconnect to a single host before moving to the next host in the list. A value of 0 (the default) means make a single connection attempt (that is, 0 retries). A value of -1 means attempt an infinite number of reconnect retries (that is, the API will only try to connect or reconnect to first host listed.) NOTE: This property works in conjunction with the connect and reconnect retries Session properties; it does not replace them.
SolClientSessionPropConnectRetriesPerHost = C.SOLCLIENT_SESSION_PROP_CONNECT_RETRIES_PER_HOST
- // SolClientSessionPropConnectRetries: How many times to try to connect to the host appliance (or list of appliances) during connection setup. Zero means no automatic connection retries (that is, try once and give up). -1 means try to connect forever. The default valid range is >= -1.
+ // SolClientSessionPropConnectRetries: How many times to try to connect to the host broker (or list of broker) during connection setup. Zero means no automatic connection retries (that is, try once and give up). -1 means try to connect forever. The default valid range is >= -1.
SolClientSessionPropConnectRetries = C.SOLCLIENT_SESSION_PROP_CONNECT_RETRIES
- // SolClientSessionPropReconnectRetries: How many times to retry to reconnect to the host appliance (or list of appliances) after a connected Session goes down. Zero means no automatic reconnection attempts. -1 means try to reconnect forever. The default valid range is >= -1.
+ // SolClientSessionPropReconnectRetries: How many times to retry to reconnect to the host broker (or list of broker) after a connected Session goes down. Zero means no automatic reconnection attempts. -1 means try to reconnect forever. The default valid range is >= -1.
SolClientSessionPropReconnectRetries = C.SOLCLIENT_SESSION_PROP_RECONNECT_RETRIES
// SolClientSessionPropReconnectRetryWaitMs: How much time (in ms) to wait between each attempt to connect or reconnect to a host. If a connect or reconnect attempt to host is not successful, the API waits for the amount of time set for SOLCLIENT_SESSION_PROP_RECONNECT_RETRY_WAIT_MS, and then makes another connect or reconnect attempt. SESSION_CONNECT_RETRIES_PER_HOST sets how many connection or reconnection attempts can be made before moving
SolClientSessionPropReconnectRetryWaitMs = C.SOLCLIENT_SESSION_PROP_RECONNECT_RETRY_WAIT_MS
@@ -110,11 +110,11 @@ const (
SolClientSessionPropProvisionTimeoutMs = C.SOLCLIENT_SESSION_PROP_PROVISION_TIMEOUT_MS
// SolClientSessionPropCalculateMessageExpiration: If this property is true and time-to-live (::solClient_msg_setTimeToLive()) has a positive value in a message, the expiration time is calculated when the message is sent or received and can be retrieved with ::solClient_msg_getExpiration.
SolClientSessionPropCalculateMessageExpiration = C.SOLCLIENT_SESSION_PROP_CALCULATE_MESSAGE_EXPIRATION
- // SolClientSessionPropVirtualRouterName: A read-only property that indicates the connected appliance's virtual router name. Appliance endpoint and destination names created with a virtual router name are valid for use with that appliance, or to address destinations on remote appliances (in a multiple-appliance network) when publishing messages. Applications requiring the virtual router name do not need to poll this property every time it is required, and they may cache the name. Applications should query the name once after connecting the Session, and again after a reconnect operation reports the ::SOLCLIENT_SESSION_EVENT_VIRTUAL_ROUTER_NAME_CHANGED event. Prior to connecting, an empty string is returned.
+ // SolClientSessionPropVirtualRouterName: A read-only property that indicates the connected broker's virtual router name. Appliance endpoint and destination names created with a virtual router name are valid for use with that broker, or to address destinations on remote brokers (in a multiple-broker network) when publishing messages. Applications requiring the virtual router name do not need to poll this property every time it is required, and they may cache the name. Applications should query the name once after connecting the Session, and again after a reconnect operation reports the ::SOLCLIENT_SESSION_EVENT_VIRTUAL_ROUTER_NAME_CHANGED event. Prior to connecting, an empty string is returned.
SolClientSessionPropVirtualRouterName = C.SOLCLIENT_SESSION_PROP_VIRTUAL_ROUTER_NAME
- // SolClientSessionPropNoLocal: If this property is true, messages published on the Session cannot be received on the same Session even if the client has a subscription that matches the published topic. If this restriction is requested, and the appliance does not have No Local support, the Session connect will fail with subcode ::SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED.
+ // SolClientSessionPropNoLocal: If this property is true, messages published on the Session cannot be received on the same Session even if the client has a subscription that matches the published topic. If this restriction is requested, and the broker does not have No Local support, the Session connect will fail with subcode ::SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED.
SolClientSessionPropNoLocal = C.SOLCLIENT_SESSION_PROP_NO_LOCAL
- // SolClientSessionPropAdPubRouterWindowedAck: When disabled, initiate a window size of 1 to appliance, but do not wait for acknowledgments before transmitting up to the actual window size. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_AD_PUB_ROUTER_WINDOWED_ACK
+ // SolClientSessionPropAdPubRouterWindowedAck: When disabled, initiate a window size of 1 to broker, but do not wait for acknowledgments before transmitting up to the actual window size. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_AD_PUB_ROUTER_WINDOWED_ACK
SolClientSessionPropAdPubRouterWindowedAck = C.SOLCLIENT_SESSION_PROP_AD_PUB_ROUTER_WINDOWED_ACK
// SolClientSessionPropModifypropTimeoutMs: Maximum amount of time (in milliseconds) to wait for session property modification. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_MODIFYPROP_TIMEOUT_MS
SolClientSessionPropModifypropTimeoutMs = C.SOLCLIENT_SESSION_PROP_MODIFYPROP_TIMEOUT_MS
@@ -122,7 +122,7 @@ const (
SolClientSessionPropAckEventMode = C.SOLCLIENT_SESSION_PROP_ACK_EVENT_MODE
// SolClientSessionPropSslExcludedProtocols: This property specifies a comma separated list of excluded SSL protocol(s). Valid SSL protocols are 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2'. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SSL_EXCLUDED_PROTOCOLS.
SolClientSessionPropSslExcludedProtocols = C.SOLCLIENT_SESSION_PROP_SSL_EXCLUDED_PROTOCOLS
- // SolClientSessionPropSslValidateCertificate: This property indicates if the certificate validation with certificates in the truststore is enabled. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SSL_VALIDATE_CERTIFICATE.
See also @ref certificate-validation
+ // SolClientSessionPropSslValidateCertificate: This is used to specify whether the API should validate server certificates with certificates in the truststore. When disabled, validation of the certificate date, certificate host, and checking the common name list is also disabled. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SSL_VALIDATE_CERTIFICATE.
See also @ref certificate-validation
SolClientSessionPropSslValidateCertificate = C.SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE
// SolClientSessionPropOpensslSecurityLevel: A number from 0-5 passed to the openSsl library as the security level. Use 0 with caution, it is less secure than the default, which is 1.
SolClientSessionPropOpensslSecurityLevel = C.SOLCLIENT_SESSION_PROP_OPENSSL_SECURITY_LEVEL
@@ -162,7 +162,7 @@ const (
SolClientSessionPropOidcIDToken = C.SOLCLIENT_SESSION_PROP_OIDC_ID_TOKEN
// SolClientSessionPropAuthenticationSchemeOauth2: OAUTH 2.0 authentication with a token.
SolClientSessionPropAuthenticationSchemeOauth2 = C.SOLCLIENT_SESSION_PROP_AUTHENTICATION_SCHEME_OAUTH2
- // SolClientSessionPropSslValidateCertificateDate: This property indicates if the session connection should fail when a certificate with an invalid date is received. This property only applies when ::SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE is enabled.
Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SSL_VALIDATE_CERTIFICATE_DATE.
See also @ref certificate-validation
+ // SolClientSessionPropSslValidateCertificateDate: This property indicates if the session connection should fail when a certificate with an invalid date (current date before valid date, or current date after expiry) is received. This property only applies when ::SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE is enabled.
Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SSL_VALIDATE_CERTIFICATE_DATE.
See also @ref certificate-validation
SolClientSessionPropSslValidateCertificateDate = C.SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE_DATE
// SolClientSessionPropSslValidateCertificateHost: This property indicates if the session connection should fail when a certificate with an invalid host is received. When enabled, and connecting to a named host, the certificate Subject Alternative Name must contain a DNS entry that matches the host string. When enabled, and connecting to a host by IP address, the certificate Subject Alternative Name must contain an IP Address that matches. If there is no Subject Alternate Name the certificate common name (CN) must match the named host. This property only applies when ::SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE is enabled.
Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SSL_VALIDATE_CERTIFICATE_HOST.
See also @ref certificate-validation
SolClientSessionPropSslValidateCertificateHost = C.SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE_HOST
@@ -170,17 +170,17 @@ const (
SolClientSessionPropSslCipherSuites = C.SOLCLIENT_SESSION_PROP_SSL_CIPHER_SUITES
// SolClientSessionPropSslTrustStoreDir: This property specifies the directory where the trusted certificates are. A maximum of 64 certificate files are allowed in the trust store directory. The maximum depth for the certificate chain verification that shall be allowed is 3.
SolClientSessionPropSslTrustStoreDir = C.SOLCLIENT_SESSION_PROP_SSL_TRUST_STORE_DIR
- // SolClientSessionPropSslTrustedCommonNameList: NOT RECOMMENDED. Per RFC-6125 section 6.4.4, the Common Name (CN) of a certificate should not be used to validate the certificate. Instead ::SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE_HOST (enabled by default) indicates that the server certificate must contain a Subject Alternate Name (SAN) that matches the host name (::SOLCLIENT_SESSION_PROP_HOST).
This property is only used if ::SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE_HOST is disabled. This property specifies a comma separated list of acceptable common names in certificate validation. The number of common names specified by an applications is limited to 16. Leading and trailing whitespaces are considered to be part of the common names and are not ignored. If the application does not provide any common names, there is no common name verification.
+ // SolClientSessionPropSslTrustedCommonNameList: NOT RECOMMENDED. Per RFC-6125 section 6.4.4, the Common Name (CN) of a certificate should not be used to validate the certificate. Instead ::SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE_HOST (enabled by default) indicates that the server certificate must contain a Subject Alternate Name (SAN) that matches the host name (::SOLCLIENT_SESSION_PROP_HOST).
This property is only valid if ::SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE_HOST is disabled. This property specifies a comma separated list of acceptable common names in certificate validation. The number of common names specified by an applications is limited to 16. Leading and trailing whitespaces are considered to be part of the common names and are not ignored. If the application does not provide any common names, there is no common name verification.
NOTE: When ::SOLCLIENT_SESSION_PROP_SSL_VALIDATE_CERTIFICATE_HOST is enabled (default), this property should be set to an empty list. Failure to do so may cause the API to reject an otherwise valid certificate.
SolClientSessionPropSslTrustedCommonNameList = C.SOLCLIENT_SESSION_PROP_SSL_TRUSTED_COMMON_NAME_LIST
// SolClientSessionPropGdReconnectFailActionAutoRetry: Clear the publisher state and reconnect the publisher flow. Then republish all unacknowledged messages, this may cause duplication. The API then continues the reconnect process as usual.
SolClientSessionPropGdReconnectFailActionAutoRetry = C.SOLCLIENT_SESSION_PROP_GD_RECONNECT_FAIL_ACTION_AUTO_RETRY
// SolClientSessionPropGdReconnectFailActionDisconnect: Disconnect the session, even if SOLCLIENT_SESSION_PROP_RECONNECT_RETRIES is configured to a non-zero value. This is the legacy behavior. If the application attempts to manually reconnect the session, it is also responsible for unacknowledged messages. If the application chooses to resend those messages, there may be duplication. If the application chooses not to resend those messages there may be message loss. \n
SolClientSessionPropGdReconnectFailActionDisconnect = C.SOLCLIENT_SESSION_PROP_GD_RECONNECT_FAIL_ACTION_DISCONNECT
- // SolClientSessionPropDefaultPort: The default value for the appliance TCP port when compression is not in use (::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL of zero).
+ // SolClientSessionPropDefaultPort: The default value for the broker TCP port when compression is not in use (::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL of zero).
SolClientSessionPropDefaultPort = C.SOLCLIENT_SESSION_PROP_DEFAULT_PORT
- // SolClientSessionPropDefaultPortCompression: The default value for the appliance TCP port when compression is in use (::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL of non-zero).
+ // SolClientSessionPropDefaultPortCompression: The default value for the broker TCP port when compression is in use (::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL of non-zero).
SolClientSessionPropDefaultPortCompression = C.SOLCLIENT_SESSION_PROP_DEFAULT_PORT_COMPRESSION
- // SolClientSessionPropDefaultPortSsl: The default value for the appliance SSL port over TCP regardless of compression.
+ // SolClientSessionPropDefaultPortSsl: The default value for the broker SSL port over TCP regardless of compression.
SolClientSessionPropDefaultPortSsl = C.SOLCLIENT_SESSION_PROP_DEFAULT_PORT_SSL
// SolClientSessionPropDefaultBufferSize: The default size (in bytes) of internal buffer for transmit buffering.
SolClientSessionPropDefaultBufferSize = C.SOLCLIENT_SESSION_PROP_DEFAULT_BUFFER_SIZE
@@ -200,7 +200,7 @@ const (
SolClientSessionPropDefaultKeepAliveLimit = C.SOLCLIENT_SESSION_PROP_DEFAULT_KEEP_ALIVE_LIMIT
// SolClientSessionPropDefaultPubAckTimer: The default value for publisher acknowledgment timer (in milliseconds). When a published message is not acknowledged within the time specified for this timer, the API automatically retransmits the message. There is no limit on the number of retransmissions for any message. However, while the API is resending, applications can become flow controlled. The flow control behavior is controlled by ::SOLCLIENT_SESSION_PROP_SEND_BLOCKING and ::SOLCLIENT_SESSION_PROP_BLOCKING_WRITE_TIMEOUT_MS.
SolClientSessionPropDefaultPubAckTimer = C.SOLCLIENT_SESSION_PROP_DEFAULT_PUB_ACK_TIMER
- // SolClientSessionPropDefaultPubWindowSize: The default Publisher Window size for Guaranteed messages. The Guaranteed Message Publish Window Size property limits the maximum number of messages that can be published before the API must receive an acknowledgment from the appliance.
+ // SolClientSessionPropDefaultPubWindowSize: The default Publisher Window size for Guaranteed messages. The Guaranteed Message Publish Window Size property limits the maximum number of messages that can be published before the API must receive an acknowledgment from the broker.
SolClientSessionPropDefaultPubWindowSize = C.SOLCLIENT_SESSION_PROP_DEFAULT_PUB_WINDOW_SIZE
// SolClientSessionPropDefaultSubscriberLocalPriority: The default subscriber priority for locally published messages.
SolClientSessionPropDefaultSubscriberLocalPriority = C.SOLCLIENT_SESSION_PROP_DEFAULT_SUBSCRIBER_LOCAL_PRIORITY
diff --git a/internal/ccsmp/ccsmp_session_stats_rx_generated.go b/internal/ccsmp/ccsmp_session_stats_rx_generated.go
index ac9834f..3009f33 100644
--- a/internal/ccsmp/ccsmp_session_stats_rx_generated.go
+++ b/internal/ccsmp/ccsmp_session_stats_rx_generated.go
@@ -78,7 +78,7 @@ const (
SolClientStatsRXCachemsg SolClientStatsRX = C.SOLCLIENT_STATS_RX_CACHEMSG
// SolClientStatsRXFoundCtsync: Deprecated - Not Supported - On a cut-through Flow, the number of times the Flow entered cut-through delivery mode.
SolClientStatsRXFoundCtsync SolClientStatsRX = C.SOLCLIENT_STATS_RX_FOUND_CTSYNC
- // SolClientStatsRXLostCtsync: Deprecated - Not Supported - On a cut-through Flow, the number of times the Flow left cut-through delivery mode to resynchronize with the Guaranteed message storage on the appliance
+ // SolClientStatsRXLostCtsync: Deprecated - Not Supported - On a cut-through Flow, the number of times the Flow left cut-through delivery mode to resynchronize with the Guaranteed message storage on the broker
SolClientStatsRXLostCtsync SolClientStatsRX = C.SOLCLIENT_STATS_RX_LOST_CTSYNC
// SolClientStatsRXLostCtsyncGm: Deprecated - Not Supported - On a cut-through Flow, the number of times the Flow left cut-through delivery mode to resynchronize with the Guaranteed message storage due to receiving a Guaranteed message that was not previously received as Direct.
SolClientStatsRXLostCtsyncGm SolClientStatsRX = C.SOLCLIENT_STATS_RX_LOST_CTSYNC_GM
diff --git a/internal/ccsmp/lib/darwin/libsolclient.a b/internal/ccsmp/lib/darwin/libsolclient.a
index d01bb07..550058d 100644
Binary files a/internal/ccsmp/lib/darwin/libsolclient.a and b/internal/ccsmp/lib/darwin/libsolclient.a differ
diff --git a/internal/ccsmp/lib/include/solclient/solClient.h b/internal/ccsmp/lib/include/solclient/solClient.h
index 84e7c8c..53848d5 100644
--- a/internal/ccsmp/lib/include/solclient/solClient.h
+++ b/internal/ccsmp/lib/include/solclient/solClient.h
@@ -5,7 +5,7 @@
* Copyright 2007-2022 Solace Corporation. All rights reserved.
*
* This include file provides the public constants and API calls for clients
-* connecting to a Solace messaging appliance.
+* connecting to a Solace messaging broker.
*
*/
@@ -33,7 +33,7 @@ extern "C"
@section introduction Introduction
The Messaging API for C provides an Application Programming
- Interface (API) for developing C or C++ applications for use with a Solace messaging appliance.
+ Interface (API) for developing C or C++ applications for use with a Solace messaging broker.
@section overview Overview
@@ -41,20 +41,20 @@ extern "C"
provide high message throughput and low latency with the lowest CPU utilization
possible. It is a fully functional API, and it contains the following
main features:
- @li Allows the application to connect to a Solace messaging appliance through the concept of a "Session".
+ @li Allows the application to connect to a Solace messaging broker through the concept of a "Session".
@li Allows messages to be constructed and sent on a Session and to be received from a Session.
@li Allows subscriptions to be added to specify what messages are to be received. Subscriptions are
topic-based.
@li Support for Guaranteed Message delivery (Queue-based or Topic Endpoint-based).
Guaranteed messages are received on "Flows" (see solClient_session_createFlow()), which are
- constructed within a Session. Guaranteed Messaging is only available to clients when a Solace messaging appliance
+ constructed within a Session. Guaranteed Messaging is only available to clients when a Solace messaging broker
is used that has an Assured Delivery Blade (ADB) installed and Guaranteed Messaging and message
spooling enabled.
@li Allows fine-tuning of API behavior, such as whether operations should be blocking or non-blocking in nature.
@li Allows for the option of application file descriptors to be monitored within the API, providing
the application with callbacks for readable and writable events.
@li Allows for the option of the application taking over control of file descriptors created within the API to
- connect to the Solace messaging appliance, where the application must provide readable and writable events to the API.
+ connect to the Solace messaging broker, where the application must provide readable and writable events to the API.
@li Support for timer services.
@li Support for logging, including support for logging filter levels, and the ability for the application to
be called back for generated logs so that they can be placed into the application's logging system.
@@ -77,7 +77,7 @@ extern "C"
These modes are handled differently for the Messaging API for C than with the Messaging API for
Java. For the Messaging API for C, blocking mode means that the calling thread for each send()
function call is blocked until the API can accept the message. As a result, the application
- automatically controls the flow of send() calls to a rate at which the appliance can accept them. The send()
+ automatically controls the flow of send() calls to a rate at which the broker can accept them. The send()
function call remains blocked until either it is accepted by the API, or the timer (specified by
::SOLCLIENT_SESSION_PROP_BLOCKING_WRITE_TIMEOUT_MS) expires.
@@ -211,11 +211,11 @@ extern "C"
to the default Session message received callback, it is only delivered once to that callback,
independent of the number of subscriptions it matched.
- Each unique Topic subscription is also added to the Solace messaging appliance and removed when there are
+ Each unique Topic subscription is also added to the Solace messaging broker and removed when there are
no longer any dispatch functions associated with the subscription. Applications that want to have
- fine-grained control over appliance resources may choose to add dispatch Session callback functions only without
- adding a subscription to the appliance. When the @ref subscribeflags "subscription flag"
- ::SOLCLIENT_SUBSCRIBE_FLAGS_LOCAL_DISPATCH_ONLY is set, the subscription is not added to the appliance. For example:\n
+ fine-grained control over broker resources may choose to add dispatch Session callback functions only without
+ adding a subscription to the broker. When the @ref subscribeflags "subscription flag"
+ ::SOLCLIENT_SUBSCRIBE_FLAGS_LOCAL_DISPATCH_ONLY is set, the subscription is not added to the broker. For example:\n
::solClient_session_rxMsgDispatchFuncInfo_t dispatchA = {SOLCLIENT_DISPATCH_TYPE_CALLBACK, msgCallbackAFunc, &userDataA, NULL };\n
::solClient_session_rxMsgDispatchFuncInfo_t dispatchB = {SOLCLIENT_DISPATCH_TYPE_CALLBACK, msgCallbackBFunc, &userDataB, NULL };\n
::solClient_session_rxMsgDispatchFuncInfo_t dispatchC = {SOLCLIENT_DISPATCH_TYPE_CALLBACK, msgCallbackCFunc, &userDataC, NULL };\n
@@ -225,7 +225,7 @@ extern "C"
session_p, SOLCLIENT_SUBSCRIBE_FLAGS_LOCAL_DISPATCH_ONLY, "part1/item2", &dispatchB, NULL); \n
::solClient_session_topicSubscribeWithDispatch( session_p, 0, "part1/>", &dispatchC, NULL); \n
- In this example, the application avoids adding the subscriptions for "part1/item1" and "part1/item2" to the appliance as
+ In this example, the application avoids adding the subscriptions for "part1/item1" and "part1/item2" to the broker as
these subscriptions overlap with the wildcard subscription "part1/>". All messages are forwarded to the application due
to the last wildcard subscription, and properly dispatched by the more specific non-wildcard subscriptions.
@@ -307,12 +307,12 @@ extern "C"
@subsection host-list Configuring Multiple Hosts for Redundancy and Failover
You can provide up to sixteen potential hosts for a client application
- to connect or reconnect to. Typically the listed appliances are in separate geographic
+ to connect or reconnect to. Typically the listed brokers are in separate geographic
locations, and the use of a host list allows your client applications to fail over to the
- alternate connections should the first appliance be unavailable. The host
+ alternate connections should the first broker be unavailable. The host
list is configured in the ::SOLCLIENT_SESSION_PROP_HOST property as a comma-separated list
of hosts. Each host may optionally include a port number
- as well. For example, if there are two appliances at 192.168.160.128 and
+ as well. For example, if there are two brokers at 192.168.160.128 and
192.168.160.129, but the second is using the non-default port 50005 for the
message bus, the ::SOLCLIENT_SESSION_PROP_HOST would be configured as: \n
"192.168.160.128,192.168.160.129:50005".
@@ -396,7 +396,7 @@ extern "C"
API for C may not manage any single file descriptor which has a numerical
value that exceeds 1024.
- If the C API is used in an application that connects to a Solace messaging appliance,
+ If the C API is used in an application that connects to a Solace messaging broker,
channel connect failures can occur if there are more than 1024 Sessions created per process.
This limit is further reduced by any other files not managed by the C API that the
application has open.
@@ -485,7 +485,7 @@ extern "C"
The main differences between publishing guaranteed messages from a Transacted Session and from a Session are:
@li For a Transacted Session, a successful commit acknowledges published messages.
- @li For a Transacted Session, ACKs and NACKs from the appliance are ignored.
+ @li For a Transacted Session, ACKs and NACKs from the broker are ignored.
Multithreading:
@@ -728,7 +728,7 @@ typedef struct solClient_field {
* ::SOLCLIENT_SUBCODE_OUT_OF_MEMORY \n
* ::SOLCLIENT_SUBCODE_CANNOT_BLOCK_IN_CONTEXT (functions that result in an interaction with the message router) \n
*
-* A complete list of SolClient subCodes, their meaning, and the appliance response that caused them (when applicable) follows:
+* A complete list of SolClient subCodes, their meaning, and the broker response that caused them (when applicable) follows:
*
*
* SubCode | Description | Appliance Error Response |
@@ -774,7 +774,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_PROTOCOL_ERROR |
-* An API call failed due to a protocol error with the appliance (not an application fault). |
+* An API call failed due to a protocol error with the broker (not an application fault). |
* N/A |
*
*
@@ -824,17 +824,17 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_XML_PARSE_ERROR |
-* The appliance could not parse an XML message. |
+* The broker could not parse an XML message. |
* 400 XML Parse Error |
*
*
* SOLCLIENT_SUBCODE_LOGIN_FAILURE |
-* The client could not log into the appliance (bad username or password, unknown parameter, etc.) |
-* All 400, 401, 403 and 404 error codes from appliance |
+* The client could not log into the broker (bad username or password, unknown parameter, etc.) |
+* All 400, 401, 403 and 404 error codes from broker |
*
*
* SOLCLIENT_SUBCODE_INVALID_VIRTUAL_ADDRESS |
-* An attempt to connect to the wrong IP address on the appliance (must use CVRID if configured), or the appliance CVRID has changed and this was detected on reconnect. |
+* An attempt to connect to the wrong IP address on the broker (must use CVRID if configured), or the broker CVRID has changed and this was detected on reconnect. |
* 403 Invalid Virtual Router Address |
*
*
@@ -844,7 +844,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_TOO_MANY_CLIENTS |
-* The client login not currently possible due to maximum number of active clients on appliance has already been reached. |
+* The client login not currently possible due to maximum number of active clients on broker has already been reached. |
* "503 Too Many Clients" "503 Too Many Publishers" "503 Too Many Subscribers" "400 Too Many Subscribers" |
*
*
@@ -864,16 +864,16 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_SUBSCRIPTION_OTHER |
-* The appliance rejected a subscription add or remove request for a reason not separately enumerated. |
+* The broker rejected a subscription add or remove request for a reason not separately enumerated. |
*
*
* SOLCLIENT_SUBCODE_CONTROL_OTHER |
-* The appliance rejected a control message for another reason not separately enumerated. |
-* Default error subCode for appliance error responses |
+* The broker rejected a control message for another reason not separately enumerated. |
+* Default error subCode for broker error responses |
*
*
* SOLCLIENT_SUBCODE_DATA_OTHER |
-* The appliance rejected a data message for another reason not separately enumerated. |
+* The broker rejected a data message for another reason not separately enumerated. |
* Default error subCode for error response to published data |
*
*
@@ -883,7 +883,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_MESSAGE_TOO_LARGE |
-* The client attempted to send a message larger than that supported by the appliance. |
+* The client attempted to send a message larger than that supported by the broker. |
* "400 Document Is Too Large" "400 Message Too Long" |
*
*
@@ -963,17 +963,17 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_CLIENT_NAME_INVALID |
-* The client name chosen has been rejected as invalid by the appliance. |
+* The client name chosen has been rejected as invalid by the broker. |
* 400 Client Name Parse Error |
*
*
* SOLCLIENT_SUBCODE_MSG_VPN_UNAVAILABLE |
-* The Message VPN name set for the Session (or the default VPN if none was set) is currently shutdown on the appliance. |
+* The Message VPN name set for the Session (or the default VPN if none was set) is currently shutdown on the broker. |
* 503 Message VPN Unavailable |
*
*
* SOLCLIENT_SUBCODE_CLIENT_USERNAME_IS_SHUTDOWN |
-* The username for the client is administratively shutdown on the appliance. |
+* The username for the client is administratively shutdown on the broker. |
* 403 Client Username Is Shutdown |
*
*
@@ -983,7 +983,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_CLIENT_NAME_ALREADY_IN_USE |
-* The Session is attempting to use a client, publisher, or subscriber name that is in use by another client, publisher or subscriber and the appliance is configured to reject the new Session. When Message VPNs are in use, the conflicting client name must be in the same Message VPN. |
+* The Session is attempting to use a client, publisher, or subscriber name that is in use by another client, publisher or subscriber and the broker is configured to reject the new Session. When Message VPNs are in use, the conflicting client name must be in the same Message VPN. |
* "403 Client Name Already In Use" "403 Publisher Name Already In Use" "403 Subscriber Name Already In Use" |
*
*
@@ -1038,12 +1038,12 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_UNKNOWN_QUEUE_NAME |
-* An attempt was made to bind to an unknown Queue name (for example, not configured on appliance). |
+* An attempt was made to bind to an unknown Queue name (for example, not configured on broker). |
* 503 Unknown Queue |
*
*
* SOLCLIENT_SUBCODE_UNKNOWN_TE_NAME |
-* An attempt was made to bind to an unknown Guaranteed Delivery Topic Endpoint name (for example, not configured on appliance). |
+* An attempt was made to bind to an unknown Guaranteed Delivery Topic Endpoint name (for example, not configured on broker). |
* "503 Unknown Durable Topic Endpoint" |
*
*
@@ -1058,7 +1058,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_UNEXPECTED_UNBIND |
-* An unexpected unbind response was received for a Guaranteed Delivery Queue or Topic Endpoint (for example, Queue or Topic Endpoint was deleted from the appliance). |
+* An unexpected unbind response was received for a Guaranteed Delivery Queue or Topic Endpoint (for example, Queue or Topic Endpoint was deleted from the broker). |
* N/A |
*
*
@@ -1068,7 +1068,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_CLIENT_ACL_DENIED |
-* The client login to the appliance was denied because the IP address/netmask combination used for the client is designated in the ACL (Access Control List) as a deny connection for the given Message VPN and username. |
+* The client login to the broker was denied because the IP address/netmask combination used for the client is designated in the ACL (Access Control List) as a deny connection for the given Message VPN and username. |
* 403 Forbidden |
*
*
@@ -1105,7 +1105,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_NO_MORE_NON_DURABLE_QUEUE_OR_TE |
-* An attempt was made to bind to a non-durable Guaranteed Delivery Queue or Topic Endpoint, and the appliance is out of resources. |
+* An attempt was made to bind to a non-durable Guaranteed Delivery Queue or Topic Endpoint, and the broker is out of resources. |
* 503 No More Non-Durable Queue or Topic Endpoint |
*
*
@@ -1140,7 +1140,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_UNKNOWN_CLIENT_NAME |
-* An attempt was made to add a subscription to another client that is unknown on the appliance. |
+* An attempt was made to add a subscription to another client that is unknown on the broker. |
* 403 Unknown Client Name |
*
*
@@ -1161,7 +1161,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED |
-* The client attempted to establish a Session or Flow with No Local enabled and the capability is not supported by the appliance.
+* | The client attempted to establish a Session or Flow with No Local enabled and the capability is not supported by the broker.
* |
* N/A |
*
@@ -1218,7 +1218,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_LOW_PRIORITY_MSG_CONGESTION |
-* The message was rejected by the appliance as one or more matching endpoints exceeded the reject-low-priority-msg-limit. |
+* The message was rejected by the broker as one or more matching endpoints exceeded the reject-low-priority-msg-limit. |
* 503 Low Priority Msg Congestion |
*
*
@@ -1228,12 +1228,12 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_UNTRUSTED_CERTIFICATE |
-* The client attempted to connect to an appliance that has a suspect certficate. |
+* The client attempted to connect to an broker that has a suspect certficate. |
* N/A. |
*
*
* SOLCLIENT_SUBCODE_CERTIFICATE_DATE_INVALID |
-* The client attempted to connect to an appliance that does not have a valid certificate date. |
+* The client attempted to connect to an broker that does not have a valid certificate date. |
* N/A. |
*
*
@@ -1243,7 +1243,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_UNTRUSTED_COMMONNAME |
-* The client attempted to connect to an appliance that has a suspect common name. |
+* The client attempted to connect to an broker that has a suspect common name. |
* N/A. |
*
*
@@ -1253,27 +1253,27 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_BASIC_AUTHENTICATION_IS_SHUTDOWN |
-* The client attempted to connect to an appliance that has the basic authentication shutdown. |
+* The client attempted to connect to an broker that has the basic authentication shutdown. |
* 403 Basic Authentication is Shutdown |
*
*
* SOLCLIENT_SUBCODE_CLIENT_CERTIFICATE_AUTHENTICATION_IS_SHUTDOWN |
-* The client attempted to connect to an appliance that has the client certificate authentication shutdown. |
+* The client attempted to connect to an broker that has the client certificate authentication shutdown. |
* 403 Client Certificate Authentication is Shutdown |
*
*
* SOLCLIENT_SUBCODE_KERBEROS_AUTHENTICATION_IS_SHUTDOWN |
-* The client attempted to connect to an appliance that has the Kerberos authentication shutdown. |
+* The client attempted to connect to an broker that has the Kerberos authentication shutdown. |
* 403 Kerberos Authentication is Shutdown |
*
*
* SOLCLIENT_SUBCODE_UNTRUSTED_CLIENT_CERTIFICATE |
-* The client failed to connect to an appliance as it has a suspect client certificate. |
+* The client failed to connect to an broker as it has a suspect client certificate. |
* "403 Untrusted Certificate" "403 Certificate Chain Too Long" "403 Certificate Error" |
*
*
* SOLCLIENT_SUBCODE_CLIENT_CERTIFICATE_DATE_INVALID |
-* The client failed to connect to an appliance as it does not have a valid client certificate date. |
+* The client failed to connect to an broker as it does not have a valid client certificate date. |
* "403 Certificate Not Yet Valid" "403 Certificate Expired" |
*
*
@@ -1318,7 +1318,7 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_SERVICE_UNAVAILABLE |
-* Guaranteed Delivery services are not enabled on the appliance. |
+* Guaranteed Delivery services are not enabled on the broker. |
* 503 Service Unavailable |
*
*
@@ -1490,12 +1490,12 @@ typedef struct solClient_field {
*
*
* SOLCLIENT_SUBCODE_COMPRESSED_SSL_NOT_SUPPORTED |
-* The client attempted to establish a Session or Flow with ssl and compression, but the capability is not supported by the appliance. |
+* The client attempted to establish a Session or Flow with ssl and compression, but the capability is not supported by the broker. |
* N/A |
*
*
* SOLCLIENT_SUBCODE_SHARED_SUBSCRIPTIONS_NOT_SUPPORTED |
-* The client attempted to add a shared subscription, but the capability is not supported by the appliance. |
+* The client attempted to add a shared subscription, but the capability is not supported by the broker. |
* N/A |
*
*
@@ -1545,7 +1545,7 @@ typedef struct solClient_field {
SOLCLIENT_SUBCODE_OUT_OF_RESOURCES = 5, /**< An API call failed due to lack of resources (for example, starting a timer when all timers are in use). */
SOLCLIENT_SUBCODE_INTERNAL_ERROR = 6, /**< An API call had an internal error (not an application fault). */
SOLCLIENT_SUBCODE_OUT_OF_MEMORY = 7, /**< An API call failed due to inability to allocate memory. */
- SOLCLIENT_SUBCODE_PROTOCOL_ERROR = 8, /**< An API call failed due to a protocol error with the appliance (not an application fault). */
+ SOLCLIENT_SUBCODE_PROTOCOL_ERROR = 8, /**< An API call failed due to a protocol error with the broker (not an application fault). */
SOLCLIENT_SUBCODE_INIT_NOT_CALLED = 9, /**< An API call failed due to solClient_initialize() not being called first. */
SOLCLIENT_SUBCODE_TIMEOUT = 10, /**< An API call failed due to a timeout. */
SOLCLIENT_SUBCODE_KEEP_ALIVE_FAILURE = 11, /**< The Session Keep-Alive detected a failed Session. */
@@ -1555,19 +1555,19 @@ typedef struct solClient_field {
SOLCLIENT_SUBCODE_USER_DATA_TOO_LARGE = 15, /**< An attempt was made to send a message with user data larger than the maximum that is supported. */
SOLCLIENT_SUBCODE_TOPIC_TOO_LARGE = 16, /**< An attempt was made to use a Topic that is longer than the maximum that is supported. */
SOLCLIENT_SUBCODE_INVALID_TOPIC_SYNTAX = 17, /**< An attempt was made to use a Topic that has a syntax which is not supported. */
- SOLCLIENT_SUBCODE_XML_PARSE_ERROR = 18, /**< The appliance could not parse an XML message. */
- SOLCLIENT_SUBCODE_LOGIN_FAILURE = 19, /**< The client could not log into the appliance (bad username or password). */
- SOLCLIENT_SUBCODE_INVALID_VIRTUAL_ADDRESS = 20, /**< An attempt was made to connect to the wrong IP address on the appliance (must use CVRID if configured) or the appliance CVRID has changed and this was detected on reconnect. */
+ SOLCLIENT_SUBCODE_XML_PARSE_ERROR = 18, /**< The broker could not parse an XML message. */
+ SOLCLIENT_SUBCODE_LOGIN_FAILURE = 19, /**< The client could not log into the broker (bad username or password). */
+ SOLCLIENT_SUBCODE_INVALID_VIRTUAL_ADDRESS = 20, /**< An attempt was made to connect to the wrong IP address on the broker (must use CVRID if configured) or the broker CVRID has changed and this was detected on reconnect. */
SOLCLIENT_SUBCODE_CLIENT_DELETE_IN_PROGRESS = 21, /**< The client login not currently possible as previous instance of same client still being deleted. */
- SOLCLIENT_SUBCODE_TOO_MANY_CLIENTS = 22, /**< The client login not currently possible because the maximum number of active clients on appliance has already been reached. */
+ SOLCLIENT_SUBCODE_TOO_MANY_CLIENTS = 22, /**< The client login not currently possible because the maximum number of active clients on broker has already been reached. */
SOLCLIENT_SUBCODE_SUBSCRIPTION_ALREADY_PRESENT = 23, /**< The client attempted to add a subscription which already exists. This subcode is only returned if the Session property SOLCLIENT_SESSION_PROP_IGNORE_DUP_SUBSCRIPTION_ERROR is not enabled. */
SOLCLIENT_SUBCODE_SUBSCRIPTION_NOT_FOUND = 24, /**< The client attempted to remove a subscription which did not exist. This subcode is only returned if the Session property SOLCLIENT_SESSION_PROP_IGNORE_DUP_SUBSCRIPTION_ERROR is not enabled. */
SOLCLIENT_SUBCODE_SUBSCRIPTION_INVALID = 25, /**< The client attempted to add/remove a subscription that is not valid. */
- SOLCLIENT_SUBCODE_SUBSCRIPTION_OTHER = 26, /**< The appliance rejected a subscription add or remove request for a reason not separately enumerated. */
- SOLCLIENT_SUBCODE_CONTROL_OTHER = 27, /**< The appliance rejected a control message for another reason not separately enumerated. */
- SOLCLIENT_SUBCODE_DATA_OTHER = 28, /**< The appliance rejected a data message for another reason not separately enumerated. */
+ SOLCLIENT_SUBCODE_SUBSCRIPTION_OTHER = 26, /**< The broker rejected a subscription add or remove request for a reason not separately enumerated. */
+ SOLCLIENT_SUBCODE_CONTROL_OTHER = 27, /**< The broker rejected a control message for another reason not separately enumerated. */
+ SOLCLIENT_SUBCODE_DATA_OTHER = 28, /**< The broker rejected a data message for another reason not separately enumerated. */
SOLCLIENT_SUBCODE_LOG_FILE_ERROR = 29, /**< Could not open the log file name specified by the application for writing (Deprecated - ::SOLCLIENT_SUBCODE_OS_ERROR is used). */
- SOLCLIENT_SUBCODE_MESSAGE_TOO_LARGE = 30, /**< The client attempted to send a message larger than that supported by the appliance. */
+ SOLCLIENT_SUBCODE_MESSAGE_TOO_LARGE = 30, /**< The client attempted to send a message larger than that supported by the broker. */
SOLCLIENT_SUBCODE_SUBSCRIPTION_TOO_MANY = 31, /**< The client attempted to add a subscription that exceeded the maximum number allowed. */
SOLCLIENT_SUBCODE_INVALID_SESSION_OPERATION = 32, /**< An API call failed due to the attempted operation not being valid for the Session. */
SOLCLIENT_SUBCODE_TOPIC_MISSING = 33, /**< A send call was made that did not have a Topic in a mode where one is required (for example, client mode). */
@@ -1583,11 +1583,11 @@ typedef struct solClient_field {
SOLCLIENT_SUBCODE_INVALID_DATA_CONVERSION = 43, /**< An attempt was made to retrieve structured data with wrong type. */
SOLCLIENT_SUBCODE_CANNOT_MODIFY_WHILE_NOT_IDLE = 44, /**< An attempt was made to modify a property that cannot be modified while Session is not idle. */
SOLCLIENT_SUBCODE_MSG_VPN_NOT_ALLOWED = 45, /**< The Message VPN name configured for the session does not exist. */
- SOLCLIENT_SUBCODE_CLIENT_NAME_INVALID = 46, /**< The client name chosen has been rejected as invalid by the appliance. */
- SOLCLIENT_SUBCODE_MSG_VPN_UNAVAILABLE = 47, /**< The Message VPN name set for the Session (or the default Message VPN, if none was set) is currently shutdown on the appliance. */
- SOLCLIENT_SUBCODE_CLIENT_USERNAME_IS_SHUTDOWN = 48, /**< The username for the client is administratively shutdown on the appliance. */
+ SOLCLIENT_SUBCODE_CLIENT_NAME_INVALID = 46, /**< The client name chosen has been rejected as invalid by the broker. */
+ SOLCLIENT_SUBCODE_MSG_VPN_UNAVAILABLE = 47, /**< The Message VPN name set for the Session (or the default Message VPN, if none was set) is currently shutdown on the broker. */
+ SOLCLIENT_SUBCODE_CLIENT_USERNAME_IS_SHUTDOWN = 48, /**< The username for the client is administratively shutdown on the broker. */
SOLCLIENT_SUBCODE_DYNAMIC_CLIENTS_NOT_ALLOWED = 49, /**< The username for the Session has not been set and dynamic clients are not allowed. */
- SOLCLIENT_SUBCODE_CLIENT_NAME_ALREADY_IN_USE = 50, /**< The Session is attempting to use a client, publisher name, or subscriber name that is in use by another client, publisher, or subscriber, and the appliance is configured to reject the new Session. When Message VPNs are in use, the conflicting client name must be in the same Message VPN. */
+ SOLCLIENT_SUBCODE_CLIENT_NAME_ALREADY_IN_USE = 50, /**< The Session is attempting to use a client, publisher name, or subscriber name that is in use by another client, publisher, or subscriber, and the broker is configured to reject the new Session. When Message VPNs are in use, the conflicting client name must be in the same Message VPN. */
SOLCLIENT_SUBCODE_CACHE_NO_DATA = 51, /**< When the cache request returns ::SOLCLIENT_INCOMPLETE, this subcode indicates there is no cached data in the designated cache. */
SOLCLIENT_SUBCODE_CACHE_SUSPECT_DATA = 52, /**< When the designated cache responds to a cache request with suspect data the API returns ::SOLCLIENT_INCOMPLETE with this subcode. */
SOLCLIENT_SUBCODE_CACHE_ERROR_RESPONSE = 53, /**< The cache instance has returned an error response to the request. */
@@ -1599,36 +1599,36 @@ typedef struct solClient_field {
SOLCLIENT_SUBCODE_CANNOT_BIND_TO_QUEUE = 59, /**< Already bound to the queue, or not authorized to bind to the queue. */
SOLCLIENT_SUBCODE_INVALID_TOPIC_NAME_FOR_TE = 60, /**< An attempt was made to bind to a Topic Endpoint with an invalid topic. */
SOLCLIENT_SUBCODE_INVALID_TOPIC_NAME_FOR_DTE = SOLCLIENT_SUBCODE_INVALID_TOPIC_NAME_FOR_TE, /**< Deprecated name; ::SOLCLIENT_SUBCODE_INVALID_TOPIC_NAME_FOR_TE is preferred. */
- SOLCLIENT_SUBCODE_UNKNOWN_QUEUE_NAME = 61, /**< An attempt was made to bind to an unknown Queue name (for example, not configured on appliance).*/
- SOLCLIENT_SUBCODE_UNKNOWN_TE_NAME = 62, /**< An attempt was made to bind to an unknown Topic Endpoint name (for example, not configured on appliance). */
+ SOLCLIENT_SUBCODE_UNKNOWN_QUEUE_NAME = 61, /**< An attempt was made to bind to an unknown Queue name (for example, not configured on broker).*/
+ SOLCLIENT_SUBCODE_UNKNOWN_TE_NAME = 62, /**< An attempt was made to bind to an unknown Topic Endpoint name (for example, not configured on broker). */
SOLCLIENT_SUBCODE_UNKNOWN_DTE_NAME = SOLCLIENT_SUBCODE_UNKNOWN_TE_NAME, /**< Deprecated name; ::SOLCLIENT_SUBCODE_UNKNOWN_TE_NAME is preferred. */
SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_QUEUE = 63, /**< An attempt was made to bind to a Queue that already has a maximum number of clients. */
SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_TE = 64, /**< An attempt was made to bind to a Topic Endpoint that already has a maximum number of clients. */
SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_DTE = SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_TE, /**< Deprecated name, ::SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_TE is preferred. */
- SOLCLIENT_SUBCODE_UNEXPECTED_UNBIND = 65, /**< An unexpected unbind response was received for a Queue or Topic Endpoint (for example, the Queue or Topic Endpoint was deleted from the appliance). */
+ SOLCLIENT_SUBCODE_UNEXPECTED_UNBIND = 65, /**< An unexpected unbind response was received for a Queue or Topic Endpoint (for example, the Queue or Topic Endpoint was deleted from the broker). */
SOLCLIENT_SUBCODE_QUEUE_NOT_FOUND = 66, /**< The specified Queue was not found when publishing a message. */
- SOLCLIENT_SUBCODE_CLIENT_ACL_DENIED = 67, /**< The client login to the appliance was denied because the IP address/netmask combination used for the client is designated in the ACL (Access Control List) as a deny connection for the given Message VPN and username. */
+ SOLCLIENT_SUBCODE_CLIENT_ACL_DENIED = 67, /**< The client login to the broker was denied because the IP address/netmask combination used for the client is designated in the ACL (Access Control List) as a deny connection for the given Message VPN and username. */
SOLCLIENT_SUBCODE_SUBSCRIPTION_ACL_DENIED = 68, /**< Adding a subscription was denied because it matched a subscription that was defined on the ACL (Access Control List). */
SOLCLIENT_SUBCODE_PUBLISH_ACL_DENIED = 69, /**< A message could not be published because its Topic matched a Topic defined on the ACL (Access Control List). */
SOLCLIENT_SUBCODE_DELIVER_TO_ONE_INVALID = 70, /**< An attempt was made to set both Deliver-To-One (DTO) and Guaranteed Delivery in the same message. (Deprecated: DTO will be applied to the corresponding demoted direct message) */
SOLCLIENT_SUBCODE_SPOOL_OVER_QUOTA = 71, /**< Message was not delivered because the Guaranteed message spool is over its allotted space quota. */
SOLCLIENT_SUBCODE_QUEUE_SHUTDOWN = 72, /**< An attempt was made to operate on a shutdown queue. */
SOLCLIENT_SUBCODE_TE_SHUTDOWN = 73, /**< An attempt was made to bind to a shutdown Topic Endpoint. */
- SOLCLIENT_SUBCODE_NO_MORE_NON_DURABLE_QUEUE_OR_TE = 74, /**< An attempt was made to bind to a non-durable Queue or Topic Endpoint, and the appliance is out of resources. */
+ SOLCLIENT_SUBCODE_NO_MORE_NON_DURABLE_QUEUE_OR_TE = 74, /**< An attempt was made to bind to a non-durable Queue or Topic Endpoint, and the broker is out of resources. */
SOLCLIENT_SUBCODE_ENDPOINT_ALREADY_EXISTS = 75, /**< An attempt was made to create a Queue or Topic Endpoint that already exists. This subcode is only returned if the provision flag SOLCLIENT_PROVISION_FLAGS_IGNORE_EXIST_ERRORS is not set. */
SOLCLIENT_SUBCODE_PERMISSION_NOT_ALLOWED = 76, /**< An attempt was made to delete or create a Queue or Topic Endpoint when the Session does not have authorization for the action. This subcode is also returned when an attempt is made to remove a message from an endpoint when the Session does not have 'consume' authorization, or when an attempt is made to add or remove a Topic subscription from a Queue when the Session does not have 'modify-topic' authorization. */
SOLCLIENT_SUBCODE_INVALID_SELECTOR = 77, /**< An attempt was made to bind to a Queue or Topic Endpoint with an invalid selector. */
SOLCLIENT_SUBCODE_MAX_MESSAGE_USAGE_EXCEEDED = 78, /**< Publishing of message denied because the maximum spooled message count was exceeded. */
SOLCLIENT_SUBCODE_ENDPOINT_PROPERTY_MISMATCH = 79, /**< An attempt was made to create a dynamic durable endpoint and it was found to exist with different properties. */
SOLCLIENT_SUBCODE_SUBSCRIPTION_MANAGER_DENIED = 80, /**< An attempt was made to add a subscription to another client when Session does not have subscription manager privileges. */
- SOLCLIENT_SUBCODE_UNKNOWN_CLIENT_NAME = 81, /**< An attempt was made to add a subscription to another client that is unknown on the appliance. */
+ SOLCLIENT_SUBCODE_UNKNOWN_CLIENT_NAME = 81, /**< An attempt was made to add a subscription to another client that is unknown on the broker. */
SOLCLIENT_SUBCODE_QUOTA_OUT_OF_RANGE = 82, /**< An attempt was made to provision an endpoint with a quota that is out of range. */
SOLCLIENT_SUBCODE_SUBSCRIPTION_ATTRIBUTES_CONFLICT = 83, /**< The client attempted to add a subscription which already exists but it has different properties */
SOLCLIENT_SUBCODE_INVALID_SMF_MESSAGE = 84, /**< The client attempted to send a Solace Message Format (SMF) message using solClient_session_sendSmf() or solClient_session_sendMultipleSmf(), but the buffer did not contain a Direct message. */
- SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED = 85, /**< The client attempted to establish a Session or Flow with No Local enabled and the capability is not supported by the appliance. */
+ SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED = 85, /**< The client attempted to establish a Session or Flow with No Local enabled and the capability is not supported by the broker. */
SOLCLIENT_SUBCODE_UNSUBSCRIBE_NOT_ALLOWED_CLIENTS_BOUND = 86, /**< The client attempted to unsubscribe a Topic from a Topic Endpoint while there were still Flows bound to the endpoint. */
SOLCLIENT_SUBCODE_CANNOT_BLOCK_IN_CONTEXT = 87, /**< An API function was invoked in the Context thread that would have blocked otherwise. For an example, a call may have been made to send a message when the Session is configured with ::SOLCLIENT_SESSION_PROP_SEND_BLOCKING enabled and the transport (socket or IPC) channel is full. All application callback functions are executed in the Context thread. */
- SOLCLIENT_SUBCODE_FLOW_ACTIVE_FLOW_INDICATION_UNSUPPORTED = 88, /**< The client attempted to establish a Flow with Active Flow Indication (SOLCLIENT_FLOW_PROP_ACTIVE_FLOW_IND) enabled and the capability is not supported by the appliance */
+ SOLCLIENT_SUBCODE_FLOW_ACTIVE_FLOW_INDICATION_UNSUPPORTED = 88, /**< The client attempted to establish a Flow with Active Flow Indication (SOLCLIENT_FLOW_PROP_ACTIVE_FLOW_IND) enabled and the capability is not supported by the broker */
SOLCLIENT_SUBCODE_UNRESOLVED_HOST = 89, /**< The client failed to connect because the host name could not be resolved. */
SOLCLIENT_SUBCODE_CUT_THROUGH_UNSUPPORTED = 90, /**< An attempt was made to create a 'cut-through' Flow on a Session that does not support this capability */
SOLCLIENT_SUBCODE_CUT_THROUGH_ALREADY_BOUND = 91, /**< An attempt was made to create a 'cut-through' Flow on a Session that already has one 'cut-through' Flow */
@@ -1636,17 +1636,17 @@ typedef struct solClient_field {
SOLCLIENT_SUBCODE_INVALID_FLOW_OPERATION = 93, /**< An API call failed due to the attempted operation not being valid for the Flow. */
SOLCLIENT_SUBCODE_UNKNOWN_FLOW_NAME = 94, /** 0. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_BUFFER_SIZE */
#define SOLCLIENT_SESSION_PROP_CONNECT_BLOCKING "SESSION_CONNECT_BLOCKING" /**< Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking connect operation. A blocking connect operation suspends until the Session is successfully connected, including restoring all remembered subscriptions if ::SOLCLIENT_SESSION_PROP_REAPPLY_SUBSCRIPTIONS is enabled. Otherwise solClient_session_connect() returns SOLCLIENT_IN_PROGRESS. @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_CONNECT_BLOCKING */
-#define SOLCLIENT_SESSION_PROP_SEND_BLOCKING "SESSION_SEND_BLOCKING" /**< Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking send operation. A blocking send operation suspends when the Session is transport flow controlled, otherwise the send operation returns SOLCLIENT_WOULD_BLOCK. Successful return from a blocking send operation only means the message has been accepted by the transport, it does not guarantee the message has been processed by the appliance. For the latter you must used Guaranteed Message Delivery mode and wait for the session event (::SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT) that acknowledges the message. @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SEND_BLOCKING */
-#define SOLCLIENT_SESSION_PROP_SUBSCRIBE_BLOCKING "SESSION_SUBSCRIBE_BLOCKING" /**< Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking subscribe/unsubscribe operation. A blocking subscribe operation will suspend when the Session is transport flow controlled, otherwise the subscribe operation returns SOLCLIENT_WOULD_BLOCK. A successful return from a blocking subscribe operation only means the subscription has been accepted by the transport, it does not guarantee the subscription has been processed by the appliance. For the latter you must use a confirmed operation (see ::SOLCLIENT_SUBSCRIBE_FLAGS_WAITFORCONFIRM) @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SUBSCRIBE_BLOCKING */
+#define SOLCLIENT_SESSION_PROP_SEND_BLOCKING "SESSION_SEND_BLOCKING" /**< Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking send operation. A blocking send operation suspends when the Session is transport flow controlled, otherwise the send operation returns SOLCLIENT_WOULD_BLOCK. Successful return from a blocking send operation only means the message has been accepted by the transport, it does not guarantee the message has been processed by the broker. For the latter you must used Guaranteed Message Delivery mode and wait for the session event (::SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT) that acknowledges the message. @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SEND_BLOCKING */
+#define SOLCLIENT_SESSION_PROP_SUBSCRIBE_BLOCKING "SESSION_SUBSCRIBE_BLOCKING" /**< Use ::SOLCLIENT_PROP_ENABLE_VAL to enable blocking subscribe/unsubscribe operation. A blocking subscribe operation will suspend when the Session is transport flow controlled, otherwise the subscribe operation returns SOLCLIENT_WOULD_BLOCK. A successful return from a blocking subscribe operation only means the subscription has been accepted by the transport, it does not guarantee the subscription has been processed by the broker. For the latter you must use a confirmed operation (see ::SOLCLIENT_SUBSCRIBE_FLAGS_WAITFORCONFIRM) @see @ref blocking-context "Threading Effects on Blocking Modes" for a discussion of blocking operation in the Context thread. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SUBSCRIBE_BLOCKING */
#define SOLCLIENT_SESSION_PROP_BLOCK_WHILE_CONNECTING "SESSION_BLOCK_WHILE_CONNECTING" /**< Use ::SOLCLIENT_PROP_ENABLE_VAL to block the calling thread on operations such as sending a message, subscribing, or unsubscribing when the Session is being connected or reconnected. The operation must already be blocking (see ::SOLCLIENT_SESSION_PROP_SEND_BLOCKING and ::SOLCLIENT_SESSION_PROP_SUBSCRIBE_BLOCKING). Otherwise, ::SOLCLIENT_NOT_READY is returned if the Session is being connected. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_BLOCK_WHILE_CONNECTING */
#define SOLCLIENT_SESSION_PROP_BLOCKING_WRITE_TIMEOUT_MS "SESSION_WRITE_TIMEOUT_MS" /**< The timeout period (in milliseconds) for blocking write operation. The valid range is > 0. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_BLOCKING_WRITE_TIMEOUT_MS */
#define SOLCLIENT_SESSION_PROP_CONNECT_TIMEOUT_MS "SESSION_CONNECT_TIMEOUT_MS" /**< The timeout period (in milliseconds) for a connect operation to a given host (per host). The valid range is > 0. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_CONNECT_TIMEOUT_MS */
@@ -2066,16 +2066,16 @@ solClient_dllExport extern const char *_solClient_contextPropsDefaultWithCreateT
* Note that Linux operating system actually allocates twice the size of the buffer requested in the setsockopt(2) call, and so a succeeding getsockopt(2) call will not return the same size of buffer as requested in the setsockopt(2) call. TCP uses the extra space for administrative purposes and internal kernel structures, and the sysctl variables reflect the larger sizes compared to the actual TCP windows.
*/
#define SOLCLIENT_SESSION_PROP_SOCKET_RCV_BUF_SIZE "SESSION_SOCKET_RCV_BUF_SIZE" /**< The value for socket receive buffer size (in bytes). 0 indicates do not set and leave at operating system default. The valid range is 0 or >= 1024. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SOCKET_RCV_BUF_SIZE */
-#define SOLCLIENT_SESSION_PROP_KEEP_ALIVE_INT_MS "SESSION_KEEP_ALIVE_INTERVAL_MS" /**< The amount of time (in milliseconds) to wait between sending out Keep-Alive messages. Typically, this feature should be enabled for message receivers. Use 0 to disable Keep-Alives (0 is required before appliance release 4.2). The valid range is 0 (disabled) or >= 50. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_KEEP_ALIVE_INT_MS */
+#define SOLCLIENT_SESSION_PROP_KEEP_ALIVE_INT_MS "SESSION_KEEP_ALIVE_INTERVAL_MS" /**< The amount of time (in milliseconds) to wait between sending out Keep-Alive messages. Typically, this feature should be enabled for message receivers. Use 0 to disable Keep-Alives (0 is required before broker release 4.2). The valid range is 0 (disabled) or >= 50. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_KEEP_ALIVE_INT_MS */
#define SOLCLIENT_SESSION_PROP_KEEP_ALIVE_LIMIT "SESSION_KEEP_ALIVE_LIMIT" /**< The maximum number of consecutive Keep-Alive messages that can be sent without receiving a response before the connection is closed by the API. The valid range is >= 3. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_KEEP_ALIVE_LIMIT */
#define SOLCLIENT_SESSION_PROP_APPLICATION_DESCRIPTION "SESSION_APPLICATION_DESCRIPTION" /**< A string that uniquely describes the application instance. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_APPLICATION_DESCRIPTION */
-#define SOLCLIENT_SESSION_PROP_CLIENT_MODE "SESSION_CLIENT_MODE" /**< Deprecated. The CCSMP API detects the appliance capabilities, so it is no longer necessary to specify to use 'clientMode' or not. This property is ignored when specified. */
+#define SOLCLIENT_SESSION_PROP_CLIENT_MODE "SESSION_CLIENT_MODE" /**< Deprecated. The CCSMP API detects the broker capabilities, so it is no longer necessary to specify to use 'clientMode' or not. This property is ignored when specified. */
#define SOLCLIENT_SESSION_PROP_BIND_IP "SESSION_BIND_IP" /**< (Optional) The hostname or IP address of the machine on which the application is running. On a multihomed machine, it is strongly recommended to provide this parameter to ensure that the API uses the correct network interface at Session connect time. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_BIND_IP */
-#define SOLCLIENT_SESSION_PROP_PUB_WINDOW_SIZE "SESSION_PUB_WINDOW_SIZE" /**< The publisher window size for Guaranteed messages. The Guaranteed Message Publish Window Size property limits the maximum number of messages that can be published before the API must receive an acknowledgment from the appliance. The valid range is 1..255, or 0 to disable publishing Guaranteed messages. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_PUB_WINDOW_SIZE */
+#define SOLCLIENT_SESSION_PROP_PUB_WINDOW_SIZE "SESSION_PUB_WINDOW_SIZE" /**< The publisher window size for Guaranteed messages. The Guaranteed Message Publish Window Size property limits the maximum number of messages that can be published before the API must receive an acknowledgment from the broker. The valid range is 1..255, or 0 to disable publishing Guaranteed messages. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_PUB_WINDOW_SIZE */
#define SOLCLIENT_SESSION_PROP_PUB_ACK_TIMER "SESSION_PUB_ACK_TIMER" /**< The duration of publisher acknowledgment timer (in milliseconds). When a published message is not acknowledged within the time specified for this timer, the API automatically retransmits the message. There is no limit on the number of retransmissions for any message. However, while the API is resending, applications can become flow controlled. The flow control behavior is controlled by ::SOLCLIENT_SESSION_PROP_SEND_BLOCKING and ::SOLCLIENT_SESSION_PROP_BLOCKING_WRITE_TIMEOUT_MS. The valid range is 20..60000. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_PUB_ACK_TIMER */
-#define SOLCLIENT_SESSION_PROP_VPN_NAME "SESSION_VPN_NAME" /**< The name of the Message VPN to attempt to join when connecting to an appliance running SolOS-TR. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_VPN_NAME */
+#define SOLCLIENT_SESSION_PROP_VPN_NAME "SESSION_VPN_NAME" /**< The name of the Message VPN to attempt to join when connecting to an broker running SolOS-TR. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_VPN_NAME */
#define SOLCLIENT_SESSION_PROP_VPN_NAME_IN_USE "SESSION_VPN_NAME_IN_USE" /**< A read-only Session property that indicates which Message VPN the Session is connected to. When not connected, an empty string is returned. */
-#define SOLCLIENT_SESSION_PROP_CLIENT_NAME "SESSION_CLIENT_NAME" /**< The Session client name that is used during client login to create a unique Session. An empty string causes a unique client name to be generated automatically. If specified, it must be a valid Topic name, and a maximum of 160 bytes in length. For all appliances (SolOS-TR or SolOS-CR) the SOLCLIENT_SESSION_PROP_CLIENT_NAME is also used to uniquely identify the sender in a message's senderId field if ::SOLCLIENT_SESSION_PROP_GENERATE_SENDER_ID is set. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_CLIENT_NAME */
+#define SOLCLIENT_SESSION_PROP_CLIENT_NAME "SESSION_CLIENT_NAME" /**< The Session client name that is used during client login to create a unique Session. An empty string causes a unique client name to be generated automatically. If specified, it must be a valid Topic name, and a maximum of 160 bytes in length. For all brokers (SolOS-TR or SolOS-CR) the SOLCLIENT_SESSION_PROP_CLIENT_NAME is also used to uniquely identify the sender in a message's senderId field if ::SOLCLIENT_SESSION_PROP_GENERATE_SENDER_ID is set. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_CLIENT_NAME */
#define SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL "SESSION_COMPRESSION_LEVEL" /**< Enables messages to be compressed with ZLIB before transmission and decompressed on receive. The valid range is 0 (off) or 1..9, where 1 is less compression (fastest) and 9 is most compression (slowest). Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_COMPRESSION_LEVEL
Note: If no port is specified in the SESSION_HOST property, the API will automatically connect to either the default non-compressed listen port (55555)
@@ -2086,11 +2086,11 @@ specify the non-compressed listen port if not using compression (compression lev
#define SOLCLIENT_SESSION_PROP_GENERATE_SENDER_ID "SESSION_SEND_SENDER_ID" /**< When enabled, a sender ID is automatically included (if not already present) in the Solace-defined fields for each message sent. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_GENERATE_SENDER_ID */
#define SOLCLIENT_SESSION_PROP_GENERATE_SEQUENCE_NUMBER "SESSION_SEND_SEQUENCE_NUMBER" /**< When enabled, a sequence number is automatically included (if not already present) in the Solace-defined fields for each message sent. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_GENERATE_SEQUENCE_NUMBER */
#define SOLCLIENT_SESSION_PROP_CONNECT_RETRIES_PER_HOST "SESSION_CONNECT_RETRIES_PER_HOST" /**< When using a host list, this property defines how many times to try to connect or reconnect to a single host before moving to the next host in the list. A value of 0 (the default) means make a single connection attempt (that is, 0 retries). A value of -1 means attempt an infinite number of reconnect retries (that is, the API will only try to connect or reconnect to first host listed.) NOTE: This property works in conjunction with the connect and reconnect retries Session properties; it does not replace them.*/
-#define SOLCLIENT_SESSION_PROP_CONNECT_RETRIES "SESSION_CONNECT_RETRIES" /**< How many times to try to connect to the host appliance (or list of appliances) during connection setup. Zero means no automatic connection retries (that is, try once and give up). -1 means try to connect forever. The default valid range is >= -1.
+#define SOLCLIENT_SESSION_PROP_CONNECT_RETRIES "SESSION_CONNECT_RETRIES" /**< How many times to try to connect to the host broker (or list of broker) during connection setup. Zero means no automatic connection retries (that is, try once and give up). -1 means try to connect forever. The default valid range is >= -1.
When using a host list, each time the API works through the host list without establishing a connection is considered an connect retry. For example, if a SOLCLIENT_SESSION_PROP_CONNECT_RETRIES value of two is used, the API could possibly work through all of the listed hosts without connecting to them three times: one time through for the initial connect attempt, and then two times through for connect retries. Each connect retry begins with the first host listed.
After each unsuccessful attempt to connect to a host, the API waits for the amount of time set for SOLCLIENT_SESSION_PROP_RECONNECT_RETRY_WAIT_MS before attempting another connection to a host, and the number times to attempt to connect to one host before moving on to the next listed host is determined by the value set for SOLCLIENT_SESSION_PROP_CONNECT_RETRIES_PER_HOST. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_CONNECT_RETRIES */
-#define SOLCLIENT_SESSION_PROP_RECONNECT_RETRIES "SESSION_RECONNECT_RETRIES" /**= -1.
+#define SOLCLIENT_SESSION_PROP_RECONNECT_RETRIES "SESSION_RECONNECT_RETRIES" /**= -1.
When using a host list, each time the API works through the host list without establishing a connection is considered a reconnect retry. Each reconnect retry begins with the first host listed.
After each unsuccessful attempt to reconnect to a host, the API waits for the amount of time set for SOLCLIENT_SESSION_PROP_RECONNECT_RETRY_WAIT_MS before attempting another connection to a host, and the number times to attempt to connect to one host before moving on to the next listed host is determined by the value set for SOLCLIENT_SESSION_PROP_CONNECT_RETRIES_PER_HOST.
@@ -2105,9 +2105,9 @@ The valid range is >=0. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_RECONNECT_RETR
#define SOLCLIENT_SESSION_PROP_TOPIC_DISPATCH "SESSION_TOPIC_DISPATCH" /**< Use ::SOLCLIENT_PROP_ENABLE_VAL to have the API dispatch messages based on Topic (see @ref topic-dispatch). Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_TOPIC_DISPATCH */
#define SOLCLIENT_SESSION_PROP_PROVISION_TIMEOUT_MS "SESSION_PROVISION_TIMEOUT_MS" /**< Maximum amount of time (in milliseconds) to wait for a provision command (create or delete an endpoint) */
#define SOLCLIENT_SESSION_PROP_CALCULATE_MESSAGE_EXPIRATION "SESSION_CALCULATE_MESSAGE_EXPIRATION" /**< If this property is true and time-to-live (::solClient_msg_setTimeToLive()) has a positive value in a message, the expiration time is calculated when the message is sent or received and can be retrieved with ::solClient_msg_getExpiration. */
-#define SOLCLIENT_SESSION_PROP_VIRTUAL_ROUTER_NAME "SESSION_VIRTUAL_ROUTER_NAME" /**< A read-only property that indicates the connected appliance's virtual router name. Appliance endpoint and destination names created with a virtual router name are valid for use with that appliance, or to address destinations on remote appliances (in a multiple-appliance network) when publishing messages. Applications requiring the virtual router name do not need to poll this property every time it is required, and they may cache the name. Applications should query the name once after connecting the Session, and again after a reconnect operation reports the ::SOLCLIENT_SESSION_EVENT_VIRTUAL_ROUTER_NAME_CHANGED event. Prior to connecting, an empty string is returned. */
-#define SOLCLIENT_SESSION_PROP_NO_LOCAL "SESSION_NO_LOCAL" /**< If this property is true, messages published on the Session cannot be received on the same Session even if the client has a subscription that matches the published topic. If this restriction is requested, and the appliance does not have No Local support, the Session connect will fail with subcode ::SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED. */
-#define SOLCLIENT_SESSION_PROP_AD_PUB_ROUTER_WINDOWED_ACK "SESSION_AD_PUB_ROUTER_WINDOWED_ACK" /**< When disabled, initiate a window size of 1 to appliance, but do not wait for acknowledgments before transmitting up to the actual window size. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_AD_PUB_ROUTER_WINDOWED_ACK */
+#define SOLCLIENT_SESSION_PROP_VIRTUAL_ROUTER_NAME "SESSION_VIRTUAL_ROUTER_NAME" /**< A read-only property that indicates the connected broker's virtual router name. Appliance endpoint and destination names created with a virtual router name are valid for use with that broker, or to address destinations on remote brokers (in a multiple-broker network) when publishing messages. Applications requiring the virtual router name do not need to poll this property every time it is required, and they may cache the name. Applications should query the name once after connecting the Session, and again after a reconnect operation reports the ::SOLCLIENT_SESSION_EVENT_VIRTUAL_ROUTER_NAME_CHANGED event. Prior to connecting, an empty string is returned. */
+#define SOLCLIENT_SESSION_PROP_NO_LOCAL "SESSION_NO_LOCAL" /**< If this property is true, messages published on the Session cannot be received on the same Session even if the client has a subscription that matches the published topic. If this restriction is requested, and the broker does not have No Local support, the Session connect will fail with subcode ::SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED. */
+#define SOLCLIENT_SESSION_PROP_AD_PUB_ROUTER_WINDOWED_ACK "SESSION_AD_PUB_ROUTER_WINDOWED_ACK" /**< When disabled, initiate a window size of 1 to broker, but do not wait for acknowledgments before transmitting up to the actual window size. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_AD_PUB_ROUTER_WINDOWED_ACK */
#define SOLCLIENT_SESSION_PROP_MODIFYPROP_TIMEOUT_MS "SESSION_MODIFYPROP_TIMEOUT_MS" /**< Maximum amount of time (in milliseconds) to wait for session property modification. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_MODIFYPROP_TIMEOUT_MS */
#define SOLCLIENT_SESSION_PROP_ACK_EVENT_MODE "SESSION_ACK_EVENT_MODE" /**< This property specifies if a session event ::SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT acknowledges a single message (see ::SOLCLIENT_SESSION_PROP_ACK_EVENT_MODE_PER_MSG) or a range of messages (see ::SOLCLIENT_SESSION_PROP_ACK_EVENT_MODE_WINDOWED). Default: ::SOLCLIENT_SESSION_PROP_ACK_EVENT_MODE_PER_MSG. \n Setting this property to ::SOLCLIENT_SESSION_PROP_ACK_EVENT_MODE_WINDOWED will not affect RejectedMessageError events, they will still be emitted on a per message basis. */
#define SOLCLIENT_SESSION_PROP_SSL_EXCLUDED_PROTOCOLS "SESSION_SSL_EXCLUDED_PROTOCOLS" /**< This property specifies a comma separated list of excluded SSL protocol(s). Valid SSL protocols are 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2'. Default: ::SOLCLIENT_SESSION_PROP_DEFAULT_SSL_EXCLUDED_PROTOCOLS. */
@@ -2239,10 +2239,10 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
/*@{*/
#define SOLCLIENT_SESSION_PROP_DEFAULT_USERNAME "" /**< The default value for username. */
#define SOLCLIENT_SESSION_PROP_DEFAULT_PASSWORD "" /**< The default value for password. */
-#define SOLCLIENT_SESSION_PROP_DEFAULT_HOST "127.0.0.1" /**< The default value for the appliance IP address. */
-#define SOLCLIENT_SESSION_PROP_DEFAULT_PORT "55555" /**< The default value for the appliance TCP port when compression is not in use (::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL of zero). */
-#define SOLCLIENT_SESSION_PROP_DEFAULT_PORT_COMPRESSION "55003" /**< The default value for the appliance TCP port when compression is in use (::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL of non-zero). */
-#define SOLCLIENT_SESSION_PROP_DEFAULT_PORT_SSL "55443" /**< The default value for the appliance SSL port over TCP regardless of compression. */
+#define SOLCLIENT_SESSION_PROP_DEFAULT_HOST "127.0.0.1" /**< The default value for the broker IP address. */
+#define SOLCLIENT_SESSION_PROP_DEFAULT_PORT "55555" /**< The default value for the broker TCP port when compression is not in use (::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL of zero). */
+#define SOLCLIENT_SESSION_PROP_DEFAULT_PORT_COMPRESSION "55003" /**< The default value for the broker TCP port when compression is in use (::SOLCLIENT_SESSION_PROP_COMPRESSION_LEVEL of non-zero). */
+#define SOLCLIENT_SESSION_PROP_DEFAULT_PORT_SSL "55443" /**< The default value for the broker SSL port over TCP regardless of compression. */
#define SOLCLIENT_SESSION_PROP_DEFAULT_BUFFER_SIZE "90000" /**< The default size (in bytes) of internal buffer for transmit buffering. */
#define SOLCLIENT_SESSION_PROP_DEFAULT_CONNECT_BLOCKING SOLCLIENT_PROP_ENABLE_VAL /**< The default is blocking connect operation. */
#define SOLCLIENT_SESSION_PROP_DEFAULT_SEND_BLOCKING SOLCLIENT_PROP_ENABLE_VAL /**< The default is blocking send operation. */
@@ -2261,8 +2261,8 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
#define SOLCLIENT_SESSION_PROP_DEFAULT_CLIENT_MODE SOLCLIENT_PROP_DISABLE_VAL /**< The default value for client mode. When disabled, the Session uses three TCP connections for non-client mode. */
#define SOLCLIENT_SESSION_PROP_DEFAULT_BIND_IP "" /**< The default value for local IP on connect is unset (bind to any) .*/
#define SOLCLIENT_SESSION_PROP_DEFAULT_PUB_ACK_TIMER "2000" /**< The default value for publisher acknowledgment timer (in milliseconds). When a published message is not acknowledged within the time specified for this timer, the API automatically retransmits the message. There is no limit on the number of retransmissions for any message. However, while the API is resending, applications can become flow controlled. The flow control behavior is controlled by ::SOLCLIENT_SESSION_PROP_SEND_BLOCKING and ::SOLCLIENT_SESSION_PROP_BLOCKING_WRITE_TIMEOUT_MS.*/
-#define SOLCLIENT_SESSION_PROP_DEFAULT_PUB_WINDOW_SIZE "50" /**< The default Publisher Window size for Guaranteed messages. The Guaranteed Message Publish Window Size property limits the maximum number of messages that can be published before the API must receive an acknowledgment from the appliance.*/
-#define SOLCLIENT_SESSION_PROP_DEFAULT_VPN_NAME "" /**< The default Message VPN name to connect this Session to. The default is to not specify the VPN name; the default Message VPN provisioned on the appliance is used. */
+#define SOLCLIENT_SESSION_PROP_DEFAULT_PUB_WINDOW_SIZE "50" /**< The default Publisher Window size for Guaranteed messages. The Guaranteed Message Publish Window Size property limits the maximum number of messages that can be published before the API must receive an acknowledgment from the broker.*/
+#define SOLCLIENT_SESSION_PROP_DEFAULT_VPN_NAME "" /**< The default Message VPN name to connect this Session to. The default is to not specify the VPN name; the default Message VPN provisioned on the broker is used. */
#define SOLCLIENT_SESSION_PROP_DEFAULT_CLIENT_NAME "" /**< The default Session Client Name is a null string to have the C API generate one. */
#define SOLCLIENT_SESSION_PROP_DEFAULT_SUBSCRIBER_LOCAL_PRIORITY "1" /**< The default subscriber priority for locally published messages. */
#define SOLCLIENT_SESSION_PROP_DEFAULT_SUBSCRIBER_NETWORK_PRIORITY "1" /**< The default subscriber priority for remotely published messages. */
@@ -2367,8 +2367,8 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
#define SOLCLIENT_FLOW_PROP_BIND_TIMEOUT_MS "FLOW_BIND_TIMEOUT_MS" /**< The timeout (in milliseconds) used when creating a Flow in blocking mode. The valid range is > 0. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BIND_TIMEOUT_MS */
#define SOLCLIENT_FLOW_PROP_BIND_ENTITY_ID "FLOW_BIND_ENTITY_ID" /**< The type of object to which this Flow is bound. The valid values are ::SOLCLIENT_FLOW_PROP_BIND_ENTITY_SUB, ::SOLCLIENT_FLOW_PROP_BIND_ENTITY_QUEUE, and ::SOLCLIENT_FLOW_PROP_BIND_ENTITY_TE. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BIND_ENTITY_ID */
#define SOLCLIENT_FLOW_PROP_BIND_ENTITY_DURABLE "FLOW_BIND_ENTITY_DURABLE" /**< The durability of the object to which this Flow is bound. Default: ::SOLCLIENT_PROP_ENABLE_VAL, which means the endpoint is durable. When set to SOLCLIENT_PROP_DISABLE_VAL, a temporary endpoint is created. */
-#define SOLCLIENT_FLOW_PROP_BIND_NAME "FLOW_BIND_NAME" /**< The name of the Queue or Topic Endpoint that is the target of the bind. This property is ignored when the BIND_ENTITY_ID is ::SOLCLIENT_FLOW_PROP_BIND_ENTITY_SUB. The maximum length (not including NULL terminator) is ::SOLCLIENT_BUFINFO_MAX_QUEUENAME_SIZE except for durable queues, which has a limit of ::SOLCLIENT_BUFINFO_MAX_DURABLE_QUEUENAME_SIZE. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BIND_NAME */
-#define SOLCLIENT_FLOW_PROP_WINDOWSIZE "FLOW_WINDOWSIZE" /**< The Guaranteed message window size for the Flow. This sets the maximum number of messages that can be in transit (that is, the messages are sent from the appliance but are not yet delivered to the application). The valid range is 1..255. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_WINDOWSIZE */
+#define SOLCLIENT_FLOW_PROP_BIND_NAME "FLOW_BIND_NAME" /**< The name of the Queue or Topic Endpoint that is the target of the bind. This property is ignored when the BIND_ENTITY_ID is ::SOLCLIENT_FLOW_PROP_BIND_ENTITY_SUB. The maximum length (not including NULL terminator) is ::SOLCLIENT_BUFINFO_MAX_QUEUENAME_SIZE. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BIND_NAME */
+#define SOLCLIENT_FLOW_PROP_WINDOWSIZE "FLOW_WINDOWSIZE" /**< The Guaranteed message window size for the Flow. This sets the maximum number of messages that can be in transit (that is, the messages are sent from the broker but are not yet delivered to the application). The valid range is 1..255. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_WINDOWSIZE */
#define SOLCLIENT_FLOW_PROP_AUTOACK "FLOW_AUTOACK" /**< Deprecated: When set to ::SOLCLIENT_PROP_ENABLE_VAL, the API generates application level acknowledgments when the receive callback function returns. This property is ignored if ::SOLCLIENT_FLOW_PROP_ACKMODE is specified. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_AUTOACK */
#define SOLCLIENT_FLOW_PROP_ACKMODE "FLOW_ACKMODE" /**< Controls how acknowledgments are generated for received Guaranteed messages. Possible values are ::SOLCLIENT_FLOW_PROP_ACKMODE_AUTO and ::SOLCLIENT_FLOW_PROP_ACKMODE_CLIENT. Default ::SOLCLIENT_FLOW_PROP_ACKMODE_AUTO */
#define SOLCLIENT_FLOW_PROP_TOPIC "FLOW_TOPIC" /**< When binding to a Topic endpoint, the Topic may be set in the bind. This parameter is ignored for Queue or subscriber binding. The maximum length (not including NULL terminator) is ::SOLCLIENT_BUFINFO_MAX_TOPIC_SIZE. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_TOPIC */
@@ -2382,14 +2382,14 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
*/
#define SOLCLIENT_FLOW_PROP_START_STATE "FLOW_START_STATE" /**< This property controls whether the Flow should be created in a start or stop state with respect to receiving messages. Flow start/stop state can be changed later through solClient_flow_start() or solClient_flow_stop(). Default ::SOLCLIENT_FLOW_PROP_DEFAULT_START_STATE */
#define SOLCLIENT_FLOW_PROP_SELECTOR "FLOW_SELECTOR" /**< A Java Message System (JMS) defined selector. */
-#define SOLCLIENT_FLOW_PROP_NO_LOCAL "FLOW_NO_LOCAL" /**< When a Flow has the No Local property enabled, messages published on the Session cannot appear in a Flow created in the same Session, even if the endpoint contains a subscription that matches the published message. The appliance that the Session connects to must have the No Local capability, and the capability must be enabled. If the appliance the Session is connected to does not support No Local, a call to solClient_session_createFlow() returns SOLCLIENT_FAIL and subcode ::SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED set. */
-#define SOLCLIENT_FLOW_PROP_MAX_UNACKED_MESSAGES "FLOW_MAX_UNACKED_MESSAGES" /**< This property may only be set when the Flow property ::SOLCLIENT_FLOW_PROP_ACKMODE is set to ::SOLCLIENT_FLOW_PROP_ACKMODE_CLIENT. When set to a positive value, this property controls the maximum number of messages that may be unacknowledged on the Flow (solClient_flow_sendAck() is called to acknowledge messages and remove those messages from the message spool). This property cannot be used to increase the appliance configured maximum number of acknowledged messages on the endpoint. When set to -1, the appliance configured maximum controls how many unacknowledged messages may be received by the application. Valid values are -1 and >0. Default ::SOLCLIENT_FLOW_PROP_DEFAULT_MAX_UNACKED_MESSAGES */
-#define SOLCLIENT_FLOW_PROP_BROWSER "FLOW_BROWSER" /**< Set browser mode on flow and signal it is a browser flow to appliance on bind. A browser flow allows client applications to look at messages spooled on Endpoints without removing them. Messages are browsed from oldest to newest. The flow window size will be reduced as messages are received. Applications have to call ::solClient_flow_start() to get more messages. After being browsed, messages are still available for consumption over normal flows. However, it is possible to selectively remove messages (by calling ::solClient_flow_sendAck()) from the persistent store of an Endpoint, in this case, these removed messages will no longer be available for consumption. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BROWSER \n\n
+#define SOLCLIENT_FLOW_PROP_NO_LOCAL "FLOW_NO_LOCAL" /**< When a Flow has the No Local property enabled, messages published on the Session cannot appear in a Flow created in the same Session, even if the endpoint contains a subscription that matches the published message. The broker that the Session connects to must have the No Local capability, and the capability must be enabled. If the broker the Session is connected to does not support No Local, a call to solClient_session_createFlow() returns SOLCLIENT_FAIL and subcode ::SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED set. */
+#define SOLCLIENT_FLOW_PROP_MAX_UNACKED_MESSAGES "FLOW_MAX_UNACKED_MESSAGES" /**< This property may only be set when the Flow property ::SOLCLIENT_FLOW_PROP_ACKMODE is set to ::SOLCLIENT_FLOW_PROP_ACKMODE_CLIENT. When set to a positive value, this property controls the maximum number of messages that may be unacknowledged on the Flow (solClient_flow_sendAck() is called to acknowledge messages and remove those messages from the message spool). This property cannot be used to increase the broker configured maximum number of acknowledged messages on the endpoint. When set to -1, the broker configured maximum controls how many unacknowledged messages may be received by the application. Valid values are -1 and >0. Default ::SOLCLIENT_FLOW_PROP_DEFAULT_MAX_UNACKED_MESSAGES */
+#define SOLCLIENT_FLOW_PROP_BROWSER "FLOW_BROWSER" /**< Set browser mode on flow and signal it is a browser flow to broker on bind. A browser flow allows client applications to look at messages spooled on Endpoints without removing them. Messages are browsed from oldest to newest. The flow window size will be reduced as messages are received. Applications have to call ::solClient_flow_start() to get more messages. After being browsed, messages are still available for consumption over normal flows. However, it is possible to selectively remove messages (by calling ::solClient_flow_sendAck()) from the persistent store of an Endpoint, in this case, these removed messages will no longer be available for consumption. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_BROWSER \n\n
* NOTE: If browsing a queue with an active consumer, no guarantee is made that
* the browser will receive all messages published to the queue. The consumer can
* receive and acknowledge messages before they are delivered to the browser.
*/
-#define SOLCLIENT_FLOW_PROP_ACTIVE_FLOW_IND "FLOW_ACTIVE_FLOW_IND" /**< When a Flow has the Active Flow Indication property enabled, the application will receive flow events when the flow becomes active, or inactive. If the underlying session capabilities indicate that the appliance does not support active flow indications, then solClient_session_createFlow() will fail immediately (SOLCLIENT_FAIL) and set the subCode SOLCLIENT_SUBCODE_FLOW_ACTIVE_FLOW_INDICATION_UNSUPPORTED. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_ACTIVE_FLOW_IND */
+#define SOLCLIENT_FLOW_PROP_ACTIVE_FLOW_IND "FLOW_ACTIVE_FLOW_IND" /**< When a Flow has the Active Flow Indication property enabled, the application will receive flow events when the flow becomes active, or inactive. If the underlying session capabilities indicate that the broker does not support active flow indications, then solClient_session_createFlow() will fail immediately (SOLCLIENT_FAIL) and set the subCode SOLCLIENT_SUBCODE_FLOW_ACTIVE_FLOW_INDICATION_UNSUPPORTED. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_ACTIVE_FLOW_IND */
#define SOLCLIENT_FLOW_PROP_REPLAY_START_LOCATION "FLOW_REPLAY_START_LOCATION" /**< When a Flow is created, the application may request replay of messages from the replay log, even messages that have been previously delivered and removed the from topic endpoint or queue. The replay start location may be ::SOLCLIENT_FLOW_PROP_REPLAY_START_LOCATION_BEGINNING to indicate that all messages available should be replayed. Or the replay start location may be a string that begins with "DATE:" followed by a date in one of two formats. The date may be a string representing a long integer, which is the number of seconds since the epoch - 0:00:00 Jan 1, 1970. The date may be a string as specified in RFC3339 - 'YYYY-MM-DDTHH:MM:SS[.1*DIGIT]Z' or 'YYYY-MM-DDTHH:MM:SS[.1*DIGIT]("+"/"-")HH:MM'. Additionally, the replay start location may be a replication-group-message-id string as returned by solClient_replicationGroupMessageId_toString(). Such a string starts with "rmid1:" and is a ::solClient_replicationGroupMessageId_t. */
#define SOLCLIENT_FLOW_PROP_MAX_RECONNECT_TRIES "FLOW_MAX_RECONNECT_TRIES" /**< When a flow is unbound by the message-broker due to "Replay Started" or "Service Unavailable", the API will attempt to reconnect the flow if this property is non-zero. If this property is -1, it will retry forever. Otherwise it tries the configured maximum number of times. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_MAX_RECONNECT_TRIES */
#define SOLCLIENT_FLOW_PROP_RECONNECT_RETRY_INTERVAL_MS "FLOW_RECONNECT_RETRY_INTERVAL_MS" /**< When a flow is reconnecting, the API will attempt to reconnect immediately, if that bind attempt fails it will wait for the retry interval before attempting to connect again. Default: ::SOLCLIENT_FLOW_PROP_DEFAULT_RECONNECT_RETRY_INTERVAL_MS */
@@ -2441,7 +2441,7 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
/** @anchor endpointProps
* @name Endpoint Properties
* Endpoint properties are passed to solClient_session_endpointProvision()/solClient_session_endpointDeprovision(). The
- * properties describe the endpoint (Queue or Topic Endpoint) to be created or destroyed on the target appliance.
+ * properties describe the endpoint (Queue or Topic Endpoint) to be created or destroyed on the target broker.
*
* Endpoint properties can be used to describe a non-durable endpoint (Queue or Topic Endpoint) in
* solClient_session_createFlow().
@@ -2461,10 +2461,10 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
#define SOLCLIENT_ENDPOINT_PROP_ACCESSTYPE "ENDPOINT_ACCESSTYPE" /**< Sets the access type for the endpoint. This applies to durable Queues only. */
#define SOLCLIENT_ENDPOINT_PROP_QUOTA_MB "ENDPOINT_QUOTA_MB" /**< Maximum quota (in megabytes) for the endpoint. The valid range is 1 through 800000.
*
-* A value of 0 configures the endpoint to act as a Last-Value-Queue (LVQ), where the appliance enforces a Queue depth of one, and only the most current message is spooled by the endpoint. When a new message is received, the current queued message is automatically deleted from the endpoint and the new message is spooled.*/
+* A value of 0 configures the endpoint to act as a Last-Value-Queue (LVQ), where the broker enforces a Queue depth of one, and only the most current message is spooled by the endpoint. When a new message is received, the current queued message is automatically deleted from the endpoint and the new message is spooled.*/
#define SOLCLIENT_ENDPOINT_PROP_MAXMSG_SIZE "ENDPOINT_MAXMSG_SIZE" /**< Maximum size (in bytes) for any one message stored in the endpoint. */
#define SOLCLIENT_ENDPOINT_PROP_RESPECTS_MSG_TTL "ENDPOINT_RESPECTS_MSG_TTL" /**< The endpoint observes message Time-to-Live (TTL) values and can remove expired messages. Default: ::SOLCLIENT_ENDPOINT_PROP_DEFAULT_RESPECTS_MSG_TTL */
-#define SOLCLIENT_ENDPOINT_PROP_DISCARD_BEHAVIOR "ENDPOINT_DISCARD_BEHAVIOR" /**< When a message cannot be added to an endpoint (for example, maximum quota (::SOLCLIENT_ENDPOINT_PROP_QUOTA_MB) exceeded), this property controls the action the appliance will perform towards the publisher. */
+#define SOLCLIENT_ENDPOINT_PROP_DISCARD_BEHAVIOR "ENDPOINT_DISCARD_BEHAVIOR" /**< When a message cannot be added to an endpoint (for example, maximum quota (::SOLCLIENT_ENDPOINT_PROP_QUOTA_MB) exceeded), this property controls the action the broker will perform towards the publisher. */
#define SOLCLIENT_ENDPOINT_PROP_MAXMSG_REDELIVERY "ENDPOINT_MAXMSG_REDELIVERY" /**< Defines how many message redelivery retries before discarding or moving the message to the DMQ. The valid ranges is {0..255} where 0 means retry forever. Default: 0 */
/*@}*/
@@ -2517,7 +2517,7 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
* The provision operation may be modified by the use of one or more of the following flags:
*/
-#define SOLCLIENT_PROVISION_FLAGS_WAITFORCONFIRM (0x01) /**< The provision operation blocks until it has completed successfully on the appliance or failed. */
+#define SOLCLIENT_PROVISION_FLAGS_WAITFORCONFIRM (0x01) /**< The provision operation blocks until it has completed successfully on the broker or failed. */
#define SOLCLIENT_PROVISION_FLAGS_IGNORE_EXIST_ERRORS (0x02) /**< When set, it is not considered an error if the endpoint already exists (create) or does not exist (delete). */
/*@}*/
@@ -2530,7 +2530,7 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
* @anchor sessioncapabilities
* @name Session Capabilities
* The capabilities of the Session after connecting to a peer. Capabilities can vary depending on
-* the appliance platform or peer connection. Capabilities can be retrieved with the ::solClient_session_getCapability function.
+* the broker platform or peer connection. Capabilities can be retrieved with the ::solClient_session_getCapability function.
*/
#define SOLCLIENT_SESSION_CAPABILITY_PUB_GUARANTEED "SESSION_CAPABILITY_PUB_GUARANTEED" /**< Boolean - The Session allows publishing of Guaranteed messages. */
#define SOLCLIENT_SESSION_CAPABILITY_SUB_FLOW_GUARANTEED "SESSION_CAPABILITY_SUB_FLOW_GUARANTEED" /**< Boolean - The Session allows binding a Guaranteed Flow to an endpoint. */
@@ -2540,17 +2540,17 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
#define SOLCLIENT_SESSION_CAPABILITY_COMPRESSION "SESSION_CAPABILITY_COMPRESSION" /**< Boolean - The Session accepts compressed (DEFLATE) data. */
#define SOLCLIENT_SESSION_CAPABILITY_SELECTOR "SESSION_CAPABILITY_SELECTOR" /**< Boolean - The Session supports a selector on Flows. */
#define SOLCLIENT_SESSION_CAPABILITY_ENDPOINT_MANAGEMENT "SESSION_CAPABILITY_ENDPOINT_MANAGEMENT" /**< The Session is allowed to create/delete durable endpoints dynamically. */
-#define SOLCLIENT_SESSION_PEER_PLATFORM "SESSION_PEER_PLATFORM" /**< String - A appliance/peer returned string that describes the hardware platform. */
-#define SOLCLIENT_SESSION_PEER_SOFTWARE_DATE "SESSION_PEER_SOFTWARE_DATE" /**< String - A appliance/peer returned string that contains the release date for the appliance software. */
-#define SOLCLIENT_SESSION_PEER_SOFTWARE_VERSION "SESSION_PEER_SOFTWARE_VERSION" /**< String - A appliance/peer returned string that contains the version information. */
-#define SOLCLIENT_SESSION_PEER_PORT_SPEED "SESSION_PEER_PORT_SPEED" /**< Uint32 - The maximum rate (in Megabits/second) supported by the appliance/peer port. */
-#define SOLCLIENT_SESSION_PEER_PORT_TYPE "SESSION_PEER_PORT_TYPE" /**< String - The appliance/peer port type. */
-#define SOLCLIENT_SESSION_PEER_ROUTER_NAME "SESSION_PEER_ROUTER_NAME" /**< String - The appliance/peer Appliance Name, typically used to direct management requests. */
+#define SOLCLIENT_SESSION_PEER_PLATFORM "SESSION_PEER_PLATFORM" /**< String - A broker/peer returned string that describes the hardware platform. */
+#define SOLCLIENT_SESSION_PEER_SOFTWARE_DATE "SESSION_PEER_SOFTWARE_DATE" /**< String - A broker/peer returned string that contains the release date for the broker software. */
+#define SOLCLIENT_SESSION_PEER_SOFTWARE_VERSION "SESSION_PEER_SOFTWARE_VERSION" /**< String - A broker/peer returned string that contains the version information. */
+#define SOLCLIENT_SESSION_PEER_PORT_SPEED "SESSION_PEER_PORT_SPEED" /**< Uint32 - The maximum rate (in Megabits/second) supported by the broker/peer port. */
+#define SOLCLIENT_SESSION_PEER_PORT_TYPE "SESSION_PEER_PORT_TYPE" /**< String - The broker/peer port type. */
+#define SOLCLIENT_SESSION_PEER_ROUTER_NAME "SESSION_PEER_ROUTER_NAME" /**< String - The broker/peer Appliance Name, typically used to direct management requests. */
#define SOLCLIENT_SESSION_CAPABILITY_MAX_GUARANTEED_MSG_SIZE "SESSION_CAPABILITY_MAX_GUARANTEED_MSG_SIZE" /**< Uint32 - The maximum size (in bytes) of a Guaranteed message, including all optional message headers and data. */
#define SOLCLIENT_SESSION_CAPABILITY_MAX_DIRECT_MSG_SIZE "SESSION_CAPABILITY_MAX_DIRECT_MSG_SIZE" /**< Uint32 - The maximum size (in bytes) of a Direct message, including all optional message headers and data. */
#define SOLCLIENT_SESSION_CAPABILITY_ENDPOINT_MESSAGE_TTL "SESSION_CAPABILITY_ENDPOINT_MESSAGE_TTL" /**< Boolean - The Session supports message Time-to-Live (TTL) (this only applies to messages that are spooled) in published messages. */
#define SOLCLIENT_SESSION_CAPABILITY_QUEUE_SUBSCRIPTIONS "SESSION_CAPABILITY_QUEUE_SUBSCRIPTIONS" /**< Boolean - The Session supports adding subscription to durable and non-durable queues on the peer. */
-#define SOLCLIENT_SESSION_CAPABILITY_SUBSCRIPTION_MANAGER "SESSION_CAPABILITY_SUBSCRIPTION_MANAGER" /**< Boolean - The appliance supports adding subscriptions on behalf of other client names.*/
+#define SOLCLIENT_SESSION_CAPABILITY_SUBSCRIPTION_MANAGER "SESSION_CAPABILITY_SUBSCRIPTION_MANAGER" /**< Boolean - The broker supports adding subscriptions on behalf of other client names.*/
#define SOLCLIENT_SESSION_CAPABILITY_MESSAGE_ELIDING "SESSION_CAPABILITY_MESSAGE_ELIDING" /**< Boolean - The Session supports message eliding. */
#define SOLCLIENT_SESSION_CAPABILITY_NO_LOCAL "SESSION_CAPABILITY_NO_LOCAL" /**< Boolean - The Session supports No Local. Flows may be created to Queues and Topic Endpoints that will not receive messages published on the same Session. */
#define SOLCLIENT_SESSION_CAPABILITY_PER_TOPIC_SEQUENCE_NUMBERING "SESSION_CAPABILITY_PER_TOPIC_SEQUENCE_NUMBERING" /**< Boolean - The peer can insert per Topic sequence numbers. */
@@ -2623,8 +2623,7 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
#define SOLCLIENT_BUFINFO_MAX_USER_DATA_SIZE (36) /**< The maximum size allowed for the user-data portion. */
#define SOLCLIENT_BUFINFO_MAX_CORRELATION_TAG_SIZE (16) /**< The maximum size allowed for the correlation tag portion. */
#define SOLCLIENT_BUFINFO_MAX_TOPIC_SIZE (250) /**< The maximum size allowed for the topic portion (not including the terminating NULL). */
-#define SOLCLIENT_BUFINFO_MAX_QUEUENAME_SIZE (250) /**< The maximum size allowed for the Queue name portion (not including the terminating NULL). */
-#define SOLCLIENT_BUFINFO_MAX_DURABLE_QUEUENAME_SIZE (200) /**< The maximum size allowed for a durable Queue name (not including the terminating NULL). */
+#define SOLCLIENT_BUFINFO_MAX_QUEUENAME_SIZE (250) /**< The maximum size allowed for the Queue name portion (not including the terminating NULL). The broker may further restrict the maximum length of the queuename, please consult the broker documentation. */
#define SOLCLIENT_SESSION_SEND_MULTIPLE_LIMIT 50 /**> The maximum number of messages which can be sent through a single call to solClient_session_sendMultipleMsg()*/
/*@}*/
@@ -2667,7 +2666,7 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
SOLCLIENT_STATS_RX_CACHEREQUEST_DISCARD_RESPONSE = 24, /**< Cache request response discarded due to errors in response format or no outstanding cache request. */
SOLCLIENT_STATS_RX_CACHEMSG = 25, /**< Cached messages delivered to application. */
SOLCLIENT_STATS_RX_FOUND_CTSYNC = 26, /**< Deprecated - Not Supported - On a cut-through Flow, the number of times the Flow entered cut-through delivery mode. */
- SOLCLIENT_STATS_RX_LOST_CTSYNC = 27, /**< Deprecated - Not Supported - On a cut-through Flow, the number of times the Flow left cut-through delivery mode to resynchronize with the Guaranteed message storage on the appliance */
+ SOLCLIENT_STATS_RX_LOST_CTSYNC = 27, /**< Deprecated - Not Supported - On a cut-through Flow, the number of times the Flow left cut-through delivery mode to resynchronize with the Guaranteed message storage on the broker */
SOLCLIENT_STATS_RX_LOST_CTSYNC_GM = 28, /**< Deprecated - Not Supported - On a cut-through Flow, the number of times the Flow left cut-through delivery mode to resynchronize with the Guaranteed message storage due to receiving a Guaranteed message that was not previously received as Direct. */
SOLCLIENT_STATS_RX_OVERFLOW_CTSYNC_BUFFER = 29, /**< Deprecated - Not Supported - On a cut-through Flow, the number of times the synchronization buffer overflowed, delaying synchronization. */
SOLCLIENT_STATS_RX_ALREADY_CUT_THROUGH = 30, /**< Deprecated - Not Supported - On a cut-through Flow, the number of Guaranteed messages discarded because they had already been received on the cut-through Flow.*/
@@ -2731,7 +2730,7 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
* or ::solClient_msg_setCorrelationTagPtr() in the message that is being
* acknowledged. This is used to correlate a published message to
* the acknowledgment received from
-* the appliance. In all other events info_p is a pointer to a NULL-terminated
+* the broker. In all other events info_p is a pointer to a NULL-terminated
* string.
*/
typedef struct solClient_session_eventCallbackInfo
@@ -2765,11 +2764,11 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
* error information is recorded and can be retrieved through ::solClient_getLastErrorInfo.
* @subcodes
* @li ::SOLCLIENT_SUBCODE_COMMUNICATION_ERROR - The underlying connection failed.
-* @li ::SOLCLIENT_SUBCODE_OUT_OF_RESOURCES - The appliance cannot accept any more Topic subscriptions. (This subcode only occurs when using the Topic Routing Blade.)
-* @li ::SOLCLIENT_SUBCODE_PROTOCOL_ERROR - A protocol error occurred between the API and the appliance.
+* @li ::SOLCLIENT_SUBCODE_OUT_OF_RESOURCES - The broker cannot accept any more Topic subscriptions. (This subcode only occurs when using the Topic Routing Blade.)
+* @li ::SOLCLIENT_SUBCODE_PROTOCOL_ERROR - A protocol error occurred between the API and the broker.
* @li ::SOLCLIENT_SUBCODE_KEEP_ALIVE_FAILURE - The Session went down due to a Keep-Alive failure.
-* @li ::SOLCLIENT_SUBCODE_INVALID_TOPIC_SYNTAX - A subscription was rejected by the appliance due to invalid Topic syntax.
-* @li ::SOLCLIENT_SUBCODE_XML_PARSE_ERROR - The appliance rejected a published XML message due to an XML parse error.
+* @li ::SOLCLIENT_SUBCODE_INVALID_TOPIC_SYNTAX - A subscription was rejected by the broker due to invalid Topic syntax.
+* @li ::SOLCLIENT_SUBCODE_XML_PARSE_ERROR - The broker rejected a published XML message due to an XML parse error.
* @li ::SOLCLIENT_SUBCODE_TIMEOUT - A timeout occurred on the Session connection.
* @li ::SOLCLIENT_SUBCODE_LOGIN_FAILURE
* @li ::SOLCLIENT_SUBCODE_MSG_VPN_NOT_ALLOWED
@@ -2821,7 +2820,7 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
* error information is recorded and can be retrieved through ::solClient_getLastErrorInfo.
* @subcodes
* @li ::SOLCLIENT_SUBCODE_COMMUNICATION_ERROR - The underlying connection failed
-* @li ::SOLCLIENT_SUBCODE_PROTOCOL_ERROR - A protocol error occurred between the API and the appliance.
+* @li ::SOLCLIENT_SUBCODE_PROTOCOL_ERROR - A protocol error occurred between the API and the broker.
* @li ::SOLCLIENT_SUBCODE_KEEP_ALIVE_FAILURE - The Session went down due to a Keep-Alive failure.
* @li ::SOLCLIENT_SUBCODE_TIMEOUT - A timeout occurred on an operation such as binding to a Flow.
* @li ::solClient_subCode for a description of all subcodes.
@@ -3841,6 +3840,8 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
* @li ::SOLCLIENT_SESSION_PROP_CLIENT_NAME (Deprecated -- see Note below)
* @li ::SOLCLIENT_SESSION_PROP_HOST (may only be modified when Session is disconnected)
* @li ::SOLCLIENT_SESSION_PROP_PORT (may only be modified when Session is disconnected)
+* @li ::SOLCLIENT_SESSION_PROP_OAUTH2_ACCESS_TOKEN to update expiring access token; the update may take effect after the next session reconnection
+* @li ::SOLCLIENT_SESSION_PROP_OIDC_ID_TOKEN to update expiring idc id token; the update may take effect after the next session reconnection
*
* Note: Applications shall use ::solClient_session_modifyClientInfo() to modify the following Session properties:
* @li ::SOLCLIENT_SESSION_PROP_APPLICATION_DESCRIPTION
@@ -3889,7 +3890,7 @@ Note: This property is used for all entries specified by the property ::SOLCLIEN
* @return ::SOLCLIENT_OK, ::SOLCLIENT_FAIL, ::SOLCLIENT_WOULD_BLOCK, ::SOLCLIENT_IN_PROGRESS ::SOLCLIENT_NOT_READY
* @subcodes
* @li ::SOLCLIENT_SUBCODE_CLIENT_NAME_ALREADY_IN_USE - The client name is in use by another client in the same VPN. Applications need to call ::solClient_session_connect after client name correction.
- * @li ::SOLCLIENT_SUBCODE_CLIENT_NAME_INVALID - The client name chosen has been rejected as invalid by the appliance. Applications need to call ::solClient_session_connect after client name correction.
+ * @li ::SOLCLIENT_SUBCODE_CLIENT_NAME_INVALID - The client name chosen has been rejected as invalid by the broker. Applications need to call ::solClient_session_connect after client name correction.
* @see ::solClient_subCode for a description of all subcodes.
*/
solClient_dllExport solClient_returnCode_t
@@ -4054,7 +4055,7 @@ solClient_session_isCapable(
* A new application can call
* solClient_session_send to send a Persistent or Non-Persistent
* message. A failure is returned if sending Guaranteed
-* messages is not allowed on the Session (that is, if the Session is connected to an appliance
+* messages is not allowed on the Session (that is, if the Session is connected to an broker
* that does not support Guaranteed Messaging).
* \n
*
@@ -4078,9 +4079,9 @@ solClient_session_isCapable(
*
* solClient_session_sendMsg() returns SOLCLIENT_OK when the message has been successfully
* copied to the transmit buffer or underlying transport, this does not guarantee successful
-* delivery to the Solace messaging appliance. When sending Guaranteed messages (persistent or non-persistent),
+* delivery to the Solace messaging broker. When sending Guaranteed messages (persistent or non-persistent),
* the application will receive a subsequent ::SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT event for all
-* messages successfully delivered to the Solace messaging appliance. For Guaranteed messages, notifications of
+* messages successfully delivered to the Solace messaging broker. For Guaranteed messages, notifications of
* quota, permission, or other delivery problems will be indicated in a ::SOLCLIENT_SESSION_EVENT_REJECTED_MSG_ERROR
* event.
*
@@ -4133,7 +4134,7 @@ solClient_session_isCapable(
*
* solClient_session_sendSmf() returns SOLCLIENT_OK when the message has be successfully
* copied to the transmit buffer or underlying transport, this does not guarantee successful
-* delivery to the Solace messaging appliance.
+* delivery to the Solace messaging broker.
*
* @param opaqueSession_p The opaque Session returned when the Session was created.
* @param smfBufInfo_p A pointer to the bufInfo describing a validly formatted SMF direct message.
@@ -4171,9 +4172,9 @@ solClient_session_isCapable(
*
* solClient_session_sendMultipleMsg() returns SOLCLIENT_OK when the messages have been successfully
* copied to the transmit buffer or underlying transport, this does not guarantee successful
- * delivery to the Solace messaging appliance. When sending Guaranteed messages (persistent or non-persistent),
+ * delivery to the Solace messaging broker. When sending Guaranteed messages (persistent or non-persistent),
* the application will receive a subsequent ::SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT event for all
- * messages successfully delivered to the Solace messaging appliance. For Guaranteed messages, notifications of
+ * messages successfully delivered to the Solace messaging broker. For Guaranteed messages, notifications of
* quota, permission, or other delivery problems will be indicated in a ::SOLCLIENT_SESSION_EVENT_REJECTED_MSG_ERROR
* event.
*
@@ -4204,7 +4205,7 @@ solClient_session_isCapable(
*
* solClient_session_sendMultipleSmf() returns SOLCLIENT_OK when the message has be successfully
* copied to the transmit buffer or underlying transport, this does not guarantee successful
- * delivery to the Solace messaging appliance.
+ * delivery to the Solace messaging broker.
*
* @return ::SOLCLIENT_OK, ::SOLCLIENT_NOT_READY, ::SOLCLIENT_FAIL, ::SOLCLIENT_WOULD_BLOCK
* @subcodes
@@ -4274,7 +4275,7 @@ solClient_session_isCapable(
*
* The following subcodes can occur when using ::SOLCLIENT_SUBSCRIBE_FLAGS_WAITFORCONFIRM. Otherwise, such errors are reported
* when a ::SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_ERROR Session event is received.
-* @li ::SOLCLIENT_SUBCODE_OUT_OF_RESOURCES - The appliance cannot accept any more Topic subscriptions. (This subcode only occurs when using the Topic Routing Blade.)
+* @li ::SOLCLIENT_SUBCODE_OUT_OF_RESOURCES - The broker cannot accept any more Topic subscriptions. (This subcode only occurs when using the Topic Routing Blade.)
* @li ::SOLCLIENT_SUBCODE_SUBSCRIPTION_ALREADY_PRESENT (see ::SOLCLIENT_SESSION_PROP_IGNORE_DUP_SUBSCRIPTION_ERROR)
* @li ::SOLCLIENT_SUBCODE_SUBSCRIPTION_TOO_MANY
* @li ::SOLCLIENT_SUBCODE_SUBSCRIPTION_ACL_DENIED
@@ -4332,7 +4333,7 @@ solClient_session_isCapable(
*
* The following subcodes can occur when using ::SOLCLIENT_SUBSCRIBE_FLAGS_WAITFORCONFIRM. Otherwise, such errors are reported
* when a ::SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_ERROR Session event is received.
-* @li ::SOLCLIENT_SUBCODE_OUT_OF_RESOURCES - The appliance cannot accept any more Topic subscriptions. (This subcode only occurs using the Topic Routing Blade.)
+* @li ::SOLCLIENT_SUBCODE_OUT_OF_RESOURCES - The broker cannot accept any more Topic subscriptions. (This subcode only occurs using the Topic Routing Blade.)
* @li ::SOLCLIENT_SUBCODE_SUBSCRIPTION_ALREADY_PRESENT (see ::SOLCLIENT_SESSION_PROP_IGNORE_DUP_SUBSCRIPTION_ERROR)
* @li ::SOLCLIENT_SUBCODE_SUBSCRIPTION_TOO_MANY
* @li ::SOLCLIENT_SUBCODE_SUBSCRIPTION_ACL_DENIED
@@ -4464,7 +4465,7 @@ solClient_session_isCapable(
void *correlationTag);
/**
-* Check a Topic string against Topic encoding rules for the appliance. This
+* Check a Topic string against Topic encoding rules for the broker. This
* routine is intended for use with solClient_session_sendMsg, and the Topic
* set in the \link ::solClient_opaqueMsg_pt opaque message pointer\endlink. This
* function should not be used with \link ::solClient_session_topicSubscribe
@@ -4473,7 +4474,7 @@ solClient_session_isCapable(
* own Topic validation, which includes accepting wildcards. For performance
* reasons, solClient_session_sendMsg does not validate topics, and this function
* is provided as a convenience to developers to ensure a Topic is valid
-* before sending a message that could be rejected by the appliance. It is
+* before sending a message that could be rejected by the broker. It is
* expected then, that the same Topic be used for sending many messages.
*
* @param opaqueSession_p The opaque Session returned when Session was created.
@@ -4488,10 +4489,10 @@ solClient_session_isCapable(
solClient_session_validateTopic (solClient_opaqueSession_pt opaqueSession_p,
const char *topicString_p);
/**
- * Sends a Topic Endpoint unsubscribe command to the appliance. This is
+ * Sends a Topic Endpoint unsubscribe command to the broker. This is
* only valid if no subscribers are bound to the Topic Endpoint.
* The application can specify a correlation tag to match up responses. The
- * correlation tag is a void pointer with no significance to the API. When the appliance responds to the
+ * correlation tag is a void pointer with no significance to the API. When the broker responds to the
* unsubscribe command, the correlation tag is returned in the eventInfo structure of the callback event.
* If this command succeeds there is a later event callback of either
* ::SOLCLIENT_SESSION_EVENT_TE_UNSUBSCRIBE_OK or
@@ -4749,7 +4750,7 @@ solClient_session_sendReply (solClient_opaqueSession_pt opaqueSession_p,
/**
-* Provision, on the appliance, a durable Queue or Topic Endpoint using the specified Session.
+* Provision, on the broker, a durable Queue or Topic Endpoint using the specified Session.
* ::SOLCLIENT_ENDPOINT_PROP_ID must be set to either ::SOLCLIENT_ENDPOINT_PROP_QUEUE or ::SOLCLIENT_ENDPOINT_PROP_TE
* in this interface. Only durable (::SOLCLIENT_ENDPOINT_PROP_DURABLE is enabled) endpoints may be provisioned. A non-durable
* endpoint is created when a Flow is bound to it with solClient_session_createFlow().
@@ -4815,8 +4816,8 @@ solClient_session_sendReply (solClient_opaqueSession_pt opaqueSession_p,
size_t qnnSize);
/**
- * Remove an endpoint from the appliance. An application can only remove an endpoint that has previously
- * been provisioned with solClient_session_provistionEndpoint(). The appliance will reject with an error any
+ * Remove an endpoint from the broker. An application can only remove an endpoint that has previously
+ * been provisioned with solClient_session_provistionEndpoint(). The broker will reject with an error any
* attempt to remove a temporary endpoint (provisioned by solClient_session_createFlow()), or a permanent endpoint
* provisioned by the administrator through the CLI or solAdmin.
*
@@ -4841,7 +4842,7 @@ solClient_session_sendReply (solClient_opaqueSession_pt opaqueSession_p,
/**
* Add a Topic subscription to the endpoint defined by the endpoint properties if the operation is supported
* on the endpoint. Topic subscriptionscan be added to Queue endpoints (::SOLCLIENT_ENDPOINT_PROP_QUEUE) and
- * to the special endpoint for each Session on appliances running SolOS-TR (::SOLCLIENT_ENDPOINT_PROP_CLIENT_NAME).
+ * to the special endpoint for each Session on brokers running SolOS-TR (::SOLCLIENT_ENDPOINT_PROP_CLIENT_NAME).
*
* Adding subscriptions to Queues
*
@@ -5087,7 +5088,7 @@ solClient_session_sendReply (solClient_opaqueSession_pt opaqueSession_p,
/**
* Closes the receiver on the specified Flow. This method will close the Flow
-* window to the appliance so further messages will not be received until
+* window to the broker so further messages will not be received until
* solClient_flow_start() is called. Messages in transit when this method is
* called will still be delivered to the application. So the application must
* expect that the receive message callback can be called even after calling
@@ -5110,7 +5111,7 @@ solClient_session_sendReply (solClient_opaqueSession_pt opaqueSession_p,
/**
* Opens the receiver on the specified Flow. This method opens the Flow window
-* to the appliance so further messages can be received. For browser flows (::SOLCLIENT_FLOW_PROP_BROWSER), applications have to call the function to get more messages.
+* to the broker so further messages can be received. For browser flows (::SOLCLIENT_FLOW_PROP_BROWSER), applications have to call the function to get more messages.
*
* A Flow may be created with the window closed by setting the Flow property ::SOLCLIENT_FLOW_PROP_START_STATE
* to ::SOLCLIENT_PROP_DISABLE_VAL. When a Flow is created in this way, messages will not be received
@@ -5140,7 +5141,7 @@ solClient_session_sendReply (solClient_opaqueSession_pt opaqueSession_p,
* @param opaqueFlow_p The opaque Flow returned when the Flow was created.
* @param maxUnacked The new value for maximum number of acknowledged messages to allow
* on the Flow. If set to -1, there is no limit to the maximum number of
- * acknowledged messages other than the appliance defined limit in the endpoint.
+ * acknowledged messages other than the broker defined limit in the endpoint.
* @return ::SOLCLIENT_OK, ::SOLCLIENT_FAIL
* @subcodes
* @li ::SOLCLIENT_SUBCODE_INVALID_FLOW_OPERATION - Changing maximum unacknowledged messages is
@@ -5469,7 +5470,7 @@ solClient_dllExport solClient_returnCode_t
* solClient_msg, then use the methods defined in solClientMsg.h to build the message to send. \n
* solClient_transactedSession_sendMsg() returns ::SOLCLIENT_OK when the message has been successfully
* copied to the transmit buffer or underlying transport.
-* A successful commit acknowledges published messages delivered to the Solace messaging appliance.
+* A successful commit acknowledges published messages delivered to the Solace messaging broker.
* @see @ref transacted-session
*
* @param transactedSession_p The opaque Transacted Session returned when the Transacted Session was created.
diff --git a/internal/ccsmp/lib/include/solclient/solClientDeprecated.h b/internal/ccsmp/lib/include/solclient/solClientDeprecated.h
index 0689aa6..b1e8b67 100644
--- a/internal/ccsmp/lib/include/solclient/solClientDeprecated.h
+++ b/internal/ccsmp/lib/include/solclient/solClientDeprecated.h
@@ -57,6 +57,7 @@
*/
#define SOLCLIENT_SESSION_PROP_MAX_HOST_LEN (128) /**< The maximum length of a single host entry in the Session host property, not including the NULL terminator. */
#define SOLCLIENT_MAX_SELECTOR_SIZE (1023) /**< The maximum length of a selector on solClient_session_createFlow(). */
+#define SOLCLIENT_BUFINFO_MAX_DURABLE_QUEUENAME_SIZE (200) /**< The maximum size allowed for a durable Queue name (not including the terminating NULL). */
/**
* @typedef solClient_bufInfo_ap
* An array of solClient_bufInfo_t is used to represent a message. The
diff --git a/internal/ccsmp/lib/linux/libsolclient.a b/internal/ccsmp/lib/linux/libsolclient.a
index 9810f55..4f53feb 100644
Binary files a/internal/ccsmp/lib/linux/libsolclient.a and b/internal/ccsmp/lib/linux/libsolclient.a differ
diff --git a/internal/impl/constants/error_strings.go b/internal/impl/constants/error_strings.go
index b412a79..63c045b 100644
--- a/internal/impl/constants/error_strings.go
+++ b/internal/impl/constants/error_strings.go
@@ -19,6 +19,12 @@ package constants
// Constants used for various error messages should go here
// Note that errors in golang by convention start with a lowercase letter and do not end in punctuation
+// UnableToModifyPropertyOfDisconnectedService error string
+const UnableToModifyPropertyOfDisconnectedService = "unable to modify a property of a service that is disconnected"
+
+// UnableToModifyNonModifiableGivenServiceProperty error string
+const UnableToModifyNonModifiableGivenServiceProperty = "unable to modify the non-modifiable given service property: %s"
+
// UnableToConnectAlreadyDisconnectedService error string
const UnableToConnectAlreadyDisconnectedService = "unable to connect messaging service in state %s"
diff --git a/internal/impl/core/transport.go b/internal/impl/core/transport.go
index 0900c3c..184e59f 100644
--- a/internal/impl/core/transport.go
+++ b/internal/impl/core/transport.go
@@ -41,6 +41,7 @@ type Transport interface {
Events() Events
ID() string
Host() string
+ ModifySessionProperties([]string) error
}
// NewTransport function
@@ -96,6 +97,14 @@ type ccsmpTransport struct {
host, id string
}
+func (transport *ccsmpTransport) ModifySessionProperties(properties []string) error {
+ err := transport.session.SolClientModifySessionProperties(properties)
+ if err != nil {
+ return ToNativeError(err, "an error occurred while modifying session properties.")
+ }
+ return nil
+}
+
func (transport *ccsmpTransport) Connect() error {
runtime.SetFinalizer(transport.context, nil)
runtime.SetFinalizer(transport.session, nil)
diff --git a/internal/impl/messaging_service_impl.go b/internal/impl/messaging_service_impl.go
index 31c22eb..60f23bc 100644
--- a/internal/impl/messaging_service_impl.go
+++ b/internal/impl/messaging_service_impl.go
@@ -33,6 +33,7 @@ import (
"solace.dev/go/messaging/internal/impl/publisher"
"solace.dev/go/messaging/pkg/solace"
"solace.dev/go/messaging/pkg/solace/metrics"
+ "solace.dev/go/messaging/pkg/solace/config"
)
// the main service lifecycle state
@@ -64,11 +65,11 @@ const (
messagingServiceSubStateDown messagingServiceSubState = iota
)
-// var mmessagingServiceSubStateNames = map[messagingServiceSubState]string{
-// messagingServiceSubStateUp: "Up",
-// messagingServiceSubStateReconnecting: "Reconnecting",
-// messagingServiceSubStateDown: "Down",
-// }
+// This map contains the list of modifiable service properties
+var modifiableProperties = [...]config.ServiceProperty{
+ config.AuthenticationPropertySchemeOAuth2AccessToken,
+ config.AuthenticationPropertySchemeOAuth2OIDCIDToken,
+}
type messagingServiceImpl struct {
transport core.Transport
@@ -157,6 +158,38 @@ func (service *messagingServiceImpl) Connect() (ret error) {
return nil
}
+func (service *messagingServiceImpl) UpdateProperty(property config.ServiceProperty, value interface{}) (ret error) {
+ // Verify the service is in the correct state for this operation
+ var state = service.getState()
+ if !(state == messagingServiceStateConnected || state == messagingServiceStateNotConnected || state == messagingServiceStateConnecting) {
+ // If the service is not connected or connecting, then the service is not in a valid state for
+ // updating service properties, so we return an error.
+ return solace.NewError(&solace.IllegalStateError{}, fmt.Sprintf(constants.UnableToModifyPropertyOfDisconnectedService), nil)
+ }
+
+
+ // Verify that the passed property is a valid property
+ var propertyIsModifiable = false
+ for _, modifiableProperty := range modifiableProperties {
+ if property == modifiableProperty {
+ propertyIsModifiable = true
+ break
+ }
+ }
+ if !propertyIsModifiable {
+ return solace.NewError(&solace.IllegalArgumentError{}, fmt.Sprintf(constants.UnableToModifyNonModifiableGivenServiceProperty, property), nil)
+ }
+
+
+ // All checks passed, proceed with property update
+ ccsmpProperty := servicePropertyToCCSMPMap[property]
+ propertyList := []string{} // The size of this array will need to be updated in the future if more properties are accepted by this method.
+ propertyList = append(propertyList, ccsmpProperty.solClientPropertyName)
+ propertyList = append(propertyList, ccsmpProperty.converter(value))
+
+ return service.transport.ModifySessionProperties(propertyList)
+}
+
func (service *messagingServiceImpl) downEventHandler(sessionEventInfo core.SessionEventInfo) {
// atomically swap to disconnected and proceed with disconnect if successful, otherwise return immediately
proceed := atomic.CompareAndSwapInt32(&service.state, messagingServiceStateConnected, messagingServiceStateDisconnected)
diff --git a/internal/impl/messaging_service_impl_test.go b/internal/impl/messaging_service_impl_test.go
index 5bc41fc..3ffb094 100644
--- a/internal/impl/messaging_service_impl_test.go
+++ b/internal/impl/messaging_service_impl_test.go
@@ -372,6 +372,13 @@ func (transport *solClientTransportMock) Host() string {
return ""
}
+func (transport *solClientTransportMock) ModifySessionProperties(_ []string) error {
+ // FFC: This function is added to pass a check during building. Currently it
+ // is not used, so there is no implementation. The implementation will need
+ // to be added as a part of future work.
+ return nil
+}
+
type solClientTransportEventsMock struct {
}
diff --git a/internal/impl/publisher/direct_message_publisher_impl.go b/internal/impl/publisher/direct_message_publisher_impl.go
index 042567e..5f76735 100644
--- a/internal/impl/publisher/direct_message_publisher_impl.go
+++ b/internal/impl/publisher/direct_message_publisher_impl.go
@@ -19,6 +19,7 @@ package publisher
import (
"fmt"
+ "sync"
"time"
"solace.dev/go/messaging/internal/impl/constants"
@@ -52,8 +53,9 @@ type directMessagePublisherImpl struct {
// the parameters for backpressure
backpressureConfiguration backpressureConfiguration
// buffers for backpressure
- buffer chan *publishable
- taskBuffer buffer.PublisherTaskBuffer
+ buffer chan *publishable
+ taskBuffer buffer.PublisherTaskBuffer
+ bufferPublishLock sync.Mutex
terminateWaitInterrupt chan struct{}
}
@@ -465,6 +467,8 @@ func (publisher *directMessagePublisherImpl) publish(msg *message.OutboundMessag
}
}
}()
+ publisher.bufferPublishLock.Lock()
+ defer publisher.bufferPublishLock.Unlock()
pub := &publishable{msg, dest}
if publisher.backpressureConfiguration == backpressureConfigurationReject {
select {
diff --git a/internal/impl/publisher/persistent_message_publisher_impl.go b/internal/impl/publisher/persistent_message_publisher_impl.go
index a74d0e8..1a4d326 100644
--- a/internal/impl/publisher/persistent_message_publisher_impl.go
+++ b/internal/impl/publisher/persistent_message_publisher_impl.go
@@ -54,6 +54,7 @@ type persistentMessagePublisherImpl struct {
backpressureConfiguration backpressureConfiguration
buffer chan *persistentPublishable
taskBuffer buffer.PublisherTaskBuffer
+ bufferPublishLock sync.Mutex
terminateWaitInterrupt chan struct{}
@@ -647,6 +648,8 @@ func (publisher *persistentMessagePublisherImpl) publish(msg *message.OutboundMe
}
}
}()
+ publisher.bufferPublishLock.Lock()
+ defer publisher.bufferPublishLock.Unlock()
pub := &persistentPublishable{msg, dest, ctx}
if publisher.backpressureConfiguration == backpressureConfigurationReject {
select {
diff --git a/pkg/solace/config/messaging_service_properties.go b/pkg/solace/config/messaging_service_properties.go
index d8ac2ec..4fcd828 100644
--- a/pkg/solace/config/messaging_service_properties.go
+++ b/pkg/solace/config/messaging_service_properties.go
@@ -87,7 +87,7 @@ func (servicePropertyMap ServicePropertyMap) String() string {
}
const (
- /* AuthenticaionProperties */
+ /* AuthenticationProperties */
// AuthenticationPropertyScheme defines the keys for the authentication scheme type.
// Possible values for configuration of authentication scheme are defined in
diff --git a/pkg/solace/messaging_service.go b/pkg/solace/messaging_service.go
index 45bc2c4..2390937 100644
--- a/pkg/solace/messaging_service.go
+++ b/pkg/solace/messaging_service.go
@@ -121,6 +121,27 @@ type MessagingService interface {
// Info returns the API Info for this MessagingService instance.
Info() metrics.APIInfo
+
+ // Updates the value of a modifiable service property once the service has been created.
+ // Modifiable service properties include:
+ // - solace/config.AuthenticationPropertySchemeOAuth2AccessToken,
+ // whose update will be applied during the next reconnection attempt.
+ // - solace/config.AuthenticationPropertySchemeOAuth2OIDCIDToken,
+ // whose update will be applied during the next reconnection attempt.
+ //
+ // Modification of a service property may occur instantly, or may occur during the next
+ // service reconnection.
+ // Modification of a service property during an ongoing service reconnection may apply
+ // to the next reconnection attempt.
+ // property (ServiceProperty): The name of the property to modify.
+ // value (interface{}): The new value of the property.
+ //
+ // - solace/errors.*IllegalArgumentError: If the specified property cannot
+ // - be modified.
+ // - solace/errors.*IllegalStateError: If the specified property cannot
+ // be modified in the current service state.
+ // - solace/errors.*NativeError: If other transport or communication related errors occur.
+ UpdateProperty(property config.ServiceProperty, value interface{}) error
}
// MessagingServiceBuilder is used to configure and build MessagingService instances.
diff --git a/pkg/solace/subcode/subcode_generated.go b/pkg/solace/subcode/subcode_generated.go
index 656bac0..a21c541 100644
--- a/pkg/solace/subcode/subcode_generated.go
+++ b/pkg/solace/subcode/subcode_generated.go
@@ -34,7 +34,7 @@ const (
InternalError Code = 6
// OutOfMemory: An API call failed due to inability to allocate memory.
OutOfMemory Code = 7
- // ProtocolError: An API call failed due to a protocol error with the appliance (not an application fault).
+ // ProtocolError: An API call failed due to a protocol error with the broker (not an application fault).
ProtocolError Code = 8
// InitNotCalled: An API call failed due to solClient_initialize() not being called first.
InitNotCalled Code = 9
@@ -54,15 +54,15 @@ const (
TopicTooLarge Code = 16
// InvalidTopicSyntax: An attempt was made to use a Topic that has a syntax which is not supported.
InvalidTopicSyntax Code = 17
- // XmlParseError: The appliance could not parse an XML message.
+ // XmlParseError: The broker could not parse an XML message.
XmlParseError Code = 18
- // LoginFailure: The client could not log into the appliance (bad username or password).
+ // LoginFailure: The client could not log into the broker (bad username or password).
LoginFailure Code = 19
- // InvalidVirtualAddress: An attempt was made to connect to the wrong IP address on the appliance (must use CVRID if configured) or the appliance CVRID has changed and this was detected on reconnect.
+ // InvalidVirtualAddress: An attempt was made to connect to the wrong IP address on the broker (must use CVRID if configured) or the broker CVRID has changed and this was detected on reconnect.
InvalidVirtualAddress Code = 20
// ClientDeleteInProgress: The client login not currently possible as previous instance of same client still being deleted.
ClientDeleteInProgress Code = 21
- // TooManyClients: The client login not currently possible because the maximum number of active clients on appliance has already been reached.
+ // TooManyClients: The client login not currently possible because the maximum number of active clients on broker has already been reached.
TooManyClients Code = 22
// SubscriptionAlreadyPresent: The client attempted to add a subscription which already exists. This subcode is only returned if the Session property SOLCLIENT_SESSION_PROP_IGNORE_DUP_SUBSCRIPTION_ERROR is not enabled.
SubscriptionAlreadyPresent Code = 23
@@ -70,15 +70,15 @@ const (
SubscriptionNotFound Code = 24
// SubscriptionInvalid: The client attempted to add/remove a subscription that is not valid.
SubscriptionInvalid Code = 25
- // SubscriptionOther: The appliance rejected a subscription add or remove request for a reason not separately enumerated.
+ // SubscriptionOther: The broker rejected a subscription add or remove request for a reason not separately enumerated.
SubscriptionOther Code = 26
- // ControlOther: The appliance rejected a control message for another reason not separately enumerated.
+ // ControlOther: The broker rejected a control message for another reason not separately enumerated.
ControlOther Code = 27
- // DataOther: The appliance rejected a data message for another reason not separately enumerated.
+ // DataOther: The broker rejected a data message for another reason not separately enumerated.
DataOther Code = 28
// LogFileError: Could not open the log file name specified by the application for writing (Deprecated - ::SOLCLIENT_SUBCODE_OS_ERROR is used).
LogFileError Code = 29
- // MessageTooLarge: The client attempted to send a message larger than that supported by the appliance.
+ // MessageTooLarge: The client attempted to send a message larger than that supported by the broker.
MessageTooLarge Code = 30
// SubscriptionTooMany: The client attempted to add a subscription that exceeded the maximum number allowed.
SubscriptionTooMany Code = 31
@@ -110,15 +110,15 @@ const (
CannotModifyWhileNotIdle Code = 44
// MsgVpnNotAllowed: The Message VPN name configured for the session does not exist.
MsgVpnNotAllowed Code = 45
- // ClientNameInvalid: The client name chosen has been rejected as invalid by the appliance.
+ // ClientNameInvalid: The client name chosen has been rejected as invalid by the broker.
ClientNameInvalid Code = 46
- // MsgVpnUnavailable: The Message VPN name set for the Session (or the default Message VPN, if none was set) is currently shutdown on the appliance.
+ // MsgVpnUnavailable: The Message VPN name set for the Session (or the default Message VPN, if none was set) is currently shutdown on the broker.
MsgVpnUnavailable Code = 47
- // ClientUsernameIsShutdown: The username for the client is administratively shutdown on the appliance.
+ // ClientUsernameIsShutdown: The username for the client is administratively shutdown on the broker.
ClientUsernameIsShutdown Code = 48
// DynamicClientsNotAllowed: The username for the Session has not been set and dynamic clients are not allowed.
DynamicClientsNotAllowed Code = 49
- // ClientNameAlreadyInUse: The Session is attempting to use a client, publisher name, or subscriber name that is in use by another client, publisher, or subscriber, and the appliance is configured to reject the new Session. When Message VPNs are in use, the conflicting client name must be in the same Message VPN.
+ // ClientNameAlreadyInUse: The Session is attempting to use a client, publisher name, or subscriber name that is in use by another client, publisher, or subscriber, and the broker is configured to reject the new Session. When Message VPNs are in use, the conflicting client name must be in the same Message VPN.
ClientNameAlreadyInUse Code = 50
// CacheNoData: When the cache request returns ::SOLCLIENT_INCOMPLETE, this subcode indicates there is no cached data in the designated cache.
CacheNoData Code = 51
@@ -140,19 +140,19 @@ const (
CannotBindToQueue Code = 59
// InvalidTopicNameForTe: An attempt was made to bind to a Topic Endpoint with an invalid topic.
InvalidTopicNameForTe Code = 60
- // UnknownQueueName: An attempt was made to bind to an unknown Queue name (for example, not configured on appliance).
+ // UnknownQueueName: An attempt was made to bind to an unknown Queue name (for example, not configured on broker).
UnknownQueueName Code = 61
- // UnknownTeName: An attempt was made to bind to an unknown Topic Endpoint name (for example, not configured on appliance).
+ // UnknownTeName: An attempt was made to bind to an unknown Topic Endpoint name (for example, not configured on broker).
UnknownTeName Code = 62
// MaxClientsForQueue: An attempt was made to bind to a Queue that already has a maximum number of clients.
MaxClientsForQueue Code = 63
// MaxClientsForTe: An attempt was made to bind to a Topic Endpoint that already has a maximum number of clients.
MaxClientsForTe Code = 64
- // UnexpectedUnbind: An unexpected unbind response was received for a Queue or Topic Endpoint (for example, the Queue or Topic Endpoint was deleted from the appliance).
+ // UnexpectedUnbind: An unexpected unbind response was received for a Queue or Topic Endpoint (for example, the Queue or Topic Endpoint was deleted from the broker).
UnexpectedUnbind Code = 65
// QueueNotFound: The specified Queue was not found when publishing a message.
QueueNotFound Code = 66
- // ClientAclDenied: The client login to the appliance was denied because the IP address/netmask combination used for the client is designated in the ACL (Access Control List) as a deny connection for the given Message VPN and username.
+ // ClientAclDenied: The client login to the broker was denied because the IP address/netmask combination used for the client is designated in the ACL (Access Control List) as a deny connection for the given Message VPN and username.
ClientAclDenied Code = 67
// SubscriptionAclDenied: Adding a subscription was denied because it matched a subscription that was defined on the ACL (Access Control List).
SubscriptionAclDenied Code = 68
@@ -166,7 +166,7 @@ const (
QueueShutdown Code = 72
// TeShutdown: An attempt was made to bind to a shutdown Topic Endpoint.
TeShutdown Code = 73
- // NoMoreNonDurableQueueOrTe: An attempt was made to bind to a non-durable Queue or Topic Endpoint, and the appliance is out of resources.
+ // NoMoreNonDurableQueueOrTe: An attempt was made to bind to a non-durable Queue or Topic Endpoint, and the broker is out of resources.
NoMoreNonDurableQueueOrTe Code = 74
// EndpointAlreadyExists: An attempt was made to create a Queue or Topic Endpoint that already exists. This subcode is only returned if the provision flag SOLCLIENT_PROVISION_FLAGS_IGNORE_EXIST_ERRORS is not set.
EndpointAlreadyExists Code = 75
@@ -180,7 +180,7 @@ const (
EndpointPropertyMismatch Code = 79
// SubscriptionManagerDenied: An attempt was made to add a subscription to another client when Session does not have subscription manager privileges.
SubscriptionManagerDenied Code = 80
- // UnknownClientName: An attempt was made to add a subscription to another client that is unknown on the appliance.
+ // UnknownClientName: An attempt was made to add a subscription to another client that is unknown on the broker.
UnknownClientName Code = 81
// QuotaOutOfRange: An attempt was made to provision an endpoint with a quota that is out of range.
QuotaOutOfRange Code = 82
@@ -188,13 +188,13 @@ const (
SubscriptionAttributesConflict Code = 83
// InvalidSmfMessage: The client attempted to send a Solace Message Format (SMF) message using solClient_session_sendSmf() or solClient_session_sendMultipleSmf(), but the buffer did not contain a Direct message.
InvalidSmfMessage Code = 84
- // NoLocalNotSupported: The client attempted to establish a Session or Flow with No Local enabled and the capability is not supported by the appliance.
+ // NoLocalNotSupported: The client attempted to establish a Session or Flow with No Local enabled and the capability is not supported by the broker.
NoLocalNotSupported Code = 85
// UnsubscribeNotAllowedClientsBound: The client attempted to unsubscribe a Topic from a Topic Endpoint while there were still Flows bound to the endpoint.
UnsubscribeNotAllowedClientsBound Code = 86
// CannotBlockInContext: An API function was invoked in the Context thread that would have blocked otherwise. For an example, a call may have been made to send a message when the Session is configured with ::SOLCLIENT_SESSION_PROP_SEND_BLOCKING enabled and the transport (socket or IPC) channel is full. All application callback functions are executed in the Context thread.
CannotBlockInContext Code = 87
- // FlowActiveFlowIndicationUnsupported: The client attempted to establish a Flow with Active Flow Indication (SOLCLIENT_FLOW_PROP_ACTIVE_FLOW_IND) enabled and the capability is not supported by the appliance
+ // FlowActiveFlowIndicationUnsupported: The client attempted to establish a Flow with Active Flow Indication (SOLCLIENT_FLOW_PROP_ACTIVE_FLOW_IND) enabled and the capability is not supported by the broker
FlowActiveFlowIndicationUnsupported Code = 88
// UnresolvedHost: The client failed to connect because the host name could not be resolved.
UnresolvedHost Code = 89
@@ -210,27 +210,27 @@ const (
UnknownFlowName Code = 94
// ReplicationIsStandby: An attempt to perform an operation using a VPN that is configured to be STANDBY for replication.
ReplicationIsStandby Code = 95
- // LowPriorityMsgCongestion: The message was rejected by the appliance as one or more matching endpoints exceeded the reject-low-priority-msg-limit.
+ // LowPriorityMsgCongestion: The message was rejected by the broker as one or more matching endpoints exceeded the reject-low-priority-msg-limit.
LowPriorityMsgCongestion Code = 96
// LibraryNotLoaded: The client failed to find the library or symbol.
LibraryNotLoaded Code = 97
// FailedLoadingTruststore: The client failed to load the trust store.
FailedLoadingTruststore Code = 98
- // UntrustedCertificate: The client attempted to connect to an appliance that has a suspect certficate.
+ // UntrustedCertificate: The client attempted to connect to an broker that has a suspect certficate.
UntrustedCertificate Code = 99
- // UntrustedCommonname: The client attempted to connect to an appliance that has a suspect common name.
+ // UntrustedCommonname: The client attempted to connect to an broker that has a suspect common name.
UntrustedCommonname Code = 100
- // CertificateDateInvalid: The client attempted to connect to an appliance that does not have a valid certificate date.
+ // CertificateDateInvalid: The client attempted to connect to an broker that does not have a valid certificate date.
CertificateDateInvalid Code = 101
// FailedLoadingCertificateAndKey: The client failed to load certificate and/or private key files.
FailedLoadingCertificateAndKey Code = 102
- // BasicAuthenticationIsShutdown: The client attempted to connect to an appliance that has the basic authentication shutdown.
+ // BasicAuthenticationIsShutdown: The client attempted to connect to an broker that has the basic authentication shutdown.
BasicAuthenticationIsShutdown Code = 103
- // ClientCertificateAuthenticationIsShutdown: The client attempted to connect to an appliance that has the client certificate authentication shutdown.
+ // ClientCertificateAuthenticationIsShutdown: The client attempted to connect to an broker that has the client certificate authentication shutdown.
ClientCertificateAuthenticationIsShutdown Code = 104
- // UntrustedClientCertificate: The client failed to connect to an appliance as it has a suspect client certificate.
+ // UntrustedClientCertificate: The client failed to connect to an broker as it has a suspect client certificate.
UntrustedClientCertificate Code = 105
- // ClientCertificateDateInvalid: The client failed to connect to an appliance as it does not have a valid client certificate date.
+ // ClientCertificateDateInvalid: The client failed to connect to an broker as it does not have a valid client certificate date.
ClientCertificateDateInvalid Code = 106
// CacheRequestCancelled: The cache request has been cancelled by the client.
CacheRequestCancelled Code = 107
@@ -248,7 +248,7 @@ const (
MaxTransactedSessionsExceeded Code = 113
// TransactedSessionNameInUse: The client failed to open a Transacted Session as the Transacted Session name provided is being used by another opened session.
TransactedSessionNameInUse Code = 114
- // ServiceUnavailable: Guaranteed Delivery services are not enabled on the appliance.
+ // ServiceUnavailable: Guaranteed Delivery services are not enabled on the broker.
ServiceUnavailable Code = 115
// NoTransactionStarted: The client attempted to commit an unknown transaction.
NoTransactionStarted Code = 116
@@ -264,7 +264,7 @@ const (
EndpointModified Code = 121
// InvalidConnectionOwner: The client attempted to commit a transaction with an unknown connection ID.
InvalidConnectionOwner Code = 122
- // KerberosAuthenticationIsShutdown: The client attempted to connect to an appliance that has the Kerberos authentication shutdown.
+ // KerberosAuthenticationIsShutdown: The client attempted to connect to an broker that has the Kerberos authentication shutdown.
KerberosAuthenticationIsShutdown Code = 123
// CommitOrRollbackInProgress: The client attempted to send/receive a message or commit/rollback a transaction when a transaction commit/rollback is in progress.
CommitOrRollbackInProgress Code = 124
@@ -318,9 +318,9 @@ const (
TopicOrSelectorModifiedOnDurableTopicEndpoint Code = 148
// ReplayFailed: A replay in progress on a flow failed.
ReplayFailed Code = 149
- // CompressedSslNotSupported: The client attempted to establish a Session or Flow with ssl and compression, but the capability is not supported by the appliance.
+ // CompressedSslNotSupported: The client attempted to establish a Session or Flow with ssl and compression, but the capability is not supported by the broker.
CompressedSslNotSupported Code = 150
- // SharedSubscriptionsNotSupported: The client attempted to add a shared subscription, but the capability is not supported by the appliance.
+ // SharedSubscriptionsNotSupported: The client attempted to add a shared subscription, but the capability is not supported by the broker.
SharedSubscriptionsNotSupported Code = 151
// SharedSubscriptionsNotAllowed: The client attempted to add a shared subscription on a client that is not permitted to use shared subscriptions.
SharedSubscriptionsNotAllowed Code = 152
diff --git a/test/data/invalid_fixtures/api-badserver.pem b/test/data/invalid_fixtures/api-badserver.pem
index 34518a8..ff0b9a7 100644
--- a/test/data/invalid_fixtures/api-badserver.pem
+++ b/test/data/invalid_fixtures/api-badserver.pem
@@ -29,11 +29,11 @@ zaD5rDRKxf96BSrqk5AIyXa0uHnQ4qD4WjHTrKCqLeX40WLWYZgu0gD8ndLWjaO2
DZlx4kv5QmOWLVBzpRPsM6LFJc71bXG7bWLXkh8U+CGGSCJpftPVfLrhwkXtmy92
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UEBhMCQ0Ex
+MIIDnjCCAoagAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgTELMAkGA1UEBhMCQ0Ex
CzAJBgNVBAgMAk9OMQ8wDQYDVQQHDAZLYW5hdGExDzANBgNVBAoMBlNvbGFjZTEM
MAoGA1UECwwDQVBJMRIwEAYDVQQDDAlwdWJsaWNhZncxITAfBgkqhkiG9w0BCQEW
-EnN1cHBvcnRAc29sYWNlLmNvbTAeFw0yMjAzMTAxNDE4MzhaFw0zMjAzMDcxNDE4
-MzhaMIGHMQswCQYDVQQGEwJDQTELMAkGA1UECAwCT04xDzANBgNVBAcMBkthbmF0
+EnN1cHBvcnRAc29sYWNlLmNvbTAeFw0yMjEyMTkxODM1MzVaFw0zMjEyMTYxODM1
+MzVaMIGHMQswCQYDVQQGEwJDQTELMAkGA1UECAwCT04xDzANBgNVBAcMBkthbmF0
YTEPMA0GA1UECgwGU29sYWNlMQwwCgYDVQQLDANBUEkxGDAWBgNVBAMMD3B1Ymxp
Y2Fmd3NlcnZlcjEhMB8GCSqGSIb3DQEJARYSc3VwcG9ydEBzb2xhY2UuY29tMIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7HXmPFjHmbZwEHKQ04GevsSM
@@ -42,11 +42,11 @@ us2ClvKFVjlVALv7jjsaN2SlbW3BrthH7q3yk1cjfviyVpGr4i1Ij+FLRYzQAJbT
wsW9FrAlBhleQpTYNjVNIj4/zcqoVixoWdcqJlzIPv1Bjrtb6wmXA2XL3j4M+xKQ
+C2X99tp0PeatU2X/aPcWHDQwImjec+PUxLpK/VE/3HLwo8Y0iycfyFTkIHVNSHH
udU1Pvuw+c23Cig0cCYGp+9FFXSzimhFx2ddcmIc8zMGYTe+W0Lk4UlhrIQZCQID
-AQABoxkwFzAVBgNVHREEDjAMggpkb25vdGV4aXN0MA0GCSqGSIb3DQEBBQUAA4IB
-AQABddNdaT+RivywEIb/VdOGFt2tCB1pY1iYLYJbPeBA2qupUuM1cNqudKkazlj9
-pm0VU/umJ+R26PIt+AxcB3gxF+bwmK2UIBhf8Z7mV7/RN4OjVM7xsI3e19AZsfgL
-dt9nqBcoJVlOE8uncCg1J9SdHy1VW4TMuSi4mhUZIiV3as3nnZJuXAdeD2FSvZJY
-2c0pjsxbOY3BqzQaXw6mcCSEg9w6nq+r8Fc/4ZmX/6NZ7n+7X7rOaegOi/vNoxEG
-idC3s4t6OTEE5woxB7sNBxS7VzqkfBil3mmgbChoExOx/ZB5WEVk0SvYhPI4AR0b
-MwPAl4bZQR+Y5WG0quEdfWhA
+AQABoxkwFzAVBgNVHREEDjAMggpkb25vdGV4aXN0MA0GCSqGSIb3DQEBCwUAA4IB
+AQAuksC2JLrooRU+I8YNPMi1HhBLT7N5IQEhBr8SGfiWoNMjLdfRcsfISI1D1J98
+lQVvebewip+pt4oK1VH7vpjkEbTbrI491MD7qnqBV6xpoAgQARB5kDFymbJU4Y1D
+4KLz6BZH+Hs9avhLu99C3EkUxB9a6IBklxgg5Il6pLUQnqwWuwm5t8U9sIFTXvSi
+WY+JILaQ/h5NjcuTOvFwEc0Siut0CUa30wW1MLaZ3RXghElkTrDFVvy3fswH15hj
+Bh4/K5eHzTNRAyVB17SJCZkhoxO2LZ3xXlBo3lLl5llhskDn9QlR77mZn6m/Isew
+HJ5mLuhlLKj/5P8uN6JF4LfC
-----END CERTIFICATE-----
diff --git a/test/oauth_test.go b/test/oauth_test.go
index 656df2b..a73b108 100644
--- a/test/oauth_test.go
+++ b/test/oauth_test.go
@@ -19,6 +19,7 @@ package test
import (
"fmt"
"io/ioutil"
+ "time"
"solace.dev/go/messaging"
"solace.dev/go/messaging/pkg/solace"
@@ -233,6 +234,260 @@ var _ = Describe("OAuth Strategy", func() {
Entry("When given access token d, no id token and an issuer identifier", tokenD, "", issuerIdentifier),
)
+ Describe("When the messaging service tries to connect after multiple token updates", func() {
+ Context("When the multiple updates were applied before the first connection with valid tokens", func() {
+ It("should not fail when trying to connect the messaging service", func() {
+ var err error
+ // We first set the tokens and issuer identifier to empty strings to prove that the update
+ // later on actually worked. If the update doesn't work, the connection attempt will fail
+ // because the original tokens were invalid. If the connection attempt succeeds, it is only
+ // because the service token properties were successfully updated.
+ messagingService, err = builder.WithAuthenticationStrategy(config.OAuth2Authentication(
+ "invalid access token",
+ "invalid id token",
+ "",
+ )).Build()
+ Expect(err).ToNot(HaveOccurred())
+
+ // First round of updates
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2OIDCIDToken, tokenB)
+ Expect(err).ToNot(HaveOccurred())
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2AccessToken, tokenC)
+ Expect(err).ToNot(HaveOccurred())
+
+ // Second round of updates
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2OIDCIDToken, tokenB)
+ Expect(err).ToNot(HaveOccurred())
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2AccessToken, tokenC)
+ Expect(err).ToNot(HaveOccurred())
+
+ helpers.ConnectMessagingService(messagingService)
+ // Validation of connection state occurs within the ConnectMessagingService
+ // and DisconnectMessagingService methods
+ helpers.DisconnectMessagingService(messagingService)
+ })
+ })
+
+ Context("When the multiple updates were applied after the first connection with valid tokens", func() {
+ It("should not fail when trying to reconnect the messaging service", func() {
+ var err error
+
+ messagingService, err = builder.WithAuthenticationStrategy(config.OAuth2Authentication(
+ tokenC,
+ tokenB,
+ "",
+ )).WithReconnectionRetryStrategy(config.RetryStrategyForeverRetry()).Build()
+ Expect(err).ToNot(HaveOccurred())
+
+ helpers.ConnectMessagingService(messagingService)
+
+ // First round of updates
+ // Updating the ID token to the same value is not redundant because we are verifying that the update
+ // of that property can occur at all, regardless of the value being different.
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2OIDCIDToken, tokenB)
+ Expect(err).ToNot(HaveOccurred())
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2AccessToken, tokenD)
+ Expect(err).ToNot(HaveOccurred())
+
+ // Second round of updates
+ // Updating the ID token to the same value is not redundant because we are verifying that the update
+ // of that property can occur at all, regardless of the value being different.
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2OIDCIDToken, tokenB)
+ Expect(err).ToNot(HaveOccurred())
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2AccessToken, tokenD)
+ Expect(err).ToNot(HaveOccurred())
+
+ reconnectChan := make(chan struct{})
+ messagingService.AddReconnectionListener(func(event solace.ServiceEvent) {
+ close(reconnectChan)
+ })
+
+ helpers.ForceDisconnectViaSEMPv2(messagingService)
+ Eventually(reconnectChan).Should(BeClosed())
+
+ // Clean up messaging service
+ helpers.DisconnectMessagingService(messagingService)
+ })
+ })
+ })
+
+ Describe("When the service tries to update the token in an invalid way", func() {
+ Context("When the token is updated with an invalid token value after successfully connecting", func() {
+ It("should fail to reconnect", func() {
+ var err error
+
+ messagingService, err = builder.WithAuthenticationStrategy(config.OAuth2Authentication(
+ tokenC,
+ tokenB,
+ "",
+ )).WithReconnectionRetryStrategy(config.RetryStrategyParameterizedRetry(1, 200*time.Millisecond)).Build()
+ Expect(err).ToNot(HaveOccurred())
+
+ helpers.ConnectMessagingService(messagingService)
+
+ // We are passing a non-empty string as the value for a valid token property, so we expect the update
+ // to not return any errors. Instead the error is expected to be returned later when we try to
+ // reconnect using the invalid token.
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2OIDCIDToken, "invalid token")
+ Expect(err).ToNot(HaveOccurred())
+
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2AccessToken, "invalid token")
+ Expect(err).ToNot(HaveOccurred())
+
+ reconnectChan := make(chan struct{})
+ messagingService.AddReconnectionListener(func(event solace.ServiceEvent) {
+ close(reconnectChan)
+ })
+
+ helpers.ForceDisconnectViaSEMPv2(messagingService)
+ Consistently(reconnectChan).ShouldNot(Receive())
+ Eventually(messagingService.IsConnected()).Should(BeFalse())
+
+ // The service should fail to reconnect above, so if the service is connected at this point,
+ // then there was an error that was not detected, so we will fail the test here, after
+ // cleaning up the service.
+ var messagingServiceIsConnected = messagingService.IsConnected()
+ helpers.DisconnectMessagingService(messagingService)
+
+ if messagingServiceIsConnected {
+ Fail("Service was expected to be disconnected, but instead was connected.")
+ }
+ })
+ })
+
+ Context("When the token is updated with an invalid token type after successfully connecting", func() {
+ It("should fail to reconnect", func() {
+ var err error
+
+ messagingService, err = builder.WithAuthenticationStrategy(config.OAuth2Authentication(
+ tokenC,
+ tokenB,
+ "",
+ )).WithReconnectionRetryStrategy(config.RetryStrategyParameterizedRetry(1, 200*time.Millisecond)).Build()
+ Expect(err).ToNot(HaveOccurred())
+
+ helpers.ConnectMessagingService(messagingService)
+
+ // We are passing a non-empty string as the value for a valid token property, so we expect the update
+ // to not return any errors. Instead the error is expected to be returned later when we try to
+ // reconnect using the invalid token.
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2OIDCIDToken, 75)
+ Expect(err).ToNot(HaveOccurred())
+
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2AccessToken, 75)
+ Expect(err).ToNot(HaveOccurred())
+
+ reconnectChan := make(chan struct{})
+ messagingService.AddReconnectionListener(func(event solace.ServiceEvent) {
+ close(reconnectChan)
+ })
+
+ helpers.ForceDisconnectViaSEMPv2(messagingService)
+ Consistently(reconnectChan).ShouldNot(Receive())
+ Eventually(messagingService.IsConnected()).Should(BeFalse())
+
+ // The service should fail to reconnect above, so if the service is connected at this point,
+ // then there was an error that was not detected, so we will fail the test here, after
+ // cleaning up the service.
+ var messagingServiceIsConnected = messagingService.IsConnected()
+ helpers.DisconnectMessagingService(messagingService)
+
+ if messagingServiceIsConnected {
+ Fail("Service was expected to be disconnected, but instead was connected.")
+ }
+ })
+ })
+
+ Context("When the token is updated with a nil token value after successfully connecting", func() {
+ It("should fail to reconnect", func() {
+ var err error
+
+ messagingService, err = builder.WithAuthenticationStrategy(config.OAuth2Authentication(
+ tokenC,
+ tokenB,
+ "",
+ )).WithReconnectionRetryStrategy(config.RetryStrategyParameterizedRetry(1, 200*time.Millisecond)).Build()
+ Expect(err).ToNot(HaveOccurred())
+
+ helpers.ConnectMessagingService(messagingService)
+
+ // We are passing a non-empty string as the value for a valid token property, so we expect the update
+ // to not return any errors. Instead the error is expected to be returned later when we try to
+ // reconnect using the invalid token.
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2OIDCIDToken, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2AccessToken, nil)
+ Expect(err).ToNot(HaveOccurred())
+
+ reconnectChan := make(chan struct{})
+ messagingService.AddReconnectionListener(func(event solace.ServiceEvent) {
+ close(reconnectChan)
+ })
+
+ helpers.ForceDisconnectViaSEMPv2(messagingService)
+ Consistently(reconnectChan).ShouldNot(Receive())
+ Eventually(messagingService.IsConnected()).Should(BeFalse())
+
+ // The service should fail to reconnect above, so if the service is connected at this point,
+ // then there was an error that was not detected, so we will fail the test here, after
+ // cleaning up the service.
+ var messagingServiceIsConnected = messagingService.IsConnected()
+ helpers.DisconnectMessagingService(messagingService)
+
+ if messagingServiceIsConnected {
+ Fail("Service was expected to be disconnected, but instead was connected.")
+ }
+ })
+ })
+
+ Context("When the token is updated on a disconnected service", func() {
+ It("should return an IllegalStateError", func() {
+ var err error
+
+ messagingService, err = builder.WithAuthenticationStrategy(config.OAuth2Authentication(
+ tokenC,
+ tokenB,
+ "",
+ )).Build()
+ Expect(err).ToNot(HaveOccurred())
+
+ // We need to connect and then disconnect the service to get the service into
+ // the `disconnected` state since it is valid for the application to update the
+ // tokens on a service that has not yet been connected, but not on one that is
+ // already disconnected.
+ helpers.ConnectMessagingService(messagingService)
+ helpers.DisconnectMessagingService(messagingService)
+ Expect(messagingService.IsConnected()).To(BeFalse())
+
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2OIDCIDToken, tokenB)
+ Expect(err).To(HaveOccurred())
+ helpers.ValidateError(err, &solace.IllegalStateError{})
+
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeOAuth2AccessToken, tokenC)
+ Expect(err).To(HaveOccurred())
+ helpers.ValidateError(err, &solace.IllegalStateError{})
+ })
+ })
+
+ Context("When an invalid property is used to update the token", func() {
+ It("should return an IllegalArgumentError", func() {
+ var err error
+
+ messagingService, err = builder.WithAuthenticationStrategy(config.OAuth2Authentication(
+ tokenC,
+ tokenB,
+ "",
+ )).Build()
+ Expect(err).ToNot(HaveOccurred())
+
+ err = messagingService.UpdateProperty(config.AuthenticationPropertySchemeBasicPassword, "arbitrary string")
+ Expect(err).To(HaveOccurred())
+ helpers.ValidateError(err, &solace.IllegalArgumentError{})
+ })
+ })
+ })
+
DescribeTable("Messaging Service fails to connect",
func(access, id, issuer string) {
var err error
diff --git a/version.go b/version.go
index f6944cc..e1be859 100644
--- a/version.go
+++ b/version.go
@@ -23,4 +23,4 @@ func init() {
core.SetVersion(version)
}
-const version = "1.1.0"
+const version = "1.2.0"