MQTTSN Control
Properties Methods Events Config Settings Errors
A lightweight, fully-featured MQTT-SN client implementation.
Syntax
MQTTSN
Remarks
The MQTTSN control provides a lightweight, fully-featured MQTT-SN (MQTT for Sensor Networks) client implementation over UDP.
Connecting
Connecting to a gateway is easy; in the simplest case, set the ClientId property and call the ConnectTo method, passing it the gateway's hostname and port number.When connecting to an MQTT gateway, the control sends the following information:
- The values of the ClientId, CleanSession, and KeepAliveInterval properties.
- The values of the WillTopic and WillMessage properties and the WillRetain and WillQOS configuration settings.
Refer to CleanSession for more information about MQTT sessions; refer to WillTopic, WillMessage, WillQOS and WillRetain for more information about MQTT Wills.
Basic Connection Example
mqttsn1.ClientId = "testClient";
mqttsn1.CleanSession = true;
mqttsn1.KeepAliveInterval = 30;
mqttsn1.WillTopic = "wills/" + mqttsn1.ClientId;
mqttsn1.WillMessage = mqttsn1.ClientId + " was disconnected ungracefully!";
mqttsn1.ConnectTo(host, port);
Topic Subscriptions
The Subscribe and Unsubscribe methods are used to subscribe to and unsubscribe from topics.When subscribing, pass the topic name or id, topic id type and QoS level. Topic filters may contain wildcards in order to match multiple topics on the server. If a topic name is specified, the SubscribedTopicId configuration setting will contain the assigned id for the topic.
Subscribe Examples
String fullTopicName = "full/topic/name";
mqttsn1.Subscribe(fullTopicName, 0, 2); // subscribe with topic name
int assignedTopicId = mqttsn1.Config("SubscribedTopicId"); // map id to topic name used
mqttsn1.Subscribe(fullTopicName+"/#", 0, 2) // topic name with wildcard; SubscribedTopicId will be 0
mqttsn1.OnTopicId += (s,e) => { // will fire before messages matching the wildcard are sent to the client
int topicId = e.TopicId;
String topicName = e.TopicName;
// establish mapping between these
};
mqttsn1.Subscribe("aa", 2, 2); // subscribe with short topic name; no need for registration
After subscribing to topics, any messages received on that topic will cause the MessageIn event to fire. Refer to MessageIn for more information about processing steps for inbound messages.
When unsubscribing, pass the topic id or exact topic name used to subscribe.
Unsubscribe Examples
String fullTopicName = "full/topic/name";
mqtt1.Unsubscribe(fullTopicName, 0); // unsubscribe from topic name
mqtt1.Unsubscribe(fullTopicName+"/#", 0); // must use full topic filter if includes wildcard; can't unsubscribe from individual topics included in the filter
mqtt1.Unsubscribe("aa", 2); // unsubscribe from short topic
Refer to Subscribe and Unsubscribe for more information about subscriptions and topic names.
Publishing Messages
To publish messages to topics, use the PublishMessage and PublishData methods.PublishMessage is used to publish a message with a string payload, while PublishData is used to publish a message with a raw data payload. Both also accept the topic id to publish to, the topic id type and a QoS level at which to publish.
Publish Examples
// Publish string messages
int id = mqttsn1.RegisterTopic("topic/name"); // must register topic names that are not short or pre-defined
mqttsn1.PublishMessage(id, 0, 2, "hello"); // publish message with registered topic name
mqttsn1.PublishMessage("aa", 2, 2, "hello"); // publish message with short topic name
// Publish a raw data message.
byte[] picture = ...;
mqtt1.PublishData(id, 0, 2, picture);
Refer to PublishData and PublishMessage for more information about message publishing as well as topic names.
Sleeping
To save battery, clients may enter a sleep state in which their messages will be buffered for them. To manage sleeping, use StartSleep and StopSleep. To receive all buffered messages then return to sleep, use FetchMessages.If the client exceeds the sleep duration passed to StartSleep without waking or sending any packets, it will be considered lost and will disconnect.
Sleep Examples
mqttsn1.StartSleep(8); // sleep for 8 seconds
// ... wait for 5 seconds
mqttsn1.FetchMessages(); // MessageIn will fire for each message buffered during that time
// ... wait for 5 more seconds (ok because <8 seconds since last packet sent)
mqttsn1.StopSleep();
Property List
The following is the full list of the properties of the control with short descriptions. Click on the links for further details.
CleanSession | Determines whether a clean session is used once connected. |
ClientId | A string that uniquely identifies this instance of the control to the server. |
Connected | Triggers a connection or disconnection. |
KeepAliveInterval | The maximum period of inactivity the gateway should allow between receiving messages from the client. |
LocalHost | The name of the local host or user-assigned IP interface through which connections are initiated or accepted. |
LocalPort | The UDP port in the local host where UDP binds. |
RemoteHost | The address of the remote host. Domain names are resolved to IP addresses. |
RemotePort | The UDP port in the remote host. |
Timeout | A timeout for the control. |
WillMessage | The message that the server should publish in the event of an ungraceful disconnection. |
WillTopic | The topic that the server should publish the WillMessage to in the event of an ungraceful disconnection. |
Method List
The following is the full list of the methods of the control with short descriptions. Click on the links for further details.
Config | Sets or retrieves a configuration setting. |
Connect | Connects to the MQTTSN Gateway. |
ConnectTo | Connects to the remote host. |
Disconnect | Disconnect from the MQTTSN Gateway. |
DiscoverGateway | Broadcast a SEARCHGW message to network clients and gateways. |
DoEvents | Processes events from the internal message queue. |
FetchMessages | Receive currently buffered messages and return to sleep. |
Ping | Send a PINGREQ message to the gateway to reset the Keep Alive interval and ensure the gateway's liveliness. |
PublishData | Publishes a message with a raw data payload. |
PublishMessage | Publishes a message with a string payload. |
RegisterTopic | Register a topic name. Returns the topic id mapped to the newly registered topic name. |
Reset | Reset the control. |
SendDiscoverResponse | Asynchronously respond to a SEARCHGW message received from a peer. |
StartSleep | Enter sleep state for the specified duration. |
StopSleep | Enter active state, ending the sleep period. |
Subscribe | Subscribes the control to the specified topic. |
Unsubscribe | Unsubscribes the control from the specified topic. |
UpdateWillMessage | Update the will message stored in session state data by the server. |
UpdateWillTopic | Update the will topic, will QoS and will retain flag stored in session state data by the server. |
Event List
The following is the full list of the events fired by the control with short descriptions. Click on the links for further details.
Connected | Fired after a MQTTSN connection completes (or fails). |
Disconnected | Fired when a MQTTSN connection is closed. |
DiscoverRequest | Fired when the control receives a SEARCHGW packet from another client. |
Error | Information about errors during data delivery. |
GatewayInfo | Fired when the control receives a GWINFO or ADVERTISE packet. |
Log | Fires once for each log message. |
MessageIn | Fired when an incoming message has been received and/or fully acknowledged. |
TopicInfo | Fired when the client receives a REGISTER packet from the gateway assigning a topic id to a topic name. |
Config Settings
The following is a list of config settings for the control with short descriptions. Click on the links for further details.
ConnectionTimeout | How long to wait for a connection attempt to succeed. |
Duplicate | Whether to set the Duplicate flag when publishing a message. |
LogLevel | The level of detail that is logged. |
PingTimeout | Length of time to wait for a PINGRESP packet. |
Retain | Whether to set the Retain flag when publishing a message. |
SubscribedTopicId | Topic id assigned by the gateway when a topic name is used in a SUBSCRIBE message. |
SubscribeDUP | Whether to set the Duplicate flag when subscribe to a topic. |
WillQOS | The QoS value to use for the Will message. |
WillRetain | Whether the server should retain the Will message after publishing it. |
CodePage | The system code page used for Unicode to Multibyte translations. |
MaskSensitive | Whether sensitive data is masked in log messages. |
UseInternalSecurityAPI | Tells the control whether or not to use the system security libraries or an internal implementation. |
CleanSession Property (MQTTSN Control)
Determines whether a clean session is used once connected.
Syntax
mqttsncontrol.CleanSession[=boolean]
Default Value
True
Remarks
This property determines whether or not the control should instruct the server to use a clean session when it connects. (Note that this property must be set to the desired value before calling Connect.)
By default, CleanSession is true, so the server will discard any state data previously associated with the current ClientId once the control has connected successfully. In addition, the server will not save any state data when the control disconnects.
Setting CleanSession to False before connecting will cause the server to re-associate any previously stored state data for the current ClientId. The server will also save any state data that exists when the control is disconnected.
The server-side session state consists of:
- client subscriptions,
- QoS 1 and 2 messages which are buffering or unacknowledged,
- QoS 2 messages received from the client but not completely acknowledged, and
- the WillMessage and WillTopic if set.
Note that retained messages are not deleted as a result of a session ending, but are not part of the session state.
This property is not available at design time.
Data Type
Boolean
ClientId Property (MQTTSN Control)
A string that uniquely identifies this instance of the control to the server.
Syntax
mqttsncontrol.ClientId[=string]
Default Value
""
Remarks
The ClientId string is used by the server to uniquely identify each client that is connected to it.
If ClientId is empty when Connect is called, the control's behavior depends on value of CleanSession. If CleanSession is True, the control will automatically generate a unique value for ClientId before connecting. If CleanSession is False, the control fails with an error.
This property is not available at design time.
Data Type
String
Connected Property (MQTTSN Control)
Triggers a connection or disconnection.
Syntax
mqttsncontrol.Connected[=boolean]
Default Value
False
Remarks
This property triggers a connection or disconnection. Setting this property to True makes the control send a CONNECT packet to the MQTTSN Gateway identified by the RemoteHost property. If successful, after the connection is achieved the value of the property changes to True and the Connected event is fired.
Setting this property to False sends a DISCONNECT packet, closing the connection.
When connecting to an MQTT gateway, the control sends the following information:
- The values of the ClientId, CleanSession, and KeepAliveInterval properties.
- The values of the WillTopic and WillMessage properties and the WillRetain and WillQOS configuration settings.
Refer to CleanSession for more information about MQTT sessions; refer to WillTopic, WillMessage, WillQOS and WillRetain for more information about MQTT Wills.
Basic Connection Example
mqttsn1.ClientId = "testClient";
mqttsn1.CleanSession = true;
mqttsn1.KeepAliveInterval = 30;
mqttsn1.WillTopic = "wills/" + mqttsn1.ClientId;
mqttsn1.WillMessage = mqttsn1.ClientId + " was disconnected ungracefully!";
mqttsn1.RemoteHost = host;
mqttsn1.RemotePort = port;
mqttsn1.Connect();
This property is not available at design time.
Data Type
Boolean
KeepAliveInterval Property (MQTTSN Control)
The maximum period of inactivity the gateway should allow between receiving messages from the client.
Syntax
mqttsncontrol.KeepAliveInterval[=integer]
Default Value
0
Remarks
The KeepAliveInterval, if set to a non-zero value, is the maximum number of seconds that the gateway will allow the connection to be idle without receiving a message from the client. The value of KeepAliveInterval is sent to the server when Connect is called; it cannot be changed when the control is already connected.
MQTT servers are required to measure periods of inactivity for all clients who specify a non-zero KeepAliveInterval, and must consider them lost if they have not communicated within the KeepAliveInterval. The gateway will activate the Will feature for lost clients.
To maintain the connection, the server must send a PINGREQ (ping request) packet within the KeepAliveInterval seconds after the most recent message sent. For more see the Ping method.
Similarly, if the control doesn't receive a PINGRESP (ping response) packet after multiple retransmissions of the PINGREQ packet, it should first try to connect to another gateway before trying to re-connect to the original one.
If KeepAliveInterval is set to 0 (default), the server is not required to consider inactivity. Note that, regardless of keep-alive settings, the server is always free to disconnect clients it deems "unresponsive".
This property is not available at design time.
Data Type
Integer
LocalHost Property (MQTTSN Control)
The name of the local host or user-assigned IP interface through which connections are initiated or accepted.
Syntax
mqttsncontrol.LocalHost[=string]
Default Value
""
Remarks
The LocalHost property contains the name of the local host as obtained by the gethostname() system call, or if the user has assigned an IP address, the value of that address.
In multi-homed hosts (machines with more than one IP interface) setting LocalHost to the value of an interface will make the control initiate connections (or accept in the case of server controls) only through that interface.
If the control is connected, the LocalHost property shows the IP address of the interface through which the connection is made in internet dotted format (aaa.bbb.ccc.ddd). In most cases, this is the address of the local host, except for multi-homed hosts (machines with more than one IP interface).
NOTE: LocalHost is not persistent. You must always set it in code, and never in the property window.
Data Type
String
LocalPort Property (MQTTSN Control)
The UDP port in the local host where UDP binds.
Syntax
mqttsncontrol.LocalPort[=integer]
Default Value
0
Remarks
The LocalPort property must be set before UDP is activated (Active is set to True). It instructs the control to bind to a specific port (or communication endpoint) in the local machine.
Setting it to 0 (default) enables the TCP/IP stack to choose a port at random. The chosen port will be shown by the LocalPort property after the connection is established.
LocalPort cannot be changed once the control is Active. Any attempt to set the LocalPort property when the control is Active will generate an error.
The LocalPort property is useful when trying to connect to services that require a trusted port in the client side.
Data Type
Integer
RemoteHost Property (MQTTSN Control)
The address of the remote host. Domain names are resolved to IP addresses.
Syntax
mqttsncontrol.RemoteHost[=string]
Default Value
""
Remarks
The RemoteHost property specifies the IP address (IP number in dotted internet format) or Domain Name of the remote host.
If RemoteHost is set to 255.255.255.255, the control broadcasts data on the local subnet.
If the RemoteHost property is set to a Domain Name, a DNS request is initiated and upon successful termination of the request, the RemoteHost property is set to the corresponding address. If the search is not successful, an error is returned.
If UseConnection is set to True, the RemoteHost must be set before the control is activated (Active is set to True).
Data Type
String
RemotePort Property (MQTTSN Control)
The UDP port in the remote host.
Syntax
mqttsncontrol.RemotePort[=integer]
Default Value
0
Remarks
The RemotePort is the UDP port on the RemoteHost to send UDP datagrams to.
A valid port number (a value between 1 and 65535) is required.
If UseConnection is set to True, the RemotePort must be set before the control is activated (Active is set to True).
Data Type
Integer
Timeout Property (MQTTSN Control)
A timeout for the control.
Syntax
mqttsncontrol.Timeout[=integer]
Default Value
60
Remarks
This property defines the timeout when sending data. A value of 0 means data will be sent asynchronously and a positive value means data is sent synchronously.
The control will use DoEvents to enter an efficient wait loop during any potential waiting period, making sure that all system events are processed immediately as they arrive. This ensures that the host application does not "freeze" and remains responsive.
If Timeout expires, and the operation is not yet complete, the component throws an exception. Please note that by default, all timeouts are inactivity timeouts, i.e. the timeout period is extended by Timeout seconds when any amount of data is successfully sent or received. The default value for the Timeout property is 60 seconds.
Data Type
Integer
WillMessage Property (MQTTSN Control)
The message that the server should publish in the event of an ungraceful disconnection.
Syntax
mqttsncontrol.WillMessage[=string]
Default Value
""
Remarks
This property may be set before calling Connect to specify to the server a message that should be published on WillTopic if the connection is closed ungracefully or lost.
The WillMessage will only be sent to the server when Connect is called if WillTopic is set. Note that in MQTTSN the clean session concept is extended to will topic and will message. The WillMessage can be updated with the UpdateWillMessage method.
Refer to WillTopic for more information about MQTT Will functionality.
This property is not available at design time.
Data Type
String
WillTopic Property (MQTTSN Control)
The topic that the server should publish the WillMessage to in the event of an ungraceful disconnection.
Syntax
mqttsncontrol.WillTopic[=string]
Default Value
""
Remarks
This property may be set before calling Connect to specify the topic name that the server should publish the WillMessage on if the connection is closed ungracefully or lost.
MQTT Wills
The Will feature of MQTT allows a client to specify to the server a WillMessage to publish (as well as a WillTopic to publish it on) in the event that the server considers the client lost or ungracefully disconnected.
An "ungraceful disconnection" is any disconnection other than one triggered by calling Disconnect. If the client enters sleep mode, the server will not publish the Will. However, if the client is lost as a result of exceeding the sleep duration without sending a message, the server will publish the Will.
In addition to the WillTopic and WillMessage properties, the WillQOS setting may be used to specify the Will message's QoS level, and the WillRetain setting to set the Will message's Retain flag. Refer to those settings for more information.
If WillTopic is set to empty string (default) when Connect is called, the control will not send a Will to the server.
In MQTTSN, the WillTopic, WillMessage, WillQOS and WillRetain may all be updated using the UpdateWillMessage and UpdateWillTopic methods.
This property is not available at design time.
Data Type
String
Config Method (MQTTSN Control)
Sets or retrieves a configuration setting.
Syntax
mqttsncontrol.Config ConfigurationString
Remarks
Config is a generic method available in every control. It is used to set and retrieve configuration settings for the control.
These settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the control, access to these internal properties is provided through the Config method.
To set a configuration setting named PROPERTY, you must call Config("PROPERTY=VALUE"), where VALUE is the value of the setting expressed as a string. For boolean values, use the strings "True", "False", "0", "1", "Yes", or "No" (case does not matter).
To read (query) the value of a configuration setting, you must call Config("PROPERTY"). The value will be returned as a string.
Connect Method (MQTTSN Control)
Connects to the MQTTSN Gateway.
Syntax
mqttsncontrol.Connect
Remarks
This method connects to the MQTTSN Gateway, specified by RemoteHost and RemotePort, by sending a CONNECT packet. Calling this method is equivalent to setting the Connected property to True.
When connecting to an MQTT gateway, the control sends the following information:
- The values of the ClientId, CleanSession, and KeepAliveInterval properties.
- The values of the WillTopic and WillMessage properties and the WillRetain and WillQOS configuration settings.
Refer to CleanSession for more information about MQTT sessions; refer to WillTopic, WillMessage, WillQOS and WillRetain for more information about MQTT Wills.
Basic Connection Example
mqttsn1.ClientId = "testClient";
mqttsn1.CleanSession = true;
mqttsn1.KeepAliveInterval = 30;
mqttsn1.WillTopic = "wills/" + mqttsn1.ClientId;
mqttsn1.WillMessage = mqttsn1.ClientId + " was disconnected ungracefully!";
mqttsn1.RemoteHost = host;
mqttsn1.RemotePort = port;
mqttsn1.Connect();
ConnectTo Method (MQTTSN Control)
Connects to the remote host.
Syntax
mqttsncontrol.ConnectTo Host, Port
Remarks
This method connects to the MQTTSN Gateway, specified by Host and Port, by sending a CONNECT packet. Calling this method is equivalent to setting the RemoteHost property to Host, setting RemotePort to Port, and then setting the Connected property to True.
When connecting to an MQTT gateway, the control sends the following information:
- The values of the ClientId, CleanSession, and KeepAliveInterval properties.
- The values of the WillTopic and WillMessage properties and the WillRetain and WillQOS configuration settings.
Refer to CleanSession for more information about MQTT sessions; refer to WillTopic, WillMessage, WillQOS and WillRetain for more information about MQTT Wills.
Basic Connection Example
mqttsn1.ClientId = "testClient";
mqttsn1.CleanSession = true;
mqttsn1.KeepAliveInterval = 30;
mqttsn1.WillTopic = "wills/" + mqttsn1.ClientId;
mqttsn1.WillMessage = mqttsn1.ClientId + " was disconnected ungracefully!";
mqttsn1.ConnectTo(host, port);
Disconnect Method (MQTTSN Control)
Disconnect from the MQTTSN Gateway.
Syntax
mqttsncontrol.Disconnect
Remarks
This method disconnects from the MQTTSN Gateway by sending a DISCONNECT packet. Calling this method is equivalent to setting the Connected property to False.
Refer to the Connected property for more information about MQTT-specific behavior.
DiscoverGateway Method (MQTTSN Control)
Broadcast a SEARCHGW message to network clients and gateways.
Syntax
mqttsncontrol.DiscoverGateway BroadcastRadius
Remarks
Broadcast a SEARCHGW message in order to discover nearby gateways. Network clients and gateways may respond with a GWINFO message containing a gateway id. Such a response will trigger the GatewayInfo event.
This functionality is not yet implemented.
DoEvents Method (MQTTSN Control)
Processes events from the internal message queue.
Syntax
mqttsncontrol.DoEvents
Remarks
When DoEvents is called, the control processes any available events. If no events are available, it waits for a preset period of time, and then returns.
FetchMessages Method (MQTTSN Control)
Receive currently buffered messages and return to sleep.
Syntax
mqttsncontrol.FetchMessages
Remarks
Request any messages currently being buffered by the server for the current sleep period and return to sleep after they have been received.
Any available buffered messages will be sent to the client by the MQTTSN Gateway and the sleep interval will be reset.
This method sends a PINGREQ method with the ClientId, requesting buffered messages which will be sent if available (see MessageIn). When the server has sent all messages, it will sent a PINGRESP message, causing the client to re-enter sleep mode. Once the PINGRESP is received, the duration the client may sleep restarts.
Ping Method (MQTTSN Control)
Send a PINGREQ message to the gateway to reset the Keep Alive interval and ensure the gateway's liveliness.
Syntax
mqttsncontrol.Ping
Remarks
The client must send a PINGREQ message using this method during each KeepAliveInterval period. If the client does not send any message to the gateway during this period, it will be considered lost and will disconnect.
The client also uses this message to supervise the liveliness of the gateway to which they are connected. If a client does not receive a PINGRESP from the gateway even after multiple retransmissions of the PINGREQ message, it should first try to connect to another gateway before trying to re-connect to this gateway.
See KeepAliveInterval for more information.
For more detailed requirements regarding Keep Alive intervals and reconnection, refer to the MQTTSN specification.
PublishData Method (MQTTSN Control)
Publishes a message with a raw data payload.
Syntax
mqttsncontrol.PublishData TopicId, TopicIdType, QOS, Data
Remarks
This method publishes an MQTTSN message with a raw data payload to the specified TopicId at a given QOS level.
The Retain configuration setting may be set before calling this method in order to publish a retained message (see Retain for more information).
Note that the control will only allow one publish flow at a time.
Publish Examples
// Publish string messages
int id = mqttsn1.RegisterTopic("topic/name"); // must register topic names that are not short or pre-defined
mqttsn1.PublishMessage(id, 0, 2, "hello"); // publish message with registered topic name
mqttsn1.PublishMessage("aa", 2, 2, "hello"); // publish message with short topic name
// Publish a raw data message.
byte[] picture = ...;
mqtt1.PublishData(id, 0, 2, picture);
Topic Ids
A topic id is a short identifier corresponding to a longer topic name which is used in MQTTSN due to the limited bandwidth and small message payload in wireless sensor networks.
The type of topic id sent with the message must be specified. TopicIdType may have the following values:
- 0: Registered topic id
- 1: Pre-defined topic id
- 2: Short topic name
A registered topic id identifies a topic name registered with the server before the time of the message. To register a topic id for a given topic name with the gateway so that messages may be published to that topic using that topic id, use the RegisterTopic method.
A pre-defined topic id is one whose mapping to a topic name is known in advance by both the client and the gateway - no registration is necessary.
A short topic name has a fixed length of two bytes and is short enough that no registration is necessary. To use one, simply set the correct TopicIdType and set the TopicId to a two-character string.
Topic Names
Topic names are case-sensitive, must be 1-65535 characters long, and may include any characters except wildcard characters (# and +) and the null character. The / character separates levels within a topic name, which is important in the context of subscribing (see Subscribe for more information).
Keep in mind that using topic names with leading or trailing / characters will cause topic levels with zero-length names to be created. That is, a topic name like /a/b/ consists of the levels '', 'a', 'b', and ''. Depending on the server, multiple successive /s may also cause zero-length levels to be created, or may be treated as a single /.
Topic names that begin with a $ are "system topics", and servers will typically prevent clients from publishing to them.
QoS Values
QoS values set the service level for delivery of a message. Values range from -1 to 2 and have the following meanings:
QoS Level | Description |
-1 | Simple publish - No connection, registration or subscription needed. |
0 | At most once - The published message is sent once, and if it does not arrive it is lost. |
1 | At least once - Guarantees that the published message arrives, but there may be duplicates. |
2 | Exactly once - Guarantees that the publish message arrives and that there are no duplicates. |
To send a message with QoS -1, simply set RemoteHost and RemoteHost and call PublishMessage with a pre-defined topic id or short topic name. No connection or registration is necessary. The client will not be informed whether the gateway address is correct, whether the gateway is alive, or whether the messages arrive at the gateway.
Publish QoS -1 Example
mqttsn1 = new Mqttsn();
mqttsn1.RemoteHost = gatewayAddress;
mqttsn1.RemotePort = gatewayPort;
mqttsn1.PublishMessage("aa", 2, -1, "hello"); // publish QoS -1 message; no connection or registration
Republishing Messages
For QoS 1 and 2 messages, the client is responsible for retransmitting the message if it is not fully acknowledged within a reasonable wait time. To do so, set the Duplicate flag configuration setting and call the publish method again.
After a reasonable amount of retransmission attempts, the client should abort the procedure and assume the gateway has disconnected. It should then try to connect to another gateway, only returning to the original if it fails.
PublishMessage Method (MQTTSN Control)
Publishes a message with a string payload.
Syntax
mqttsncontrol.PublishMessage TopicId, TopicIdType, QOS, Message
Remarks
This method publishes an MQTTSN message with a string payload to the specified TopicId at a given QOS level.
The Retain configuration setting may be set before calling this method in order to publish a retained message (see Retain for more information).
Note that the control will only allow one publish flow at a time.
Publish Examples
// Publish string messages
int id = mqttsn1.RegisterTopic("topic/name"); // must register topic names that are not short or pre-defined
mqttsn1.PublishMessage(id, 0, 2, "hello"); // publish message with registered topic name
mqttsn1.PublishMessage("aa", 2, 2, "hello"); // publish message with short topic name
// Publish a raw data message.
byte[] picture = ...;
mqtt1.PublishData(id, 0, 2, picture);
Topic Ids
A topic id is a short identifier corresponding to a longer topic name which is used in MQTTSN due to the limited bandwidth and small message payload in wireless sensor networks.
The type of topic id sent with the message must be specified. TopicIdType may have the following values:
- 0: Registered topic id
- 1: Pre-defined topic id
- 2: Short topic name
A registered topic id identifies a topic name registered with the server before the time of the message. To register a topic id for a given topic name with the gateway so that messages may be published to that topic using that topic id, use the RegisterTopic method.
A pre-defined topic id is one whose mapping to a topic name is known in advance by both the client and the gateway - no registration is necessary.
A short topic name has a fixed length of two bytes and is short enough that no registration is necessary. To use one, simply set the correct TopicIdType and set the TopicId to a two-character string.
Topic Names
Topic names are case-sensitive, must be 1-65535 characters long, and may include any characters except wildcard characters (# and +) and the null character. The / character separates levels within a topic name, which is important in the context of subscribing (see Subscribe for more information).
Keep in mind that using topic names with leading or trailing / characters will cause topic levels with zero-length names to be created. That is, a topic name like /a/b/ consists of the levels '', 'a', 'b', and ''. Depending on the server, multiple successive /s may also cause zero-length levels to be created, or may be treated as a single /.
Topic names that begin with a $ are "system topics", and servers will typically prevent clients from publishing to them.
QoS Values
QoS values set the service level for delivery of a message. Values range from -1 to 2 and have the following meanings:
QoS Level | Description |
-1 | Simple publish - No connection, registration or subscription needed. |
0 | At most once - The published message is sent once, and if it does not arrive it is lost. |
1 | At least once - Guarantees that the published message arrives, but there may be duplicates. |
2 | Exactly once - Guarantees that the publish message arrives and that there are no duplicates. |
To send a message with QoS -1, simply set RemoteHost and RemoteHost and call PublishMessage with a pre-defined topic id or short topic name. No connection or registration is necessary. The client will not be informed whether the gateway address is correct, whether the gateway is alive, or whether the messages arrive at the gateway.
Publish QoS -1 Example
mqttsn1 = new Mqttsn();
mqttsn1.RemoteHost = gatewayAddress;
mqttsn1.RemotePort = gatewayPort;
mqttsn1.PublishMessage("aa", 2, -1, "hello"); // publish QoS -1 message; no connection or registration
Republishing Messages
For QoS 1 and 2 messages, the client is responsible for retransmitting the message if it is not fully acknowledged within a reasonable wait time. To do so, set the Duplicate flag configuration setting and call the publish method again.
After a reasonable amount of retransmission attempts, the client should abort the procedure and assume the gateway has disconnected. It should then try to connect to another gateway, only returning to the original if it fails.
RegisterTopic Method (MQTTSN Control)
Register a topic name. Returns the topic id mapped to the newly registered topic name.
Syntax
mqttsncontrol.RegisterTopic TopicName
Remarks
Requests that the gateway establish a new topic id mapping for the TopicName provided. If accepted, the gateway assigns a topic id to the received topic name and returns it. At this point, the client may begin sending messages with this topic id.
Topic Names
Topic names are case-sensitive, must be 1-65535 characters long, and may include any characters except wildcard characters (# and +) and the null character. The / character separates levels within a topic name, which is important in the context of subscribing (see Subscribe for more information).
Keep in mind that using topic names with leading or trailing / characters will cause topic levels with zero-length names to be created. That is, a topic name like /a/b/ consists of the levels '', 'a', 'b', and ''. Depending on the server, multiple successive /s may also cause zero-length levels to be created, or may be treated as a single /.
Topic names that begin with a $ are "system topics", and servers will typically prevent clients from publishing to them.
Reset Method (MQTTSN Control)
Reset the control.
Syntax
mqttsncontrol.Reset
Remarks
This method will reset the control's properties to their default values.
SendDiscoverResponse Method (MQTTSN Control)
Asynchronously respond to a SEARCHGW message received from a peer.
Syntax
mqttsncontrol.SendDiscoverResponse GatewayId, GatewayAddress
Remarks
Asynchronously respond to a SEARCHGW message received from a peer. See also DiscoverRequest.
This functionality is not yet implemented.
StartSleep Method (MQTTSN Control)
Enter sleep state for the specified duration.
Syntax
mqttsncontrol.StartSleep Duration
Remarks
When this method is called, the gateway will buffer all incoming messages for the client until the next time it awakes. To receive all currently buffered messages, call StopSleep or FetchMessages.
While in the sleep state, the client no longer must abide by the KeepAliveInterval, but must awake before the end of the sleep duration. If it does not send the gateway any messages in this interval, it will be considered lost and will disconnect.
If FetchMessages is called, the client will return to sleep after receiving the messages and the sleep timer will restart. If StopSleep is called, the client will enter the active state.
Sleep Examples
mqttsn1.StartSleep(8); // sleep for 8 seconds
// ... wait for 5 seconds
mqttsn1.FetchMessages(); // MessageIn will fire for each message buffered during that time
// ... wait for 5 more seconds (ok because <8 seconds since last packet sent)
mqttsn1.StopSleep();
StopSleep Method (MQTTSN Control)
Enter active state, ending the sleep period.
Syntax
mqttsncontrol.StopSleep
Remarks
Wake up from the sleep state and receive any messages which were buffered by the gateway during the sleep period. This method must be called before the end of the duration specified in the StartSleep method.
Once active, the client is once again subject to KeepAliveInterval supervision just like after connection.
Subscribe Method (MQTTSN Control)
Subscribes the control to the specified topic.
Syntax
mqttsncontrol.Subscribe TopicId, TopicIdType, QOS
Remarks
This method subscribes the control to the TopicId using the given QoS level.
TopicIdType indicates the category of value specified in TopicId and may have the following values:
- 0: Topic name - a full topic name as described in RegisterTopic to be registered by the gateway.
- 1: Pre-defined topic id - id whose mapping to a topic name is known in advance by both the client and the gateway - no registration is necessary.
- 2: Short topic name - has a fixed length of two bytes and is short enough that no registration is necessary. To use one, simply set the correct TopicIdType and set the TopicId to a two-character string.
If the topic name option is used, the topic id returned with the SUBACK packet will be accessible in the SubscribedTopicId configuration setting. If a topic name with a wildcard character is used, SubscribedTopicId will be 0. When the gateway has a PUBLISH message with a topic name matching the wildcard to be sent to the client, it will follow the registration process described in TopicInfo.
Subscribe Examples
String fullTopicName = "full/topic/name";
mqttsn1.Subscribe(fullTopicName, 0, 2); // subscribe with topic name
int assignedTopicId = mqttsn1.Config("SubscribedTopicId"); // map id to topic name used
mqttsn1.Subscribe(fullTopicName+"/#", 0, 2) // topic name with wildcard; SubscribedTopicId will be 0
mqttsn1.OnTopicId += (s,e) => { // will fire before messages matching the wildcard are sent to the client
int topicId = e.TopicId;
String topicName = e.TopicName;
// establish mapping between these
};
mqttsn1.Subscribe("aa", 2, 2); // subscribe with short topic name; no need for registration
Topic Filters
A topic filter is a string which can be passed to TopicId when TopicIdType is 0 and can match one or more topic names.
A topic filter is a case-sensitive string between 1 and 65535 characters long (per topic filter), and can include any character other than the null character. Certain characters have special meanings:
- / - The topic level separator
- # - The multi-level wildcard (zero or more levels)
- + - The single-level wildcard (exactly one level)
- Leading $ - Denotes a "system topic"
Note that both types of wildcards may be used in the same topic filter.
Topic Level Separators
The topic level separator, as its name implies, is used to separate a topic name (or in this case, filter) into "levels". This concept of topic names having levels is what allows topic filters to match multiple topics through the use of wildcards. For the examples in the next sections, assume the following topics exist:
- home/floor1
- home/floor1/livingRoom
- home/floor1/livingRoom/temperature
- home/floor1/kitchen/temperature
- home/floor1/kitchen/fridge/temperature
- home/floor2/bedroom1
- home/floor2/bedroom1/temperature
Multi-level Wildcards
The multi-level wildcard character is used at the end of a topic filter to make it match an arbitrary number of successive levels. For example, the topic filter home/floor1/# would match the following topics:
- home/floor1 (because it can match zero levels)
- home/floor1/livingRoom
- home/floor1/livingRoom/temperature
- home/floor1/kitchen/temperature
- home/floor1/kitchen/fridge/temperature
Here are some things to keep in mind when using a multi-level wildcard:
- # must always be the last character in the topic filter (e.g., home/floor1/#/livingRoom is not valid)
- # must always be preceded by a / (e.g., home/floor1# is not valid)
- # by itself is a valid topic filter, and will match all topics except system topics
Single-level Wildcards
The single-level wildcard character is used between two /s in a topic filter to make it any single level. For example, the topic filter home/floor1/+/temperature would match the following topics:
- home/floor1/livingRoom/temperature
- home/floor1/kitchen/temperature
Any number of single-level wildcards are supported in a topic filter. For example, the topic filter home/+/+/temperature would match the following topics:
- home/floor1/livingRoom/temperature
- home/floor1/kitchen/temperature
- home/floor2/bedroom1/temperature
Here are some things to keep in mind when using single-level wildcards:
- + must always be separated from other levels using /s (e.g., home/floor1+ is invalid, but +/floor1/+ is valid)
- + by itself is a valid topic filter, and will match all topics with exactly one level in their name except system topics
- Remember, topic names with a leading / have a zero-length string as their first level. So a topic named /people would be matched by the topic filter +/+, but not by +
- + must match exactly one level. So for example, the topic filter home/floor1/kitchen/+/temperature would match /home/floor1/kitchen/fridge/temperature, but not home/floor1/kitchen/temperature
QoS Values
QoS values set the service level for delivery of a message. For subscriptions, values range from 0 to 2 and have the following meanings:
QoS Level | Description |
-1 | Simple publish - No connection, registration or subscription needed. |
0 | At most once - The published message is sent once, and if it does not arrive it is lost. |
1 | At least once - Guarantees that the published message arrives, but there may be duplicates. |
2 | Exactly once - Guarantees that the publish message arrives and that there are no duplicates. |
A QoS value of -1 is not applicable to subscriptions.
Note that if this message is being resent, the SubscribeDUP configuration setting must be enabled. For more details on retransmission intervals and counts, see the MQTTSN specification.
Unsubscribe Method (MQTTSN Control)
Unsubscribes the control from the specified topic.
Syntax
mqttsncontrol.Unsubscribe TopicId, TopicIdType
Remarks
This method unsubscribes the control to the TopicId.
TopicIdType indicates the category of value specified in TopicId and may have the following values:
- 0: Topic name - a full topic name as described in RegisterTopic to be registered by the gateway.
- 1: Pre-defined topic id - id whose mapping to a topic name is known in advance by both the client and the gateway - no registration is necessary.
- 2: Short topic name - has a fixed length of two bytes and is short enough that no registration is necessary. To use one, simply set the correct TopicIdType and set the TopicId to a two-character string.
Unsubscribe Examples
String fullTopicName = "full/topic/name";
mqtt1.Unsubscribe(fullTopicName, 0); // unsubscribe from topic name
mqtt1.Unsubscribe(fullTopicName+"/#", 0); // must use full topic filter if includes wildcard; can't unsubscribe from individual topics included in the filter
mqtt1.Unsubscribe("aa", 2); // unsubscribe from short topic
UpdateWillMessage Method (MQTTSN Control)
Update the will message stored in session state data by the server.
Syntax
mqttsncontrol.UpdateWillMessage
Remarks
When this message is called, the value of WillMessage will be used to update the will message stored by the server.
This method may be called when this value is empty, in this case the server value will be cleared.
See UpdateWillTopic for more on updating will settings.
UpdateWillTopic Method (MQTTSN Control)
Update the will topic, will QoS and will retain flag stored in session state data by the server.
Syntax
mqttsncontrol.UpdateWillTopic
Remarks
When this message is called, the value of WillTopic, WillQOS and WillRetain will be used to update the will message stored by the server.
This method may be called when these values are empty, in this case the server values will be cleared.
See UpdateWillMessage for more on updating will settings.
Connected Event (MQTTSN Control)
Fired after a MQTTSN connection completes (or fails).
Syntax
Sub mqttsncontrol_Connected(StatusCode As Integer, Description As String)
Remarks
If no will topic or message is set, this event will fire immediately. If a will topic and the will message are set, this event will be fired after the will packet exchange.
If the connection is made normally, StatusCode is 0 and Description is "OK".
Please refer to the Error Codes section for more information.
Refer to the Connected property for more information about MQTT-specific behavior.
Disconnected Event (MQTTSN Control)
Fired when a MQTTSN connection is closed.
Syntax
Sub mqttsncontrol_Disconnected(StatusCode As Integer, Description As String)
Remarks
If the connection is broken normally, StatusCode is 0 and Description is "OK".
Refer to the Connected property for more information about MQTT-specific behavior.
DiscoverRequest Event (MQTTSN Control)
Fired when the control receives a SEARCHGW packet from another client.
Syntax
Sub mqttsncontrol_DiscoverRequest(Radius As Integer, GatewayId As Integer, GatewayAddress As String, Respond As Boolean)
Remarks
This event allows the client to process the received gateway info and decide whether or not to respond to the search request.
If Respond is set to True, the control will respond with a GWINFO packet.
This functionality is not yet implemented.
Error Event (MQTTSN Control)
Information about errors during data delivery.
Syntax
Sub mqttsncontrol_Error(ErrorCode As Integer, Description As String)
Remarks
The Error event is fired in case of exceptional conditions during message processing. Normally the control fails with an error.
The ErrorCode parameter contains an error code, and the Description parameter contains a textual description of the error. For a list of valid error codes and their descriptions, please refer to the Error Codes section.
GatewayInfo Event (MQTTSN Control)
Fired when the control receives a GWINFO or ADVERTISE packet.
Syntax
Sub mqttsncontrol_GatewayInfo(MessageType As String, GatewayId As Integer, GatewayAddress As String, Interval As Integer)
Remarks
This event allows packets containing gateway information to be processed. These packets could be received from regular gateway advertisements or gateway info requests from this or other clients. This gateway information is used to manage the client's list of active gateways.
The value of MessageType could be GWINFO or ADVERTISE.
GatewayAddress will be in format host:port.
If the gateway address field is not present in the received GWINFO packet, GatewayAddress will use the packet source IP address.
This functionality is not yet implemented.
Log Event (MQTTSN Control)
Fires once for each log message.
Syntax
Sub mqttsncontrol_Log(LogLevel As Integer, Message As String, LogType As String)
Remarks
This event fires once for each log message generated by the control. The verbosity is controlled by the LogLevel setting.
LogLevel indicates the level of the Message. Possible values are:
0 (None) | No events are logged. |
1 (Info - default) | Informational events are logged. |
2 (Verbose) | Detailed data is logged. |
3 (Debug) | Debug data is logged. |
LogType identifies the type of log entry. Possible values are:
- Info: General information about the control.
- Packet: Packet content logging.
- Reconnect: Reconnection status messages.
- Session: Session status messages.
MessageIn Event (MQTTSN Control)
Fired when an incoming message has been received and/or fully acknowledged.
Syntax
Sub mqttsncontrol_MessageIn(MsgId As Integer, TopicId As String, TopicIdType As Integer, QOS As Integer, Message As String, Retained As Boolean, Duplicate As Boolean, ReturnCode As Integer)
Remarks
Fired on reception of a PUBLISH packet for QoS 0 and 1 messages, and reception of a PUBREL packet for QoS 2 messages.
- MsgId: a unique (among currently unacknowledged incoming messages) identifier attached to messages of QoS 1 and 2. Otherwise value will be 0.
- TopicId: topic id of type TopicIdType.
- TopicIdType: 0 = registered topic id, 1 = pre-defined topic id, 2 = short topic name.
- QOS: The message's QoS level.
- Message: The message data.
- Retained: Whether or not this message was received as a result of subscribing to a topic.
- Duplicate: Whether or not the server has indicated that this message is a duplicate of another message sent previously.
- ReturnCode: QoS 1 messages can be accepted or rejected by setting the ReturnCode to a value listed below.
- 0: accepted
- 1: rejected - congestion
- 2: rejected - invalid topic id
- 3: rejected - not supported
Inbound Message Processing
Incoming messages with a QoS of 1 follow these steps:
- The TopicInfo event is fired (if the gateway sends a REGISTER packet because it needs to inform the client name and assigned topic id it will use in a PUBLISH message).
- The control sends a REGACK (register acknowledgment) packet in response (if a REGISTER packet was received).
- The MessageIn event is fired.
- The control sends a PUBACK (publish acknowledgment) packet in response (with the return code from the MessageIn event if one is set).
Incoming messages with a QoS of 2 follow these steps:
- The TopicInfo event is fired (if the gateway sends a REGISTER packet because it needs to inform the client name and assigned topic id it will use in a PUBLISH message).
- The control sends a REGACK (register acknowledgment) packet in response (if a REGISTER packet was received).
- The control sends a PUBREC (publish received) packet in response.
- The control waits to receive a PUBREL (publish release) packet.
- The control sends a PUBCOMP (publish complete) packet in response.
- The MessageIn event is fired.
TopicInfo Event (MQTTSN Control)
Fired when the client receives a REGISTER packet from the gateway assigning a topic id to a topic name.
Syntax
Sub mqttsncontrol_TopicInfo(TopicId As Integer, TopicName As String, ReturnCode As Integer)
Remarks
A gateway sends a REGISTER packet to a client if it wants to inform that client about the topic name and the assigned topic id that it will use later on when sending PUBLISH messages of the corresponding topic name. The client must establish a new topic id mapping to the topic name indicated.
This happens for example when the client connects without starting a clean session or the client has subscribed to topic names that contain wildcard characters.
When a REGISTER packet is received, the control will respond with a REGACK packet. To set the value of the return code contained in the packet, set it to one of the below values.
- 0: accepted
- 1: rejected - congestion
- 2: rejected - invalid topic id
- 3: rejected - not supported
When a client subscribes to a topic with wildcard characters, the specific topic names it will receive messages on have not yet been registered to topic ids, so the first step in receiving such messages is the REGISTER packet. It can then receive incoming messages with that id. See MessageIn for more.
Config Settings (MQTTSN Control)
The control accepts one or more of the following configuration settings. Configuration settings are similar in functionality to properties, but they are rarely used. In order to avoid "polluting" the property namespace of the control, access to these internal properties is provided through the Config method.MQTTSN Config Settings
0 (None) | No events are logged. |
1 (Info - default) | Informational events are logged. |
2 (Verbose) | Detailed data is logged. |
3 (Debug) | Debug data is logged. |
Publishing a non-empty message with the Retain flag set and a non-zero QoS will cause the server to store it (replacing any previously retained message in the process) so that it can be delivered to any clients which subscribe to the topic in the future. (If the QoS is 0, the server can store the message, but it is not required to do so indefinitely, if at all.)
If the control publishes an empty message with the Retain flag set, then (regardless of its QoS) the server will remove any previously retained message for the topic.
Note that messages with the Retain flag set are still processed by the server and delivered as usual to clients currently subscribed to the topic, regardless of whether they are empty or not. Also note that retained messages are not part of a session's state, they are retained until they are either removed or replaced by another retained message, regardless of whether or not the client connected with CleanSession set to True.
See Subscribe for more details.
Refer to WillTopic for more information.
See Retain for general information about how retained messages are handled by the server.
Refer to WillTopic for more information.
Base Config Settings
The following is a list of valid code page identifiers:
Identifier | Name |
037 | IBM EBCDIC - U.S./Canada |
437 | OEM - United States |
500 | IBM EBCDIC - International |
708 | Arabic - ASMO 708 |
709 | Arabic - ASMO 449+, BCON V4 |
710 | Arabic - Transparent Arabic |
720 | Arabic - Transparent ASMO |
737 | OEM - Greek (formerly 437G) |
775 | OEM - Baltic |
850 | OEM - Multilingual Latin I |
852 | OEM - Latin II |
855 | OEM - Cyrillic (primarily Russian) |
857 | OEM - Turkish |
858 | OEM - Multilingual Latin I + Euro symbol |
860 | OEM - Portuguese |
861 | OEM - Icelandic |
862 | OEM - Hebrew |
863 | OEM - Canadian-French |
864 | OEM - Arabic |
865 | OEM - Nordic |
866 | OEM - Russian |
869 | OEM - Modern Greek |
870 | IBM EBCDIC - Multilingual/ROECE (Latin-2) |
874 | ANSI/OEM - Thai (same as 28605, ISO 8859-15) |
875 | IBM EBCDIC - Modern Greek |
932 | ANSI/OEM - Japanese, Shift-JIS |
936 | ANSI/OEM - Simplified Chinese (PRC, Singapore) |
949 | ANSI/OEM - Korean (Unified Hangul Code) |
950 | ANSI/OEM - Traditional Chinese (Taiwan; Hong Kong SAR, PRC) |
1026 | IBM EBCDIC - Turkish (Latin-5) |
1047 | IBM EBCDIC - Latin 1/Open System |
1140 | IBM EBCDIC - U.S./Canada (037 + Euro symbol) |
1141 | IBM EBCDIC - Germany (20273 + Euro symbol) |
1142 | IBM EBCDIC - Denmark/Norway (20277 + Euro symbol) |
1143 | IBM EBCDIC - Finland/Sweden (20278 + Euro symbol) |
1144 | IBM EBCDIC - Italy (20280 + Euro symbol) |
1145 | IBM EBCDIC - Latin America/Spain (20284 + Euro symbol) |
1146 | IBM EBCDIC - United Kingdom (20285 + Euro symbol) |
1147 | IBM EBCDIC - France (20297 + Euro symbol) |
1148 | IBM EBCDIC - International (500 + Euro symbol) |
1149 | IBM EBCDIC - Icelandic (20871 + Euro symbol) |
1200 | Unicode UCS-2 Little-Endian (BMP of ISO 10646) |
1201 | Unicode UCS-2 Big-Endian |
1250 | ANSI - Central European |
1251 | ANSI - Cyrillic |
1252 | ANSI - Latin I |
1253 | ANSI - Greek |
1254 | ANSI - Turkish |
1255 | ANSI - Hebrew |
1256 | ANSI - Arabic |
1257 | ANSI - Baltic |
1258 | ANSI/OEM - Vietnamese |
1361 | Korean (Johab) |
10000 | MAC - Roman |
10001 | MAC - Japanese |
10002 | MAC - Traditional Chinese (Big5) |
10003 | MAC - Korean |
10004 | MAC - Arabic |
10005 | MAC - Hebrew |
10006 | MAC - Greek I |
10007 | MAC - Cyrillic |
10008 | MAC - Simplified Chinese (GB 2312) |
10010 | MAC - Romania |
10017 | MAC - Ukraine |
10021 | MAC - Thai |
10029 | MAC - Latin II |
10079 | MAC - Icelandic |
10081 | MAC - Turkish |
10082 | MAC - Croatia |
12000 | Unicode UCS-4 Little-Endian |
12001 | Unicode UCS-4 Big-Endian |
20000 | CNS - Taiwan |
20001 | TCA - Taiwan |
20002 | Eten - Taiwan |
20003 | IBM5550 - Taiwan |
20004 | TeleText - Taiwan |
20005 | Wang - Taiwan |
20105 | IA5 IRV International Alphabet No. 5 (7-bit) |
20106 | IA5 German (7-bit) |
20107 | IA5 Swedish (7-bit) |
20108 | IA5 Norwegian (7-bit) |
20127 | US-ASCII (7-bit) |
20261 | T.61 |
20269 | ISO 6937 Non-Spacing Accent |
20273 | IBM EBCDIC - Germany |
20277 | IBM EBCDIC - Denmark/Norway |
20278 | IBM EBCDIC - Finland/Sweden |
20280 | IBM EBCDIC - Italy |
20284 | IBM EBCDIC - Latin America/Spain |
20285 | IBM EBCDIC - United Kingdom |
20290 | IBM EBCDIC - Japanese Katakana Extended |
20297 | IBM EBCDIC - France |
20420 | IBM EBCDIC - Arabic |
20423 | IBM EBCDIC - Greek |
20424 | IBM EBCDIC - Hebrew |
20833 | IBM EBCDIC - Korean Extended |
20838 | IBM EBCDIC - Thai |
20866 | Russian - KOI8-R |
20871 | IBM EBCDIC - Icelandic |
20880 | IBM EBCDIC - Cyrillic (Russian) |
20905 | IBM EBCDIC - Turkish |
20924 | IBM EBCDIC - Latin-1/Open System (1047 + Euro symbol) |
20932 | JIS X 0208-1990 & 0121-1990 |
20936 | Simplified Chinese (GB2312) |
21025 | IBM EBCDIC - Cyrillic (Serbian, Bulgarian) |
21027 | Extended Alpha Lowercase |
21866 | Ukrainian (KOI8-U) |
28591 | ISO 8859-1 Latin I |
28592 | ISO 8859-2 Central Europe |
28593 | ISO 8859-3 Latin 3 |
28594 | ISO 8859-4 Baltic |
28595 | ISO 8859-5 Cyrillic |
28596 | ISO 8859-6 Arabic |
28597 | ISO 8859-7 Greek |
28598 | ISO 8859-8 Hebrew |
28599 | ISO 8859-9 Latin 5 |
28605 | ISO 8859-15 Latin 9 |
29001 | Europa 3 |
38598 | ISO 8859-8 Hebrew |
50220 | ISO 2022 Japanese with no halfwidth Katakana |
50221 | ISO 2022 Japanese with halfwidth Katakana |
50222 | ISO 2022 Japanese JIS X 0201-1989 |
50225 | ISO 2022 Korean |
50227 | ISO 2022 Simplified Chinese |
50229 | ISO 2022 Traditional Chinese |
50930 | Japanese (Katakana) Extended |
50931 | US/Canada and Japanese |
50933 | Korean Extended and Korean |
50935 | Simplified Chinese Extended and Simplified Chinese |
50936 | Simplified Chinese |
50937 | US/Canada and Traditional Chinese |
50939 | Japanese (Latin) Extended and Japanese |
51932 | EUC - Japanese |
51936 | EUC - Simplified Chinese |
51949 | EUC - Korean |
51950 | EUC - Traditional Chinese |
52936 | HZ-GB2312 Simplified Chinese |
54936 | Windows XP: GB18030 Simplified Chinese (4 Byte) |
57002 | ISCII Devanagari |
57003 | ISCII Bengali |
57004 | ISCII Tamil |
57005 | ISCII Telugu |
57006 | ISCII Assamese |
57007 | ISCII Oriya |
57008 | ISCII Kannada |
57009 | ISCII Malayalam |
57010 | ISCII Gujarati |
57011 | ISCII Punjabi |
65000 | Unicode UTF-7 |
65001 | Unicode UTF-8 |
Identifier | Name |
1 | ASCII |
2 | NEXTSTEP |
3 | JapaneseEUC |
4 | UTF8 |
5 | ISOLatin1 |
6 | Symbol |
7 | NonLossyASCII |
8 | ShiftJIS |
9 | ISOLatin2 |
10 | Unicode |
11 | WindowsCP1251 |
12 | WindowsCP1252 |
13 | WindowsCP1253 |
14 | WindowsCP1254 |
15 | WindowsCP1250 |
21 | ISO2022JP |
30 | MacOSRoman |
10 | UTF16String |
0x90000100 | UTF16BigEndian |
0x94000100 | UTF16LittleEndian |
0x8c000100 | UTF32String |
0x98000100 | UTF32BigEndian |
0x9c000100 | UTF32LittleEndian |
65536 | Proprietary |
This setting only works on these controls: AS3Receiver, AS3Sender, Atom, Client(3DS), FTP, FTPServer, IMAP, OFTPClient, SSHClient, SCP, Server(3DS), Sexec, SFTP, SFTPServer, SSHServer, TCPClient, TCPServer.
Setting this configuration setting to tells the control to use the internal implementation instead of using the system security libraries.
This setting is set to by default on all platforms.
Trappable Errors (MQTTSN Control)
UDP Errors
20105 UDP is already Active. | |
20107 You cannot change the LocalPort while the control is Active. | |
20108 You cannot change the LocalHost at this time. A connection is in progress. | |
20110 The control must be Active for this operation. | |
20113 Cannot change MaxPacketSize while the control is Active. | |
20114 Cannot change ShareLocalPort option while the control is Active. | |
20115 Cannot change RemoteHost when UseConnection is set and the control Active. | |
20116 Cannot change RemotePort when UseConnection is set and the control is Active. | |
20117 RemotePort can't be zero when UseConnection is set. Please specify a valid service port number. | |
20118 Cannot change UseConnection while the control is Active. | |
20119 Message can't be longer than MaxPacketSize. | |
20120 Message too short. | |
20435 Unable to convert string to selected CodePage |
SSL Errors
20271 Cannot load specified security library. | |
20272 Cannot open certificate store. | |
20273 Cannot find specified certificate. | |
20274 Cannot acquire security credentials. | |
20275 Cannot find certificate chain. | |
20276 Cannot verify certificate chain. | |
20277 Error during handshake. | |
20281 Error verifying certificate. | |
20282 Could not find client certificate. | |
20283 Could not find server certificate. | |
20284 Error encrypting data. | |
20285 Error decrypting data. |
TCP/IP Errors
25005 [10004] Interrupted system call. | |
25010 [10009] Bad file number. | |
25014 [10013] Access denied. | |
25015 [10014] Bad address. | |
25023 [10022] Invalid argument. | |
25025 [10024] Too many open files. | |
25036 [10035] Operation would block. | |
25037 [10036] Operation now in progress. | |
25038 [10037] Operation already in progress. | |
25039 [10038] Socket operation on non-socket. | |
25040 [10039] Destination address required. | |
25041 [10040] Message too long. | |
25042 [10041] Protocol wrong type for socket. | |
25043 [10042] Bad protocol option. | |
25044 [10043] Protocol not supported. | |
25045 [10044] Socket type not supported. | |
25046 [10045] Operation not supported on socket. | |
25047 [10046] Protocol family not supported. | |
25048 [10047] Address family not supported by protocol family. | |
25049 [10048] Address already in use. | |
25050 [10049] Can't assign requested address. | |
25051 [10050] Network is down. | |
25052 [10051] Network is unreachable. | |
25053 [10052] Net dropped connection or reset. | |
25054 [10053] Software caused connection abort. | |
25055 [10054] Connection reset by peer. | |
25056 [10055] No buffer space available. | |
25057 [10056] Socket is already connected. | |
25058 [10057] Socket is not connected. | |
25059 [10058] Can't send after socket shutdown. | |
25060 [10059] Too many references, can't splice. | |
25061 [10060] Connection timed out. | |
25062 [10061] Connection refused. | |
25063 [10062] Too many levels of symbolic links. | |
25064 [10063] File name too long. | |
25065 [10064] Host is down. | |
25066 [10065] No route to host. | |
25067 [10066] Directory not empty | |
25068 [10067] Too many processes. | |
25069 [10068] Too many users. | |
25070 [10069] Disc Quota Exceeded. | |
25071 [10070] Stale NFS file handle. | |
25072 [10071] Too many levels of remote in path. | |
25092 [10091] Network subsystem is unavailable. | |
25093 [10092] WINSOCK DLL Version out of range. | |
25094 [10093] Winsock not loaded yet. | |
26002 [11001] Host not found. | |
26003 [11002] Non-authoritative 'Host not found' (try again or check DNS setup). | |
26004 [11003] Non-recoverable errors: FORMERR, REFUSED, NOTIMP. | |
26005 [11004] Valid name, no data record (check DNS setup). |