bayonne-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bayonne-devel] Sun RPC patches, continued


From: Michel Stam
Subject: [Bayonne-devel] Sun RPC patches, continued
Date: Tue, 16 Nov 2004 12:10:30 +0100
User-agent: Mozilla/5.0 (Linux) -- MSIE 6.0 SUCKS

Ok, just hit a slight bug in one of the RPC calls I was working on, which triggered a segfault.

Patches attached; use bayonne-1.2.11.sunrpc.diff for Bayonne 1.2.11 and 1.2.12; bayonne-1.2.13.sunrpc.diff for the 1.2.13 release.

I've tested on 1.2.11 but I don't expect any issues on the later releases. Test utility is attached (rpc_calls.c). It can be compiled using:
cc bayonne_cl.c bayonne_xdr.c rpc_calls.c -o rpc_calls
in the modules/sunrpc directory. I saw the utility was already included in the 1.2.13 build process so simply replacing the file there and executing make should work too.

Secondly;

As to the duration which keeps increasing on idle lines configured for outbound calls (reported in my previous mail); It appears that if the call is established successfully using a 'dial' command the duration is reset back to 0 at the end of the call. In all other cases (no dial attempt made or dial attempt failed) the duration only increases.

It might be that the recent outdialing problems which are (were?) present in the globalcall driver indirectly cause this problem. I know that this was being worked on; Can anyone tell me if this has been fixed?

I'll try with Bayonne 1.2.13 in a few days and will post the results when I have them.

Cheers,

Michel

*** modules/sunrpc/bayonne_rpc.h        Thu Feb  5 02:41:58 2004
--- modules/sunrpc/bayonne_rpc.h        Mon Nov 15 15:05:18 2004
***************
*** 40,47 ****
--- 40,50 ----
                int *members_val;
        } members;
  };
  typedef struct bayonne_conf bayonne_conf;
+ #define BAYONNE_POLICY_NAME_SZ 32
+ #define BAYONNE_POLICY_SCHED_SZ 32
+ #define BAYONNE_POLICY_NUMBER_SZ 16
  
  struct bayonne_policy {
        char *pol_name;
        char *pol_sched;
***************
*** 79,86 ****
--- 82,97 ----
        char node_ports;
        char node_stat[255];
  };
  typedef struct bayonne_node bayonne_node;
+ #define BAYONNE_PORT_CALLER_SZ 16
+ #define BAYONNE_PORT_DIALED_SZ 16
+ #define BAYONNE_PORT_NAME_SZ 64
+ #define BAYONNE_PORT_USER_SZ 32
+ #define BAYONNE_PORT_INFO_SZ 8
+ #define BAYONNE_PORT_LANG_SZ 32
+ #define BAYONNE_PORT_GID_SZ 64
+ #define BAYONNE_PORT_POLICY_SZ 32
  
  struct bayonne_port {
        char *port_caller;
        char *port_dialed;
***************
*** 125,132 ****
--- 136,144 ----
  };
  typedef struct bayonne_reserve bayonne_reserve;
  
  typedef char *argv_string;
+ #define BAYONNE_COMMAND_NAME_SZ 32
  
  struct bayonne_command {
        char *mod_name;
        struct {
***************
*** 134,141 ****
--- 146,154 ----
                argv_string *argv_val;
        } argv;
  };
  typedef struct bayonne_command bayonne_command;
+ #define BAYONNE_START_POLICY_SZ 32
  
  struct bayonne_start {
        int port;
        char *policy;
***************
*** 144,151 ****
--- 157,165 ----
                argv_string *argv_val;
        } argv;
  };
  typedef struct bayonne_start bayonne_start;
+ #define BAYONNE_REQUEST_POLICY_SZ 32
  
  struct bayonne_request {
        char *req_policy;
        int req_timeout;
***************
*** 154,161 ****
--- 168,181 ----
                argv_string *argv_val;
        } argv;
  };
  typedef struct bayonne_request bayonne_request;
+ #define BAYONNE_INFO_USER_SZ 32
+ #define BAYONNE_INFO_NODE_SZ 32
+ #define BAYONNE_INFO_VERSION_SZ 16
+ #define BAYONNE_INFO_DRIVER_SZ 16
+ #define BAYONNE_INFO_TOKEN_SZ 2
+ #define BAYONNE_INFO_POLICY_SZ 256
  
  struct bayonne_info {
        char *tgi_user;
        char *tgi_node;
*** modules/sunrpc/bayonne_rpc.x        Wed Aug  7 17:09:55 2002
--- modules/sunrpc/bayonne_rpc.x        Wed Nov 10 13:46:45 2004
***************
*** 26,38 ****
        int limit;
        int members<>;
  };
  
  struct bayonne_policy
  {
!       string pol_name<32>;
!       string pol_sched<32>;
!       string pol_number<16>;
        int pol_active;
        int max_incoming;
        int max_outgoing;
        long tot_incoming;
--- 26,41 ----
        int limit;
        int members<>;
  };
  
