Diff for /libaitrpc/src/cli.c between versions 1.1.1.1.2.4 and 1.1.1.1.2.7

version 1.1.1.1.2.4, 2010/06/28 17:10:39 version 1.1.1.1.2.7, 2011/03/15 15:13:22
Line 263  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule, Line 263  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule,
   
                                         memcpy(data, in_vals[i].val.string, in_vals[i].val_len);                                          memcpy(data, in_vals[i].val.string, in_vals[i].val_len);
                                         v[i].val.string = (int8_t*) ((void*) data - (void*) v);                                          v[i].val.string = (int8_t*) ((void*) data - (void*) v);
                                        data += in_vals[i].val_len;                                        data += in_vals[i].val_len + 1;
                                        Limit += in_vals[i].val_len;                                        Limit += in_vals[i].val_len + 1;
                                         break;                                          break;
                                 default:                                  default:
                                         break;                                          break;
Line 280  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule, Line 280  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule,
                 return -1;                  return -1;
         }          }
         if (ret != Limit) {          if (ret != Limit) {
                rpc_SetErr(EBADMSG, "Error:: in send RPC request, should be send %d bytes, really is %d\n",                 rpc_SetErr(ECANCELED, "Error:: in send RPC request, should be send %d bytes, really is %d\n", 
                                 Limit, ret);                                  Limit, ret);
                 return -9;                  return -9;
         }          }
Line 300  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule, Line 300  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule,
         }          }
         if (!ret)       // receive EOF          if (!ret)       // receive EOF
                 return 0;                  return 0;
        if (ret < sizeof(struct tagRPCCall)) {        if (ret < sizeof(struct tagRPCRet)) {
                 rpc_SetErr(EMSGSIZE, "Error:: too short RPC packet ...\n");                  rpc_SetErr(EMSGSIZE, "Error:: too short RPC packet ...\n");
                 return -4;                  return -4;
         } else          } else
Line 309  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule, Line 309  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule,
         if (memcmp(&rrpc->ret_session, cli->cli_parent, sizeof rrpc->ret_session)) {          if (memcmp(&rrpc->ret_session, cli->cli_parent, sizeof rrpc->ret_session)) {
                 rpc_SetErr(EINVAL, "Error:: get invalid RPC session ...\n");                  rpc_SetErr(EINVAL, "Error:: get invalid RPC session ...\n");
                 return -5;                  return -5;
        }        } else
                 Limit = sizeof(struct tagRPCRet);
         if (rrpc->ret_retcode < 0 && rrpc->ret_errno) {          if (rrpc->ret_retcode < 0 && rrpc->ret_errno) {
                rpc_SetErr(rrpc->ret_errno, "Error::Server side: %s\n", strerror(rrpc->ret_errno));                rpc_SetErr(rrpc->ret_errno, "Error::Server side: %d %s\n"
                                 rrpc->ret_retcode, strerror(rrpc->ret_errno));
                 return -6;                  return -6;
         }          }
           if (rrpc->ret_argc * sizeof(rpc_val_t) > BUFSIZ - Limit) {
                   rpc_SetErr(EMSGSIZE, "Error:: reply RPC packet is too big ...\n");
                   return -7;
           } else
                   Limit += rrpc->ret_argc * sizeof(rpc_val_t);
         // RPC is OK! Go decapsulate variables ...          // RPC is OK! Go decapsulate variables ...
         if (rrpc->ret_argc) {          if (rrpc->ret_argc) {
                 *out_argc = rrpc->ret_argc;                  *out_argc = rrpc->ret_argc;
Line 323  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule, Line 330  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule,
                         *out_argc = 0;                          *out_argc = 0;
                         return -1;                          return -1;
                 } else                  } else
                        Limit = rrpc->ret_argc * sizeof(rpc_val_t);                        memcpy(*out_vals, buf + sizeof(struct tagRPCRet), Limit - sizeof(struct tagRPCRet));
                memcpy(*out_vals, buf + sizeof(struct tagRPCRet), Limit); 
                 // RPC received variables types OK!                  // RPC received variables types OK!
                data = (u_char*) buf + sizeof(struct tagRPCRet) + Limit;                data = (u_char*) buf + Limit;
                 for (i = 0; i < rrpc->ret_argc; i++)                  for (i = 0; i < rrpc->ret_argc; i++)
                         switch ((*out_vals)[i].val_type) {                          switch ((*out_vals)[i].val_type) {
                                 case buffer:                                  case buffer:
                                           if ((*out_vals)[i].val_len > BUFSIZ - Limit) {
                                                   rpc_SetErr(EMSGSIZE, "Error:: Too big RPC packet ...\n");
                                                   free(*out_vals);
                                                   *out_vals = NULL;
                                                   *out_argc = 0;
                                                   return -7;
                                           } else
                                                   Limit += (*out_vals)[i].val_len;
   
                                         (*out_vals)[i].val.buffer = malloc((*out_vals)[i].val_len);                                          (*out_vals)[i].val.buffer = malloc((*out_vals)[i].val_len);
                                         if (!(*out_vals)[i].val.buffer) {                                          if (!(*out_vals)[i].val.buffer) {
                                                 rpc_SetErr(errno, "Error:: in prepare RPC reply ...\n");                                                  rpc_SetErr(errno, "Error:: in prepare RPC reply ...\n");
Line 342  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule, Line 357  rpc_cli_execCall(rpc_cli_t *cli, const char *csModule,
                                         data += (*out_vals)[i].val_len;                                          data += (*out_vals)[i].val_len;
                                         break;                                          break;
                                 case string:                                  case string:
                                           if ((*out_vals)[i].val_len + 1 > BUFSIZ - Limit) {
                                                   rpc_SetErr(EMSGSIZE, "Error:: Too big RPC packet ...\n");
                                                   free(*out_vals);
                                                   *out_vals = NULL;
                                                   *out_argc = 0;
                                                   return -7;
                                           } else
                                                   Limit += (*out_vals)[i].val_len + 1;
   
                                         (*out_vals)[i].val.string = (int8_t*) strdup((char*) data);                                          (*out_vals)[i].val.string = (int8_t*) strdup((char*) data);
                                         if (!(*out_vals)[i].val.string) {                                          if (!(*out_vals)[i].val.string) {
                                                 rpc_SetErr(errno, "Error:: in prepare RPC reply ...\n");                                                  rpc_SetErr(errno, "Error:: in prepare RPC reply ...\n");

Removed from v.1.1.1.1.2.4  
changed lines
  Added in v.1.1.1.1.2.7


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