コンテンツにスキップ

Mqtt client

header-jamqtt_client.h

Classes

Name
struct _MqttPkRead
struct _MqttSk
struct _MqttClient

Types

Name
enum MqttClientFlags { MQTT_CLIENT_FLAG_IS_CONNECTED = 0x01, MQTT_CLIENT_FLAG_IS_TLS = 0x02}
enum _MqttPkStat { MQTT_PK_BEGIN, MQTT_PK_READ_HEAD, MQTT_PK_READ}
typedef int()(struct _MqttClient client, MqttMessage *message, byte msg_new, byte msg_done) MqttMsgCb
Mqttメッセージ受信コールバック関数。 メッセージ本文が最大受信バッファ(RX)サイズ以上の場合には、このコールバック関数が複数回呼び出されます。 もし、msg_new が 1 の場合には新しいメッセージを意味します。 topic_name と topic_name length はmsg_new が 1の場合にのみ意味があります。 msg_new が 0 の場合には追加のペイロードを受信中であることを意味します。 コールバックの都度、MqttMessage.bufferにペイロードが格納されます。 MqttMessage.buffer_lenはペイロード用のバッファーのサイズです。 MqttMessage.buffer_posは受信したのペイロードの位置を表します。 MqttMessage.total_lenは受信が完了したペイロードの長さを表します。 msg_doneが1の場合には、パブリッシュされたペイロード全体が受信済みであることを表します。
typedef int()(MqttPublish publish) MqttPublishCb
Mqttパブリッシュコールバック関数。 パブリッシュするペイロードが最大送信バッファ(TX)サイズ以上の場合にはこのコールバック関数が複数回呼び出されます。 このコールバック関数ではMqttPublishを呼び出した際にその内部から呼び出されます。 このコールバック関数はバッファーを提供し、そのサイズを成功時の戻り値(0以上)として返却することが求められます。 コールバック関数の呼び出しの都度、ペーロードがMqttPublish.bufferにコピーされます。 MqttPublish.buffer_lenはバッファー内のペイロードのサイズを表します。 MqttPublish.total_lenは完全なペイロードメッセージの長さを表します。
typedef enum _MqttPkStat**
typedef struct _MqttPkRead**
typedef struct _MqttSk**
typedef int()(struct _MqttClient client, int error_code, void *ctx) MqttDisconnectCb
typedef int()(struct _MqttClient client, MqttProp head, void ctx) MqttPropertyCb
typedef int()(word16 topicId, const char topicName, void *reg_ctx) SN_ClientRegisterCb
Mqtt-SN レジスターコールバック関数。 ゲートウェイはクライアントに対してトピック名とPUBLISHメッセージ送信時に使用するために割り当てられたトピックid をクライアントに通知する目的でREGISTERメッセージを送信します。      このコールバック関数はクライアントにトピックIDを受け入れて保存するか、そのIDが未知の場合には拒否できます。拒否する場合には、regackは”unsupported" 戻り値を伴います。
typedef struct _MqttClient**

Functions

