Diff for /mqtt/src/mqtt_subs.c between versions 1.2.2.2 and 1.2.2.3

version 1.2.2.2, 2012/04/24 13:54:50 version 1.2.2.3, 2012/04/27 10:07:51
Line 17  Usage(void) Line 17  Usage(void)
 {  {
         printf( " -= MQTT Subscriber Client =- Subscriber from ELWIX\n"          printf( " -= MQTT Subscriber Client =- Subscriber from ELWIX\n"
                 "=== %s@%s === Compiled: %s ===\n\n"                  "=== %s@%s === Compiled: %s ===\n\n"
                " Syntax: mqtt_subs [options] <connect_to_broker[:port]> <ConnectID> <topic> [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-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-q <QoS>\t\tQoS level (0-at most 1, 1-at least 1, 2-exactly 1)\n"
Line 39  static void Line 39  static void
 cleanArgs(struct tagArgs * __restrict args)  cleanArgs(struct tagArgs * __restrict args)
 {  {
         mqtt_msgFree(&args->msg, 42);          mqtt_msgFree(&args->msg, 42);
           mqtt_subFree(&args->subscr);
         AIT_FREE_VAL(&args->Will.Msg);          AIT_FREE_VAL(&args->Will.Msg);
         AIT_FREE_VAL(&args->Will.Topic);          AIT_FREE_VAL(&args->Will.Topic);
         AIT_FREE_VAL(&args->User);          AIT_FREE_VAL(&args->User);
Line 46  cleanArgs(struct tagArgs * __restrict args) Line 47  cleanArgs(struct tagArgs * __restrict args)
         AIT_FREE_VAL(&args->Publish);          AIT_FREE_VAL(&args->Publish);
         AIT_FREE_VAL(&args->Value);          AIT_FREE_VAL(&args->Value);
         AIT_FREE_VAL(&args->ConnID);          AIT_FREE_VAL(&args->ConnID);
         io_freeVars(&args->Subscribes);  
 }  }
   
 static int  static int
 Subscribe(int sock, FILE *lf)  Subscribe(int sock, FILE *lf)
 {  {
           int siz;
           u_char *qoses;
           u_short mid;
   
           siz = mqtt_msgSUBSCRIBE(args->msg, args->subscr, AIT_GET_U16(&args->ConnID), args->Dup, args->QoS);
           if (siz == -1) {
                   printf("Error:: in msgSUBSCRIBE #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
                   return -1;
           }
           siz = SendTo(sock, siz);
           if (siz == -1)
                   return -1;
   
           siz = RecvFrom(sock);
           if (siz == -1)
                   return -1;
           siz = mqtt_readSUBACK(args->msg, &mid, &qoses);
           if (siz == -1) {
                   printf("Error:: in readSUBACK #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
                   return -1;
           }
           if (mid != AIT_GET_U16(&args->ConnID)) {
                   printf("Error:: received different connection ID %d != %d\n", 
                                   mid, AIT_GET_U16(&args->ConnID));
                   return -1;
           }
   
         return 0;          return 0;
 }  }
   
Line 59  Subscribe(int sock, FILE *lf) Line 86  Subscribe(int sock, FILE *lf)
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
        char ch, batch = 1;        char ch, idx = 0, batch = 1;
        ait_val_t *v, val;        ait_val_t val;
         u_short port = atoi(MQTT_PORT);          u_short port = atoi(MQTT_PORT);
           mqtt_subscr_t *sub;
         int sock, ret = 0;          int sock, ret = 0;
        char szLogName[MAXPATHLEN] = { 0 };        char *str, szStr[STRSIZ], szLogName[MAXPATHLEN] = { 0 };
         FILE *lf;          FILE *lf;
   
         if (!(args = malloc(sizeof(struct tagArgs)))) {          if (!(args = malloc(sizeof(struct tagArgs)))) {
Line 71  main(int argc, char **argv) Line 99  main(int argc, char **argv)
                 return 1;                  return 1;
         } else          } else
                 memset(args, 0, sizeof(struct tagArgs));                  memset(args, 0, sizeof(struct tagArgs));
        if (!(args->Subscribes = io_allocVars(1))) {        if (!(args->subscr = mqtt_subAlloc(idx))) {
                printf("Error:: in subscribes array #%d - %s\n", io_GetErrno(), io_GetError());                printf("Error:: in subscribes array #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
                 free(args);                  free(args);
                 return 1;                  return 1;
         } else          } else
Line 85  main(int argc, char **argv) Line 113  main(int argc, char **argv)
                 return 1;                  return 1;
         }          }
   
         AIT_SET_STR(&args->ConnID, "");  
         AIT_SET_STR(&args->User, "");          AIT_SET_STR(&args->User, "");
         AIT_SET_STR(&args->Pass, "");          AIT_SET_STR(&args->Pass, "");
   
Line 115  main(int argc, char **argv) Line 142  main(int argc, char **argv)
                                 port = (u_short) strtol(optarg, NULL, 0);                                  port = (u_short) strtol(optarg, NULL, 0);
                                 break;                                  break;
                         case 's':                          case 's':
                                v = io_allocVar();                                sub = mqtt_subRealloc(&args->subscr, idx + 1);
                                if (!v) {                                if (!sub) {
                                        printf("Error:: not enough memory #%d - %s\n", errno, strerror(errno));                                        printf("Error:: #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
                                         args->free(args);                                          args->free(args);
                                         free(args);                                          free(args);
                                         return 1;                                          return 1;
                                 } else                                  } else
                                        AIT_SET_STR(v, optarg);                                        sub += idx++;
                                io_arrayElem(args->Subscribes, io_arraySize(args->Subscribes), v);
                                 strlcpy(szStr, optarg, sizeof szStr);
                                 if ((str = strchr(szStr, '|'))) {
                                         *str++ = 0;
                                         *str -= 0x30;
                                         if (*str < 0 || *str > MQTT_QOS_RESERVED)
                                                 sub->sub_ret = (u_char) args->QoS;
                                         else
                                                 sub->sub_ret = (u_char) *str;
                                 } else
                                         sub->sub_ret = (u_char) args->QoS;
                                 sub->sub_topic.msg_base = strdup(szStr);
                                 sub->sub_topic.msg_len = strlen(szStr);
                                 break;                                  break;
                         case 'q':                          case 'q':
                                 args->QoS = (char) strtol(optarg, NULL, 0);                                  args->QoS = (char) strtol(optarg, NULL, 0);
Line 158  main(int argc, char **argv) Line 197  main(int argc, char **argv)
                 }                  }
         argc -= optind;          argc -= optind;
         argv += optind;          argv += optind;
        if (argc < 3) {        if (argc < 2) {
                 printf("Error:: host for connect not found, connection id or topic not supplied!\n\n");                  printf("Error:: host for connect not found, connection id or topic not supplied!\n\n");
                 args->free(args);                  args->free(args);
                 free(args);                  free(args);
                 Usage();                  Usage();
                 return 1;                  return 1;
        } else {        } else
                AIT_FREE_VAL(&args->ConnID);                AIT_SET_U16(&args->ConnID, strtol(argv[1], NULL, 0));
                AIT_SET_STR(&args->ConnID, argv[1]);        if (argc > 2) {
                AIT_FREE_VAL(&args->Publish); 
                AIT_SET_STR(&args->Publish, argv[2]); 
        } 
        if (argc > 3) { 
                 AIT_FREE_VAL(&args->Value);                  AIT_FREE_VAL(&args->Value);
                AIT_SET_STR(&args->Value, argv[3]);                AIT_SET_STR(&args->Value, argv[2]);
         }          }
         if (!io_gethostbyname(*argv, port, &args->addr)) {          if (!io_gethostbyname(*argv, port, &args->addr)) {
                 printf("Error:: host not valid #%d - %s\n", io_GetErrno(), io_GetError());                  printf("Error:: host not valid #%d - %s\n", io_GetErrno(), io_GetError());

Removed from v.1.2.2.2  
changed lines
  Added in v.1.2.2.3


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