Diff for /libaitrpc/src/builtin.c between versions 1.1.1.1.2.9 and 1.4.2.2

version 1.1.1.1.2.9, 2011/05/02 23:07:55 version 1.4.2.2, 2011/11/03 12:52:36
Line 49  SUCH DAMAGE. Line 49  SUCH DAMAGE.
 /* builtin RPC server functions */  /* builtin RPC server functions */
   
 int  int
rpcServerClients(rpc_func_t *call, int ic, rpc_val_t *iv)rpcServerClients(rpc_func_t *call, int ic, array_t *iv)
 {  {
         rpc_srv_t *srv;          rpc_srv_t *srv;
        rpc_val_t *v, *vals;        array_t *vals;
         rpc_cli_t *cli;          rpc_cli_t *cli;
         register int i;          register int i;
        const char *str;        int len;
        char wrk[INET6_ADDRSTRLEN];        const char *str = NULL;
        struct sockaddr_in *s;        char *val, wrk[INET6_ADDRSTRLEN];
        struct sockaddr_in6 *s6; 
   
         RPC_CALLBACK_CHECK_INPUT(call);          RPC_CALLBACK_CHECK_INPUT(call);
         if (!call->func_parent)          if (!call->func_parent)
Line 66  rpcServerClients(rpc_func_t *call, int ic, rpc_val_t * Line 65  rpcServerClients(rpc_func_t *call, int ic, rpc_val_t *
         else          else
                 srv = call->func_parent;                  srv = call->func_parent;
   
        if (!(vals = rpc_srv_retValsCall(call, srv->srv_numcli)))        rpc_srv_getVars(call, &vals);
 
         len = srv->srv_numcli * STRSIZ;
         if (!(val = malloc(len))) {
                 LOGERR;
                 return -1;                  return -1;
           } else
                   memset(val, 0, len);
   
        for (i = 0, cli = srv->srv_clients, v = vals; i < srv->srv_numcli; i++, cli++) {        for (i = 0, cli = srv->srv_clients; i < srv->srv_numcli; i++, cli++) {
                if (!cli->cli_sa.sa_family) {                if (!cli->cli_sa.sa.sa_family)
                        RPC_SET_STR(v++, ""); 
                         continue;                          continue;
                 }  
   
                if (AF_INET == cli->cli_sa.sa_family) {                switch (cli->cli_sa.sa.sa_family) {
                        s = (struct sockaddr_in*) &cli->cli_sa;                        case AF_INET:
                        str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk);                                str = inet_ntop(cli->cli_sa.sa.sa_family, &cli->cli_sa.sin.sin_addr, wrk, sizeof wrk);
                } else {                                break;
                        s6 = (struct sockaddr_in6*) &cli->cli_sa;                        case AF_INET6:
                        str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk);                                str = inet_ntop(cli->cli_sa.sa.sa_family, &cli->cli_sa.sin6.sin6_addr, wrk, sizeof wrk);
                                 break;
                         case AF_LOCAL:
                                 str = cli->cli_sa.sun.sun_path;
                                 break;
                 }                  }
                 if (str)                  if (str)
                        RPC_SET_STR(v++, (char*) str);                        strlcat(val, (char*) str, len);
                 else                  else
                        RPC_SET_STR(v++, "0.0.0.0");                        strlcat(val, "0.0.0.0", len);
                 strlcat(val, " ", len);
         }          }
   
           AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);
           free(val);
         return 0;          return 0;
 }  }
   
 int  int
