Diff for /mqtt/src/mqtt_subs.c between versions 1.2.2.5 and 1.2.2.8

version 1.2.2.5, 2012/05/01 22:30:31 version 1.2.2.8, 2012/05/22 14:15:04
Line 19  Usage(void) Line 19  Usage(void)
                 "=== %s@%s === Compiled: %s ===\n\n"                  "=== %s@%s === Compiled: %s ===\n\n"
                 " Syntax: mqtt_subs [options] <connect_to_broker[:port]> <ConnectID> [exec_script <value>]\n\n"                  " Syntax: mqtt_subs [options] <connect_to_broker[:port]> <ConnectID> [exec_script <value>]\n\n"
                 "\t-l <value2file>\t\tSave received values to file\n"                  "\t-l <value2file>\t\tSave received values to file\n"
                   "\t-u\t\t\tUnsubscribe given topic(s)\n"
                 "\t-s <topic[|QoS]>\tSubscribe for this topic, if wish add different |QoS to topic\n"                  "\t-s <topic[|QoS]>\tSubscribe for this topic, if wish add different |QoS to topic\n"
                 "\t-q <QoS>\t\tQoS level (0-at most 1, 1-at least 1, 2-exactly 1)\n"  
                 "\t-d\t\t\tSend duplicate message\n\n"                  "\t-d\t\t\tSend duplicate message\n\n"
                 "\t-C\t\t\tNot clear before connect!\n"                  "\t-C\t\t\tNot clear before connect!\n"
                 "\t-p <port>\t\tDifferent port for connect (default: 1883)\n"                  "\t-p <port>\t\tDifferent port for connect (default: 1883)\n"
Line 52  cleanArgs(struct tagArgs * __restrict args) Line 52  cleanArgs(struct tagArgs * __restrict args)
 static int  static int
 Subscribe(int sock, FILE *lf)  Subscribe(int sock, FILE *lf)
 {  {
        int siz;        u_char *qoses, *qos;
        u_char *qoses;        u_short mid;
        u_short mid[2];        mqtt_subscr_t *sub;
   
         srandomdev();          srandomdev();
        mid[0] = random() % USHRT_MAX;        mid = random() % USHRT_MAX;
   
        siz = mqtt_msgSUBSCRIBE(args->msg, args->subscr, mid[0], args->Dup, args->QoS);        printf(" > Execute SUBSCRIBE request #%d ... ", mid);
        if (siz == -1) {        qoses = mqtt_cli_Subscribe(args->cli, args->subscr, mid, args->Dup, MQTT_QOS_ACK);
                printf("Error:: in msgSUBSCRIBE #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());        if (!qoses) {
                 printf("Error:: Subscribe #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
                 return -1;                  return -1;
        }        } else
        siz = SendTo(sock, siz);                printf("OK\n");
        if (siz == -1) 
                return -1; 
   
        siz = RecvFrom(sock);        for (sub = args->subscr, qos = qoses; sub->sub_topic.msg_base; sub++, qos++)
        if (siz == -1)                printf("  + Topic %s with QoS %d subscribed %s\n", (char*)
                return -1;                                sub->sub_topic.msg_base, sub->sub_ret, *qos ? "done" : "failed");
        siz = mqtt_readSUBACK(args->msg, &mid[1], &qoses); 
        if (siz == -1) { 
                printf("Error:: in readSUBACK #%d - %s\n", mqtt_GetErrno(), mqtt_GetError()); 
                return -1; 
        } 
        if (mid[1] != mid[0]) { 
                printf("Error:: received different connection ID %d != %d\n", mid[1], mid[0]); 
                return -1; 
        } 
   
         free(qoses);          free(qoses);
         return 0;          return 0;
 }  }
   
   static int
   Unsubscribe(int sock)
   {
           u_short mid;
   
           srandomdev();
           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;
   }
   
   
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
        char ch, idx = 0, batch = 1;        char ch, un = 0, idx = 0, batch = 1;
         ait_val_t val;          ait_val_t val;
         u_short port = atoi(MQTT_PORT);          u_short port = atoi(MQTT_PORT);
         mqtt_subscr_t *sub;          mqtt_subscr_t *sub;
Line 121  main(int argc, char **argv) Line 129  main(int argc, char **argv)
         AIT_SET_STR(&args->Pass, "");          AIT_SET_STR(&args->Pass, "");
   
         args->ka = MQTT_KEEPALIVE;          args->ka = MQTT_KEEPALIVE;
        while ((ch = getopt(argc, argv, "T:U:P:p:s:q:dl:W:M:CDvh")) != -1)        while ((ch = getopt(argc, argv, "T:U:P:p:s:q:dl:W:M:CDvuh")) != -1)
                 switch (ch) {                  switch (ch) {
                         case 'T':                          case 'T':
                                 args->ka = (u_short) strtol(optarg, NULL, 0);                                  args->ka = (u_short) strtol(optarg, NULL, 0);
Line 192  main(int argc, char **argv) Line 200  main(int argc, char **argv)
                         case 'v':                          case 'v':
                                 io_incDebug;                                  io_incDebug;
                                 break;                                  break;
                           case 'u':
                                   un = 1;
                                   break;
                         case 'h':                          case 'h':
                         default:                          default:
                                 args->free(args);                                  args->free(args);
Line 225  main(int argc, char **argv) Line 236  main(int argc, char **argv)
         printf("Connecting to %s:%d ... ", io_n2addr(&args->addr, &val), io_n2port(&args->addr));          printf("Connecting to %s:%d ... ", io_n2addr(&args->addr, &val), io_n2port(&args->addr));
         AIT_FREE_VAL(&val);          AIT_FREE_VAL(&val);
   
        if (!(args->cli = mqtt_cli_Open(&args->addr.sa))) {        if (!(args->cli = mqtt_cli_Open(&args->addr.sa, args->ka))) {
                 args->free(args);                  args->free(args);
                 free(args);                  free(args);
                 return 2;                  return 2;
Line 262  main(int argc, char **argv) Line 273  main(int argc, char **argv)
                         lf = stdout;                          lf = stdout;
                 if (lf) {                  if (lf) {
                         ret = Subscribe(args->cli->sock, lf);                          ret = Subscribe(args->cli->sock, lf);
                           if (un)
                                   Unsubscribe(args->cli->sock);
                         fclose(lf);                          fclose(lf);
                 } else                  } else
                         printf("Error:: in subscribe file #%d - %s\n", errno, strerror(errno));                          printf("Error:: in subscribe file #%d - %s\n", errno, strerror(errno));

Removed from v.1.2.2.5  
changed lines
  Added in v.1.2.2.8


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>