Diff for /mqtt/src/Attic/conn.c between versions 1.1.2.13 and 1.2

version 1.1.2.13, 2011/12/13 10:12:36 version 1.2, 2012/01/27 15:05:38
Line 8 Line 8
  *   *
  * @buf = Message buffer   * @buf = Message buffer
  * @csConnID = ConnectID   * @csConnID = ConnectID
    * @kasec = Keep alive timeout
  * @csUser = Username if !=NULL   * @csUser = Username if !=NULL
  * @csPass = Password for Username, only if csUser is set   * @csPass = Password for Username, only if csUser is set
  * @csWillTopic = Will Topic if !=NULL Will Flags set into message   * @csWillTopic = Will Topic if !=NULL Will Flags set into message
Line 19 Line 20
  */   */
 int  int
 mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const char *csConnID,   mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const char *csConnID, 
                const char *csUser, const char *csPass,                 u_short kasec, const char *csUser, const char *csPass, 
                 const char *csWillTopic, const char *csWillMessage,                   const char *csWillTopic, const char *csWillMessage, 
                 u_char ClrSess, u_char WillQOS, u_char WillRetain)                  u_char ClrSess, u_char WillQOS, u_char WillRetain)
 {  {
Line 32  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 33  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
   
         if (!buf || !csConnID)          if (!buf || !csConnID)
                 return -1;                  return -1;
        if (strlen(csConnID) > 24) {        if (strlen(csConnID) > 23) {
                 mqtt_SetErr(EINVAL, "Error:: invalid argument ConnID is too long (max 23 bytes)");                  mqtt_SetErr(EINVAL, "Error:: invalid argument ConnID is too long (max 23 bytes)");
                 return -1;                  return -1;
         }          }
        if (csUser && strlen(csUser) > 13) {        if (csUser && strlen(csUser) > 12) {
                 mqtt_SetErr(EINVAL, "Error:: invalid argument Username is too long (max 12 bytes)");                  mqtt_SetErr(EINVAL, "Error:: invalid argument Username is too long (max 12 bytes)");
                 return -1;                  return -1;
         }          }
        if (csPass && strlen(csPass) > 13) {        if (csPass && strlen(csPass) > 12) {
                 mqtt_SetErr(EINVAL, "Error:: invalid argument Password is too long (max 12 bytes)");                  mqtt_SetErr(EINVAL, "Error:: invalid argument Password is too long (max 12 bytes)");
                 return -1;                  return -1;
         }          }
Line 77  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 78  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
   
         /* CONNECT header */          /* CONNECT header */
         flags->clean_sess = ClrSess ? 1 : 0;          flags->clean_sess = ClrSess ? 1 : 0;
        if (csUser) {        if (csUser && *csUser) {
                 flags->username = 1;                  flags->username = 1;
                 flags->password = csPass ? 1 : 0;                  flags->password = csPass ? 1 : 0;
         } else {          } else {
                 flags->username = 0;                  flags->username = 0;
                 flags->password = 0;                  flags->password = 0;
         }          }
        if (csWillTopic) {        if (csWillTopic && *csWillTopic) {
                 flags->will_flg = 1;                  flags->will_flg = 1;
                 flags->will_qos = WillQOS;                  flags->will_qos = WillQOS;
                 flags->will_retain = WillRetain ? 1 : 0;                  flags->will_retain = WillRetain ? 1 : 0;
Line 94  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 95  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
                 flags->will_retain = 0;                  flags->will_retain = 0;
         }          }
   
        ka->sb.l = MQTT_KEEPALIVE;        ka->val = kasec ? htons(kasec) : htons(MQTT_KEEPALIVE);
   
         /* ConnID */          /* ConnID */
         cid = (mqtthdr_var_t*) (buf->msg_base + siz);          cid = (mqtthdr_var_t*) (buf->msg_base + siz);
Line 103  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 104  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
         memcpy(cid->var_data, csConnID, ntohs(cid->var_sb.val));          memcpy(cid->var_data, csConnID, ntohs(cid->var_sb.val));
   
         /* If Will Flags setup */          /* If Will Flags setup */
        if (csWillTopic) {        if (csWillTopic && *csWillTopic) {
                 topic = (mqtthdr_var_t*) (buf->msg_base + siz);                  topic = (mqtthdr_var_t*) (buf->msg_base + siz);
                 topic->var_sb.val = htons(strlen(csWillTopic));                  topic->var_sb.val = htons(strlen(csWillTopic));
                 memcpy(topic->var_data, csWillTopic, ntohs(topic->var_sb.val));                  memcpy(topic->var_data, csWillTopic, ntohs(topic->var_sb.val));
                 siz += MQTTHDR_VAR_SIZEOF(topic);                  siz += MQTTHDR_VAR_SIZEOF(topic);
   
                 wmsg = (mqtthdr_var_t*) (buf->msg_base + siz);                  wmsg = (mqtthdr_var_t*) (buf->msg_base + siz);
                if (csWillMessage) {                if (csWillMessage && *csWillMessage) {
                         wmsg->var_sb.val = htons(strlen(csWillMessage));                          wmsg->var_sb.val = htons(strlen(csWillMessage));
                         memcpy(wmsg->var_data, csWillMessage, ntohs(wmsg->var_sb.val));                          memcpy(wmsg->var_data, csWillMessage, ntohs(wmsg->var_sb.val));
                 } else                  } else
Line 119  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 120  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
         }          }
   
         /* If defined Username & Password */          /* If defined Username & Password */
        if (csUser) {        if (csUser && *csUser) {
                 user = (mqtthdr_var_t*) (buf->msg_base + siz);                  user = (mqtthdr_var_t*) (buf->msg_base + siz);
                 user->var_sb.val = htons(strlen(csUser));                  user->var_sb.val = htons(strlen(csUser));
                 memcpy(user->var_data, csUser, ntohs(user->var_sb.val));                  memcpy(user->var_data, csUser, ntohs(user->var_sb.val));
                 siz += MQTTHDR_VAR_SIZEOF(user);                  siz += MQTTHDR_VAR_SIZEOF(user);
   
                if (csPass) {                if (csPass && *csPass) {
                         pass = (mqtthdr_var_t*) (buf->msg_base + siz);                          pass = (mqtthdr_var_t*) (buf->msg_base + siz);
                         pass->var_sb.val = htons(strlen(csPass));                          pass->var_sb.val = htons(strlen(csPass));
                         memcpy(pass->var_data, csPass, ntohs(pass->var_sb.val));                          memcpy(pass->var_data, csPass, ntohs(pass->var_sb.val));
Line 311  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 312  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
         /* get ConnID */          /* get ConnID */
         var = (mqtthdr_var_t*) pos;          var = (mqtthdr_var_t*) pos;
         len -= MQTTHDR_VAR_SIZEOF(var);          len -= MQTTHDR_VAR_SIZEOF(var);
        if (len < 0) {        if (len < 0 || var->var_sb.sb.l > 23) {
                 mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Connection ID %d", len);                  mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Connection ID %d", len);
                 cack.retcode = MQTT_RETCODE_REFUSE_ID;                  cack.retcode = MQTT_RETCODE_REFUSE_ID;
                 return cack;                  return cack;
Line 368  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 369  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
         if (flg.username) {          if (flg.username) {
                 var = (mqtthdr_var_t*) pos;                  var = (mqtthdr_var_t*) pos;
                 len -= MQTTHDR_VAR_SIZEOF(var);                  len -= MQTTHDR_VAR_SIZEOF(var);
                if (len < 0) {                if (len < 0 || var->var_sb.sb.l > 12) {
                         mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Username %d", len);                          mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Username %d", len);
                         cack.retcode = MQTT_RETCODE_REFUSE_USERPASS;                          cack.retcode = MQTT_RETCODE_REFUSE_USERPASS;
                         return cack;                          return cack;
Line 384  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 385  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
         if (flg.password) {          if (flg.password) {
                 var = (mqtthdr_var_t*) pos;                  var = (mqtthdr_var_t*) pos;
                 len -= MQTTHDR_VAR_SIZEOF(var);                  len -= MQTTHDR_VAR_SIZEOF(var);
                if (len < 0) {                if (len < 0 || var->var_sb.sb.l > 12) {
                         mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Password %d", len);                          mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Password %d", len);
                         cack.retcode = MQTT_RETCODE_REFUSE_USERPASS;                          cack.retcode = MQTT_RETCODE_REFUSE_USERPASS;
                         return cack;                          return cack;

Removed from v.1.1.2.13  
changed lines
  Added in v.1.2


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