rpcServerCalls(rpc_func_t *call, int ic, rpc_val_t *iv)rpcServerCalls(rpc_func_t *call, int ic, array_t *iv)
 {  {
         rpc_srv_t *srv;          rpc_srv_t *srv;
        rpc_val_t *v, *vals;        array_t *vals;
         rpc_func_t *f;          rpc_func_t *f;
         register int i;          register int i;
        char str[MAXPATHLEN];        int len;
         char *val, str[MAXPATHLEN];
   
         RPC_CALLBACK_CHECK_INPUT(call);          RPC_CALLBACK_CHECK_INPUT(call);
         if (!call->func_parent)          if (!call->func_parent)
Line 107  rpcServerCalls(rpc_func_t *call, int ic, rpc_val_t *iv Line 118  rpcServerCalls(rpc_func_t *call, int ic, rpc_val_t *iv
                 srv = call->func_parent;                  srv = call->func_parent;
   
         for (i = 0, f = srv->srv_funcs; f; i++, f = f->func_next);          for (i = 0, f = srv->srv_funcs; f; i++, f = f->func_next);
        if (!(vals = rpc_srv_retValsCall(call, i)))        len = i * STRSIZ;
 
         rpc_srv_getVars(call, &vals);
 
         if (!(val = malloc(len))) {
                 LOGERR;
                 return -1;                  return -1;
           } else
                   memset(val, 0, len);
   
        for (f = srv->srv_funcs, v = vals; f; f = f->func_next) {        for (f = srv->srv_funcs, i = 0; f; f = f->func_next) {
                 if (*f->func_name) {                  if (*f->func_name) {
                        memset(str, 0, MAXPATHLEN);                        memset(str, 0, sizeof str);
                        snprintf(str, MAXPATHLEN, "/%s/%s()", f->func_file, f->func_name);                        snprintf(str, sizeof str, "/%s/%s(%d); ", 
                        RPC_SET_STR(v++, str);                                        *f->func_file ? f->func_file : "*", 
                                         f->func_name, io_arraySize(f->func_vars));
                         strlcat(val, str, len);
                 }                  }
         }          }
   
           AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);
           free(val);
         return 0;          return 0;
 }  }
   
 int  int
rpcServerSessions(rpc_func_t *call, int ic, rpc_val_t *iv)rpcServerSessions(rpc_func_t *call, int ic, array_t *iv)
 {  {
         rpc_srv_t *srv;          rpc_srv_t *srv;
        rpc_val_t *vals;        array_t *vals;
         ait_val_t *v;
   
         RPC_CALLBACK_CHECK_INPUT(call);          RPC_CALLBACK_CHECK_INPUT(call);
         if (!call->func_parent)          if (!call->func_parent)
Line 133  rpcServerSessions(rpc_func_t *call, int ic, rpc_val_t  Line 156  rpcServerSessions(rpc_func_t *call, int ic, rpc_val_t 
         else          else
                 srv = call->func_parent;                  srv = call->func_parent;
   
        if (!(vals = rpc_srv_retValsCall(call, 4)))        rpc_srv_getVars(call, &vals);
                return -1; 
   
        RPC_SET_U8(&vals[0], srv->srv_session.sess_version);        v = io_array(vals, 0, ait_val_t*);
        RPC_SET_U32(&vals[1], srv->srv_session.sess_program);        AIT_SET_U8(v, srv->srv_session.sess_version);
        RPC_SET_U32(&vals[2], srv->srv_session.sess_process);        v = io_array(vals, 1, ait_val_t*);
        RPC_SET_I32(&vals[3], srv->srv_numcli);        AIT_SET_U32(v, srv->srv_session.sess_program);
         v = io_array(vals, 2, ait_val_t*);
         AIT_SET_U32(v, srv->srv_session.sess_process);
         v = io_array(vals, 3, ait_val_t*);
         AIT_SET_I32(v, srv->srv_numcli);
   
         return 0;          return 0;
 }  }
   
 int  int
rpcServerShutdown(rpc_func_t *call, int ic, rpc_val_t *iv)rpcServerShutdown(rpc_func_t *call, int ic, array_t *iv)
 {  {
         rpc_srv_t *srv;          rpc_srv_t *srv;
   
Line 156  rpcServerShutdown(rpc_func_t *call, int ic, rpc_val_t  Line 182  rpcServerShutdown(rpc_func_t *call, int ic, rpc_val_t 
                 srv = call->func_parent;                  srv = call->func_parent;
   
         pthread_mutex_lock(&srv->srv_mtx);          pthread_mutex_lock(&srv->srv_mtx);
        rpc_Kill = 1;        srv->srv_kill = kill;
         pthread_mutex_unlock(&srv->srv_mtx);          pthread_mutex_unlock(&srv->srv_mtx);
   
         return 0;          return 0;
Line 165  rpcServerShutdown(rpc_func_t *call, int ic, rpc_val_t  Line 191  rpcServerShutdown(rpc_func_t *call, int ic, rpc_val_t 
 // ----------------------------------------------------  // ----------------------------------------------------
   
 int  int
rpcBLOBServerShutdown(rpc_func_t *call, int ic, rpc_val_t *iv)rpcBLOBServerShutdown(rpc_func_t *call, int ic, array_t *iv)
 {  {
         rpc_srv_t *srv;          rpc_srv_t *srv;
   
Line 176  rpcBLOBServerShutdown(rpc_func_t *call, int ic, rpc_va Line 202  rpcBLOBServerShutdown(rpc_func_t *call, int ic, rpc_va
                 srv = call->func_parent;                  srv = call->func_parent;
   
         pthread_mutex_lock(&srv->srv_blob.mtx);          pthread_mutex_lock(&srv->srv_blob.mtx);
        blob_Kill = 1;        srv->srv_blob.state = kill;
         pthread_mutex_unlock(&srv->srv_blob.mtx);          pthread_mutex_unlock(&srv->srv_blob.mtx);
   
         return 0;          return 0;
 }  }
   
 int  int
rpcBLOBServerVars(rpc_func_t *call, int ic, rpc_val_t *iv)rpcBLOBServerVars(rpc_func_t *call, int ic, array_t *iv)
 {  {
         rpc_srv_t *srv;          rpc_srv_t *srv;
        rpc_val_t *v, *vals;        array_t *vals;
         rpc_blob_t *b;          rpc_blob_t *b;
         register int i;          register int i;
           char *val, str[64];
           int len;
   
         RPC_CALLBACK_CHECK_INPUT(call);          RPC_CALLBACK_CHECK_INPUT(call);
         if (!call->func_parent)          if (!call->func_parent)
Line 196  rpcBLOBServerVars(rpc_func_t *call, int ic, rpc_val_t  Line 224  rpcBLOBServerVars(rpc_func_t *call, int ic, rpc_val_t 
         else          else
                 srv = call->func_parent;                  srv = call->func_parent;
   
           rpc_srv_getVars(call, &vals);
   
           if (srv->srv_blob.state == kill) {
                   AIT_SET_STR(io_array(vals, 0, ait_val_t*), "BLOB Server is killed");
                   return 1;
           }
           if (srv->srv_blob.state == disable) {
                   AIT_SET_STR(io_array(vals, 0, ait_val_t*), "BLOB Server is disabled");
                   return 1;
           }
   
         pthread_mutex_lock(&srv->srv_blob.mtx);          pthread_mutex_lock(&srv->srv_blob.mtx);
         for (i = 0, b = srv->srv_blob.blobs; b; i++, b = b->blob_next);          for (i = 0, b = srv->srv_blob.blobs; b; i++, b = b->blob_next);
        if (!(vals = rpc_srv_retValsCall(call, i))) {        len = i * sizeof str;
 
         if (!len) {
                 AIT_SET_STR(io_array(vals, 0, ait_val_t*), "");
                 pthread_mutex_unlock(&srv->srv_blob.mtx);                  pthread_mutex_unlock(&srv->srv_blob.mtx);
                 return 0;                  return 0;
         }          }
   
        for (b = srv->srv_blob.blobs, v = vals; b; b = b->blob_next)        if (!(val = malloc(len))) {
                RPC_SET_U32(v++, b->blob_var);                LOGERR;
        pthread_mutex_unlock(&srv->srv_blob.mtx);                pthread_mutex_unlock(&srv->srv_blob.mtx);
                 return -1;
         } else
                 memset(val, 0, len);
   
           for (b = srv->srv_blob.blobs, i = 0; b; i++, b = b->blob_next) {
                   memset(str, 0, sizeof str);
                   snprintf(str, sizeof str, "0x%0X(%lu)=%p ", b->blob_var, (u_long) b->blob_len, b->blob_data);
                   strlcat(val, str, len);
           }
   
           AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);
           free(val);
           pthread_mutex_unlock(&srv->srv_blob.mtx);
         return 0;          return 0;
 }  }
   
 int  int
rpcBLOBServerState(rpc_func_t *call, int ic, rpc_val_t *iv)rpcBLOBServerState(rpc_func_t *call, int ic, array_t *iv)
 {  {
         rpc_srv_t *srv;          rpc_srv_t *srv;
   
Line 221  rpcBLOBServerState(rpc_func_t *call, int ic, rpc_val_t Line 275  rpcBLOBServerState(rpc_func_t *call, int ic, rpc_val_t
         else          else
                 srv = call->func_parent;                  srv = call->func_parent;
   
        if (iv[0].val_type != i32)        if (AIT_TYPE(io_array(iv, 0, ait_val_t*)) != i32)
                 return -1;                  return -1;
   
        srv->srv_blob.state = RPC_GET_I32(&iv[0]);        pthread_mutex_lock(&srv->srv_mtx);
         srv->srv_blob.state = AIT_GET_I32(io_array(iv, 0, ait_val_t*));
         pthread_mutex_unlock(&srv->srv_mtx);
         return 0;          return 0;
 }  }
   
 int  int
rpcBLOBServerClients(rpc_func_t *call, int ic, rpc_val_t *iv)rpcBLOBServerClients(rpc_func_t *call, int ic, array_t *iv)
 {  {
         rpc_srv_t *srv;          rpc_srv_t *srv;
        rpc_val_t *v, *vals;        array_t *vals;
         rpc_cli_t *cli;          rpc_cli_t *cli;
         register int i;          register int i;
        const char *str;        int len;
        char wrk[INET6_ADDRSTRLEN];        const char *str = NULL;
        struct sockaddr_in *s;        char *val, wrk[INET6_ADDRSTRLEN];
        struct sockaddr_in6 *s6; 
   
         RPC_CALLBACK_CHECK_INPUT(call);          RPC_CALLBACK_CHECK_INPUT(call);
         if (!call->func_parent)          if (!call->func_parent)
Line 246  rpcBLOBServerClients(rpc_func_t *call, int ic, rpc_val Line 301  rpcBLOBServerClients(rpc_func_t *call, int ic, rpc_val
         else          else
                 srv = call->func_parent;                  srv = call->func_parent;
   
        if (!(vals = rpc_srv_retValsCall(call, srv->srv_numcli)))        rpc_srv_getVars(call, &vals);
 
         if (srv->srv_blob.state == kill) {
                 AIT_SET_STR(io_array(vals, 0, ait_val_t*), "BLOB Server is killed");
                 return 1;
         }
         if (srv->srv_blob.state == disable) {
                 AIT_SET_STR(io_array(vals, 0, ait_val_t*), "BLOB Server is disabled");
                 return 1;
         }
 
         len = srv->srv_numcli * STRSIZ;
         if (!(val = malloc(len))) {
                 LOGERR;
                 return -1;                  return -1;
           } else
                   memset(val, 0, len);
   
        for (i = 0, cli = srv->srv_blob.clients, v = vals; i < srv->srv_numcli; i++, cli++) {        for (i = 0, cli = srv->srv_blob.clients; i < srv->srv_numcli; i++, cli++) {
                if (!cli->cli_sa.sa_family) {                if (!cli->cli_sa.sa.sa_family)
                        RPC_SET_STR(v++, ""); 
                         continue;                          continue;
                 }  
   
                if (AF_INET == cli->cli_sa.sa_family) {                switch (cli->cli_sa.sa.sa_family) {
                        s = (struct sockaddr_in*) &cli->cli_sa;                        case AF_INET:
                        str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk);                                str = inet_ntop(cli->cli_sa.sa.sa_family, &cli->cli_sa.sin.sin_addr, wrk, sizeof wrk);
                } else {                                break;
                        s6 = (struct sockaddr_in6*) &cli->cli_sa;                        case AF_INET6:
                        str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk);                                str = inet_ntop(cli->cli_sa.sa.sa_family, &cli->cli_sa.sin6.sin6_addr, wrk, sizeof wrk);
                                 break;
                         case AF_LOCAL:
                                 str = cli->cli_sa.sun.sun_path;
                                 break;
                 }                  }
                 if (str)                  if (str)
                        RPC_SET_STR(v++, (char*) str);                        strlcat(val, (char*) str, len);
                 else                  else
                        RPC_SET_STR(v++, "0.0.0.0");                        strlcat(val, "0.0.0.0", len);
                 strlcat(val, " ", len);
         }          }
   
           AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);
           free(val);
         return 0;          return 0;
 }  }

Removed from v.1.1.1.1.2.9  
changed lines
  Added in v.1.4.2.2


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