Name
WOLFMQTT_API int **MqttClient_Init * rx_buf, int rx_buf_len, int cmd_timeout_ms)
MqttClient構造体を初期化します。
WOLFMQTT_API void **MqttClient_DeInit * client)
MqttClient構造体にアロケートされたリソースをクリーンアップします。
WOLFMQTT_API int **MqttClient_SetDisconnectCallback discb, void * ctx)
disconnectコールバック関数とユーザーコンテキストをセットします。
WOLFMQTT_API int **MqttClient_SetPropertyCallback propCb, void * ctx)
propertyコールバック関数とユーザーコンテキストをセットします。
WOLFMQTT_API int **MqttClient_Connect * connect)
MQTT Connectパケットをエンコードして送信し、Connect Acknowledgmentパケットを待ちます。
WOLFMQTT_API int **MqttClient_Publish * publish)
MQTT Publish パケットをエンコードして送信し、Publish response を待ちます(QoS > 0の場合)。 ペイロードのサイズがバッファーサイズより大きい場合には、ペイロード全体を送信するまでこの関数を連続して複数回呼び出すことができます(QoS > 0の場合)。
WOLFMQTT_API int **MqttClient_Publish_ex pubCb)
MQTT Publishパケットをエンコードして送信し、Publish response を待ちます(QoS > 0の場合)。 コールバック関数は送信バッファーより大きなサイズのペイロードデータを送信バッファーにコピーすることに使用されます。
WOLFMQTT_API int **MqttClient_Publish_WriteOnly pubCb)
MqttClient_Publish_exと同様の機能ですが,本関数はデータの書き込みだけを行い、他のスレッドでMqttClient_WaitMessage_exを呼び出してread ACKのハンドリングを行うことを必要としてます。
WOLFMQTT_API int **MqttClient_Subscribe * subscribe)
MQTT Subscribeパケットをエンコードして送信し、Subscribe Acknowledgmentパケットを待ちます。
WOLFMQTT_API int **MqttClient_Unsubscribe * unsubscribe)
MQTT Unsubscribeパケットをエンコードして送信し、Unsubscribe Acknowledgmentパケットを待ちます。
WOLFMQTT_API int **MqttClient_Ping * client)
MQTT Ping Requestパケットをエンコードして送信し、Ping Responseパケットを待ちます。
WOLFMQTT_API int **MqttClient_Ping_ex * ping)
MQTT Ping Requestパケットをエンコードして送信し、Ping Responseパケットを待ちます。 このexバージョンでは、MqttPing構造体を引数にとり、ノンブロッキングアプリケーションで使用できます。
WOLFMQTT_API int **MqttClient_Auth * auth)
MQTT Authentication Requestパケットをエンコードして送信し、Ping Responseパケットを待ちます。
WOLFMQTT_API MqttProp ** head)
新しいプロパティを追加します。プロパティ構造体をアロケートし、headで指すリストヘッドに追加します。パケットコマンドに先だって呼び出す必要があります。
WOLFMQTT_API int **MqttClient_PropsFree * head)
プロパティリストを解放します。 headで指すリストを解放します。MqttClient_Prop_Addを使ったパケットコマンドの使用後に呼び出さなければなりません。
WOLFMQTT_API int **MqttClient_Disconnect * client)
MQTT Disconnectパケットをエンコードして送信します(responseはありません)。
WOLFMQTT_API int **MqttClient_Disconnect_ex * disconnect)
MQTT Disconnectパケットをエンコードして送信します(responseはありません)。
WOLFMQTT_API int **MqttClient_WaitMessage * client, int timeout_ms)
パケット受信を待ちます。受信するpublishメッセージはMqttClient_Initに渡したコールバック関数を介して受信します。
WOLFMQTT_API int **MqttClient_WaitMessage_ex * msg, int timeout_ms)
パケット受信を待ちます。 受信するpublishメッセージはMqttClient_Initに渡したコールバック関数を介して受信します。
WOLFMQTT_API int **MqttClient_CancelMessage * msg)
マルチスレッド環境でノンブロッキングモード時に、msg で指定したMQTTオブジェクトをキャンセルします。
WOLFMQTT_API int **MqttClient_NetConnect cb)
TLS接続を実行し、MqttTlsCbコールバック関数を呼び出します(use_tlsが非ゼロの場合)。
WOLFMQTT_API int **MqttClient_NetDisconnect * client)
TLS接続を切断します。
WOLFMQTT_API int **MqttClient_GetProtocolVersion * client)
プロトコルバージョン番号を取得します。
WOLFMQTT_API const char * **MqttClient_GetProtocolVersionString * client)
プロトコルバージョン文字列を取得します。
WOLFMQTT_API const char * MqttClient_ReturnCodeToString(int return_code)
WOLFMQTT_APIからの戻り値を文字列に変換します。
WOLFMQTT_API int **SN_Client_SearchGW * search)
ゲートウェイを検索するメッセージをエンコードして送信し、ゲートウェイ情報応答メッセージを待ちます。
WOLFMQTT_API int **SN_Client_Connect * connect)
Connect パケットをエンコードして送信し、Connect Acknowledgeパケットを待ちます。 もし、Will(遺言)がイネーブルとなっている場合には、ゲートウェイはLWTトピックとメッセージを送信するように別パケットで促してきます。 空のwillトピックを指定するとwillトピックとwillメッセージをサーバーから削除するものとみなします。 the Will message stored in the server.
WOLFMQTT_API int **SN_Client_WillTopicUpdate * will)
MQTT-SN Will Topic Updateパケットをエンコードして送信します。 will引数としてNULLを渡すと、Willトピックとサーバーに保持されているWillメッセージを削除することを意味します。
WOLFMQTT_API int **SN_Client_WillMsgUpdate * will)
MQTT-SN Will Message Update パケットをエンコードして送信します。
WOLFMQTT_API int **SN_Client_Register * regist)
MQTT-SN Register パケットをエンコードして送信し、Register Acknowledgeパケットを待ちます。 クライアントがゲートウェイに送信するRegisterパケットは、含まれているトピック名に対してトピックIDを割り当てるように要求する目的で送信されます。 また、ゲートウェイからクライアントに送信されるRegisterパケットはトピック名に対してトピックIDが割り当てられたことを通知する目的で送信されます。
WOLFMQTT_API int **SN_Client_SetRegisterCallback regCb, void * ctx)
カスタム(ユーザー)コンテキストと共にレジスターコールバック関数をセットします。
WOLFMQTT_API int **SN_Client_Publish * publish)
MQTT-SN Publishパケットをエンコードして送信しPublish responseを待ちます (QoS > 0の場合)。
WOLFMQTT_API int **SN_Client_Subscribe * subscribe)
MQTT-SN Subscribeパケットをエンコードして送信し、割り当てられたトピックIDを含むSubscribe Acknowledgmentパケットを待ちます。
WOLFMQTT_API int **SN_Client_Unsubscribe * unsubscribe)
MQTT-SN Unsubscribeパケットをエンコードして送信し、Unsubscribe Acknowledgmentパケットを待ちます。
WOLFMQTT_API int **SN_Client_Disconnect * client)
MQTT-SN Disconnectパケットをエンコードして送信します。 その際に、クライアントはスリープ状態に入るまでの時間を送信できます。
WOLFMQTT_API int **SN_Client_Disconnect_ex * disconnect)
MQTT-SN Disconnectパケットをエンコードして送信します。その際に、クライアントはスリープ状態に入るまでの時間を送信できます。
WOLFMQTT_API int **SN_Client_Ping * ping)
MQTT-SN Ping Requestパケットをエンコードして送信し、Ping Responseパケットを待ちます。 クライアントがスリープ状態の場合でゲートウェイに起床状態に遷移したことを通知したい場合にはクライアントIDをping requestに追加する必要があります。
WOLFMQTT_API int **SN_Client_WaitMessage * client, int timeout_ms)
パケット受信を待ちます。受信したPublishメッセーはMqttClient_Initで与えられたコールバック関数を介して通知されます。
WOLFMQTT_API int **SN_Client_WaitMessage_ex * packet_obj, int timeout_ms)

Attributes

Name
C

Types Documentation

enum MqttClientFlags

Enumerator Value Description
MQTT_CLIENT_FLAG_IS_CONNECTED 0x01
MQTT_CLIENT_FLAG_IS_TLS 0x02

enum _MqttPkStat

Enumerator Value Description
MQTT_PK_BEGIN
MQTT_PK_READ_HEAD
MQTT_PK_READ

typedef MqttMsgCb

