UNPKG

21.4 kBXMLView Raw
1<?xml version='1.0' encoding='UTF-8'?>
2<?xml-stylesheet type="text/xsl" href="manpage.xsl"?>
3
4<refentry xml:id="libmosquitto" xmlns:xlink="http://www.w3.org/1999/xlink">
5 <refmeta>
6 <refentrytitle>libmosquitto</refentrytitle>
7 <manvolnum>3</manvolnum>
8 <refmiscinfo class="source">Mosquitto Project</refmiscinfo>
9 <refmiscinfo class="manual">Library calls</refmiscinfo>
10 </refmeta>
11
12 <refnamediv>
13 <refname>libmosquitto</refname>
14 <refpurpose>MQTT version 3.1 client library</refpurpose>
15 </refnamediv>
16
17 <refsect1>
18 <title>Description</title>
19 <para>This is an overview of how to use libmosquitto to create MQTT
20 aware client programs. There may be separate man pages on each of the
21 functions described here in the future. There is also a binding for
22 libmosquitto for C++ and a Python implementation. They are not
23 documented here but operate in a similar way.</para>
24 <para>This is fairly incomplete, please see mosquitto.h for a better
25 description of the functions.</para>
26 </refsect1>
27
28 <refsect1>
29 <title>libmosquitto symbol names</title>
30 <para>All public functions in libmosquitto have the prefix
31 "mosquitto_". Any other functions defined in the source code are to be
32 treated as private functions and may change between any release. Do not
33 use these functions!</para>
34 </refsect1>
35
36 <refsect1>
37 <title>Functions</title>
38
39 <refsect2>
40 <title>Library version</title>
41
42 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_lib_version</function></funcdef>
43 <paramdef>int *<parameter>major</parameter></paramdef>
44 <paramdef>int *<parameter>minor</parameter></paramdef>
45 <paramdef>int *<parameter>revision</parameter></paramdef>
46 </funcprototype></funcsynopsis>
47 <para>Obtain version information about the library. If any of
48 major, minor or revision are not NULL they will return the
49 corresponding version numbers. The return value is an integer
50 representation of the complete version number (e.g. 1009001 for 1.9.1)
51 that can be used for comparisons.</para>
52 </refsect2>
53
54 <refsect2>
55 <title>Library initialisation and cleanup</title>
56
57 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_lib_init</function></funcdef>
58 <void/></funcprototype></funcsynopsis>
59
60 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_lib_cleanup</function></funcdef>
61 <void/></funcprototype></funcsynopsis>
62 <para>Call mosquitto_lib_init() before using any of the other
63 library functions and mosquitto_lib_cleanup() after finishing
64 with the library.</para>
65 </refsect2>
66
67 <refsect2>
68 <title>Client constructor/destructor</title>
69
70 <funcsynopsis><funcprototype><funcdef>struct mosquitto *<function>mosquitto_new</function></funcdef>
71 <paramdef>const char *<parameter>id</parameter></paramdef>
72 <paramdef>bool <parameter>clean_session</parameter></paramdef>
73 <paramdef>void *<parameter>userdata</parameter></paramdef>
74 </funcprototype></funcsynopsis>
75 <para>Create a new mosquitto client instance.</para>
76
77 <funcsynopsis><funcprototype><funcdef>void <function>mosquitto_destroy</function></funcdef>
78 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
79 </funcprototype></funcsynopsis>
80 <para>Use to free memory associated with a mosquitto client instance.</para>
81
82 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_reinitialise</function></funcdef>
83 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
84 <paramdef>const char *<parameter>id</parameter></paramdef>
85 <paramdef>bool <parameter>clean_session</parameter></paramdef>
86 <paramdef>void *<parameter>userdata</parameter></paramdef>
87 </funcprototype></funcsynopsis>
88 </refsect2>
89
90 <refsect2>
91 <title>Authentication and encryption</title>
92
93 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_username_pw_set</function></funcdef>
94 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
95 <paramdef>const char *<parameter>username</parameter></paramdef>
96 <paramdef>const char *<parameter>password</parameter></paramdef>
97 </funcprototype></funcsynopsis>
98
99 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_tls_set</function></funcdef>
100 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
101 <paramdef>const char *<parameter>cafile</parameter></paramdef>
102 <paramdef>const char *<parameter>capath</parameter></paramdef>
103 <paramdef>const char *<parameter>certfile</parameter></paramdef>
104 <paramdef>const char *<parameter>keyfile</parameter></paramdef>
105 <paramdef>int <parameter>(*pw_callback)(char *buf, int size, int rwflag, void *userdata)</parameter></paramdef>
106 </funcprototype></funcsynopsis>
107
108
109 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_tls_opts_set</function></funcdef>
110 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
111 <paramdef>int <parameter>cert_reqs</parameter></paramdef>
112 <paramdef>const char *<parameter>tls_version</parameter></paramdef>
113 <paramdef>const char *<parameter>ciphers</parameter></paramdef>
114 </funcprototype></funcsynopsis>
115
116 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_tls_insecure_set</function></funcdef>
117 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
118 <paramdef>bool <parameter>value</parameter></paramdef>
119 </funcprototype></funcsynopsis>
120
121 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_tls_psk_set</function></funcdef>
122 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
123 <paramdef>const char *<parameter>psk</parameter></paramdef>
124 <paramdef>const char *<parameter>identity</parameter></paramdef>
125 <paramdef>const char *<parameter>ciphers</parameter></paramdef>
126 </funcprototype></funcsynopsis>
127 </refsect2>
128
129 <refsect2>
130 <title>Wills</title>
131
132 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_will_set</function></funcdef>
133 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
134 <paramdef>const char *<parameter>topic</parameter></paramdef>
135 <paramdef>int <parameter>payloadlen</parameter></paramdef>
136 <paramdef>const void *<parameter>payload</parameter></paramdef>
137 <paramdef>int <parameter>qos</parameter></paramdef>
138 <paramdef>bool <parameter>retain</parameter></paramdef>
139 </funcprototype></funcsynopsis>
140
141 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_will_clear</function></funcdef>
142 <paramdef><parameter>struct mosquitto *mosq</parameter></paramdef>
143 </funcprototype></funcsynopsis>
144 </refsect2>
145
146 <refsect2>
147 <title>Connect/disconnect</title>
148
149 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_connect</function></funcdef>
150 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
151 <paramdef>const char *<parameter>host</parameter></paramdef>
152 <paramdef>int <parameter>port</parameter></paramdef>
153 <paramdef>int <parameter>keepalive</parameter></paramdef>
154 </funcprototype></funcsynopsis>
155
156 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_connect_bind</function></funcdef>
157 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
158 <paramdef>const char *<parameter>host</parameter></paramdef>
159 <paramdef>int <parameter>port</parameter></paramdef>
160 <paramdef>int <parameter>keepalive</parameter></paramdef>
161 <paramdef>const char *<parameter>bind_address</parameter></paramdef>
162 </funcprototype></funcsynopsis>
163
164 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_connect_async</function></funcdef>
165 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
166 <paramdef>const char *<parameter>host</parameter></paramdef>
167 <paramdef>int <parameter>port</parameter></paramdef>
168 <paramdef>int <parameter>keepalive</parameter></paramdef>
169 </funcprototype></funcsynopsis>
170
171 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_connect_bind_async</function></funcdef>
172 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
173 <paramdef>const char *<parameter>host</parameter></paramdef>
174 <paramdef>int <parameter>port</parameter></paramdef>
175 <paramdef>int <parameter>keepalive</parameter></paramdef>
176 <paramdef>const char *<parameter>bind_address</parameter></paramdef>
177 </funcprototype></funcsynopsis>
178
179 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_reconnect</function></funcdef>
180 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
181 </funcprototype></funcsynopsis>
182
183 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_reconnect_async</function></funcdef>
184 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
185 </funcprototype></funcsynopsis>
186
187 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_disconnect</function></funcdef>
188 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
189 </funcprototype></funcsynopsis>
190 </refsect2>
191
192 <refsect2>
193 <title>Publish</title>
194
195 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_publish</function></funcdef>
196 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
197 <paramdef>int *<parameter>mid</parameter></paramdef>
198 <paramdef>const char *<parameter>topic</parameter></paramdef>
199 <paramdef>int <parameter>payloadlen</parameter></paramdef>
200 <paramdef>const void *<parameter>payload</parameter></paramdef>
201 <paramdef>int <parameter>qos</parameter></paramdef>
202 <paramdef>bool <parameter>retain</parameter></paramdef>
203 </funcprototype></funcsynopsis>
204 </refsect2>
205
206 <refsect2>
207 <title>Subscribe/unsubscribe</title>
208
209 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_subscribe</function></funcdef>
210 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
211 <paramdef>int *<parameter>mid</parameter></paramdef>
212 <paramdef>const char *<parameter>sub</parameter></paramdef>
213 <paramdef>int <parameter>qos</parameter></paramdef>
214 </funcprototype></funcsynopsis>
215
216 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_unsubscribe</function></funcdef>
217 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
218 <paramdef>int *<parameter>mid</parameter></paramdef>
219 <paramdef>const char *<parameter>sub</parameter></paramdef>
220 </funcprototype></funcsynopsis>
221 </refsect2>
222
223 <refsect2>
224 <title>Network loop</title>
225
226 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_loop</function></funcdef>
227 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
228 <paramdef>int <parameter>timeout</parameter></paramdef>
229 <paramdef>int <parameter>max_packets</parameter></paramdef>
230 </funcprototype></funcsynopsis>
231
232 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_loop_read</function></funcdef>
233 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
234 <paramdef>int <parameter>max_packets</parameter></paramdef>
235 </funcprototype></funcsynopsis>
236
237 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_loop_write</function></funcdef>
238 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
239 <paramdef>int <parameter>max_packets</parameter></paramdef>
240 </funcprototype></funcsynopsis>
241
242 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_loop_misc</function></funcdef>
243 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
244 </funcprototype></funcsynopsis>
245
246 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_loop_forever</function></funcdef>
247 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
248 <paramdef>int <parameter>timeout</parameter></paramdef>
249 <paramdef>int <parameter>max_packets</parameter></paramdef>
250 </funcprototype></funcsynopsis>
251
252 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_socket</function></funcdef>
253 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
254 </funcprototype></funcsynopsis>
255
256 <funcsynopsis><funcprototype><funcdef>bool <function>mosquitto_want_write</function></funcdef>
257 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
258 </funcprototype></funcsynopsis>
259 </refsect2>
260
261 <refsect2>
262 <title>Threaded network loop</title>
263
264 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_loop_start</function></funcdef>
265 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
266 </funcprototype></funcsynopsis>
267
268 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_loop_stop</function></funcdef>
269 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
270 <paramdef>bool <parameter>force</parameter></paramdef>
271 </funcprototype></funcsynopsis>
272 </refsect2>
273
274 <refsect2>
275 <title>Misc client functions</title>
276
277 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_max_inflight_messages_set</function></funcdef>
278 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
279 <paramdef>unsigned int <parameter>max_inflight_messages</parameter></paramdef>
280 </funcprototype></funcsynopsis>
281
282 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_message_retry_set</function></funcdef>
283 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
284 <paramdef>unsigned int <parameter>message_retry</parameter></paramdef>
285 </funcprototype></funcsynopsis>
286
287 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_reconnect_delay_set</function></funcdef>
288 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
289 <paramdef>unsigned int <parameter>reconnect_delay</parameter></paramdef>
290 <paramdef>unsigned int <parameter>reconnect_delay_max</parameter></paramdef>
291 <paramdef>bool <parameter>reconnect_exponential_backoff</parameter></paramdef>
292 </funcprototype></funcsynopsis>
293
294 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_user_data_set</function></funcdef>
295 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
296 <paramdef>void *<parameter>userdata</parameter></paramdef>
297 </funcprototype></funcsynopsis>
298 </refsect2>
299
300 <refsect2>
301 <title>Callbacks</title>
302
303 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_connect_callback_set</function></funcdef>
304 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
305 <paramdef>void <parameter>(*on_connect)(struct mosquitto *, void *, int)</parameter></paramdef>
306 </funcprototype></funcsynopsis>
307
308 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_disconnect_callback_set</function></funcdef>
309 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
310 <paramdef>void <parameter>(*on_disconnect)(struct mosquitto *, void *, int)</parameter></paramdef>
311 </funcprototype></funcsynopsis>
312
313 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_publish_callback_set</function></funcdef>
314 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
315 <paramdef>void <parameter>(*on_publish)(struct mosquitto *, void *, int)</parameter></paramdef>
316 </funcprototype></funcsynopsis>
317
318 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_message_callback_set</function></funcdef>
319 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
320 <paramdef>void <parameter>(*on_message)(struct mosquitto *, void *, const struct mosquitto_message *)</parameter></paramdef>
321 </funcprototype></funcsynopsis>
322
323 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_subscribe_callback_set</function></funcdef>
324 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
325 <paramdef>void <parameter>(*on_subscribe)(struct mosquitto *, void *, int, int, const int *)</parameter></paramdef>
326 </funcprototype></funcsynopsis>
327
328 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_unsubscribe_callback_set</function></funcdef>
329 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
330 <paramdef>void <parameter>(*on_unsubscribe)(struct mosquitto *, void *, int)</parameter></paramdef>
331 </funcprototype></funcsynopsis>
332
333 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_log_callback_set</function></funcdef>
334 <paramdef>struct mosquitto *<parameter>mosq</parameter></paramdef>
335 <paramdef>void <parameter>(*on_unsubscribe)(struct mosquitto *, void *, int, const char *)</parameter></paramdef>
336 </funcprototype></funcsynopsis>
337 </refsect2>
338
339 <refsect2>
340 <title>Utility functions</title>
341
342 <funcsynopsis><funcprototype><funcdef>const char *<function>mosquitto_connack_string</function></funcdef>
343 <paramdef>int <parameter>connack_code</parameter></paramdef>
344 </funcprototype></funcsynopsis>
345
346 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_message_copy</function></funcdef>
347 <paramdef>struct mosquitto_message *<parameter>dst</parameter></paramdef>
348 <paramdef>const struct mosquitto_message *<parameter>src</parameter></paramdef>
349 </funcprototype></funcsynopsis>
350
351 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_message_free</function></funcdef>
352 <paramdef>struct mosquitto_message **<parameter>message</parameter></paramdef>
353 </funcprototype></funcsynopsis>
354
355 <funcsynopsis><funcprototype><funcdef>const char *<function>mosquitto_strerror</function></funcdef>
356 <paramdef>int <parameter>mosq_errno</parameter></paramdef>
357 </funcprototype></funcsynopsis>
358
359 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_sub_topic_tokenise</function></funcdef>
360 <paramdef>const char *<parameter>subtopic</parameter></paramdef>
361 <paramdef>char ***<parameter>topics</parameter></paramdef>
362 <paramdef>int *<parameter>count</parameter></paramdef>
363 </funcprototype></funcsynopsis>
364
365 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_sub_topic_tokens_free</function></funcdef>
366 <paramdef>char ***<parameter>topics</parameter></paramdef>
367 <paramdef>int <parameter>count</parameter></paramdef>
368 </funcprototype></funcsynopsis>
369
370 <funcsynopsis><funcprototype><funcdef>int <function>mosquitto_topic_matches_sub</function></funcdef>
371 <paramdef>const char *<parameter>sub</parameter></paramdef>
372 <paramdef>const char *<parameter>topic</parameter></paramdef>
373 <paramdef>bool *<parameter>result</parameter></paramdef>
374 </funcprototype></funcsynopsis>
375 </refsect2>
376 </refsect1>
377
378 <refsect1>
379 <title>Examples</title>
380 <para><programlisting language="C">
381#include &lt;stdio.h&gt;
382#include &lt;mosquitto.h&gt;
383
384void my_message_callback(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message)
385{
386 if(message->payloadlen){
387 printf("%s %s\n", message->topic, message->payload);
388 }else{
389 printf("%s (null)\n", message->topic);
390 }
391 fflush(stdout);
392}
393
394void my_connect_callback(struct mosquitto *mosq, void *userdata, int result)
395{
396 int i;
397 if(!result){
398 /* Subscribe to broker information topics on successful connect. */
399 mosquitto_subscribe(mosq, NULL, "$SYS/#", 2);
400 }else{
401 fprintf(stderr, "Connect failed\n");
402 }
403}
404
405void my_subscribe_callback(struct mosquitto *mosq, void *userdata, int mid, int qos_count, const int *granted_qos)
406{
407 int i;
408
409 printf("Subscribed (mid: %d): %d", mid, granted_qos[0]);
410 for(i=1; i&lt;qos_count; i++){
411 printf(", %d", granted_qos[i]);
412 }
413 printf("\n");
414}
415
416void my_log_callback(struct mosquitto *mosq, void *userdata, int level, const char *str)
417{
418 /* Pring all log messages regardless of level. */
419 printf("%s\n", str);
420}
421
422int main(int argc, char *argv[])
423{
424 char id[30];
425 int i;
426 char *host = "localhost";
427 int port = 1883;
428 int keepalive = 60;
429 bool clean_session = true;
430 struct mosquitto *mosq = NULL;
431
432 mosquitto_lib_init();
433 mosq = mosquitto_new(id, clean_session, NULL);
434 if(!mosq){
435 fprintf(stderr, "Error: Out of memory.\n");
436 return 1;
437 }
438 mosquitto_log_callback_set(mosq, my_log_callback);
439
440 mosquitto_connect_callback_set(mosq, my_connect_callback);
441 mosquitto_message_callback_set(mosq, my_message_callback);
442 mosquitto_subscribe_callback_set(mosq, my_subscribe_callback);
443
444 if(mosquitto_connect(mosq, host, port, keepalive)){
445 fprintf(stderr, "Unable to connect.\n");
446 return 1;
447 }
448
449 while(!mosquitto_loop(mosq, -1)){
450 }
451 mosquitto_destroy(mosq);
452 mosquitto_lib_cleanup();
453 return 0;
454}
455 </programlisting></para>
456 </refsect1>
457 <refsect1>
458 <title>See Also</title>
459 <simplelist type="inline">
460 <member>
461 <citerefentry>
462 <refentrytitle><link xlink:href="mosquitto-8.html">mosquitto</link></refentrytitle>
463 <manvolnum>8</manvolnum>
464 </citerefentry>
465 <citerefentry>
466 <refentrytitle><link xlink:href="mqtt-7.html">mqtt</link></refentrytitle>
467 <manvolnum>7</manvolnum>
468 </citerefentry>
469 </member>
470 </simplelist>
471 </refsect1>
472
473 <refsect1>
474 <title>Acknowledgements</title>
475 <para>This product includes software developed by the OpenSSL Project
476 for use in the OpenSSL Toolkit. (http://www.openssl.org/)</para>
477 <para>This product includes cryptographic software written by Eric
478 Young (eay@cryptsoft.com)</para>
479 <para>This product includes software written by Tim Hudson
480 (tjh@cryptsoft.com)</para>
481 </refsect1>
482
483 <refsect1>
484 <title>Author</title>
485 <para>Roger Light <email>roger@atchoo.org</email></para>
486 </refsect1>
487</refentry>