Diff for /libaitrpc/src/builtin.c between versions 1.3.2.4 and 1.7

version 1.3.2.4, 2011/09/01 11:39:26 version 1.7, 2012/05/14 08:39:05
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 55  rpcServerClients(rpc_func_t *call, int ic, array_t *iv Line 55  rpcServerClients(rpc_func_t *call, int ic, array_t *iv
         array_t *vals;          array_t *vals;
         rpc_cli_t *cli;          rpc_cli_t *cli;
         register int i;          register int i;
           int len;
         const char *str = NULL;          const char *str = NULL;
         char *val, wrk[INET6_ADDRSTRLEN];          char *val, wrk[INET6_ADDRSTRLEN];
         struct sockaddr_in *s;  
         struct sockaddr_in6 *s6;  
         struct sockaddr_un *su;  
   
         RPC_CALLBACK_CHECK_INPUT(call);          RPC_CALLBACK_CHECK_INPUT(call);
         if (!call->func_parent)          if (!call->func_parent)
Line 69  rpcServerClients(rpc_func_t *call, int ic, array_t *iv Line 67  rpcServerClients(rpc_func_t *call, int ic, array_t *iv
   
         rpc_srv_getVars(call, &vals);          rpc_srv_getVars(call, &vals);
   
        if (!(val = calloc(srv->srv_numcli, STRSIZ))) {        len = srv->srv_numcli * STRSIZ;
         if (!(val = malloc(len))) {
                 LOGERR;                  LOGERR;
                 return -1;                  return -1;
         } else          } else
                memset(val, 0, srv->srv_numcli * STRSIZ);                memset(val, 0, len);
   
         for (i = 0, cli = srv->srv_clients; 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)
                         continue;                          continue;
   
                switch (cli->cli_sa.sa_family) {                switch (cli->cli_sa.sa.sa_family) {
                         case AF_INET:                          case AF_INET:
                                s = (struct sockaddr_in*) &cli->cli_sa;                                str = inet_ntop(cli->cli_sa.sa.sa_family, &cli->cli_sa.sin.sin_addr, wrk, sizeof wrk);
                                str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk); 
                                 break;                                  break;
                         case AF_INET6:                          case AF_INET6:
                                s6 = (struct sockaddr_in6*) &cli->cli_sa;                                str = inet_ntop(cli->cli_sa.sa.sa_family, &cli->cli_sa.sin6.sin6_addr, wrk, sizeof wrk);
                                str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk); 
                                 break;                                  break;
                         case AF_LOCAL:                          case AF_LOCAL:
                                su = (struct sockaddr_un*) &cli->cli_sa;                                str = cli->cli_sa.sun.sun_path;
                                str = su->sun_path; 
                                 break;                                  break;
                 }                  }
                 if (str)                  if (str)
                        strlcat(val, (char*) str, srv->srv_numcli * STRSIZ);                        strlcat(val, (char*) str, len);
                 else                  else
                        strlcat(val, "0.0.0.0", srv->srv_numcli * STRSIZ);                        strlcat(val, "0.0.0.0", len);
                strlcat(val, " ", srv->srv_numcli * STRSIZ);                strlcat(val, " ", len);
         }          }
   
         AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);          AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);
Line 133  rpcServerCalls(rpc_func_t *call, int ic, array_t *iv) Line 129  rpcServerCalls(rpc_func_t *call, int ic, array_t *iv)
                 memset(val, 0, len);                  memset(val, 0, len);
   
         for (f = srv->srv_funcs, i = 0; f; f = f->func_next) {          for (f = srv->srv_funcs, i = 0; f; f = f->func_next) {
                if (*f->func_name) {                if (*AIT_GET_STR(&f->func_name)) {
                         memset(str, 0, sizeof str);                          memset(str, 0, sizeof str);
                        snprintf(str, sizeof str, "/%s/%s(%d); ",                         if (AIT_ISEMPTY(&f->func_file))
                                        f->func_file, f->func_name, io_arraySize(f->func_vars));                                snprintf(str, sizeof str, "/*/%s(%d); ", 
                                                 AIT_GET_STR(&f->func_name), io_arraySize(f->func_vars));
                         else
                                 snprintf(str, sizeof str, "/%s/%s(%d); ", AIT_GET_STR(&f->func_file), 
                                                 AIT_GET_STR(&f->func_name), io_arraySize(f->func_vars));
                         strlcat(val, str, len);                          strlcat(val, str, len);
                 }                  }
         }          }
Line 184  rpcServerShutdown(rpc_func_t *call, int ic, array_t *i Line 184  rpcServerShutdown(rpc_func_t *call, int ic, array_t *i
         else          else
                 srv = call->func_parent;                  srv = call->func_parent;
   
         pthread_mutex_lock(&srv->srv_mtx);  
         srv->srv_kill = kill;          srv->srv_kill = kill;
         pthread_mutex_unlock(&srv->srv_mtx);  
   
         return 0;          return 0;
 }  }
Line 204  rpcBLOBServerShutdown(rpc_func_t *call, int ic, array_ Line 202  rpcBLOBServerShutdown(rpc_func_t *call, int ic, array_
         else          else
                 srv = call->func_parent;                  srv = call->func_parent;
   
         pthread_mutex_lock(&srv->srv_blob.mtx);  
         srv->srv_blob.state = kill;          srv->srv_blob.state = kill;
         pthread_mutex_unlock(&srv->srv_blob.mtx);  
   
         return 0;          return 0;
 }  }