typedef int(* MqttMsgCb) (struct _MqttClient *client, MqttMessage *message, byte msg_new, byte msg_done);

Mqttメッセージ受信コールバック関数。 メッセージ本文が最大受信バッファ(RX)サイズ以上の場合には、このコールバック関数が複数回呼び出されます。 もし、msg_new が 1 の場合には新しいメッセージを意味します。 topic_name と topic_name length はmsg_new が 1の場合にのみ意味があります。 msg_new が 0 の場合には追加のペイロードを受信中であることを意味します。 コールバックの都度、MqttMessage.bufferにペイロードが格納されます。 MqttMessage.buffer_lenはペイロード用のバッファーのサイズです。 MqttMessage.buffer_posは受信したのペイロードの位置を表します。 MqttMessage.total_lenは受信が完了したペイロードの長さを表します。 msg_doneが1の場合には、パブリッシュされたペイロード全体が受信済みであることを表します。

Parameters:

  • client MqttClient構造体へのポインター
  • message ペイロードの属性が設定済みのMqttMessage構造体へのポインター
  • msg_new 非ゼロ値の場合、メッセージが新規でトピック名とトピック長は有効な値を保持しています。
  • msg_done 非ゼロ値の場合、メッセージ全体とトピック全体を受信済です。

Return: MQTT_CODE_SUCCESS:接続を継続します。他の値の場合には接続は切られます。MqttPacketResponseCodesを参照のこと)

typedef MqttPublishCb

typedef int(* MqttPublishCb) (MqttPublish *publish);

Mqttパブリッシュコールバック関数。 パブリッシュするペイロードが最大送信バッファ(TX)サイズ以上の場合にはこのコールバック関数が複数回呼び出されます。 このコールバック関数ではMqttPublishを呼び出した際にその内部から呼び出されます。 このコールバック関数はバッファーを提供し、そのサイズを成功時の戻り値(0以上)として返却することが求められます。 コールバック関数の呼び出しの都度、ペーロードがMqttPublish.bufferにコピーされます。 MqttPublish.buffer_lenはバッファー内のペイロードのサイズを表します。 MqttPublish.total_lenは完全なペイロードメッセージの長さを表します。

Parameters:

  • publish MqttPublish構造体へのポインター

Return: >= 0 成功

typedef MqttPkStat

typedef enum _MqttPkStat MqttPkStat;

typedef MqttPkRead

typedef struct _MqttPkRead MqttPkRead;

typedef MqttSk

typedef struct _MqttSk MqttSk;

typedef MqttDisconnectCb

typedef int(* MqttDisconnectCb) (struct _MqttClient *client, int error_code, void *ctx);

typedef MqttPropertyCb

typedef int(* MqttPropertyCb) (struct _MqttClient *client, MqttProp *head, void *ctx);

typedef SN_ClientRegisterCb

typedef int(* SN_ClientRegisterCb) (word16 topicId, const char *topicName, void *reg_ctx);

Mqtt-SN レジスターコールバック関数。 ゲートウェイはクライアントに対してトピック名とPUBLISHメッセージ送信時に使用するために割り当てられたトピックid をクライアントに通知する目的でREGISTERメッセージを送信します。      このコールバック関数はクライアントにトピックIDを受け入れて保存するか、そのIDが未知の場合には拒否できます。拒否する場合には、regackは”unsupported" 戻り値を伴います。

Parameters:

  • topicId 新トピックID
  • topicName トピック名へのポインター
  • reg_ctx ユーザーコンテキストへのポインター

Return: >= 0 受け入れることを表します

typedef MqttClient

typedef struct _MqttClient MqttClient;

Functions Documentation

function MqttClient_Init

WOLFMQTT_API int MqttClient_Init(
    MqttClient * client,
    MqttNet * net,
    MqttMsgCb msg_cb,
    byte * tx_buf,
    int tx_buf_len,
    byte * rx_buf,
    int rx_buf_len,
    int cmd_timeout_ms
)

MqttClient構造体を初期化します。

Parameters:

  • client MqttClient構造体へのポインター(未初期化で可)
  • net コールバック関数とコンテキストへのポインターが格納されたMqttNet構造体へのポインター
  • msg_cb メッセージ受信コールバック関数へのポインター
  • tx_buf エンコード用送信バッファーへのポインター
  • tx_buf_len エンコード用送信バッファーの最大サイズ
  • rx_buf デコード用受信バッファーへのポインター
  • rx_buf_len デコード用受信バッファーの最大サイズ
  • cmd_timeout_ms 最大コマンド待ち時間(ミリ秒)

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_BAD_ARG

(enum MqttPacketResponseCodes を参照)

function MqttClient_DeInit

WOLFMQTT_API void MqttClient_DeInit(
    MqttClient * client
)

MqttClient構造体にアロケートされたリソースをクリーンアップします。

Parameters:

  • client MqttClient構造体へのポインター

function MqttClient_SetDisconnectCallback

WOLFMQTT_API int MqttClient_SetDisconnectCallback(
    MqttClient * client,
    MqttDisconnectCb discb,
    void * ctx
)

disconnectコールバック関数とユーザーコンテキストをセットします。

Parameters:

  • client MqttClient構造体へのポインター(未初期化で可)
  • discb disconnectコールバック関数へのポインター
  • ctx ユーザーコンテキストへのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_BAD_ARG

(enum MqttPacketResponseCodes を参照)

function MqttClient_SetPropertyCallback

WOLFMQTT_API int MqttClient_SetPropertyCallback(
    MqttClient * client,
    MqttPropertyCb propCb,
    void * ctx
)

propertyコールバック関数とユーザーコンテキストをセットします。

Parameters:

  • client MqttClient構造体へのポインター(未初期化で可)
  • propCb propertyコールバック関数へのポインター
  • ctx ユーザーコンテキストへのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_BAD_ARG