+ const BAYONNE_POLICY_NAME_SZ = 32;
+ const BAYONNE_POLICY_SCHED_SZ = 32;
+ const BAYONNE_POLICY_NUMBER_SZ = 16;
  struct bayonne_policy
  {
!       string pol_name<BAYONNE_POLICY_NAME_SZ>;
!       string pol_sched<BAYONNE_POLICY_SCHED_SZ>;
!       string pol_number<BAYONNE_POLICY_NUMBER_SZ>;
        int pol_active;
        int max_incoming;
        int max_outgoing;
        long tot_incoming;
***************
*** 59,76 ****
        char node_ports;
        char node_stat[255];
  };
  
  struct bayonne_port
  {
!       string port_caller<16>;
!       string port_dialed<16>;
!       string port_name<64>;
!       string port_user<32>;
!       string port_info<8>;
!       string port_lang<32>;
!       string port_gid<64>;
!       string port_policy<32>;
        long port_caps;
        long port_duration;
  };
  
--- 62,87 ----
        char node_ports;
        char node_stat[255];
  };
  
+ const BAYONNE_PORT_CALLER_SZ = 16;
+ const BAYONNE_PORT_DIALED_SZ = 16;
+ const BAYONNE_PORT_NAME_SZ = 64;
+ const BAYONNE_PORT_USER_SZ = 32;
+ const BAYONNE_PORT_INFO_SZ = 8;
+ const BAYONNE_PORT_LANG_SZ = 32;
+ const BAYONNE_PORT_GID_SZ = 64;
+ const BAYONNE_PORT_POLICY_SZ = 32;
  struct bayonne_port
  {
!       string port_caller<BAYONNE_PORT_CALLER_SZ>;
!       string port_dialed<BAYONNE_PORT_DIALED_SZ>;
!       string port_name<BAYONNE_PORT_NAME_SZ>;
!       string port_user<BAYONNE_PORT_USER_SZ>;
!       string port_info<BAYONNE_PORT_INFO_SZ>;
!       string port_lang<BAYONNE_PORT_LANG_SZ>;
!       string port_gid<BAYONNE_PORT_GID_SZ>;
!       string port_policy<BAYONNE_PORT_POLICY_SZ>;
        long port_caps;
        long port_duration;
  };
  
***************
*** 101,132 ****
  };
  
  typedef string argv_string<>;
  
  struct bayonne_command {
!       string mod_name<32>;
        argv_string argv<>;
  };
  
  struct bayonne_start {
        int port;
!       string policy<32>;
        argv_string argv<>;
  };
  
  struct bayonne_request {
!       string req_policy<32>;
        int req_timeout;
        argv_string argv<>;
  };
  
  struct bayonne_info {
!       string tgi_user<32>;
!       string tgi_node<32>;
!       string tgi_version<16>;
!       string tgi_driver<16>;
!       string tgi_token<2>;
!       string tgi_policy<256>;
        unsigned nodes;
        unsigned ports;
        unsigned used;
        unsigned mixers;
--- 112,152 ----
  };
  
  typedef string argv_string<>;
  
+ const BAYONNE_COMMAND_NAME_SZ = 32;
  struct bayonne_command {
!       string mod_name<BAYONNE_COMMAND_NAME_SZ>;
        argv_string argv<>;
  };
  
+ const BAYONNE_START_POLICY_SZ = 32;
  struct bayonne_start {
        int port;
!       string policy<BAYONNE_START_POLICY_SZ>;
        argv_string argv<>;
  };
  
+ const BAYONNE_REQUEST_POLICY_SZ = 32;
  struct bayonne_request {
!       string req_policy<BAYONNE_REQUEST_POLICY_SZ>;
        int req_timeout;
        argv_string argv<>;
  };
  
+ const BAYONNE_INFO_USER_SZ = 32;
+ const BAYONNE_INFO_NODE_SZ = 32;
+ const BAYONNE_INFO_VERSION_SZ = 16;
+ const BAYONNE_INFO_DRIVER_SZ = 16;
+ const BAYONNE_INFO_TOKEN_SZ = 2;
+ const BAYONNE_INFO_POLICY_SZ = 256;
  struct bayonne_info {
!       string tgi_user<BAYONNE_INFO_USER_SZ>;
!       string tgi_node<BAYONNE_INFO_NODE_SZ>;
!       string tgi_version<BAYONNE_INFO_VERSION_SZ>;
!       string tgi_driver<BAYONNE_INFO_DRIVER_SZ>;
!       string tgi_token<BAYONNE_INFO_TOKEN_SZ>;
!       string tgi_policy<BAYONNE_INFO_POLICY_SZ>;
        unsigned nodes;
        unsigned ports;
        unsigned used;
        unsigned mixers;
*** modules/sunrpc/bayonne_svc.c        Wed Aug  7 17:09:55 2002
--- modules/sunrpc/bayonne_svc.c        Mon Nov 15 15:05:18 2004
***************
*** 187,203 ****
                svcerr_noproc (transp);
                return;
        }
        memset ((char *)&argument, 0, sizeof (argument));
!       if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) 
&argument)) {
                svcerr_decode (transp);
                return;
        }
        result = (*local)((char *)&argument, rqstp);
!       if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, 
result)) {
                svcerr_systemerr (transp);
        }