Line 218  rpcBLOBServerVars(rpc_func_t *call, int ic, array_t *i Line 214  rpcBLOBServerVars(rpc_func_t *call, int ic, array_t *i
         array_t *vals;          array_t *vals;
         rpc_blob_t *b;          rpc_blob_t *b;
         register int i;          register int i;
        char *val, str[12];        char *val, str[64];
         int len;          int len;
   
         RPC_CALLBACK_CHECK_INPUT(call);          RPC_CALLBACK_CHECK_INPUT(call);
Line 227  rpcBLOBServerVars(rpc_func_t *call, int ic, array_t *i Line 223  rpcBLOBServerVars(rpc_func_t *call, int ic, array_t *i
         else          else
                 srv = call->func_parent;                  srv = call->func_parent;
   
        pthread_mutex_lock(&srv->srv_blob.mtx);        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;
         }
 
         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);
         len = i * sizeof str;          len = i * sizeof str;
   
        rpc_srv_getVars(call, &vals);        if (!len) {
                 AIT_SET_STR(io_array(vals, 0, ait_val_t*), "");
                 return 0;
         }
   
         if (!(val = malloc(len))) {          if (!(val = malloc(len))) {
                 LOGERR;                  LOGERR;
Line 241  rpcBLOBServerVars(rpc_func_t *call, int ic, array_t *i Line 250  rpcBLOBServerVars(rpc_func_t *call, int ic, array_t *i
   
         for (b = srv->srv_blob.blobs, i = 0; b; i++, b = b->blob_next) {          for (b = srv->srv_blob.blobs, i = 0; b; i++, b = b->blob_next) {
                 memset(str, 0, sizeof str);                  memset(str, 0, sizeof str);
                snprintf(str, sizeof str, "0x%0X ", b->blob_var);                snprintf(str, sizeof str, "0x%0X(%lu)=%p ", b->blob_var, (u_long) b->blob_len, b->blob_data);
                 strlcat(val, str, len);                  strlcat(val, str, len);
         }          }
         pthread_mutex_unlock(&srv->srv_blob.mtx);  
   
         AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);          AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);
         free(val);          free(val);
Line 276  rpcBLOBServerClients(rpc_func_t *call, int ic, array_t Line 284  rpcBLOBServerClients(rpc_func_t *call, int ic, array_t
         array_t *vals;          array_t *vals;
         rpc_cli_t *cli;          rpc_cli_t *cli;
         register int i;          register int i;
           int len;
         const char *str = NULL;          const char *str = NULL;
         char *val, wrk[INET6_ADDRSTRLEN];          char *val, wrk[INET6_ADDRSTRLEN];
         struct sockaddr_in *s;  
         struct sockaddr_in6 *s6;  
         struct sockaddr_un *su;  
   
         RPC_CALLBACK_CHECK_INPUT(call);          RPC_CALLBACK_CHECK_INPUT(call);
         if (!call->func_parent)          if (!call->func_parent)
Line 290  rpcBLOBServerClients(rpc_func_t *call, int ic, array_t Line 296  rpcBLOBServerClients(rpc_func_t *call, int ic, array_t
   
         rpc_srv_getVars(call, &vals);          rpc_srv_getVars(call, &vals);
   
        if (!(val = calloc(srv->srv_numcli, STRSIZ))) {        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;                  LOGERR;
                 return -1;                  return -1;
         } else          } else
                memset(val, 0, srv->srv_numcli * STRSIZ);                memset(val, 0, len);
   
         for (i = 0, cli = srv->srv_blob.clients; 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)
                         continue;                          continue;
   
                switch (cli->cli_sa.sa_family) {                switch (cli->cli_sa.sa.sa_family) {
                         case AF_INET:                          case AF_INET:
                                s = (struct sockaddr_in*) &cli->cli_sa;                                str = inet_ntop(cli->cli_sa.sa.sa_family, &cli->cli_sa.sin.sin_addr, wrk, sizeof wrk);
                                str = inet_ntop(cli->cli_sa.sa_family, &s->sin_addr, wrk, sizeof wrk); 
                                 break;                                  break;
                         case AF_INET6:                          case AF_INET6:
                                s6 = (struct sockaddr_in6*) &cli->cli_sa;                                str = inet_ntop(cli->cli_sa.sa.sa_family, &cli->cli_sa.sin6.sin6_addr, wrk, sizeof wrk);
                                str = inet_ntop(cli->cli_sa.sa_family, &s6->sin6_addr, wrk, sizeof wrk); 
                                 break;                                  break;
                         case AF_LOCAL:                          case AF_LOCAL:
                                su = (struct sockaddr_un*) &cli->cli_sa;                                str = cli->cli_sa.sun.sun_path;
                                str = su->sun_path; 
                                 break;                                  break;
                 }                  }
                 if (str)                  if (str)
                        strlcat(val, (char*) str, srv->srv_numcli * STRSIZ);                        strlcat(val, (char*) str, len);
                 else                  else
                        strlcat(val, "0.0.0.0", srv->srv_numcli * STRSIZ);                        strlcat(val, "0.0.0.0", len);
                strlcat(val, " ", srv->srv_numcli * STRSIZ);                strlcat(val, " ", len);
         }          }
   
         AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);          AIT_SET_STR(io_array(vals, 0, ait_val_t*), val);

Removed from v.1.3.2.4  
changed lines
  Added in v.1.7


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