--- mqtt/src/mqtt_subs.c 2012/05/08 11:45:57 1.2.2.6 +++ mqtt/src/mqtt_subs.c 2012/06/01 13:13:40 1.2.2.11 @@ -19,7 +19,7 @@ Usage(void) "=== %s@%s === Compiled: %s ===\n\n" " Syntax: mqtt_subs [options] [exec_script ]\n\n" "\t-l \t\tSave received values to file\n" - "\t-u\t\tUnsubscribe given topic(s)\n" + "\t-u\t\t\tUnsubscribe given topic(s)\n" "\t-s \tSubscribe for this topic, if wish add different |QoS to topic\n" "\t-d\t\t\tSend duplicate message\n\n" "\t-C\t\t\tNot clear before connect!\n" @@ -56,7 +56,11 @@ Subscribe(int sock, FILE *lf) u_short mid; mqtt_subscr_t *sub; +#ifdef __NetBSD__ + srandom(getpid() ^ time(NULL)); +#else srandomdev(); +#endif mid = random() % USHRT_MAX; printf(" > Execute SUBSCRIBE request #%d ... ", mid); @@ -80,13 +84,19 @@ Unsubscribe(int sock) { u_short mid; +#ifdef __NetBSD__ + srandom(getpid() ^ time(NULL)); +#else srandomdev(); +#endif mid = random() % USHRT_MAX; + printf(" > Execute UNSUBSCRIBE request #%d ... ", mid); if (mqtt_cli_Unsubscribe(args->cli, args->subscr, mid, args->Dup, MQTT_QOS_ACK)) { printf("Error:: Unsubscribe #%d - %s\n", mqtt_GetErrno(), mqtt_GetError()); return -1; - } + } else + printf("OK\n"); return 0; } @@ -103,14 +113,14 @@ main(int argc, char **argv) char *str, szStr[STRSIZ], szLogName[MAXPATHLEN] = { 0 }; FILE *lf; - if (!(args = malloc(sizeof(struct tagArgs)))) { + if (!(args = io_malloc(sizeof(struct tagArgs)))) { printf("Error:: in arguments #%d - %s\n", errno, strerror(errno)); return 1; } else memset(args, 0, sizeof(struct tagArgs)); if (!(args->subscr = mqtt_subAlloc(idx))) { printf("Error:: in subscribes array #%d - %s\n", mqtt_GetErrno(), mqtt_GetError()); - free(args); + io_free(args); return 1; } else args->free = cleanArgs; @@ -118,7 +128,7 @@ main(int argc, char **argv) if (!(args->msg = mqtt_msgAlloc(USHRT_MAX))) { printf("Error:: in mqtt buffer #%d - %s\n", mqtt_GetErrno(), mqtt_GetError()); args->free(args); - free(args); + io_free(args); return 1; } @@ -156,7 +166,7 @@ main(int argc, char **argv) if (!sub) { printf("Error:: #%d - %s\n", mqtt_GetErrno(), mqtt_GetError()); args->free(args); - free(args); + io_free(args); return 1; } else sub += idx++; @@ -179,7 +189,7 @@ main(int argc, char **argv) if (args->QoS > MQTT_QOS_EXACTLY) { printf("Error:: invalid QoS level %d\n", args->QoS); args->free(args); - free(args); + io_free(args); return 1; } break; @@ -204,7 +214,7 @@ main(int argc, char **argv) case 'h': default: args->free(args); - free(args); + io_free(args); Usage(); return 1; } @@ -213,7 +223,7 @@ main(int argc, char **argv) if (argc < 2) { printf("Error:: host for connect not found, connection id or topic not supplied!\n\n"); args->free(args); - free(args); + io_free(args); Usage(); return 1; } else { @@ -227,7 +237,7 @@ main(int argc, char **argv) if (!io_gethostbyname(*argv, port, &args->addr)) { printf("Error:: host not valid #%d - %s\n", io_GetErrno(), io_GetError()); args->free(args); - free(args); + io_free(args); Usage(); return 1; } @@ -236,7 +246,7 @@ main(int argc, char **argv) if (!(args->cli = mqtt_cli_Open(&args->addr.sa, args->ka))) { args->free(args); - free(args); + io_free(args); return 2; } @@ -270,7 +280,9 @@ main(int argc, char **argv) else lf = stdout; if (lf) { - ret = un ? Unsubscribe(args->cli->sock) : Subscribe(args->cli->sock, lf); + ret = Subscribe(args->cli->sock, lf); + if (un) + Unsubscribe(args->cli->sock); fclose(lf); } else printf("Error:: in subscribe file #%d - %s\n", errno, strerror(errno)); @@ -280,6 +292,6 @@ main(int argc, char **argv) mqtt_cli_Close(&args->cli); args->free(args); - free(args); + io_free(args); return ret; }