thermometers/main.c

Wed, 23 Apr 2014 17:19:00 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 23 Apr 2014 17:19:00 +0200
changeset 8
e584bc0177df
parent 7
d74b26b2f217
child 10
5600a1789644
permissions
-rw-r--r--

Server communication seems ok, can handle server shutdowns too.

1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /*****************************************************************************
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * Copyright (C) 2014
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 *
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 * Michiel Broek <mbroek at mbse dot eu>
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 *
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 * This file is part of the mbsePi-apps
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 *
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 * This is free software; you can redistribute it and/or modify it
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 * under the terms of the GNU General Public License as published by the
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 * Free Software Foundation; either version 2, or (at your option) any
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 * later version.
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 *
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 * mbsePi-apps is distributed in the hope that it will be useful, but
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 * General Public License for more details.
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 *
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 * along with EC-65K; see the file COPYING. If not, write to the Free
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 *****************************************************************************/
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
23 #include "../lib/mbselib.h"
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 #include "main.h"
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
27 #define STATUS_CONNECTING 0
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
28 #define STATUS_CONNACK_RECVD 1
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
29 #define STATUS_WAITING 2
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
30
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
31 /* Global variables for use in callbacks. See sub_client.c for an example of
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
32 * using a struct to hold variables for use in callbacks. */
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
33 static char *topic = NULL;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
34 //static char *message = NULL;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
35 //static long msglen = 0;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
36 static int qos = 0;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
37 //static int retain = 0;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
38 static int status = STATUS_CONNECTING;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
39 static int mid_sent = 0;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
40 static int last_mid = -1;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
41 static int last_mid_sent = -1;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
42 static bool connected = true;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
43 static bool disconnect_sent = false;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
44 static bool shutdown = false;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
45
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
46 extern bool debug;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
47 extern sys_config Config;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
48
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
49 int server(void);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
50 void help(void);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
51 void die(int);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
52
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
53
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54 void help(void)
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55 {
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56 fprintf(stdout, "Usage: thermomeneters [-d] [-h]\n");
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 fprintf(stdout, " -d --debug Debug on\n");
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 fprintf(stdout, " -h --help Display this help\n");
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59 }
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 void die(int onsig)
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 {
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65 switch (onsig) {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
66 case SIGHUP: syslog(LOG_NOTICE, "Got SIGHUP, shutting down");
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 break;
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
68 case SIGINT: syslog(LOG_NOTICE, "Keyboard interrupt, shutting down");
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 break;
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
70 case SIGTERM: syslog(LOG_NOTICE, "Got SIGTERM, shutting down");
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71 break;
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
72 default: syslog(LOG_NOTICE, "die() on signal %d", onsig);
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73 }
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
75 shutdown = true;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
76 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
77
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
78
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
79
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
80 void my_connect_callback(struct mosquitto *mosq, void *obj, int result)
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
81 {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
82 if (!result) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
83 status = STATUS_CONNACK_RECVD;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
84 } else {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
85 syslog(LOG_NOTICE, "my_connect_callback: %s\n", mosquitto_connack_string(result));
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
86 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
87 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
88
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
89
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
90
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
91 void my_disconnect_callback(struct mosquitto *mosq, void *obj, int rc)
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
92 {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
93 if (shutdown) {
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
94 syslog(LOG_NOTICE, "Acknowledged DISCONNECT from %s", Config.mosq_host);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
95 connected = false;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
96 } else {
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
97 /*
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
98 * The remove server was brought down. We must keep running
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
99 */
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
100 syslog(LOG_NOTICE, "Received DISCONNECT from %s but we want to run", Config.mosq_host);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
101 /*
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
102 * We need a temp state
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
103 */
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
104 }
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
105 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
106
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
107
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
108
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
109 void my_publish_callback(struct mosquitto *mosq, void *obj, int mid)
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
110 {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
111 fprintf(stdout, (char *)"my_publish_callback mid=%d\n", mid);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
112
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
113 last_mid_sent = mid;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
114 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
115
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
116
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
117
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
118 void my_log_callback(struct mosquitto *mosq, void *obj, int level, const char *str)
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
119 {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
120 syslog(LOG_NOTICE, "MQTT: %s", str);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
121 printf("MQTT: %s\n", str);
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 }
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126 int main(int argc, char *argv[])
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
127 {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
128 int rc, c, i;
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
130 while (1) {
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131 int option_index = 0;
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 static struct option long_options[] = {
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133 {"debug", 0, 0, 'c'},
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134 {"help", 0, 0, 'h'},
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135 {0, 0, 0, 0}
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 };
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
138 c = getopt_long(argc, argv, "dh", long_options, &option_index);
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139 if (c == -1)
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140 break;
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
142 switch (c) {
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
143 case 'd': debug = true;
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144 break;
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
145 case 'h': help();
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146 return 1;
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
147 }
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148 }
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
150 openlog("thermometers", LOG_PID|LOG_CONS|LOG_NOWAIT, LOG_USER);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
151 syslog(LOG_NOTICE, "mbsePi-apps thermometers v%s starting", VERSION);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
152
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
153 if (rdconfig()) {
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
154 fprintf(stderr, "Error reading configuration\n");
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
155 syslog(LOG_NOTICE, "halted");
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
156 return 1;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
157 }
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
158
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159 /*
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160 * Catch all the signals we can, and ignore the rest. Note that SIGKILL can't be ignored
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161 * but that's live. This daemon should only be stopped by SIGTERM.
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162 * Don't catch SIGCHLD.
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163 */
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
164 for (i = 0; i < NSIG; i++) {
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
165 if ((i != SIGCHLD) && (i != SIGKILL) && (i != SIGSTOP))
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
166 signal(i, (void (*))die);
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
167 }
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
168
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
169 rc = server();
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
170 syslog(LOG_NOTICE, "Finished, rc=%d", rc);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
171 return rc;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
172 }
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
173
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
174
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
175
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
176 int server(void)
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
177 {
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
178 char *id = NULL, *state = NULL;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
179 struct mosquitto *mosq = NULL;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
180 char hostname[256], buf[1024];
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
181 int rc, keepalive = 60;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
182 unsigned int max_inflight = 20;
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
183 char err[1024];
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
184
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
185 /*
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
186 * Initialize mosquitto communication
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
187 */
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
188 mosquitto_lib_init();
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
189
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
190 /*
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
191 * Build MQTT id
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
192 */
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
193 hostname[0] = '\0';
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
194 gethostname(hostname, 256);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
195 hostname[255] = '\0';
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
196
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
197 id = xstrcpy((char *)"thermometers/");
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
198 id = xstrcat(id, hostname);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
199 if(strlen(id) > MOSQ_MQTT_ID_MAX_LENGTH) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
200 /*
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
201 * Enforce maximum client id length of 23 characters
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
202 */
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
203 id[MOSQ_MQTT_ID_MAX_LENGTH] = '\0';
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
204 }
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
206 mosq = mosquitto_new(id, true, NULL);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
207 if(!mosq) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
208 switch(errno) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
209 case ENOMEM:
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
210 syslog(LOG_NOTICE, "mosquitto_new: Out of memory");
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
211 break;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
212 case EINVAL:
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
213 syslog(LOG_NOTICE, "mosquitto_new: Invalid id");
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
214 break;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
215 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
216 mosquitto_lib_cleanup();
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
217 return 1;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
218 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
219
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
220 if (debug) {
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
221 mosquitto_log_callback_set(mosq, my_log_callback);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
222 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
223
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
224 /*
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
225 * Set our will
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
226 */
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
227 state = xstrcpy((char *)"clients/");
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
228 state = xstrcat(state, hostname);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
229 state = xstrcat(state, (char *)"/thermometers/state");
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
230 sprintf(buf, "0");
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
231
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
232 rc = mosquitto_will_set(mosq, state, strlen(buf), buf, qos, true);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
233 if (rc) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
234 if (rc == MOSQ_ERR_INVAL) {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
235 syslog(LOG_NOTICE, "mosquitto_will_set: input parameters invalid");
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
236 } else if (rc == MOSQ_ERR_NOMEM) {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
237 syslog(LOG_NOTICE, "mosquitto_will_set: Out of Memory");
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
238 } else if (rc == MOSQ_ERR_PAYLOAD_SIZE) {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
239 syslog(LOG_NOTICE, "mosquitto_will_set: invalid payload size");
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
240 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
241 mosquitto_lib_cleanup();
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
242 return rc;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
243 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
244
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
245 mosquitto_max_inflight_messages_set(mosq, max_inflight);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
246 mosquitto_connect_callback_set(mosq, my_connect_callback);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
247 mosquitto_disconnect_callback_set(mosq, my_disconnect_callback);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
248 mosquitto_publish_callback_set(mosq, my_publish_callback);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
249
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
250 rc = mosquitto_connect(mosq, Config.mosq_host, Config.mosq_port, keepalive);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
251 if (rc) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
252 if (rc == MOSQ_ERR_ERRNO) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
253 strerror_r(errno, err, 1024);
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
254 syslog(LOG_NOTICE, "mosquitto_connect: error: %s", err);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
255 } else {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
256 syslog(LOG_NOTICE, "mosquitto_connect: unable to connect (%d)", rc);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
257 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
258 mosquitto_lib_cleanup();
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
259 return rc;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
260 }
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
261 syslog(LOG_NOTICE, "Connected with %s:%d", Config.mosq_host, Config.mosq_port);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
262
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
263 /*
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
264 * Initialise is complete, report our presence state
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
265 */
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
266 mosquitto_loop_start(mosq);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
267
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
268 sprintf(buf, "1");
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
269 rc = mosquitto_publish(mosq, &mid_sent, state, strlen(buf), buf, qos, 1);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
270
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
271 fprintf(stdout, (char *)"Enter loop, connected %d\n", connected);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
272 do {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
273 if (status == STATUS_CONNACK_RECVD) {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
274 /*
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
275 * Sleep just log enough to keep the system load low.
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
276 */
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
277 usleep(1);
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
278 /*
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
279 * Here send our sensors values
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
280 */
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
281
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
282 if (shutdown) {
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
283 /*
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
284 * Final publish 0 to clients/<hostname>/thermometers/state
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
285 */
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
286 sprintf(buf, "0");
8
e584bc0177df Server communication seems ok, can handle server shutdowns too.
Michiel Broek <mbroek@mbse.eu>
parents: 7
diff changeset
287 mosquitto_publish(mosq, &mid_sent, state, strlen(buf), buf, qos, true);
6
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
288 free(topic);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
289 last_mid = mid_sent;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
290 status = STATUS_WAITING;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
291 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
292 } else if (status == STATUS_WAITING) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
293 fprintf(stdout, (char *)"Waiting\n");
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
294 if (last_mid_sent == last_mid && disconnect_sent == false) {
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
295 mosquitto_disconnect(mosq);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
296 disconnect_sent = true;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
297 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
298 usleep(100000);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
299 }
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
300 rc = MOSQ_ERR_SUCCESS;
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
301
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
302 } while(rc == MOSQ_ERR_SUCCESS && connected);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
303 fprintf(stdout, (char *)"Out of loop\n");
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
304
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
305 mosquitto_loop_stop(mosq, false);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
306
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
307 mosquitto_destroy(mosq);
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
308 mosquitto_lib_cleanup();
9db76e20e21e Can connect and disconnect
Michiel Broek <mbroek@mbse.eu>
parents: 3
diff changeset
309
1
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
310 return 0;
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
311 }
91065eba8e1b Added two sources
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
312

mercurial