Diff for /libaitmqtt/src/cliside.c between versions 1.1.2.6 and 1.3.12.2

version 1.1.2.6, 2012/05/09 13:48:31 version 1.3.12.2, 2022/09/15 15:04:44
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012Copyright 2004 - 2022
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 61  mqtt_cli_Open(struct sockaddr *addr, u_short timeout) Line 61  mqtt_cli_Open(struct sockaddr *addr, u_short timeout)
         if (!addr)          if (!addr)
                 return NULL;                  return NULL;
   
        cli = malloc(sizeof(mqtt_cli_t));        cli = e_malloc(sizeof(mqtt_cli_t));
         if (!cli) {          if (!cli) {
                 LOGERR;                  LOGERR;
                 return NULL;                  return NULL;
Line 72  mqtt_cli_Open(struct sockaddr *addr, u_short timeout) Line 72  mqtt_cli_Open(struct sockaddr *addr, u_short timeout)
         cli->sock = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);          cli->sock = socket(addr->sa_family, SOCK_STREAM, IPPROTO_TCP);
         if (cli->sock == -1) {          if (cli->sock == -1) {
                 LOGERR;                  LOGERR;
                free(cli);                e_free(cli);
                 return NULL;                  return NULL;
         }          }
   #ifndef __linux__
         if (connect(cli->sock, addr, addr->sa_len) == -1) {          if (connect(cli->sock, addr, addr->sa_len) == -1) {
   #else
           if (connect(cli->sock, addr, addr->sa_family == AF_INET6 ? 
                                   sizeof(struct sockaddr_in6) : 
                                   sizeof(struct sockaddr_in)) == -1) {
   #endif
                 LOGERR;                  LOGERR;
                 close(cli->sock);                  close(cli->sock);
                free(cli);                e_free(cli);
                 return NULL;                  return NULL;
         }          }
   
         cli->buf = mqtt_msgAlloc(USHRT_MAX);  
         if (!cli->buf) {  
                 close(cli->sock);  
                 free(cli);  
                 return NULL;  
         }  
   
         return cli;          return cli;
 }  }
   
Line 101  mqtt_cli_Open(struct sockaddr *addr, u_short timeout) Line 100  mqtt_cli_Open(struct sockaddr *addr, u_short timeout)
 int  int
 mqtt_cli_Close(mqtt_cli_t ** __restrict cli)  mqtt_cli_Close(mqtt_cli_t ** __restrict cli)
 {  {
        int siz = 0;        int siz;
   
         if (!cli || !*cli)          if (!cli || !*cli)
                 return -1;                  return -1;
   
         /* send disconnect */          /* send disconnect */
        siz = mqtt_msgDISCONNECT((*cli)->buf);        (*cli)->buf = mqtt_msgDISCONNECT();
        if (siz > -1) {        if ((*cli)->buf) {
                siz = send((*cli)->sock, (*cli)->buf->msg_base, siz, MSG_NOSIGNAL);                siz = send((*cli)->sock, (*cli)->buf->msg_base, (*cli)->buf->msg_len, MSG_NOSIGNAL);
                 if (siz > -1)                  if (siz > -1)
                         shutdown((*cli)->sock, SHUT_RDWR);                          shutdown((*cli)->sock, SHUT_RDWR);
         }          }
         close((*cli)->sock);          close((*cli)->sock);
   
        mqtt_msgFree(&(*cli)->buf, 42);        mqtt_msgFree(&(*cli)->buf, 0);
   
        free(*cli);        e_free(*cli);
         *cli = NULL;          *cli = NULL;
         return 0;          return 0;
 }  }
Line 128  mqtt_cli_Close(mqtt_cli_t ** __restrict cli) Line 127  mqtt_cli_Close(mqtt_cli_t ** __restrict cli)
  * @cli = connected client   * @cli = connected client
  * @Topics = Topics for subscribes   * @Topics = Topics for subscribes
  * @msgID = Message ID   * @msgID = Message ID
  * @Dup = Duplicated request  
  * @QoS = Message QoS  
  * return: NULL error or !=NULL allocated array with subscribed QoS responses,    * return: NULL error or !=NULL allocated array with subscribed QoS responses, 
 *      must be free() result! *      must be e_free() result!
  */   */
 u_char *  u_char *