!       if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) 
&argument)) {
                fprintf (stderr, "%s", "unable to free arguments");
                exit (1);
        }
        return;
--- 187,203 ----
                svcerr_noproc (transp);
                return;
        }
        memset ((char *)&argument, 0, sizeof (argument));
!       if (!svc_getargs (transp, _xdr_argument, (caddr_t) &argument)) {
                svcerr_decode (transp);
                return;
        }
        result = (*local)((char *)&argument, rqstp);
!       if (result != NULL && !svc_sendreply(transp, _xdr_result, result)) {
                svcerr_systemerr (transp);
        }
!       if (!svc_freeargs (transp, _xdr_argument, (caddr_t) &argument)) {
                fprintf (stderr, "%s", "unable to free arguments");
                exit (1);
        }
        return;
*** modules/sunrpc/bayonne_xdr.c        Wed Aug  7 17:09:55 2002
--- modules/sunrpc/bayonne_xdr.c        Mon Nov 15 15:05:18 2004
***************
*** 43,55 ****
        register int32_t *buf;
  
  
        if (xdrs->x_op == XDR_ENCODE) {
!                if (!xdr_string (xdrs, &objp->pol_name, 32))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->pol_sched, 32))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->pol_number, 16))
                         return FALSE;
                buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
                if (buf == NULL) {
                         if (!xdr_int (xdrs, &objp->pol_active))
--- 43,55 ----
        register int32_t *buf;
  
  
        if (xdrs->x_op == XDR_ENCODE) {
!                if (!xdr_string (xdrs, &objp->pol_name, 
BAYONNE_POLICY_NAME_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->pol_sched, 
BAYONNE_POLICY_SCHED_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->pol_number, 
BAYONNE_POLICY_NUMBER_SZ))
                         return FALSE;
                buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
                if (buf == NULL) {
                         if (!xdr_int (xdrs, &objp->pol_active))
***************
*** 77,89 ****
                        sizeof (int), (xdrproc_t) xdr_int))
                         return FALSE;
                return TRUE;
        } else if (xdrs->x_op == XDR_DECODE) {
!                if (!xdr_string (xdrs, &objp->pol_name, 32))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->pol_sched, 32))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->pol_number, 16))
                         return FALSE;
                buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
                if (buf == NULL) {
                         if (!xdr_int (xdrs, &objp->pol_active))
--- 77,89 ----
                        sizeof (int), (xdrproc_t) xdr_int))
                         return FALSE;
                return TRUE;
        } else if (xdrs->x_op == XDR_DECODE) {
!                if (!xdr_string (xdrs, &objp->pol_name, 
BAYONNE_POLICY_NAME_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->pol_sched, 
BAYONNE_POLICY_SCHED_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->pol_number, 
BAYONNE_POLICY_NUMBER_SZ))
                         return FALSE;
                buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
                if (buf == NULL) {
                         if (!xdr_int (xdrs, &objp->pol_active))
***************
*** 112,124 ****
                         return FALSE;
         return TRUE;
        }
  
!        if (!xdr_string (xdrs, &objp->pol_name, 32))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->pol_sched, 32))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->pol_number, 16))
                 return FALSE;
         if (!xdr_int (xdrs, &objp->pol_active))
                 return FALSE;
         if (!xdr_int (xdrs, &objp->max_incoming))
--- 112,124 ----
                         return FALSE;
         return TRUE;
        }
  
!        if (!xdr_string (xdrs, &objp->pol_name, BAYONNE_POLICY_NAME_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->pol_sched, BAYONNE_POLICY_SCHED_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->pol_number, BAYONNE_POLICY_NUMBER_SZ))
                 return FALSE;
         if (!xdr_int (xdrs, &objp->pol_active))
                 return FALSE;
         if (!xdr_int (xdrs, &objp->max_incoming))
***************
*** 224,246 ****
  xdr_bayonne_port (XDR *xdrs, bayonne_port *objp)
  {
        register int32_t *buf;
  
!        if (!xdr_string (xdrs, &objp->port_caller, 16))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_dialed, 16))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_name, 64))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_user, 32))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_info, 8))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_lang, 32))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_gid, 64))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_policy, 32))
                 return FALSE;
         if (!xdr_long (xdrs, &objp->port_caps))
                 return FALSE;
         if (!xdr_long (xdrs, &objp->port_duration))
