aboutsummaryrefslogtreecommitdiff
path: root/vendor/voclient/libsamp/libxrpc/xrpcP.h
blob: 117b39adb352ee925a4e5bf76e5443c8bcc0b380 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
**  XRPC.h -- Private include file for the XRPC interface.
*/


#define SZ_LINE         	128
#define SZ_PATH         	128
#define SZ_CMD          	32
#define SZ_SIG          	64
#define SZ_NAME          	64

#define	MAX_CLIENTS		512	/* max clients or async msgs	*/
#define	MAX_STRUCTS		32768
#define	MAX_ARRAYS		32768

#define	OK			0
#define ERR			1

#define TY_INT                  1
#define TY_DOUBLE               2
#define TY_BOOL                 3
#define TY_STRING               4
#define TY_DATETIME             5
#define TY_STRUCT               6
#define TY_ARRAY                7

#define	XR_NAME			"xrLib"
#define	XR_VERSION		"v1.0"



/**
 *  Type for pointer to function return integer.
 */
typedef int (*PFI)();               	/* ptr to func returning an int */


/**
 *  XML-RPC method data struct.
 */
typedef struct {
    char   name[SZ_PATH];               /** method name                  */
    char   arg_signature[SZ_SIG];       /** argument signature           */
    char   ret_signature[SZ_SIG];       /** return signature             */

    int   (*methodFunc)(void *p);      	/** function to call             */
    void  *serverInfo;         		/** user data                    */

    void  *next;                        /** list pointer                 */

} Method, *MethodP;


/**
 *  XML-RPC caller data struct.
 */
typedef struct {
    xmlrpc_env   *env;			/** calling environment		 */
    char         *host;			/** caller host name (not used)  */
    char         *name;			/** method name			 */
    xmlrpc_value *param;		/** calling parameter array	 */
    void         *info;			/** user data ('svr' pointer)	 */
    xmlrpc_value *result;		/** result array		 */
 
    int   (*handlerFunc)(void *p);     	/** asynch handler function      */
    int		 nparams;		/** number of calling params	 */
    int		 nresults;		/** number of result values	 */

    int		 client_num;		/** client number		 */
    int		 rpc_shutdown;		/** shutdown request		 */

} Caller, *CallerP;


/**
 *  XML-RPC server data struct.
 */
typedef struct {
    int    port;                        /** server port numnber          */
    char   path[SZ_PATH];               /** path e.g. "/RPC2"            */
    char   url[SZ_PATH];                /** full server URL              */
    char   config[SZ_PATH];             /** server config file           */
    char   logfile[SZ_PATH];            /** server log file              */


    /* Runtime structure
    */
    Method *method_head;                /** server method list           */
    Method *method_tail;                /** server method tail           */
    int    num_methods;                 /** number of methods            */

    Caller caller;			/** method calling struct	 */

    pthread_attr_t attr;                /** server thread attribute      */
    pthread_t     thread;               /** server thread                */

    xmlrpc_default_method  defMethod;   /** dispatcher method            */

    xmlrpc_server_abyss_parms serverparm;
    xmlrpc_registry     *registry;
    xmlrpc_env          env;

    int     shutdown;                   /** shutdown requested           */
    int     trace;                      /** trace execution?             */

} Server, *ServerP;


/**
 *  XML-RPC client data struct.
 */
typedef struct {
    char   url[SZ_PATH];                /** URL to service 		 */
    xmlrpc_client *rpc_client;		/** client struct		 */
    xmlrpc_env     env;			/** env context			 */

    int    in_use;			/** struct in use?		 */

    int   (*handlerFunc)(void *p);     	/** asynch handler function      */
    xmlrpc_value  *param;		/** method parameters		 */
    xmlrpc_value  *result;		/** result values		 */

    int    faultCode;                   /** error code 			 */
    char   faultString[SZ_PATH];        /** error string 		 */

} Client, *ClientP;




/* Private function prototypes.
*/
void 	die_on_error (xmlrpc_env *env);
void 	warn_on_error (xmlrpc_env *env);


#include "xrpc.h"