(enum MqttPacketResponseCodes を参照)

function MqttClient_Connect

WOLFMQTT_API int MqttClient_Connect(
    MqttClient * client,
    MqttConnect * connect
)

MQTT Connectパケットをエンコードして送信し、Connect Acknowledgmentパケットを待ちます。

Parameters:

  • client MqttClient構造体へのポインター
  • connect connectパラメータを与えられたMqttConnect構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です

function MqttClient_Publish

WOLFMQTT_API int MqttClient_Publish(
    MqttClient * client,
    MqttPublish * publish
)

MQTT Publish パケットをエンコードして送信し、Publish response を待ちます(QoS > 0の場合)。 ペイロードのサイズがバッファーサイズより大きい場合には、ペイロード全体を送信するまでこの関数を連続して複数回呼び出すことができます(QoS > 0の場合)。

Parameters:

  • client MqttClient構造体へのポインター
  • publish メッセージデータがセットされたMqttPublish構造体へのポインター

注: MqttPublishとMqttMessageは同じ構造体です。

See:

Return: MQTT_CODE_SUCCESS, MQTT_CODE_CONTINUE (for non-blocking) または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待ってブロッキングしますが、ノンブロッキングの場合にはタイムアウトするかMQTT_CODE_CONTINUEを返します。 QoS levelが1の場合にはPUBLISH_ACKを待ちます。QoS levelが2の場合にはPUBLISH_RECを待ちその後、PUBLISH_RELとを送信し、PUBLISH_COMPを待ちます。

function MqttClient_Publish_ex

WOLFMQTT_API int MqttClient_Publish_ex(
    MqttClient * client,
    MqttPublish * publish,
    MqttPublishCb pubCb
)

MQTT Publishパケットをエンコードして送信し、Publish response を待ちます(QoS > 0の場合)。 コールバック関数は送信バッファーより大きなサイズのペイロードデータを送信バッファーにコピーすることに使用されます。

Parameters:

  • client MqttClient構造体へのポインター
  • publish メッセージデータがセットされたMqttPublish構造体へのポインター。 注: MqttPublishとMqttMessageは同じ構造体です。
  • pubCb コールバック関数へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待ってブロッキングしますが、ノンブロッキングの場合にはタイムアウトするかMQTT_CODE_CONTINUEを返します。 QoS levelが1の場合にはPUBLISH_ACKを待ちます。QoS levelが2の場合にはPUBLISH_RECを待ちその後、PUBLISH_RELとを送信し、PUBLISH_COMPを待ちます。

function MqttClient_Publish_WriteOnly

WOLFMQTT_API int MqttClient_Publish_WriteOnly(
    MqttClient * client,
    MqttPublish * publish,
    MqttPublishCb pubCb
)

MqttClient_Publish_exと同様の機能ですが,本関数はデータの書き込みだけを行い、他のスレッドでMqttClient_WaitMessage_exを呼び出してread ACKのハンドリングを行うことを必要としてます。

Parameters:

  • client MqttClient構造体へのポインター
  • publish メッセージデータがセットされたMqttPublish構造体へのポインター

注: MqttPublishとMqttMessageは同じ構造体です。 * pubCb コールバック関数へのポインター

See:

Return: MQTT_CODE_SUCCESS, MQTT_CODE_CONTINUE (for non-blocking) または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待ってブロッキングしますが、ノンブロッキングの場合にはタイムアウトするかMQTT_CODE_CONTINUEを返します。 QoS levelが1の場合にはPUBLISH_ACKを待ちます。QoS levelが2の場合にはPUBLISH_RECを待ちその後、PUBLISH_RELとを送信し、PUBLISH_COMPを待ちます。

function MqttClient_Subscribe

WOLFMQTT_API int MqttClient_Subscribe(
    MqttClient * client,
    MqttSubscribe * subscribe
)

MQTT Subscribeパケットをエンコードして送信し、Subscribe Acknowledgmentパケットを待ちます。

Parameters:

  • client MqttClient構造体へのポインター
  • subscribe トピックリストとQoSを与えられたMqttSubscribe構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です。

function MqttClient_Unsubscribe

WOLFMQTT_API int MqttClient_Unsubscribe(
    MqttClient * client,
    MqttUnsubscribe * unsubscribe
)

MQTT Unsubscribeパケットをエンコードして送信し、Unsubscribe Acknowledgmentパケットを待ちます。

Parameters:

  • client MqttClient構造体へのポインター
  • unsubscribe トピックリストを与えられたMqttUnsubscribe構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です。

function MqttClient_Ping

WOLFMQTT_API int MqttClient_Ping(
    MqttClient * client
)

MQTT Ping Requestパケットをエンコードして送信し、Ping Responseパケットを待ちます。

Parameters:

  • client MqttClient構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です

function MqttClient_Ping_ex

WOLFMQTT_API int MqttClient_Ping_ex(
    MqttClient * client,
    MqttPing * ping
)

MQTT Ping Requestパケットをエンコードして送信し、Ping Responseパケットを待ちます。 このexバージョンでは、MqttPing構造体を引数にとり、ノンブロッキングアプリケーションで使用できます。

Parameters:

  • client MqttClient構造体へのポインター
  • ping MqttPing構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です

function MqttClient_Auth

WOLFMQTT_API int MqttClient_Auth(
    MqttClient * client,
    MqttAuth * auth
)

MQTT Authentication Requestパケットをエンコードして送信し、Ping Responseパケットを待ちます。

Parameters:

  • client MqttClient構造体へのポインター
  • auth MqttAuth構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です

function MqttClient_PropsAdd

WOLFMQTT_API MqttProp * MqttClient_PropsAdd(
    MqttProp ** head
)

新しいプロパティを追加します。プロパティ構造体をアロケートし、headで指すリストヘッドに追加します。パケットコマンドに先だって呼び出す必要があります。

