Diff for /libaitrpc/src/srv.c between versions 1.2 and 1.2.2.5

version 1.2, 2011/05/02 23:12:08 version 1.2.2.5, 2011/07/14 02:36:57
Line 52  rpc_srv_dispatchCall(void *arg) Line 52  rpc_srv_dispatchCall(void *arg)
         rpc_cli_t *c = arg;          rpc_cli_t *c = arg;
         rpc_srv_t *s;          rpc_srv_t *s;
         rpc_val_t *vals = NULL, *v = NULL;          rpc_val_t *vals = NULL, *v = NULL;
        rpc_func_t *f;        rpc_func_t *f = NULL;
         struct tagRPCCall *rpc;          struct tagRPCCall *rpc;
        struct tagRPCRet rrpc;        struct tagRPCRet *rrpc;
         rpc_sess_t ses = { 0 };
         fd_set fds;          fd_set fds;
         u_char buf[BUFSIZ], *data;          u_char buf[BUFSIZ], *data;
         int ret, argc = 0, Limit = 0;          int ret, argc = 0, Limit = 0;
Line 67  rpc_srv_dispatchCall(void *arg) Line 68  rpc_srv_dispatchCall(void *arg)
                 s = c->cli_parent;                  s = c->cli_parent;
   
         do {          do {
                   v = NULL;
                 FD_ZERO(&fds);                  FD_ZERO(&fds);
                 FD_SET(c->cli_sock, &fds);                  FD_SET(c->cli_sock, &fds);
                 ret = select(c->cli_sock + 1, &fds, NULL, NULL, NULL);                  ret = select(c->cli_sock + 1, &fds, NULL, NULL, NULL);
                 if (ret == -1) {                  if (ret == -1) {
                         ret = -2;                          ret = -2;
                 }                  }
                 memset(&rrpc, 0, sizeof rrpc);  
                 memset(buf, 0, BUFSIZ);                  memset(buf, 0, BUFSIZ);
                 if ((ret = recv(c->cli_sock, buf, BUFSIZ, 0)) == -1) {                  if ((ret = recv(c->cli_sock, buf, BUFSIZ, 0)) == -1) {
                         LOGERR;                          LOGERR;
Line 123  rpc_srv_dispatchCall(void *arg) Line 124  rpc_srv_dispatchCall(void *arg)
                                                 data += v[i].val_len;                                                  data += v[i].val_len;
                                                 break;                                                  break;
                                         case string:                                          case string:
                                                if (v[i].val_len + 1 > BUFSIZ - Limit) {                                                if (v[i].val_len > BUFSIZ - Limit) {
                                                         rpc_SetErr(EMSGSIZE, "Error:: Too big RPC packet ...\n");                                                          rpc_SetErr(EMSGSIZE, "Error:: Too big RPC packet ...\n");
                                                         ret = -5;                                                          ret = -5;
                                                         goto makeReply;                                                          goto makeReply;
Line 131  rpc_srv_dispatchCall(void *arg) Line 132  rpc_srv_dispatchCall(void *arg)
                                                         Limit += v[i].val_len;                                                          Limit += v[i].val_len;
   
                                                 v[i].val.string = (int8_t*) data;                                                  v[i].val.string = (int8_t*) data;
                                                data += v[i].val_len + 1;                                                data += v[i].val_len;
                                                 break;                                                  break;
                                         case blob:                                          case blob:
                                                 if (s->srv_blob.state == disable) {                                                  if (s->srv_blob.state == disable) {
Line 147  rpc_srv_dispatchCall(void *arg) Line 148  rpc_srv_dispatchCall(void *arg)
   
                 argc = 0;                  argc = 0;
                 vals = NULL;                  vals = NULL;
                   memcpy(&ses, &rpc->call_session, sizeof ses);
                 if (!(f = rpc_srv_getCall(s, rpc->call_tag, rpc->call_hash))) {                  if (!(f = rpc_srv_getCall(s, rpc->call_tag, rpc->call_hash))) {
                         rpc_SetErr(EINVAL, "Error:: call not found into RPC server ...\n");                          rpc_SetErr(EINVAL, "Error:: call not found into RPC server ...\n");
                         ret = -6;                          ret = -6;
Line 155  rpc_srv_dispatchCall(void *arg) Line 157  rpc_srv_dispatchCall(void *arg)
                                 ret = -9;                                  ret = -9;
                         else                          else
                                 argc = rpc_srv_getValsCall(f, &vals);                                  argc = rpc_srv_getValsCall(f, &vals);
   
 makeReply:  makeReply:
                 memcpy(&rrpc.ret_session, &rpc->call_session, sizeof rrpc.ret_session);  
                 rrpc.ret_tag = rpc->call_tag;  
                 rrpc.ret_hash = rpc->call_hash;  
                 rrpc.ret_errno = rpc_Errno;  
                 rrpc.ret_retcode = ret;  
                 rrpc.ret_argc = argc;  
   
                 memset(buf, 0, BUFSIZ);                  memset(buf, 0, BUFSIZ);
                memcpy(buf, &rrpc, (Limit = sizeof rrpc));                rrpc = (struct tagRPCRet*) buf;
                 Limit = sizeof(struct tagRPCRet);
 
                 memcpy(&rrpc->ret_session, &ses, sizeof(rpc_sess_t));
                 rrpc->ret_tag = rpc->call_tag;
                 rrpc->ret_hash = rpc->call_hash;
                 rrpc->ret_errno = rpc_Errno;
                 rrpc->ret_retcode = ret;
                 rrpc->ret_argc = argc;
 
                 if (argc && vals) {                  if (argc && vals) {
                        v = (rpc_val_t*) (buf + sizeof rrpc);                        v = (rpc_val_t*) (buf + Limit);
                         if (argc * sizeof(rpc_val_t) > BUFSIZ - Limit) {
                                 for (i = 0; i < argc; i++)
                                         RPC_FREE_VAL(&vals[i]);
                                 rpc_srv_freeValsCall(f);
                                 vals = NULL;
                                 argc = 0;
                                 ret = -7;
                                 rpc_SetErr(EMSGSIZE, "Error:: in prepare RPC packet values (-7) ...\n");
                                 goto makeReply;
                         } else
                                 Limit += argc * sizeof(rpc_val_t);
                         memcpy(v, vals, argc * sizeof(rpc_val_t));                          memcpy(v, vals, argc * sizeof(rpc_val_t));
                         Limit += argc * sizeof(rpc_val_t);  
                         data = (u_char*) v + argc * sizeof(rpc_val_t);                          data = (u_char*) v + argc * sizeof(rpc_val_t);
                         for (ret = i = 0; i < argc; i++) {                          for (ret = i = 0; i < argc; i++) {
                                 switch (vals[i].val_type) {                                  switch (vals[i].val_type) {
                                         case buffer:                                          case buffer:
                                                 if (ret || Limit + vals[i].val_len > BUFSIZ) {                                                  if (ret || Limit + vals[i].val_len > BUFSIZ) {
                                                         rpc_SetErr(EMSGSIZE, "Error:: in prepare RPC packet (-7) ...\n");                                                          rpc_SetErr(EMSGSIZE, "Error:: in prepare RPC packet (-7) ...\n");
                                                        rrpc.ret_retcode = ret = -7;                                                        rrpc->ret_retcode = ret = -7;
                                                        rrpc.ret_argc = 0;                                                        rrpc->ret_argc = 0;
                                                         break;                                                          break;
                                                 }                                                  }
   
Line 186  makeReply: Line 199  makeReply:
                                                 Limit += vals[i].val_len;                                                  Limit += vals[i].val_len;
                                                 break;                                                  break;
                                         case string:                                          case string:
                                                if (ret || Limit + vals[i].val_len + 1 > BUFSIZ) {                                                if (ret || Limit + vals[i].val_len > BUFSIZ) {
                                                         rpc_SetErr(EMSGSIZE, "Error:: in prepare RPC packet (-7) ...\n");                                                          rpc_SetErr(EMSGSIZE, "Error:: in prepare RPC packet (-7) ...\n");
                                                        rrpc.ret_retcode = ret = -7;                                                        rrpc->ret_retcode = ret = -7;
                                                        rrpc.ret_argc = 0;                                                        rrpc->ret_argc = 0;
                                                         break;                                                          break;
                                                 }                                                  }
   
                                                memcpy(data, vals[i].val.string, vals[i].val_len + 1);                                                memcpy(data, vals[i].val.string, vals[i].val_len);
                                                data += vals[i].val_len + 1;                                                data += vals[i].val_len;
                                                Limit += vals[i].val_len + 1;                                                Limit += vals[i].val_len;
                                                 break;                                                  break;
                                         case blob:                                          case blob:
                                                 if (s->srv_blob.state == disable) {                                                  if (s->srv_blob.state == disable) {
                                                         rpc_SetErr(ENOTSUP, "Error:: BLOB server is disabled\n");                                                          rpc_SetErr(ENOTSUP, "Error:: BLOB server is disabled\n");
                                                        rrpc.ret_retcode = ret = -5;                                                        rrpc->ret_retcode = ret = -5;
                                                        rrpc.ret_argc = 0;                                                        rrpc->ret_argc = 0;
                                                         break;                                                          break;
                                                 }                                                  }
                                         default:                                          default:
Line 210  makeReply: Line 223  makeReply:
   
                                 RPC_FREE_VAL(&vals[i]);                                  RPC_FREE_VAL(&vals[i]);
                         }                          }
                           rpc_srv_freeValsCall(f);
                           vals = NULL;
                           argc = 0;
                 }                  }
   
                 if ((ret = send(c->cli_sock, buf, Limit, 0)) == -1) {                  if ((ret = send(c->cli_sock, buf, Limit, 0)) == -1) {

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


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