Diff for /mqtt/src/Attic/conn.c between versions 1.1.2.11 and 1.1.2.12

version 1.1.2.11, 2011/12/09 09:55:27 version 1.1.2.12, 2011/12/09 11:46:48
Line 257  mqtt_msgDISCONNECT(mqtt_msg_t * __restrict buf) Line 257  mqtt_msgDISCONNECT(mqtt_msg_t * __restrict buf)
  * @psWillMessage = Will Message, may be NULL if !NULL must be free() after use!   * @psWillMessage = Will Message, may be NULL if !NULL must be free() after use!
  * return: .reserved == 1 is error or == 0 connection flags & msg ok   * return: .reserved == 1 is error or == 0 connection flags & msg ok
  */   */
mqtthdr_connflgs_tmqtthdr_connack_t
 mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short *kasec, char * __restrict psConnID, int connLen,   mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short *kasec, char * __restrict psConnID, int connLen, 
                 char * __restrict psUser, int userLen, char * __restrict psPass, int passLen,                    char * __restrict psUser, int userLen, char * __restrict psPass, int passLen,  
                 char ** __restrict psWillTopic, char ** __restrict psWillMessage)                  char ** __restrict psWillTopic, char ** __restrict psWillMessage)
 {  {
        mqtthdr_connflgs_t flg = MQTT_CONNFLGS_INIT;        mqtthdr_connflgs_t flg = { MQTT_CONNFLGS_INIT };
         mqtthdr_connack_t cack = { 1, MQTT_RETCODE_DENIED };
         struct mqtthdr *hdr;          struct mqtthdr *hdr;
         mqtthdr_var_t *var;          mqtthdr_var_t *var;
         mqtt_v_t *ka;          mqtt_v_t *ka;
Line 271  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 272  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
         caddr_t pos;          caddr_t pos;
   
         if (!buf || !buf->msg_base || !buf->msg_len || !psConnID || !connLen)          if (!buf || !buf->msg_base || !buf->msg_len || !psConnID || !connLen)
                return flg;                return cack;
   
         hdr = _mqtt_readHEADER(buf, MQTT_TYPE_CONNECT, &ret, &len);          hdr = _mqtt_readHEADER(buf, MQTT_TYPE_CONNECT, &ret, &len);
         if (!hdr)          if (!hdr)
                return flg;                return cack;
         if (len < 12) {          if (len < 12) {
                 mqtt_SetErr(EINVAL, "Error:: short message length %d", len);                  mqtt_SetErr(EINVAL, "Error:: short message length %d", len);
                return flg;                return cack;
         } else {          } else {
                 pos = buf->msg_base + ret + 1;                  pos = buf->msg_base + ret + 1;
                 var = (mqtthdr_var_t*) pos;                  var = (mqtthdr_var_t*) pos;
Line 287  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 288  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
         if (var->var_sb.sb.l != 6 || strncmp(var->var_data, MQTT_CONN_STR, 6)) {          if (var->var_sb.sb.l != 6 || strncmp(var->var_data, MQTT_CONN_STR, 6)) {
                 mqtt_SetErr(EINVAL, "Error:: invalid init string %.6s(%d)",                   mqtt_SetErr(EINVAL, "Error:: invalid init string %.6s(%d)", 
                                 var->var_data, var->var_sb.sb.l);                                  var->var_data, var->var_sb.sb.l);
                return flg;                cack.retcode = MQTT_RETCODE_REFUSE_UNAVAIL;
                 return cack;
         } else {          } else {
                 pos += var->var_sb.sb.l + sizeof(mqtt_v_t);                  pos += var->var_sb.sb.l + sizeof(mqtt_v_t);
                 proto = (mqtthdr_protover_t*) pos;                  proto = (mqtthdr_protover_t*) pos;
         }          }
         if (*proto != MQTT_PROTO_VER) {          if (*proto != MQTT_PROTO_VER) {
                 mqtt_SetErr(EINVAL, "Error:: invalid protocol version %d", *pos);                  mqtt_SetErr(EINVAL, "Error:: invalid protocol version %d", *pos);
                return flg;                cack.retcode = MQTT_RETCODE_REFUSE_VER;
                 return cack;
         } else          } else
                 pos++;                  pos++;
         flg = *(mqtthdr_connflgs_t*) pos;          flg = *(mqtthdr_connflgs_t*) pos;
Line 310  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 313  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
         len -= MQTTHDR_VAR_SIZEOF(var);          len -= MQTTHDR_VAR_SIZEOF(var);
         if (len < 0) {          if (len < 0) {
                 mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Connection ID %d", len);                  mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Connection ID %d", len);
                flg.reserved = 1;                cack.retcode = MQTT_RETCODE_REFUSE_ID;
                return flg;                return cack;
         } else {          } else {
                 memset(psConnID, 0, connLen--);                  memset(psConnID, 0, connLen--);
                 memcpy(psConnID, var->var_data, ntohs(var->var_sb.val) > connLen ? connLen : ntohs(var->var_sb.val));                  memcpy(psConnID, var->var_data, ntohs(var->var_sb.val) > connLen ? connLen : ntohs(var->var_sb.val));
Line 324  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 327  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
                 len -= MQTTHDR_VAR_SIZEOF(var);                  len -= MQTTHDR_VAR_SIZEOF(var);
                 if (len < 0) {                  if (len < 0) {
                         mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Will Topic %d", len);                          mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Will Topic %d", len);
                        flg.reserved = 1;                        cack.retcode = MQTT_RETCODE_REFUSE_ID;
                        return flg;                        return cack;
                 } else {                  } else {
                         if (psWillTopic) {                          if (psWillTopic) {
                                 *psWillTopic = malloc(ntohs(var->var_sb.val) + 1);                                  *psWillTopic = malloc(ntohs(var->var_sb.val) + 1);
                                 if (!*psWillTopic) {                                  if (!*psWillTopic) {
                                         LOGERR;                                          LOGERR;
                                        flg.reserved = 1;                                        cack.retcode = MQTT_RETCODE_REFUSE_UNAVAIL;
                                        return flg;                                        return cack;
                                 } else                                  } else
                                         memset(*psWillTopic, 0, ntohs(var->var_sb.val) + 1);                                          memset(*psWillTopic, 0, ntohs(var->var_sb.val) + 1);
                                 memcpy(*psWillTopic, var->var_data, ntohs(var->var_sb.val));                                  memcpy(*psWillTopic, var->var_data, ntohs(var->var_sb.val));
Line 344  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 347  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
                 len -= MQTTHDR_VAR_SIZEOF(var);                  len -= MQTTHDR_VAR_SIZEOF(var);
                 if (len < 0) {                  if (len < 0) {
                         mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Will Message %d", len);                          mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Will Message %d", len);
                        flg.reserved = 1;                        cack.retcode = MQTT_RETCODE_REFUSE_ID;
                        return flg;                        return cack;
                 } else {                  } else {
                         if (psWillMessage) {                          if (psWillMessage) {
                                 *psWillMessage = malloc(ntohs(var->var_sb.val) + 1);                                  *psWillMessage = malloc(ntohs(var->var_sb.val) + 1);
                                 if (!*psWillMessage) {                                  if (!*psWillMessage) {
                                         LOGERR;                                          LOGERR;
                                        flg.reserved = 1;                                        cack.retcode = MQTT_RETCODE_REFUSE_UNAVAIL;
                                        return flg;                                        return cack;
                                 } else                                  } else
                                         memset(*psWillMessage, 0, ntohs(var->var_sb.val) + 1);                                          memset(*psWillMessage, 0, ntohs(var->var_sb.val) + 1);
                                 memcpy(*psWillMessage, var->var_data, ntohs(var->var_sb.val));                                  memcpy(*psWillMessage, var->var_data, ntohs(var->var_sb.val));
Line 367  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 370  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
                 len -= MQTTHDR_VAR_SIZEOF(var);                  len -= MQTTHDR_VAR_SIZEOF(var);
                 if (len < 0) {                  if (len < 0) {
                         mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Username %d", len);                          mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Username %d", len);
                        flg.reserved = 1;                        cack.retcode = MQTT_RETCODE_REFUSE_USERPASS;
                        return flg;                        return cack;
                 } else {                  } else {
                         if (psUser && userLen) {                          if (psUser && userLen) {
                                 memset(psUser, 0, userLen--);                                  memset(psUser, 0, userLen--);
Line 383  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 386  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
                 len -= MQTTHDR_VAR_SIZEOF(var);                  len -= MQTTHDR_VAR_SIZEOF(var);
                 if (len < 0) {                  if (len < 0) {
                         mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Password %d", len);                          mqtt_SetErr(EINVAL, "Error:: unexpected EOM at Password %d", len);
                        flg.reserved = 1;                        cack.retcode = MQTT_RETCODE_REFUSE_USERPASS;
                        return flg;                        return cack;
                 } else {                  } else {
                         if (psPass && passLen) {                          if (psPass && passLen) {
                                 memset(psPass, 0, passLen--);                                  memset(psPass, 0, passLen--);
Line 395  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 398  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
                 }                  }
         }          }
   
        return flg;        flg.reserved = 0;
         cack.reserved = flg.flags;
         cack.retcode = MQTT_RETCODE_ACCEPTED;
         return cack;
 }  }
   
 /*  /*

Removed from v.1.1.2.11  
changed lines
  Added in v.1.1.2.12


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