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