Diff for /libaitmqtt/src/srvside.c between versions 1.2 and 1.3

version 1.2, 2012/06/20 15:02:24 version 1.3, 2012/06/29 13:54:48
Line 47  SUCH DAMAGE. Line 47  SUCH DAMAGE.
   
   
 /*  /*
 * mqtt_srv_Init() Init MQTT server side support * mqtt_srv_cliInit() Init MQTT server side support for clients
  *   *
  * @sock = Client socket from accept()   * @sock = Client socket from accept()
  * @buf = Message buffer   * @buf = Message buffer
  * @timeout = timeout   * @timeout = timeout
    * @nb = Non block socket
  * return: NULL error or !=NULL allocated server handle   * return: NULL error or !=NULL allocated server handle
  */   */
 mqtt_srv_t *  mqtt_srv_t *
mqtt_srv_Init(int sock, mqtt_msg_t * __restrict buf, u_short timeout)mqtt_srv_cliInit(int sock, mqtt_msg_t * __restrict buf, u_short timeout, int nb)
 {  {
         mqtt_srv_t *srv = NULL;          mqtt_srv_t *srv = NULL;
           struct timeval tv = { timeout, 0 };
           int n;
   
         if (!buf || !buf->msg_base || !buf->msg_len)          if (!buf || !buf->msg_base || !buf->msg_len)
                 return srv;                  return srv;
           else
                   n = buf->msg_len;
   
         srv = malloc(sizeof(mqtt_srv_t));          srv = malloc(sizeof(mqtt_srv_t));
         if (!srv) {          if (!srv) {
Line 69  mqtt_srv_Init(int sock, mqtt_msg_t * __restrict buf, u Line 74  mqtt_srv_Init(int sock, mqtt_msg_t * __restrict buf, u
         } else          } else
                 memset(srv, 0, sizeof(mqtt_srv_t));                  memset(srv, 0, sizeof(mqtt_srv_t));
   
           /* set options of client socket */
           setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &n, sizeof n);
           setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &n, sizeof n);
           setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof tv);
           setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof tv);
           ioctl(sock, FIONBIO, nb);
   
         srv->sock = sock;          srv->sock = sock;
         srv->buf = buf;          srv->buf = buf;
         srv->timeout = timeout;          srv->timeout = timeout;
Line 77  mqtt_srv_Init(int sock, mqtt_msg_t * __restrict buf, u Line 89  mqtt_srv_Init(int sock, mqtt_msg_t * __restrict buf, u
 }  }
   
 /*  /*
 * mqtt_srv_Fini() Finish MQTT server side support * mqtt_srv_cliFini() Finish MQTT server side support for clients
  *   *
  * @psrv = Server handle   * @psrv = Server handle
  * return: none   * return: none
  */   */
 void  void
mqtt_srv_Fini(mqtt_srv_t ** __restrict psrv)mqtt_srv_cliFini(mqtt_srv_t ** __restrict psrv)
 {  {
         if (psrv && *psrv) {          if (psrv && *psrv) {
                 free(*psrv);                  free(*psrv);
Line 92  mqtt_srv_Fini(mqtt_srv_t ** __restrict psrv) Line 104  mqtt_srv_Fini(mqtt_srv_t ** __restrict psrv)
 }  }
   
 /*  /*
 * mqtt_srv_Dispatch() MQTT server dispatcher * mqtt_srv_cliDispatch() MQTT server dispatcher for clients
  *   *
  * @srv = Server handle   * @srv = Server handle
  * @rlen = Ready bytes to parse   * @rlen = Ready bytes to parse
Line 100  mqtt_srv_Fini(mqtt_srv_t ** __restrict psrv) Line 112  mqtt_srv_Fini(mqtt_srv_t ** __restrict psrv)
  * return: -1 error or 0 ok   * return: -1 error or 0 ok
  */   */
 int  int
mqtt_srv_Dispatch(mqtt_srv_t * __restrict srv, int rlen, void *arg)mqtt_srv_cliDispatch(mqtt_srv_t * __restrict srv, int rlen, void *arg)
 {  {
         struct mqtthdr *hdr;          struct mqtthdr *hdr;
   
Line 120  mqtt_srv_Dispatch(mqtt_srv_t * __restrict srv, int rle Line 132  mqtt_srv_Dispatch(mqtt_srv_t * __restrict srv, int rle
   
         mqtt_SetErr(ENOTSUP, "Unsupported message type %d", hdr->mqtt_msg.type);          mqtt_SetErr(ENOTSUP, "Unsupported message type %d", hdr->mqtt_msg.type);
         return -1;          return -1;
   }
   
   
   /*
    * mqtt_srv_Create() - Create server socket
    *
    * @sa = Server bind address
    * @salen = Server struct sockaddr size
    * return: -1 error or >-1 server socket
    */
   int
   mqtt_srv_Create(struct sockaddr * __restrict sa, int salen)
   {
           int s = -1, n = 1;
   
           if (!sa)
                   return -1;
   
           s = socket(sa->sa_family, SOCK_STREAM, 0);
           if (s == -1) {
                   LOGERR;
                   return -1;
           }
           if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof n) == -1) {
                   LOGERR;
                   close(s);
                   return -1;
           }
           if (bind(s, sa, salen) == -1) {
                   LOGERR;
                   close(s);
                   return -1;
           }
   
           return s;
   }
   
   /*
    * mqtt_srv_Destroy() - Close server socket
    *
    * @sock = Server socket
    * return: -1 error or 0 ok
    */
   int
   mqtt_srv_Destroy(int sock)
   {
           shutdown(sock, SHUT_RDWR);
           return close(sock);
   }
   
   /*
    * mqtt_srv_Listen() - Listen server socket
    *
    * @sock = Server socket
    * @maxconn = max number of pending connections
    * @nb = Non block socket
    * return: -1 error or 0 ok
    */
   int
   mqtt_srv_Listen(int sock, int maxconn, int nb)
   {
           if (!maxconn)
                   maxconn = SOMAXCONN;
   
           if (listen(sock, maxconn) == -1) {
                   LOGERR;
                   return -1;
           } else
                   ioctl(sock, FIONBIO, nb);
   
           return 0;
 }  }

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


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