Diff for /libaitrpc/src/srv.c between versions 1.9.2.12 and 1.9.2.13

version 1.9.2.12, 2012/05/16 09:02:48 version 1.9.2.13, 2012/05/16 09:09:42
Line 257  acceptClients(sched_task_t *task) Line 257  acceptClients(sched_task_t *task)
         c = malloc(sizeof(rpc_cli_t));          c = malloc(sizeof(rpc_cli_t));
         if (!c) {          if (!c) {
                 LOGERR;                  LOGERR;
                srv->srv_kill = kill;                srv->srv_kill = 1;
                 return NULL;                  return NULL;
         } else {          } else {
                 memset(c, 0, sizeof(rpc_cli_t));                  memset(c, 0, sizeof(rpc_cli_t));
Line 270  acceptClients(sched_task_t *task) Line 270  acceptClients(sched_task_t *task)
         AIT_SET_BUF2(&c->cli_buf, 0, srv->srv_netbuf);          AIT_SET_BUF2(&c->cli_buf, 0, srv->srv_netbuf);
   
         /* accept client */          /* accept client */
        c->cli_sock = accept(srv->srv_server.cli_sock, &c->cli_sa.sa, &salen);        c->cli_sock = accept(TASK_FD(task), &c->cli_sa.sa, &salen);
         if (c->cli_sock == -1) {          if (c->cli_sock == -1) {
                 LOGERR;                  LOGERR;
                 AIT_FREE_VAL(&c->cli_buf);                  AIT_FREE_VAL(&c->cli_buf);
Line 287  end: Line 287  end:
   
 /* ------------------------------------------------------ */  /* ------------------------------------------------------ */
   
 static void *  
 acceptBLOBClients(sched_task_t *task)  
 {  
         rpc_srv_t *srv = TASK_ARG(task);  
         rpc_cli_t *c = NULL;  
         register int i;  
         socklen_t salen = sizeof(io_sockaddr_t);  
   
         /* check free slots for connect */  
         for (i = 0; i < io_arraySize(srv->srv_clients) &&   
                         (c = io_array(srv->srv_clients, i, rpc_cli_t*)); i++);  
         if (c)  /* no more free slots! */  
                 goto end;  
         c = malloc(sizeof(rpc_cli_t));  
         if (!c) {  
                 LOGERR;  
                 srv->srv_kill = kill;  
                 return NULL;  
         } else {  
                 memset(c, 0, sizeof(rpc_cli_t));  
                 io_arraySet(srv->srv_clients, i, c);  
                 c->cli_id = i;  
                 c->cli_parent = srv;  
         }  
   
         /* alloc empty buffer */  
         AIT_SET_BUF2(&c->cli_buf, 0, srv->srv_netbuf);  
   
         /* accept client */  
         c->cli_sock = accept(srv->srv_server.cli_sock, &c->cli_sa.sa, &salen);  
         if (c->cli_sock == -1) {  
                 LOGERR;  
                 AIT_FREE_VAL(&c->cli_buf);  
                 io_arrayDel(srv->srv_clients, i, 42);  
                 goto end;  
         } else  
                 fcntl(c->cli_sock, F_SETFL, fcntl(c->cli_sock, F_GETFL) | O_NONBLOCK);  
   
         schedRead(TASK_ROOT(task), rxPacket, c, c->cli_sock, NULL, 0);  
 end:  
         schedReadSelf(task);  
         return NULL;  
 }  
   
 #if 0  #if 0
 static void *  static void *
 txBLOB(sched_task_t *task)  txBLOB(sched_task_t *task)
Line 469  end: Line 425  end:
                         TASK_DATA(task), TASK_DATLEN(task));                          TASK_DATA(task), TASK_DATLEN(task));
         return NULL;          return NULL;
 }  }
   #endif
   
 static void *  static void *
rpc_srv_dispatchVars(void *arg)acceptBLOBClients(sched_task_t *task)
 {  {
        rpc_cli_t *c = arg;        rpc_srv_t *srv = TASK_ARG(task);
        rpc_srv_t *s;        rpc_cli_t *c = NULL;
        sched_root_task_t *root;        register int i;
        u_char *buf;        socklen_t salen = sizeof(io_sockaddr_t);
        struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; 
   
        if (!arg) {        /* check free slots for connect */
                rpc_SetErr(EINVAL, "Invalid parameter can`t procced BLOB");        for (i = 0; i < io_arraySize(srv->srv_blob.clients) && 
                return NULL;                        (c = io_array(srv->srv_blob.clients, i, rpc_cli_t*)); i++);
        } else        if (c)  /* no more free slots! */
                s = c->cli_parent;                goto end;
        c = malloc(sizeof(rpc_cli_t));
        /* allocate net buffer */        if (!c) {
        buf = malloc(sizeof(struct tagBLOBHdr)); 
        if (!buf) { 
                 LOGERR;                  LOGERR;
                   srv->srv_kill = srv->srv_blob.kill = 1;
                 return NULL;                  return NULL;
         }  
   
         root = schedBegin();  
         if (!root) {  
                 rpc_SetErr(sched_GetErrno(), "%s", sched_GetError());  
                 free(buf);  
                 return NULL;  
         } else {          } else {
                schedTermCondition(root, kill);                memset(c, 0, sizeof(rpc_cli_t));
                schedPolling(root, &ts, NULL);                io_arraySet(srv->srv_blob.clients, i, c);
                 c->cli_id = i;
                 c->cli_parent = srv;
         }          }
   
        schedRead(root, rxBLOB, c, c->cli_sock, buf, sizeof(struct tagBLOBHdr));        /* alloc empty buffer */
         AIT_SET_BUF2(&c->cli_buf, 0, srv->srv_netbuf);
   
        schedRun(root, (void*) &c->cli_kill);        /* accept client */
        schedEnd(&root);        c->cli_sock = accept(TASK_FD(task), &c->cli_sa.sa, &salen);
         if (c->cli_sock == -1) {
                 LOGERR;
                 AIT_FREE_VAL(&c->cli_buf);
                 io_arrayDel(srv->srv_blob.clients, i, 42);
                 goto end;
         } else
                 fcntl(c->cli_sock, F_SETFL, fcntl(c->cli_sock, F_GETFL) | O_NONBLOCK);
   
        shutdown(c->cli_sock, SHUT_RDWR);//      schedRead(TASK_ROOT(task), rxBLOB, c, c->cli_sock, NULL, 0);
        close(c->cli_sock);end:
        memset(c, 0, sizeof(rpc_cli_t));        schedReadSelf(task);
        free(buf); 
         return NULL;          return NULL;
 }  }
 #endif  
   
 /* ------------------------------------------------------ */  /* ------------------------------------------------------ */
   

Removed from v.1.9.2.12  
changed lines
  Added in v.1.9.2.13


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