--- 224,246 ----
  xdr_bayonne_port (XDR *xdrs, bayonne_port *objp)
  {
        register int32_t *buf;
  
!        if (!xdr_string (xdrs, &objp->port_caller, BAYONNE_PORT_CALLER_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_dialed, BAYONNE_PORT_DIALED_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_name, BAYONNE_PORT_NAME_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_user, BAYONNE_PORT_USER_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_info, BAYONNE_PORT_INFO_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_lang, BAYONNE_PORT_LANG_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_gid, BAYONNE_PORT_GID_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->port_policy, BAYONNE_PORT_POLICY_SZ))
                 return FALSE;
         if (!xdr_long (xdrs, &objp->port_caps))
                 return FALSE;
         if (!xdr_long (xdrs, &objp->port_duration))
***************
*** 341,349 ****
  xdr_bayonne_command (XDR *xdrs, bayonne_command *objp)
  {
        register int32_t *buf;
  
!        if (!xdr_string (xdrs, &objp->mod_name, 32))
                 return FALSE;
         if (!xdr_array (xdrs, (char **)&objp->argv.argv_val, (u_int *) 
&objp->argv.argv_len, ~0,
                sizeof (argv_string), (xdrproc_t) xdr_argv_string))
                 return FALSE;
--- 341,349 ----
  xdr_bayonne_command (XDR *xdrs, bayonne_command *objp)
  {
        register int32_t *buf;
  
!        if (!xdr_string (xdrs, &objp->mod_name, BAYONNE_COMMAND_NAME_SZ))
                 return FALSE;
         if (!xdr_array (xdrs, (char **)&objp->argv.argv_val, (u_int *) 
&objp->argv.argv_len, ~0,
                sizeof (argv_string), (xdrproc_t) xdr_argv_string))
                 return FALSE;
***************
*** 356,364 ****
        register int32_t *buf;
  
         if (!xdr_int (xdrs, &objp->port))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->policy, 32))
                 return FALSE;
         if (!xdr_array (xdrs, (char **)&objp->argv.argv_val, (u_int *) 
&objp->argv.argv_len, ~0,
                sizeof (argv_string), (xdrproc_t) xdr_argv_string))
                 return FALSE;
--- 356,364 ----
        register int32_t *buf;
  
         if (!xdr_int (xdrs, &objp->port))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->policy, BAYONNE_START_POLICY_SZ))
                 return FALSE;
         if (!xdr_array (xdrs, (char **)&objp->argv.argv_val, (u_int *) 
&objp->argv.argv_len, ~0,
                sizeof (argv_string), (xdrproc_t) xdr_argv_string))
                 return FALSE;
***************
*** 369,377 ****
  xdr_bayonne_request (XDR *xdrs, bayonne_request *objp)
  {
        register int32_t *buf;
  
!        if (!xdr_string (xdrs, &objp->req_policy, 32))
                 return FALSE;
         if (!xdr_int (xdrs, &objp->req_timeout))
                 return FALSE;
         if (!xdr_array (xdrs, (char **)&objp->argv.argv_val, (u_int *) 
&objp->argv.argv_len, ~0,
--- 369,377 ----
  xdr_bayonne_request (XDR *xdrs, bayonne_request *objp)
  {
        register int32_t *buf;
  
!        if (!xdr_string (xdrs, &objp->req_policy, BAYONNE_REQUEST_POLICY_SZ))
                 return FALSE;
         if (!xdr_int (xdrs, &objp->req_timeout))
                 return FALSE;
         if (!xdr_array (xdrs, (char **)&objp->argv.argv_val, (u_int *) 
&objp->argv.argv_len, ~0,
***************
*** 386,404 ****
        register int32_t *buf;
  
  
        if (xdrs->x_op == XDR_ENCODE) {
!                if (!xdr_string (xdrs, &objp->tgi_user, 32))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_node, 32))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_version, 16))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_driver, 16))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_token, 2))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_policy, 256))
                         return FALSE;
                buf = XDR_INLINE (xdrs, 7 * BYTES_PER_XDR_UNIT);
                if (buf == NULL) {
                         if (!xdr_u_int (xdrs, &objp->nodes))
--- 386,404 ----
        register int32_t *buf;
  
  
        if (xdrs->x_op == XDR_ENCODE) {
!                if (!xdr_string (xdrs, &objp->tgi_user, BAYONNE_INFO_USER_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_node, BAYONNE_INFO_NODE_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_version, 
BAYONNE_INFO_VERSION_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_driver, 
BAYONNE_INFO_DRIVER_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_token, 
BAYONNE_INFO_TOKEN_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_policy, 
BAYONNE_INFO_POLICY_SZ))
                         return FALSE;
                buf = XDR_INLINE (xdrs, 7 * BYTES_PER_XDR_UNIT);
                if (buf == NULL) {
                         if (!xdr_u_int (xdrs, &objp->nodes))
***************
*** 425,443 ****
                        IXDR_PUT_LONG(buf, objp->gid);
                }
                return TRUE;
        } else if (xdrs->x_op == XDR_DECODE) {
!                if (!xdr_string (xdrs, &objp->tgi_user, 32))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_node, 32))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_version, 16))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_driver, 16))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_token, 2))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_policy, 256))
                         return FALSE;
                buf = XDR_INLINE (xdrs, 7 * BYTES_PER_XDR_UNIT);
                if (buf == NULL) {
                         if (!xdr_u_int (xdrs, &objp->nodes))
--- 425,443 ----
                        IXDR_PUT_LONG(buf, objp->gid);
                }
                return TRUE;
        } else if (xdrs->x_op == XDR_DECODE) {
!                if (!xdr_string (xdrs, &objp->tgi_user, BAYONNE_INFO_USER_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_node, BAYONNE_INFO_NODE_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_version, 
BAYONNE_INFO_VERSION_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_driver, 
BAYONNE_INFO_DRIVER_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_token, 
BAYONNE_INFO_TOKEN_SZ))
                         return FALSE;
!                if (!xdr_string (xdrs, &objp->tgi_policy, 
BAYONNE_INFO_POLICY_SZ))
                         return FALSE;
                buf = XDR_INLINE (xdrs, 7 * BYTES_PER_XDR_UNIT);
                if (buf == NULL) {
                         if (!xdr_u_int (xdrs, &objp->nodes))
***************
*** 465,483 ****
                }
         return TRUE;
        }
  
