Diff for /mqtt/src/mqtt_pub.c between versions 1.1.2.1 and 1.1.2.9

version 1.1.2.1, 2011/12/20 15:03:42 version 1.1.2.9, 2012/01/24 16:28:28
Line 6 Line 6
   
 io_enableDEBUG;  io_enableDEBUG;
   
 sl_config cfg;  
 extern char compiled[], compiledby[], compilehost[];  extern char compiled[], compiledby[], compilehost[];
 static char szCfgName[MAXPATHLEN];  
   
 struct tagArgs *args;  struct tagArgs *args;
   
Line 21  Usage(void) Line 19  Usage(void)
                 " Syntax: mqtt_pub [options] <connect_to_broker[:port]> <ConnectID> <topic> <value_for_publish>\n\n"                  " Syntax: mqtt_pub [options] <connect_to_broker[:port]> <ConnectID> <topic> <value_for_publish>\n\n"
                 "\t-f\t\t\t'value_for_publish' is file name instead text\n"                  "\t-f\t\t\t'value_for_publish' is file name instead text\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"
                   "\t-m <message_id>\t\tMessage ID for publish message\n"
                 "\t-d\t\t\tSend duplicate message\n"                  "\t-d\t\t\tSend duplicate message\n"
                 "\t-r\t\t\tRetain message from broker\n\n"                  "\t-r\t\t\tRetain message from broker\n\n"
                 "\t-C\t\t\tNot clear before connect!!!\n"                  "\t-C\t\t\tNot clear before connect!!!\n"
Line 30  Usage(void) Line 29  Usage(void)
                 "\t-P <password>\t\tPassword\n"                  "\t-P <password>\t\tPassword\n"
                 "\t-W <topic>\t\tWill Topic\n"                  "\t-W <topic>\t\tWill Topic\n"
                 "\t-M <message>\t\tWill Message\n"                  "\t-M <message>\t\tWill Message\n"
                 "\t-c <config>\t\tService config\n"  
                 "\t-v\t\t\tVerbose (more -vvv, more verbose)\n"                  "\t-v\t\t\tVerbose (more -vvv, more verbose)\n"
                 "\t-h\t\t\tHelp! This screen\n\n",                   "\t-h\t\t\tHelp! This screen\n\n", 
                 compiledby, compilehost, compiled);                  compiledby, compilehost, compiled);