mqtt_cli_Subscribe(mqtt_cli_t * __restrict cli, mqtt_subscr_t * __restrict Topics, mqtt_cli_Subscribe(mqtt_cli_t * __restrict cli, mqtt_subscr_t ** __restrict Topics, u_short msgID)
                u_short msgID, u_char Dup, u_char QoS) 
 {  {
         int siz = 0;          int siz = 0;
         u_short mid = 0;          u_short mid = 0;
Line 145  mqtt_cli_Subscribe(mqtt_cli_t * __restrict cli, mqtt_s Line 141  mqtt_cli_Subscribe(mqtt_cli_t * __restrict cli, mqtt_s
                 return NULL;                  return NULL;
   
         /* send subscribe */          /* send subscribe */
        siz = mqtt_msgSUBSCRIBE(cli->buf, Topics, msgID, Dup, QoS);        cli->buf = mqtt_msgSUBSCRIBE(Topics, msgID);
        if (siz == -1)        if (!cli->buf)
                 return NULL;                  return NULL;
        siz = send(cli->sock, cli->buf->msg_base, siz, MSG_NOSIGNAL);        siz = send(cli->sock, cli->buf->msg_base, cli->buf->msg_len, MSG_NOSIGNAL);
         if (siz == -1) {          if (siz == -1) {
                 LOGERR;                  LOGERR;
                 return NULL;                  return NULL;
        }        } else
                 mqtt_msgFree(&cli->buf, 0);
   
         if ((siz = mqtt_wait4data(cli->sock, cli->timeout, POLLIN | POLLPRI)) == -1) {          if ((siz = mqtt_wait4data(cli->sock, cli->timeout, POLLIN | POLLPRI)) == -1) {
                 return NULL;                  return NULL;
Line 170  mqtt_cli_Subscribe(mqtt_cli_t * __restrict cli, mqtt_s Line 167  mqtt_cli_Subscribe(mqtt_cli_t * __restrict cli, mqtt_s
                 return NULL;                  return NULL;
         if (msgID != mid) {          if (msgID != mid) {
                 free(qoses);                  free(qoses);
                mqtt_SetErr(EBADMSG, "Receive different message ID %hu != %hu", msgID, mid);                mqtt_SetErr(ECANCELED, "Receive different message ID %hu != %hu", msgID, mid);
                 return NULL;                  return NULL;
         }          }
   
         return qoses;          return qoses;
 }  }
   
   #if 0
 /*  /*
  * mqtt_cli_Unsubscribe() - Unsubscribe from broker   * mqtt_cli_Unsubscribe() - Unsubscribe from broker
  *   *
Line 204  mqtt_cli_Unsubscribe(mqtt_cli_t * __restrict cli, mqtt Line 202  mqtt_cli_Unsubscribe(mqtt_cli_t * __restrict cli, mqtt
         if (siz == -1) {          if (siz == -1) {
                 LOGERR;                  LOGERR;
                 return -1;                  return -1;
        }        } else
                 memset(cli->buf->msg_base, 0, cli->buf->msg_len);
   
         if ((siz = mqtt_wait4data(cli->sock, cli->timeout, POLLIN | POLLPRI)) == -1) {          if ((siz = mqtt_wait4data(cli->sock, cli->timeout, POLLIN | POLLPRI)) == -1) {
                 return -1;                  return -1;
Line 221  mqtt_cli_Unsubscribe(mqtt_cli_t * __restrict cli, mqtt Line 220  mqtt_cli_Unsubscribe(mqtt_cli_t * __restrict cli, mqtt
         if (siz == -1)          if (siz == -1)
                 return -1;                  return -1;
         if (msgID != siz) {          if (msgID != siz) {
                mqtt_SetErr(EBADMSG, "Receive different message ID %hu != %hu", msgID, siz);                mqtt_SetErr(ECANCELED, "Receive different message ID %hu != %hu", msgID, siz);
                 return -1;                  return -1;
         }          }
   
Line 239  mqtt_cli_Unsubscribe(mqtt_cli_t * __restrict cli, mqtt Line 238  mqtt_cli_Unsubscribe(mqtt_cli_t * __restrict cli, mqtt
  * @csTopic = Topic   * @csTopic = Topic
  * @pData = Data   * @pData = Data
  * @datLen = Data length   * @datLen = Data length
 * return: -1 error or 0 ok * return: -1 error or > -1 sended bytes
  */   */
 int  int
 mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short msgID, u_char Dup, u_char QoS, u_char Retain,   mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short msgID, u_char Dup, u_char QoS, u_char Retain, 
                 const char *csTopic, const void *pData, int datLen)                  const char *csTopic, const void *pData, int datLen)
 {  {
        int siz = 0;        int wlen = 0, siz = 0;
   
         if (!cli || !csTopic)          if (!cli || !csTopic)
                 return -1;                  return -1;
Line 258  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short  Line 257  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short 
         if (siz == -1) {          if (siz == -1) {
                 LOGERR;                  LOGERR;
                 return -1;                  return -1;
           } else {
                   wlen = siz;
                   memset(cli->buf->msg_base, 0, cli->buf->msg_len);
         }          }
   
         if (QoS == MQTT_QOS_ONCE)       /* no reply */          if (QoS == MQTT_QOS_ONCE)       /* no reply */
Line 280  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short  Line 282  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short 
                 if (siz == -1)                  if (siz == -1)
                         return -1;                          return -1;
                 if (msgID != siz) {                  if (msgID != siz) {
                        mqtt_SetErr(EBADMSG, "Receive different message ID %hu != %hu", msgID, siz);                        mqtt_SetErr(ECANCELED, "Receive different message ID %hu != %hu", msgID, siz);
                         return -1;                          return -1;
                 }                  }
                 goto end;                  goto end;
Line 289  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short  Line 291  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short 
                 if (siz == -1)                  if (siz == -1)
                         return -1;                          return -1;
                 if (msgID != siz) {                  if (msgID != siz) {
                        mqtt_SetErr(EBADMSG, "Receive different message ID %hu != %hu", msgID, siz);                        mqtt_SetErr(ECANCELED, "Receive different message ID %hu != %hu", msgID, siz);
                         return -1;                          return -1;
                 }                  }
         }          }
Line 303  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short  Line 305  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short 
                 if (siz == -1) {                  if (siz == -1) {
                         LOGERR;                          LOGERR;
                         return -1;                          return -1;
                }                } else
                         memset(cli->buf->msg_base, 0, cli->buf->msg_len);
   
                 if ((siz = mqtt_wait4data(cli->sock, cli->timeout, POLLIN | POLLPRI)) == -1) {                  if ((siz = mqtt_wait4data(cli->sock, cli->timeout, POLLIN | POLLPRI)) == -1) {
                         return -1;                          return -1;
Line 315  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short  Line 318  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short 
                 }                  }
   
                 /* receive PUBCOMP */                  /* receive PUBCOMP */
                   siz = recv(cli->sock, cli->buf->msg_base, cli->buf->msg_len, 0);
                   if (siz == -1) {
                           LOGERR;
                           return -1;
                   }
   
                 siz = mqtt_readPUBCOMP(cli->buf);                  siz = mqtt_readPUBCOMP(cli->buf);
                 if (siz == -1)                  if (siz == -1)
                         return -1;                          return -1;
                 if (msgID != siz) {                  if (msgID != siz) {
                        mqtt_SetErr(EBADMSG, "Receive different message ID %hu != %hu", msgID, siz);                        mqtt_SetErr(ECANCELED, "Receive different message ID %hu != %hu", msgID, siz);
                         if (Dup++ > 1)                          if (Dup++ > 1)
                                 return -1;                                  return -1;
                         else                          else
Line 328  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short  Line 337  mqtt_cli_Publish(mqtt_cli_t * __restrict cli, u_short 
         } while (0);          } while (0);
   
 end:  end:
        return 0;        return wlen;
 }  }
   #endif

Removed from v.1.1.2.6  
changed lines
  Added in v.1.3.12.2


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