!        if (!xdr_string (xdrs, &objp->tgi_user, 32))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_node, 32))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_version, 16))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_driver, 16))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_token, 2))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_policy, 256))
                 return FALSE;
         if (!xdr_u_int (xdrs, &objp->nodes))
                 return FALSE;
         if (!xdr_u_int (xdrs, &objp->ports))
--- 465,483 ----
                }
         return TRUE;
        }
  
!        if (!xdr_string (xdrs, &objp->tgi_user, BAYONNE_INFO_USER_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_node, BAYONNE_INFO_NODE_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_version, BAYONNE_INFO_VERSION_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_driver, BAYONNE_INFO_DRIVER_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_token, BAYONNE_INFO_TOKEN_SZ))
                 return FALSE;
!        if (!xdr_string (xdrs, &objp->tgi_policy, BAYONNE_INFO_POLICY_SZ))
                 return FALSE;
         if (!xdr_u_int (xdrs, &objp->nodes))
                 return FALSE;
         if (!xdr_u_int (xdrs, &objp->ports))
*** modules/sunrpc/calls.cpp    Wed Aug  7 14:26:41 2002
--- modules/sunrpc/calls.cpp    Fri Nov 12 13:21:49 2004
***************
*** 140,154 ****
  bayonne_info *bayonne_query_1_svc(void *, struct svc_req *reqsvc)
  {
        TrunkGroup *grp = getGroup("*");
        static bayonne_info info;
        if(grp)
!               strcpy(info.tgi_policy, grp->getLast("groups"));
!       strcpy(info.tgi_node, keyserver.getNode());
!       strcpy(info.tgi_user, keyserver.getLast("user"));
!       strcpy(info.tgi_token , keyserver.getToken());
!       strcpy(info.tgi_driver, plugins.getDriverName());
!       strcpy(info.tgi_version, getenv("SERVER_VERSION"));
        info.ports = driver->getTrunkCount();
        info.used = driver->getTrunkUsed();
        info.mixers = driver->getMixers();
        info.conferences = driver->getGroups();
--- 140,175 ----
  bayonne_info *bayonne_query_1_svc(void *, struct svc_req *reqsvc)
  {
        TrunkGroup *grp = getGroup("*");
        static bayonne_info info;
+       static char tgi_user[ BAYONNE_INFO_USER_SZ ];
+       static char tgi_node[ BAYONNE_INFO_NODE_SZ ];
+       static char tgi_version[ BAYONNE_INFO_VERSION_SZ ];
+       static char tgi_driver[ BAYONNE_INFO_DRIVER_SZ ];
+       static char tgi_token[ BAYONNE_INFO_TOKEN_SZ ];
+       static char tgi_policy[ BAYONNE_INFO_POLICY_SZ ];
+ 
+       memset( ( void *) &info, 0, sizeof ( bayonne_info ) );
+       memset( ( void *) tgi_user, 0, BAYONNE_INFO_USER_SZ );
+       memset( ( void *) tgi_node, 0, BAYONNE_INFO_NODE_SZ );
+       memset( ( void *) tgi_version, 0, BAYONNE_INFO_VERSION_SZ );
+       memset( ( void *) tgi_driver, 0, BAYONNE_INFO_DRIVER_SZ );
+       memset( ( void *) tgi_token, 0, BAYONNE_INFO_TOKEN_SZ );
+       memset( ( void *) tgi_policy, 0, BAYONNE_INFO_POLICY_SZ );
+       info.tgi_policy = tgi_policy;
+       info.tgi_node = tgi_node;
+       info.tgi_user = tgi_user;
+       info.tgi_token = tgi_token;
+       info.tgi_driver = tgi_driver;
+       info.tgi_version = tgi_version;
+       
        if(grp)
!        strncpy(info.tgi_policy, grp->getLast("groups"), 
BAYONNE_INFO_POLICY_SZ );
!       strncpy(info.tgi_node, keyserver.getNode(), BAYONNE_INFO_NODE_SZ );
!       strncpy(info.tgi_user, keyserver.getLast("user"), BAYONNE_INFO_USER_SZ 
);
!       strncpy(info.tgi_token , keyserver.getToken(), BAYONNE_INFO_TOKEN_SZ );
!       strncpy(info.tgi_driver, plugins.getDriverName(), 
BAYONNE_INFO_DRIVER_SZ );
!       strncpy(info.tgi_version, getenv("SERVER_VERSION"), 
BAYONNE_INFO_VERSION_SZ );
        info.ports = driver->getTrunkCount();
        info.used = driver->getTrunkUsed();
        info.mixers = driver->getMixers();
        info.conferences = driver->getGroups();
***************
*** 362,396 ****
  }
  
  bayonne_policy *bayonne_policy_1_svc(char **name, struct svc_req *req)
  {
!       static char schedule[32];
        static bayonne_policy policy;
        static int *ports = NULL;
        TrunkGroup *pol = getGroup(*name);
        int count = driver->getTrunkCount();
        int id;
  
        if(!ports)
                ports = new int[count];
  
        policy.pol_members = 0;
        policy.pol_ports.pol_ports_len = 0;
        policy.pol_ports.pol_ports_val = ports;
-       policy.pol_sched = "";
-       policy.pol_name = "";
-       policy.pol_number = "";
        policy.pol_active = 0;
        policy.max_incoming = policy.max_outgoing = 0;
        policy.tot_incoming = policy.tot_outgoing = 0;
  
        if(!pol)
                return &policy;
  
!       pol->getSchedule(schedule);
!       policy.pol_sched = schedule;
!       policy.pol_name = (char *)pol->getLast("name");
!       policy.pol_number = (char *)pol->getLast("number");
  
        for(id = 0; id < count; ++id)
        {
                if(driver->getTrunkGroup(id) != pol)
--- 383,428 ----
  }
  
  bayonne_policy *bayonne_policy_1_svc(char **name, struct svc_req *req)
  {
!       char* value;
!       static char pol_name[ BAYONNE_POLICY_NAME_SZ ];
!       static char pol_sched[ BAYONNE_POLICY_SCHED_SZ ];
!       static char pol_number[ BAYONNE_POLICY_NUMBER_SZ ];
        static bayonne_policy policy;
        static int *ports = NULL;
        TrunkGroup *pol = getGroup(*name);
        int count = driver->getTrunkCount();
        int id;
  
+       memset( ( void *) &policy, 0, sizeof ( bayonne_policy ) );
+       memset( ( void *) pol_name, 0, BAYONNE_POLICY_NAME_SZ );
+       memset( ( void *) pol_sched, 0, BAYONNE_POLICY_SCHED_SZ );
+       memset( ( void *) pol_number, 0, BAYONNE_POLICY_NUMBER_SZ );
+       policy.pol_name = pol_name;
+       policy.pol_sched = pol_sched;
+       policy.pol_number = pol_number;
+ 
        if(!ports)
                ports = new int[count];
  
        policy.pol_members = 0;
        policy.pol_ports.pol_ports_len = 0;
        policy.pol_ports.pol_ports_val = ports;
        policy.pol_active = 0;
        policy.max_incoming = policy.max_outgoing = 0;
        policy.tot_incoming = policy.tot_outgoing = 0;
  
        if(!pol)
                return &policy;
  
!       pol->getSchedule( policy.pol_sched );
!       value = (char *)pol->getLast("name");
!       if ( value )
!               strncpy( policy.pol_name, value, BAYONNE_POLICY_NAME_SZ );
!       value = (char *)pol->getLast("number");
!       if ( value )
!               strncpy( policy.pol_number, value, BAYONNE_POLICY_NUMBER_SZ );
  
        for(id = 0; id < count; ++id)
        {
                if(driver->getTrunkGroup(id) != pol)
***************
*** 405,463 ****
        policy.tot_outgoing = pol->getStat(STAT_TOT_OUTGOING);
        policy.pol_ports.pol_ports_len = policy.pol_members;                    
        return &policy;
  }
  bayonne_port *bayonne_port_1_svc(int *id, struct svc_req *req)
  {
        static bayonne_port port;
        Trunk *trunk = driver->getTrunkPort(*id);
        char *cp;
        
!       port.port_caller = "";
!       port.port_dialed = "";
!       port.port_name = "";
!       port.port_user = "";
!       port.port_info = "";
!       port.port_lang = "";
!       port.port_gid = "";
!       port.port_policy = "";
        port.port_caps = 0;
        port.port_duration = 0;
  
        if(!trunk)
                return &port;
  
        cp = trunk->getSymbol(SYM_CALLER);
        if(cp)
!               port.port_caller = cp;
  
        cp = trunk->getSymbol(SYM_DIALED);
        if(cp)
!               port.port_dialed = cp;
  
        cp = trunk->getSymbol(SYM_NAME);
        if(cp)
!               port.port_name = cp;
  
        cp = trunk->getSymbol(SYM_USER);
        if(cp)
!               port.port_user = cp;
  
        cp = trunk->getSymbol(SYM_INFODIGITS);
        if(cp)
!               port.port_info = cp;
  
        cp = trunk->getSymbol(SYM_LANGUAGE);
        if(cp)
!               port.port_lang = cp;
  
        cp = trunk->getSymbol(SYM_GID);
        if(cp)
!               port.port_gid = cp;
  
        cp = trunk->getSymbol(SYM_POLICY);
        if(cp)
!               port.port_policy = cp;
  
        cp = trunk->getSymbol(SYM_DURATION);
        if(cp)
                port.port_duration = atol(cp);
--- 437,513 ----
        policy.tot_outgoing = pol->getStat(STAT_TOT_OUTGOING);
        policy.pol_ports.pol_ports_len = policy.pol_members;                    
        return &policy;
  }
+ 
  bayonne_port *bayonne_port_1_svc(int *id, struct svc_req *req)
  {
        static bayonne_port port;
+       static char port_caller[ BAYONNE_PORT_CALLER_SZ ];
+       static char port_dialed[ BAYONNE_PORT_DIALED_SZ ];
+       static char port_name[ BAYONNE_PORT_NAME_SZ ];
+       static char port_user[ BAYONNE_PORT_USER_SZ ];
+       static char port_info[ BAYONNE_PORT_INFO_SZ ];
+       static char port_lang[ BAYONNE_PORT_LANG_SZ ];
+       static char port_gid[ BAYONNE_PORT_GID_SZ ];
+       static char port_policy[ BAYONNE_PORT_POLICY_SZ ];
        Trunk *trunk = driver->getTrunkPort(*id);
        char *cp;
        
!       memset( ( void *) &port, 0, sizeof ( bayonne_port ) );
!       memset( ( void *) port_caller, 0, BAYONNE_PORT_CALLER_SZ );
!       memset( ( void *) port_dialed, 0, BAYONNE_PORT_CALLER_SZ );
!       memset( ( void *) port_name, 0, BAYONNE_PORT_NAME_SZ );
!       memset( ( void *) port_user, 0, BAYONNE_PORT_USER_SZ );
!       memset( ( void *) port_info, 0, BAYONNE_PORT_INFO_SZ );
!       memset( ( void *) port_lang, 0, BAYONNE_PORT_LANG_SZ );
!       memset( ( void *) port_gid, 0, BAYONNE_PORT_GID_SZ );
!       memset( ( void *) port_policy, 0, BAYONNE_PORT_POLICY_SZ );
!       port.port_caller = port_caller;
!       port.port_dialed = port_dialed;
!       port.port_name = port_name;
!       port.port_user = port_user;
!       port.port_info = port_info;
!       port.port_lang = port_lang;
!       port.port_gid = port_gid;
!       port.port_policy = port_policy;
        port.port_caps = 0;
        port.port_duration = 0;
  
        if(!trunk)
                return &port;
  
        cp = trunk->getSymbol(SYM_CALLER);
        if(cp)
!               strncpy( port.port_caller, cp, BAYONNE_PORT_CALLER_SZ );
  
        cp = trunk->getSymbol(SYM_DIALED);
        if(cp)
!               strncpy( port.port_dialed, cp, BAYONNE_PORT_DIALED_SZ );
  
        cp = trunk->getSymbol(SYM_NAME);
        if(cp)
!               strncpy( port.port_name, cp, BAYONNE_PORT_NAME_SZ );
  
        cp = trunk->getSymbol(SYM_USER);
        if(cp)
!               strncpy( port.port_user, cp, BAYONNE_PORT_USER_SZ );
  
        cp = trunk->getSymbol(SYM_INFODIGITS);
        if(cp)
!               strncpy( port.port_info, cp, BAYONNE_PORT_INFO_SZ );
  
        cp = trunk->getSymbol(SYM_LANGUAGE);
        if(cp)
!               strncpy( port.port_lang, cp, BAYONNE_PORT_LANG_SZ );
  
        cp = trunk->getSymbol(SYM_GID);
        if(cp)
!               strncpy( port.port_gid, cp, BAYONNE_PORT_GID_SZ );
  
        cp = trunk->getSymbol(SYM_POLICY);
        if(cp)
!               strncpy( port.port_policy, cp, BAYONNE_PORT_POLICY_SZ );
  
        cp = trunk->getSymbol(SYM_DURATION);
        if(cp)
                port.port_duration = atol(cp);
*** modules/sunrpc/calls.cpp    Mon Nov 15 15:03:47 2004
--- modules/sunrpc/calls.cpp    Fri Nov 12 13:21:49 2004
***************
*** 383,390 ****
--- 383,391 ----
  }
  
  bayonne_policy *bayonne_policy_1_svc(char **name, struct svc_req *req)
  {
+       char* value;
        static char pol_name[ BAYONNE_POLICY_NAME_SZ ];
        static char pol_sched[ BAYONNE_POLICY_SCHED_SZ ];
        static char pol_number[ BAYONNE_POLICY_NUMBER_SZ ];
        static bayonne_policy policy;
***************
*** 414,423 ****
        if(!pol)
                return &policy;
  
        pol->getSchedule( policy.pol_sched );
!       strncpy( policy.pol_name, (char *)pol->getLast("name"), 
BAYONNE_POLICY_NAME_SZ );
!       strncpy( policy.pol_number, (char *)pol->getLast("number"), 
BAYONNE_POLICY_NUMBER_SZ );
  
        for(id = 0; id < count; ++id)
        {
                if(driver->getTrunkGroup(id) != pol)
--- 415,428 ----
        if(!pol)
                return &policy;
  
        pol->getSchedule( policy.pol_sched );
!       value = (char *)pol->getLast("name");
!       if ( value )
!               strncpy( policy.pol_name, value, BAYONNE_POLICY_NAME_SZ );
!       value = (char *)pol->getLast("number");
!       if ( value )
!               strncpy( policy.pol_number, value, BAYONNE_POLICY_NUMBER_SZ );
  
        for(id = 0; id < count; ++id)
        {
                if(driver->getTrunkGroup(id) != pol)
***************
*** 432,439 ****
--- 437,445 ----
        policy.tot_outgoing = pol->getStat(STAT_TOT_OUTGOING);
        policy.pol_ports.pol_ports_len = policy.pol_members;                    
        return &policy;
  }
+ 
  bayonne_port *bayonne_port_1_svc(int *id, struct svc_req *req)
  {
        static bayonne_port port;
        static char port_caller[ BAYONNE_PORT_CALLER_SZ ];
#include <stdio.h>
#include <rpc/rpc.h>
#include <sys/time.h>
#include "bayonne_rpc.h"

int main( int argc, char *argv[] )
{
        char                    cPolicies[ BAYONNE_INFO_POLICY_SZ ];
        CLIENT*                 pcliConnection;
        struct timeval          stvTimeout;
        bayonne_info*           pbiSystem;
        bayonne_port*           pbpState;
        bayonne_policy*         pboGroup;
        int                     iCount;
        char*                   pcToken;

        stvTimeout.tv_sec =  23;
        stvTimeout.tv_usec = 0;
        pcliConnection = NULL;
        pcliConnection = clnt_create( "localhost", BAYONNE_PROGRAM, 
BAYONNE_VERSION, "udp" );

        if ( pcliConnection == NULL )
        {
                printf( "CLNT_CREATE %s\n", clnt_spcreateerror( "" ) );
                exit( 1 );
        }

        if ( !clnt_control( pcliConnection, CLSET_TIMEOUT, ( char *) 
&stvTimeout ) )
        {
                printf( "CLNT_CONTROL: %s\n", clnt_sperror( pcliConnection, "" 
) );
                clnt_destroy( pcliConnection );
                exit( 1 );
        }

        pbiSystem = bayonne_query_1( NULL, pcliConnection );
        if ( pbiSystem == NULL )
        {
                printf( "RPC QUERY CALL: %s\n", clnt_sperror( pcliConnection, 
"" ) );
                clnt_destroy( pcliConnection );
                exit( 1 );
        }

        printf( "Bayonne version %s is running on '%s' as user '%s' with %i of 
%i lines configured using the %s driver.\n",
                pbiSystem->tgi_version,
                pbiSystem->tgi_node,
                pbiSystem->tgi_user,
                pbiSystem->used,
                pbiSystem->ports,
                pbiSystem->tgi_driver );

        printf( "%-4.4s %-10.10s %-16.16s %-16.16s %-8.8s %-8.8s %-8.8s %-8.8s 
%-16.16s %-6.6s %-12.12s %-8.8s\n",
                "Port",
                "Group",
                "ANI",
                "DNIS",
                "Name",
                "User",
                "Info",
                "Language",
                "GUID",
                "Policy",
                "Capabilities",
                "Duration" );
        printf( "%-4.4s %-10.10s %-16.16s %-16.16s %-8.8s %-8.8s %-8.8s %-8.8s 
%-16.16s %-6.6s %-12.12s %-8.8s\n",
                "----",
                "-----",
                "---",
                "----",
                "----",
                "----",
                "----",
                "--------",
                "----",
                "------",
                "------------",
                "--------" );

        sprintf( cPolicies, "* %s", pbiSystem->tgi_policy );
        pcToken = strtok( cPolicies, " \t" );
        while ( pcToken != NULL )
        {
                pboGroup = bayonne_policy_1( &pcToken, pcliConnection );
                if ( pboGroup == NULL )
                {
                        printf( "RPC POLICY %s CALL: %s\n", pcToken, 
clnt_sperror( pcliConnection, "" ) );
                        clnt_destroy( pcliConnection );
                        exit( 1 );
                }

                for ( iCount = 0; iCount < pboGroup->pol_ports.pol_ports_len ; 
iCount ++ )
                {
                        pbpState = bayonne_port_1( &( 
pboGroup->pol_ports.pol_ports_val[ iCount ] ), pcliConnection );
                        if ( pbpState == NULL )
                        {
                                printf( "RPC PORT CALL: %s\n", clnt_sperror( 
pcliConnection, "" ) );
                                clnt_destroy( pcliConnection );
                                exit( 1 );
                        }

                        printf( "%-4.1i %-10.10s %-16.16s %-16.16s %-8.8s 
%-8.8s %-8.8s %-8.8s %-16.16s %-6.6s %12.1li %8.1li\n",
                                pboGroup->pol_ports.pol_ports_val[ iCount ],
                                pboGroup->pol_name,
                                pbpState->port_caller,
                                pbpState->port_dialed,
                                pbpState->port_name,
                                pbpState->port_user,
                                pbpState->port_info,
                                pbpState->port_lang,
                                pbpState->port_gid,
                                pbpState->port_policy,
                                pbpState->port_caps,
                                pbpState->port_duration );
                }

                pcToken = strtok( NULL, " \t" );
        }

        printf( "%s", "\n" );

        clnt_destroy( pcliConnection );
        exit( 0 );
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]