Line 52  cleanArgs(struct tagArgs * __restrict args) Line 50  cleanArgs(struct tagArgs * __restrict args)
 static int  static int
 Publish(int sock)  Publish(int sock)
 {  {
        return 0;        int siz = 0;
 
         siz = mqtt_msgPUBLISH(args->msg, AIT_GET_STR(&args->Publish), args->MsgID, args->Dup, 
                         args->QoS, args->Retain, AIT_GET_PTR2(&args->Value), AIT_LEN(&args->Value));
         if (siz == -1) {
                 printf("Error:: msgPUBLISH #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
                 return -1;
         }
         if (SendTo(sock, siz) == -1)
                 return -1;
         /* QoS == MQTT_QOS_ONCE, no wait for reply */
         if (args->QoS == MQTT_QOS_ONCE)
                 return 0;
 
         if ((siz = RecvFrom(sock)) == -1 || !siz)
                 return -1;
         /* QoS == MQTT_QOS_ACK, wait for PUBACK */
         if (args->QoS == MQTT_QOS_ACK) {
                 siz = mqtt_readPUBACK(args->msg);
                 if (siz == args->MsgID)
                         return siz;
                 if (!args->Dup) {
                         args->Dup++;
                         return Publish(sock);
                 }
                 goto end;
         }
 
 
         /* QoS == MQTT_QOS_EXACTLY */
         siz = mqtt_readPUBREC(args->msg);
         if (siz != args->MsgID) {
                 if (!args->Dup) {
                         args->Dup++;
                         return Publish(sock);
                 }
                 goto end;
         }
 
         siz = mqtt_msgPUBREL(args->msg, args->MsgID);
         if (siz == -1) {
                 printf("Error:: msgPUBREL #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
                 return -1;
         }
         if (SendTo(sock, siz) == -1)
                 return -1;
 
         if ((siz = RecvFrom(sock)) == -1 || !siz)
                 return -1;
 
         siz = mqtt_readPUBCOMP(args->msg);
         if (siz == args->MsgID)
                 return siz;
         if (!args->Dup) {
                 args->Dup++;
                 return Publish(sock);
         }
 
 end:
         printf("Error:: Message not delivered\n");
         return -1;
 }  }
   
   
Line 83  main(int argc, char **argv) Line 141  main(int argc, char **argv)
         AIT_SET_STR(&args->Pass, "");          AIT_SET_STR(&args->Pass, "");
   
         args->ka = MQTT_KEEPALIVE;          args->ka = MQTT_KEEPALIVE;
        strlcpy(szCfgName, DEFAULT_CONFIG, sizeof szCfgName);        while ((ch = getopt(argc, argv, "T:U:P:p:q:drCW:M:m:fvh")) != -1)
        while ((ch = getopt(argc, argv, "T:U:P:p:q:drCc:W:M:fvh")) != -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 105  main(int argc, char **argv) Line 162  main(int argc, char **argv)
                                 AIT_FREE_VAL(&args->Pass);                                  AIT_FREE_VAL(&args->Pass);
                                 AIT_SET_STR(&args->Pass, optarg);                                  AIT_SET_STR(&args->Pass, optarg);
                                 break;                                  break;
                           case 'm':
                                   args->MsgID = (u_short) strtol(optarg, NULL, 0);
                                   break;
                         case 'p':                          case 'p':
                                 port = (u_short) strtol(optarg, NULL, 0);                                  port = (u_short) strtol(optarg, NULL, 0);
                                 break;                                  break;
Line 129  main(int argc, char **argv) Line 189  main(int argc, char **argv)
                         case 'f':                          case 'f':
                                 args->isFile++;                                  args->isFile++;
                                 break;                                  break;
                         case 'c':  
                                 strlcpy(szCfgName, optarg, sizeof szCfgName);  
                                 break;  
                         case 'v':                          case 'v':
                                 io_incDebug;                                  io_incDebug;
                                 break;                                  break;
Line 165  main(int argc, char **argv) Line 222  main(int argc, char **argv)
                 Usage();                  Usage();
                 return 1;                  return 1;
         }          }
           if (args->QoS && !args->MsgID)
                   args->MsgID = MQTT_DEFAULT_MSGID;
         ioVERBOSE(1) printf("Connecting to %s:%d ...\n", io_n2addr(&args->addr, &val), io_n2port(&args->addr));          ioVERBOSE(1) printf("Connecting to %s:%d ...\n", io_n2addr(&args->addr, &val), io_n2port(&args->addr));
   
         if ((sock = InitClient()) == -1) {          if ((sock = InitClient()) == -1) {
Line 173  main(int argc, char **argv) Line 232  main(int argc, char **argv)
                 return 2;                  return 2;
         }          }
   
           if (args->isFile && !OpenFile()) {
                   args->free(args);
                   free(args);
                   return 3;
           }
   
         printf("Connected ... ");          printf("Connected ... ");
        switch ((ret = try2Connect(sock))) {        switch ((ret = ConnectClient(sock))) {
                 case -1:                  case -1:
                         printf(">> FAILED!\n");                          printf(">> FAILED!\n");
                         break;                          break;
Line 199  main(int argc, char **argv) Line 264  main(int argc, char **argv)
         }          }
   
         if (ret == MQTT_RETCODE_ACCEPTED) {          if (ret == MQTT_RETCODE_ACCEPTED) {
                ret = Publish(sock);                ret = !(Publish(sock) == args->MsgID);
                shutdown(sock, SHUT_RDWR);                CloseClient(sock);
        } else        } else {
                ret = 3;                close(sock);
                 ret = 4;
         }
   
        close(sock);        CloseFile();
         args->free(args);          args->free(args);
         free(args);          free(args);
         return ret;          return ret;

Removed from v.1.1.2.1  
changed lines
  Added in v.1.1.2.9


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