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 <stdio.h>
|
382 | #include <mosquitto.h>
|
383 |
|
384 | void 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 |
|
394 | void 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 |
|
405 | void 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<qos_count; i++){
|
411 | printf(", %d", granted_qos[i]);
|
412 | }
|
413 | printf("\n");
|
414 | }
|
415 |
|
416 | void 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 |
|
422 | int 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>
|