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"
|