Parameters:

  • head プロパティ構造体へのポインターのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_BAD_ARG

function MqttClient_PropsFree

WOLFMQTT_API int MqttClient_PropsFree(
    MqttProp * head
)

プロパティリストを解放します。 headで指すリストを解放します。MqttClient_Prop_Addを使ったパケットコマンドの使用後に呼び出さなければなりません。

Parameters:

  • head プロパティ構造体へのポインターのポインター

Return: MQTT_CODE_SUCCESS または -1 (エラー発生時。errnoにもセットされます)

function MqttClient_Disconnect

WOLFMQTT_API int MqttClient_Disconnect(
    MqttClient * client
)

MQTT Disconnectパケットをエンコードして送信します(responseはありません)。

Parameters:

  • client MqttClient構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.writeを使って送信を試みるノンブロッキング関数です。

function MqttClient_Disconnect_ex

WOLFMQTT_API int MqttClient_Disconnect_ex(
    MqttClient * client,
    MqttDisconnect * disconnect
)

MQTT Disconnectパケットをエンコードして送信します(responseはありません)。

Parameters:

  • client MqttClient構造体へのポインター
  • disconnect MqttDisconnect構造体へのポインター。NULLを指定しても可。

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.writeを使って送信を試みるノンブロッキング関数です。

function MqttClient_WaitMessage

WOLFMQTT_API int MqttClient_WaitMessage(
    MqttClient * client,
    int timeout_ms
)

パケット受信を待ちます。受信するpublishメッセージはMqttClient_Initに渡したコールバック関数を介して受信します。

Parameters:

  • client MqttClient構造体へのポインター
  • timeout_ms 受信タイムアウト時間(ミリ秒)

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:    この関数はMqttNet.readで待つブロッキング関数です

function MqttClient_WaitMessage_ex

WOLFMQTT_API int MqttClient_WaitMessage_ex(
    MqttClient * client,
    MqttObject * msg,
    int timeout_ms
)

パケット受信を待ちます。 受信するpublishメッセージはMqttClient_Initに渡したコールバック関数を介して受信します。

Parameters:

  • client MqttClient構造体へのポインター
  • msg MqttObject構造体へのポインター
  • timeout_ms 受信タイムアウト時間(ミリ秒)

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:    この関数はMqttNet.readで待つブロッキング関数です

function MqttClient_CancelMessage

WOLFMQTT_API int MqttClient_CancelMessage(
    MqttClient * client,
    MqttObject * msg
)

マルチスレッド環境でノンブロッキングモード時に、msg で指定したMQTTオブジェクトをキャンセルします。

Parameters:

  • client MqttClient構造体へのポインター
  • msg MqttObject構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:    この関数はMqttNet.readで待つブロッキング関数です

function MqttClient_NetConnect

WOLFMQTT_API int MqttClient_NetConnect(
    MqttClient * client,
    const char * host,
    word16 port,
    int timeout_ms,
    int use_tls,
    MqttTlsCb cb
)

TLS接続を実行し、MqttTlsCbコールバック関数を呼び出します(use_tlsが非ゼロの場合)。

Parameters:

  • client MqttClient構造体へのポインター
  • host ブローカーアドレス
  • port ポート番号(オプション)。ゼロが指定された場合はデフォルトのポート番号(8883)を使用。
  • use_tls 非ゼロの値が指定された場合にはTLS接続を行う。
  • cb TLS接続コールバック関数。コールバック関数はSSLコンテキストこコンフィグレーションや証明書チェックの為に呼び出します。
  • timeout_ms 受信タイムアウト時間(ミリ秒)

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

function MqttClient_NetDisconnect

WOLFMQTT_API int MqttClient_NetDisconnect(
    MqttClient * client
)

TLS接続を切断します。

Parameters:

  • client MqttClient構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_* (enum MqttPacketResponseCodes を参照)

function MqttClient_GetProtocolVersion

WOLFMQTT_API int MqttClient_GetProtocolVersion(
    MqttClient * client
)

プロトコルバージョン番号を取得します。

Parameters:

  • client MqttClient構造体へのポインター

Return: 4 (v3.1.1) or 5 (v5)

function MqttClient_GetProtocolVersionString

WOLFMQTT_API const char * MqttClient_GetProtocolVersionString(
    MqttClient * client
)

プロトコルバージョン文字列を取得します。

Parameters:

  • client MqttClient構造体へのポインター

Return: String v3.1.1 or v5

function MqttClient_ReturnCodeToString

WOLFMQTT_API const char * MqttClient_ReturnCodeToString(
    int return_code
)

WOLFMQTT_APIからの戻り値を文字列に変換します。

Parameters:

  • return_code WOLFMQTT_APIからの戻り値

Return: String 戻り値の文字列表現

function SN_Client_SearchGW

WOLFMQTT_API int SN_Client_SearchGW(
    MqttClient * client,
    SN_SearchGw * search
)

ゲートウェイを検索するメッセージをエンコードして送信し、ゲートウェイ情報応答メッセージを待ちます。

Parameters:

  • client MqttClient構造体へのポインター
  • search hop radiusが与えられたSN_SearchGW構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_Connect

WOLFMQTT_API int SN_Client_Connect(
    MqttClient * client,
    SN_Connect * connect
)

Connect パケットをエンコードして送信し、Connect Acknowledgeパケットを待ちます。 もし、Will(遺言)がイネーブルとなっている場合には、ゲートウェイはLWTトピックとメッセージを送信するように別パケットで促してきます。 空のwillトピックを指定するとwillトピックとwillメッセージをサーバーから削除するものとみなします。 the Will message stored in the server.

Parameters:

  • client MqttClient構造体へのポインター
  • connect 接続パラメータが与えられたSN_Connect構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_WillTopicUpdate

