1 /*
2 Example how to access xmlBlaster wit C and XmlRpc
3
4 http://xmlrpc-c.sourceforge.net/
5
6 CLIENT_CFLAGS=`xmlrpc-c-config libwww-client --cflags`
7 CLIENT_LIBS=`xmlrpc-c-config libwww-client --libs`
8 gcc $CLIENT_CFLAGS -o testLogin testLogin.c $CLIENT_LIBS
9
10 Read doc/overview.txt
11 */
12 #include <stdio.h>
13 #include <xmlrpc.h>
14 #include <xmlrpc_client.h>
15 #define NAME "XMLRPC xmlBlaster.org C Client"
16 #define VERSION "0.1"
17 #define SERVER_URL "http://localhost:8080/"
18
19 void usage()
20 {
21 fprintf(stderr,
22 "--------------------------------------------------\n"
23 "Usage:\n"
24 " testLogin -xmlrpc.serverUrl <serverURL> -xmlrpc.cbUrl <myCallbackServerURL> -loginName <loginName> -passwd <Password> -dest <loginName> -msgFile <xmlFile>\n"
25 "Example:\n"
26 " testLogin -xmlrpc.serverUrl http://anotherHost:8080/ -xmlrpc.cbUrl http://myHost:8080/ -loginName ben -passwd secret -dest gesa -msgFile xy.xml\n"
27 "--------------------------------------------------\n");
28 }
29
30 void die_if_fault_occurred (xmlrpc_env *env)
31 {
32 /* Check our error-handling environment for an XMLRPC fault. */
33 if (env->fault_occurred) {
34 fprintf(stderr, "XMLRPC Fault: %s (%d)\n",
35 env->fault_string, env->fault_code);
36 usage();
37 exit(1);
38 }
39 }
40
41 int main (int argc, char** argv)
42 {
43 xmlrpc_env env;
44 xmlrpc_value *result;
45 char *sessionId;
46 char key[256], *content, qos[256], *pubReturn, *loginName, *passwd, loginQos[256], *cbUrl;
47 char *keyOid = "PIB_REQUEST";
48 char *serverUrl = NULL; //SERVER_URL;
49 char *msgFile = NULL;
50 char *destination = NULL;
51 char serverHostName[126];
52 char tmp[256];
53 int iarg;
54
55 for (iarg=0; iarg < argc-1; iarg++) {
56 if (strcmp(argv[iarg], "-xmlrpc.serverUrl") == 0)
57 serverUrl = argv[++iarg];
58 else if (strcmp(argv[iarg], "-xmlrpc.cbUrl") == 0) // URL of our here instantiated callback server
59 cbUrl = argv[++iarg];
60 else if (strcmp(argv[iarg], "-dest") == 0)
61 destination = argv[++iarg];
62 else if (strcmp(argv[iarg], "-msgFile") == 0)
63 msgFile = argv[++iarg];
64 else if (strcmp(argv[iarg], "-loginName") == 0)
65 loginName = argv[++iarg];
66 else if (strcmp(argv[iarg], "-passwd") == 0)
67 passwd = argv[++iarg];
68 else if (strcmp(argv[iarg], "--help") == 0 || strcmp(argv[iarg], "-help") == 0 || strcmp(argv[iarg], "-?") == 0) {
69 usage();
70 exit(0);
71 }
72 }
73
74 if (destination == NULL || msgFile == NULL) {
75 printf("Missing arguments\n");
76 usage();
77 exit(0);
78 }
79
80 /*
81 !!! Missing !!!
82 Startup the XmlRpc server for callbacks
83 */
84
85 if (serverUrl == NULL) {
86 gethostname(serverHostName, 125);
87 sprintf(tmp, "http://%s:8080/", serverHostName);
88 serverUrl = tmp;
89 }
90
91 /* Start up our XMLRPC client library. */
92 xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION);
93 xmlrpc_env_init(&env);
94
95 /* Call our XMLRPC server. */
96 sprintf(loginQos, "<qos><callback type='XMLRPC'>%.100s</callback></qos>", cbUrl);
97 printf("Login to %s as user %s ...\n", serverUrl, loginName);
98 result = xmlrpc_client_call(&env, serverUrl,
99 "authenticate.login", "(ssss)",
100 loginName, passwd, loginQos, "");
101 die_if_fault_occurred(&env);
102
103 /* Parse our result value. */
104 xmlrpc_parse_value(&env, result, "s", &sessionId);
105 die_if_fault_occurred(&env);
106 printf("Login success, got sessionId=%s\n", sessionId);
107
108 /* Send message to destination. */
109 printf("publish %s to %s ...\n", keyOid, destination);
110 sprintf(key, "<key oid='%.100s' contentMime='text/xml'/>", keyOid);
111 sprintf(qos, "<qos><destination queryType='EXACT'>%.100s</destination></qos>", destination);
112 content = "Hello world";
113 printf("Key=%s Qos=%s\n", key, qos);
114 result = xmlrpc_client_call(&env, serverUrl,
115 "xmlBlaster.publish", "(ssss)",
116 sessionId, key, content, qos);
117 die_if_fault_occurred(&env);
118
119 /* Parse our result value. */
120 xmlrpc_parse_value(&env, result, "s", &pubReturn);
121 die_if_fault_occurred(&env);
122 printf("Publish success, return value is %s\n", pubReturn);
123
124
125 /* Dispose of our result value. */
126 xmlrpc_DECREF(result);
127
128 /* Shutdown our XMLRPC client library. */
129 xmlrpc_env_clean(&env);
130 xmlrpc_client_cleanup();
131
132 return 0;
133 }
syntax highlighted by Code2HTML, v. 0.9.1