WOLFMQTT_API int SN_Client_WillTopicUpdate(
    MqttClient * client,
    SN_Will * will
)

MQTT-SN Will Topic Updateパケットをエンコードして送信します。 will引数としてNULLを渡すと、Willトピックとサーバーに保持されているWillメッセージを削除することを意味します。

Parameters:

  • client MqttClient構造体へのポインター
  • will トピックとメッセージパラメータが与えられたSN_Will構造体へのポインター。NULL指定も可。

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_WillMsgUpdate

WOLFMQTT_API int SN_Client_WillMsgUpdate(
    MqttClient * client,
    SN_Will * will
)

MQTT-SN Will Message Update パケットをエンコードして送信します。

Parameters:

  • client MqttClient構造体へのポインター
  • will トピックとメッセージパラメータが与えられたSN_Will構造体へのポインター。NULL指定でも可。

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_Register

WOLFMQTT_API int SN_Client_Register(
    MqttClient * client,
    SN_Register * regist
)

MQTT-SN Register パケットをエンコードして送信し、Register Acknowledgeパケットを待ちます。 クライアントがゲートウェイに送信するRegisterパケットは、含まれているトピック名に対してトピックIDを割り当てるように要求する目的で送信されます。 また、ゲートウェイからクライアントに送信されるRegisterパケットはトピック名に対してトピックIDが割り当てられたことを通知する目的で送信されます。

Parameters:

  • client MqttClient構造体へのポインター
  • regist SN_Register構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note: この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_SetRegisterCallback

WOLFMQTT_API int SN_Client_SetRegisterCallback(
    MqttClient * client,
    SN_ClientRegisterCb regCb,
    void * ctx
)

カスタム(ユーザー)コンテキストと共にレジスターコールバック関数をセットします。

Parameters:

  • client MqttClient構造体へのポインター(未初期化で可)
  • regCb レジスターコールバック関数へのポインター
  • ctx ユーザーコンテキストへのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_BAD_ARG

function SN_Client_Publish

WOLFMQTT_API int SN_Client_Publish(
    MqttClient * client,
    SN_Publish * publish
)

MQTT-SN Publishパケットをエンコードして送信しPublish responseを待ちます (QoS > 0の場合)。

Parameters:

  • client MqttClient構造体へのポインター
  • publish メッセージデータを与えられたSN_Publish構造体へのポインター。 注: SN_PublishとMqttMessageは同じ構造体です。

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:     この関数はMqttNet.readで待つブロッキング関数です。  QoS levelが1の場合にはPUBLISH_ACKを待ちます。  QoS levelが2の場合にはPUBLISH_RECを待ちその後、PUBLISH_RELを送信し、PUBLISH_COMPを待ちます。

function SN_Client_Subscribe

WOLFMQTT_API int SN_Client_Subscribe(
    MqttClient * client,
    SN_Subscribe * subscribe
)

MQTT-SN Subscribeパケットをエンコードして送信し、割り当てられたトピックIDを含むSubscribe Acknowledgmentパケットを待ちます。

Parameters:

  • client MqttClient構造体へのポインター
  • subscribe トピックリストとQoSレベルを与えられたSN_Subscribe構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:    この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_Unsubscribe

WOLFMQTT_API int SN_Client_Unsubscribe(
    MqttClient * client,
    SN_Unsubscribe * unsubscribe
)

MQTT-SN Unsubscribeパケットをエンコードして送信し、Unsubscribe Acknowledgmentパケットを待ちます。

Parameters:

  • client MqttClient構造体へのポインター
  • unsubscribe トピックIDが与えられたSN_Unsubscribe構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:     この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_Disconnect

WOLFMQTT_API int SN_Client_Disconnect(
    MqttClient * client
)

MQTT-SN Disconnectパケットをエンコードして送信します。 その際に、クライアントはスリープ状態に入るまでの時間を送信できます。

Parameters:

  • client MqttClient構造体へのポインター

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:    この関数はMqttNet.writeを呼び出して待つブロッキング関数です。

function SN_Client_Disconnect_ex

WOLFMQTT_API int SN_Client_Disconnect_ex(
    MqttClient * client,
    SN_Disconnect * disconnect
)

MQTT-SN Disconnectパケットをエンコードして送信します。その際に、クライアントはスリープ状態に入るまでの時間を送信できます。

Parameters:

  • client MqttClient構造体へのポインター
  • disconnect SN_Disconnect構造体へのポインター。 NULL指定も可。

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:    この関数はMqttNet.writeを呼び出して待つブロッキング関数です。

function SN_Client_Ping

WOLFMQTT_API int SN_Client_Ping(
    MqttClient * client,
    SN_PingReq * ping
)

MQTT-SN Ping Requestパケットをエンコードして送信し、Ping Responseパケットを待ちます。 クライアントがスリープ状態の場合でゲートウェイに起床状態に遷移したことを通知したい場合にはクライアントIDをping requestに追加する必要があります。

Parameters:

  • client MqttClient構造体へのポインター
  • ping SN_PingReq構造体へのポインター。NULL指定も可。

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:    この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_WaitMessage

WOLFMQTT_API int SN_Client_WaitMessage(
    MqttClient * client,
    int timeout_ms
)

パケット受信を待ちます。受信したPublishメッセーはMqttClient_Initで与えられたコールバック関数を介して通知されます。

Parameters:

  • client MqttClient構造体へのポインター
  • timeout_ms ミリ秒の受信タイムアウト時間

Return: MQTT_CODE_SUCCESS または MQTT_CODE_ERROR_*

(enum MqttPacketResponseCodes を参照)

Note:    この関数はMqttNet.readで待つブロッキング関数です。

function SN_Client_WaitMessage_ex

WOLFMQTT_API int SN_Client_WaitMessage_ex(
    MqttClient * client,
    SN_Object * packet_obj,
    int timeout_ms
)

Attributes Documentation

variable C

C {
#endif


#if !defined(WOLFMQTT_USER_SETTINGS) && \
    !defined(_WIN32) && !defined(USE_WINDOWS_API)

    #include <wolfmqtt/options.h>
#endif
#include "wolfmqttmqtt_types.h"
#include "wolfmqttmqtt_packet.h"
#include "wolfmqttmqtt_socket.h"


#ifndef WOLFMQTT_USE_CB_ON_DISCONNECT
    #undef WOLFMQTT_USE_CB_ON_DISCONNECT

#endif

#if defined(WOLFMQTT_PROPERTY_CB) && !defined(WOLFMQTT_V5)
    #error "WOLFMQTT_V5 must be defined to use WOLFMQTT_PROPERTY_CB"
#endif

struct _MqttClient;

Source code

/* mqtt_client.h
 *
 * Copyright (C) 2006-2022 wolfSSL Inc.
 *
 * This file is part of wolfMQTT.
 *
 * wolfMQTT is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * wolfMQTT is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
 */

/* Implementation by: David Garske
 * Based on specification for MQTT v3.1.1
 * See http://mqtt.org/documentation for additional MQTT documentation.
 */

#ifndef WOLFMQTT_CLIENT_H
#define WOLFMQTT_CLIENT_H

#ifdef __cplusplus
    extern "C" {
#endif

/* Windows uses the vs_settings.h file included vis mqtt_types.h */
#if !defined(WOLFMQTT_USER_SETTINGS) && \
    !defined(_WIN32) && !defined(USE_WINDOWS_API)
    /* If options.h is missing use the "./configure" script. Otherwise, copy
     * the template "wolfmqtt/options.h.in" into "wolfmqtt/options.h" */
    #include <wolfmqtt/options.h>
#endif
#include "wolfmqttmqtt_types.h"
#include "wolfmqttmqtt_packet.h"
#include "wolfmqttmqtt_socket.h"

/* This macro allows the disconnect callback to be triggered when
 * MqttClient_Disconnect_ex is called. Normally the CB is only used to handle
 * errors from MqttPacket_HandleNetError.
 */
#ifndef WOLFMQTT_USE_CB_ON_DISCONNECT
    #undef WOLFMQTT_USE_CB_ON_DISCONNECT
    /* #define WOLFMQTT_USE_CB_ON_DISCONNECT */
#endif

#if defined(WOLFMQTT_PROPERTY_CB) && !defined(WOLFMQTT_V5)
    #error "WOLFMQTT_V5 must be defined to use WOLFMQTT_PROPERTY_CB"
#endif

struct _MqttClient;

typedef int (*MqttMsgCb)(struct _MqttClient *client, MqttMessage *message,
    byte msg_new, byte msg_done);

typedef int (*MqttPublishCb)(MqttPublish* publish);

/* Client flags */
enum MqttClientFlags {
    MQTT_CLIENT_FLAG_IS_CONNECTED = 0x01,
    MQTT_CLIENT_FLAG_IS_TLS = 0x02,
};

typedef enum _MqttPkStat {
    MQTT_PK_BEGIN,
    MQTT_PK_READ_HEAD,
    MQTT_PK_READ,
} MqttPkStat;

typedef struct _MqttPkRead {
    MqttPkStat stat;
    int header_len;
    int remain_len;
    int buf_len;
} MqttPkRead;

typedef struct _MqttSk {
    int pos;
    int len;
} MqttSk;

#ifdef WOLFMQTT_DISCONNECT_CB
    typedef int (*MqttDisconnectCb)(struct _MqttClient* client, int error_code, void* ctx);
#endif
#ifdef WOLFMQTT_PROPERTY_CB
    typedef int (*MqttPropertyCb)(struct _MqttClient* client, MqttProp* head, void* ctx);
#endif
#ifdef WOLFMQTT_SN
    typedef int (*SN_ClientRegisterCb)(word16 topicId, const char* topicName, void *reg_ctx);
#endif

/* Client structure */
typedef struct _MqttClient {
    word32       flags; /* MqttClientFlags */
    int          cmd_timeout_ms;

    byte        *tx_buf;
    int          tx_buf_len;
    byte        *rx_buf;
    int          rx_buf_len;

    MqttNet     *net;   /* Pointer to network callbacks and context */
#ifdef ENABLE_MQTT_TLS
    MqttTls      tls;   /* WolfSSL context for TLS */
#endif

    MqttPkRead   packet; /* publish packet state - protected by read lock */
    MqttPublishResp packetAck; /* publish ACK - protected by write lock */
    MqttSk       read;   /* read socket state - protected by read lock */
    MqttSk       write;  /* write socket state - protected by write lock */

    MqttMsgCb    msg_cb;
    MqttObject   msg;   /* generic incoming message used by MqttClient_WaitType */
#ifdef WOLFMQTT_SN
    SN_Object    msgSN;
    SN_ClientRegisterCb reg_cb;
    void               *reg_ctx;
#endif
    void*        ctx;   /* user supplied context for publish callbacks */

#ifdef WOLFMQTT_V5
    word32 packet_sz_max; /* Server property */
    byte   max_qos;       /* Server property */
    byte   retain_avail;  /* Server property */
    byte   enable_eauth;  /* Enhanced authentication */
    byte   protocol_level;
#endif

#ifdef WOLFMQTT_DISCONNECT_CB
    MqttDisconnectCb disconnect_cb;
    void            *disconnect_ctx;
#endif
#ifdef WOLFMQTT_PROPERTY_CB
    MqttPropertyCb property_cb;
    void          *property_ctx;
#endif
#ifdef WOLFMQTT_MULTITHREAD
    wm_Sem lockSend;
    wm_Sem lockRecv;
    wm_Sem lockClient;
    struct _MqttPendResp* firstPendResp; /* protected with client lock */
    struct _MqttPendResp* lastPendResp;  /* protected with client lock */
#endif
#if defined(WOLFMQTT_NONBLOCK) && defined(WOLFMQTT_DEBUG_CLIENT)
    int lastRc;
#endif
} MqttClient;


/* Application Interfaces */

WOLFMQTT_API int MqttClient_Init(
    MqttClient *client,
    MqttNet *net,
    MqttMsgCb msg_cb,
    byte *tx_buf, int tx_buf_len,
    byte *rx_buf, int rx_buf_len,
    int cmd_timeout_ms);

WOLFMQTT_API void MqttClient_DeInit(MqttClient *client);

#ifdef WOLFMQTT_DISCONNECT_CB
WOLFMQTT_API int MqttClient_SetDisconnectCallback(
    MqttClient *client,
    MqttDisconnectCb discb,
    void* ctx);
#endif

#ifdef WOLFMQTT_PROPERTY_CB
WOLFMQTT_API int MqttClient_SetPropertyCallback(
    MqttClient *client,
    MqttPropertyCb propCb,
    void* ctx);
#endif

WOLFMQTT_API int MqttClient_Connect(
    MqttClient *client,
    MqttConnect *connect);

WOLFMQTT_API int MqttClient_Publish(
    MqttClient *client,
    MqttPublish *publish);

WOLFMQTT_API int MqttClient_Publish_ex(
    MqttClient *client,
    MqttPublish *publish,
    MqttPublishCb pubCb);


#ifdef WOLFMQTT_MULTITHREAD
WOLFMQTT_API int MqttClient_Publish_WriteOnly(
    MqttClient *client,
    MqttPublish *publish,
    MqttPublishCb pubCb);
#endif

WOLFMQTT_API int MqttClient_Subscribe(
    MqttClient *client,
    MqttSubscribe *subscribe);

WOLFMQTT_API int MqttClient_Unsubscribe(
    MqttClient *client,
    MqttUnsubscribe *unsubscribe);

WOLFMQTT_API int MqttClient_Ping(
    MqttClient *client);

WOLFMQTT_API int MqttClient_Ping_ex(MqttClient *client, MqttPing* ping);

#ifdef WOLFMQTT_V5
WOLFMQTT_API int MqttClient_Auth(
    MqttClient *client,
    MqttAuth *auth);


WOLFMQTT_API MqttProp* MqttClient_PropsAdd(
    MqttProp **head);

WOLFMQTT_API int MqttClient_PropsFree(
    MqttProp *head);
#endif


WOLFMQTT_API int MqttClient_Disconnect(
    MqttClient *client);


WOLFMQTT_API int MqttClient_Disconnect_ex(
    MqttClient *client,
    MqttDisconnect *disconnect);


WOLFMQTT_API int MqttClient_WaitMessage(
    MqttClient *client,
    int timeout_ms);

WOLFMQTT_API int MqttClient_WaitMessage_ex(
    MqttClient *client,
    MqttObject* msg,
    int timeout_ms);

WOLFMQTT_API int MqttClient_CancelMessage(
    MqttClient *client,
    MqttObject* msg);

WOLFMQTT_API int MqttClient_NetConnect(
    MqttClient *client,
    const char *host,
    word16 port,
    int timeout_ms,
    int use_tls,
    MqttTlsCb cb);

WOLFMQTT_API int MqttClient_NetDisconnect(
    MqttClient *client);

WOLFMQTT_API int MqttClient_GetProtocolVersion(MqttClient *client);

WOLFMQTT_API const char* MqttClient_GetProtocolVersionString(MqttClient *client);

#ifndef WOLFMQTT_NO_ERROR_STRINGS
WOLFMQTT_API const char* MqttClient_ReturnCodeToString(
    int return_code);
#else
    #define MqttClient_ReturnCodeToString(x) \
                                        "not compiled in"
#endif /* WOLFMQTT_NO_ERROR_STRINGS */

#ifdef WOLFMQTT_SN
WOLFMQTT_API int SN_Client_SearchGW(
        MqttClient *client,
        SN_SearchGw *search);

WOLFMQTT_API int SN_Client_Connect(
    MqttClient *client,
    SN_Connect *connect);

WOLFMQTT_API int SN_Client_WillTopicUpdate(MqttClient *client, SN_Will *will);

WOLFMQTT_API int SN_Client_WillMsgUpdate(MqttClient *client, SN_Will *will);

WOLFMQTT_API int SN_Client_Register(
    MqttClient *client,
    SN_Register *regist);


WOLFMQTT_API int SN_Client_SetRegisterCallback(
    MqttClient *client,
    SN_ClientRegisterCb regCb,
    void* ctx);


WOLFMQTT_API int SN_Client_Publish(
    MqttClient *client,
    SN_Publish *publish);

WOLFMQTT_API int SN_Client_Subscribe(
    MqttClient *client,
    SN_Subscribe *subscribe);

WOLFMQTT_API int SN_Client_Unsubscribe(
    MqttClient *client,
    SN_Unsubscribe *unsubscribe);

WOLFMQTT_API int SN_Client_Disconnect(
    MqttClient *client);

WOLFMQTT_API int SN_Client_Disconnect_ex(
    MqttClient *client,
    SN_Disconnect *disconnect);


WOLFMQTT_API int SN_Client_Ping(
    MqttClient *client,
    SN_PingReq *ping);

WOLFMQTT_API int SN_Client_WaitMessage(
    MqttClient *client,
    int timeout_ms);

WOLFMQTT_API int SN_Client_WaitMessage_ex(MqttClient *client, SN_Object* packet_obj,
    int timeout_ms);

#endif /* WOLFMQTT_SN */

#ifdef __cplusplus
    } /* extern "C" */
#endif

#endif /* WOLFMQTT_CLIENT_H */