Catalli's threaded switch
[sliver-openvswitch.git] / tests / test-jsonrpc.c
index 7f2166f..e8edec0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Nicira Networks.
+ * Copyright (c) 2009, 2010 Nicira Networks.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@
 #include "daemon.h"
 #include "json.h"
 #include "poll-loop.h"
+#include "stream-ssl.h"
 #include "stream.h"
 #include "timeval.h"
 #include "util.h"
@@ -41,9 +42,8 @@ static void parse_options(int argc, char *argv[]);
 int
 main(int argc, char *argv[])
 {
+    proctitle_init(argc, argv);
     set_program_name(argv[0]);
-    time_init();
-    vlog_init();
     parse_options(argc, argv);
     run_command(argc - optind, argv + optind, all_commands);
     return 0;
@@ -52,10 +52,17 @@ main(int argc, char *argv[])
 static void
 parse_options(int argc, char *argv[])
 {
+    enum {
+        OPT_BOOTSTRAP_CA_CERT = UCHAR_MAX + 1
+    };
     static struct option long_options[] = {
         {"verbose", optional_argument, 0, 'v'},
         {"help", no_argument, 0, 'h'},
         DAEMON_LONG_OPTIONS,
+#ifdef HAVE_OPENSSL
+        {"bootstrap-ca-cert", required_argument, 0, OPT_BOOTSTRAP_CA_CERT},
+        STREAM_SSL_LONG_OPTIONS
+#endif
         {0, 0, 0, 0},
     };
     char *short_options = long_options_to_short_options(long_options);
@@ -76,6 +83,14 @@ parse_options(int argc, char *argv[])
 
         DAEMON_OPTION_HANDLERS
 
+#ifdef HAVE_OPENSSL
+        STREAM_SSL_OPTION_HANDLERS
+
+        case OPT_BOOTSTRAP_CA_CERT:
+            stream_ssl_set_ca_cert_file(optarg, true);
+            break;
+#endif
+
         case '?':
             exit(EXIT_FAILURE);
 
@@ -95,7 +110,7 @@ usage(void)
            "  request REMOTE METHOD PARAMS   send request, print reply\n"
            "  notify REMOTE METHOD PARAMS  send notification and exit\n",
            program_name, program_name);
-    stream_usage("JSON-RPC", true, true);
+    stream_usage("JSON-RPC", true, true, true);
     daemon_usage();
     vlog_usage();
     printf("\nOther options:\n"
@@ -158,7 +173,7 @@ handle_rpc(struct jsonrpc *rpc, struct jsonrpc_msg *msg, bool *done)
 }
 
 static void
-do_listen(int argc UNUSED, char *argv[])
+do_listen(int argc OVS_UNUSED, char *argv[])
 {
     struct pstream *pstream;
     struct jsonrpc **rpcs;
@@ -168,7 +183,7 @@ do_listen(int argc UNUSED, char *argv[])
 
     die_if_already_running();
 
-    error = pstream_open(argv[1], &pstream);
+    error = jsonrpc_pstream_open(argv[1], &pstream);
     if (error) {
         ovs_fatal(error, "could not listen on \"%s\"", argv[1]);
     }
@@ -234,11 +249,12 @@ do_listen(int argc UNUSED, char *argv[])
         }
         poll_block();
     }
+    free(rpcs);
+    pstream_close(pstream);
 }
 
-
 static void
-do_request(int argc UNUSED, char *argv[])
+do_request(int argc OVS_UNUSED, char *argv[])
 {
     struct jsonrpc_msg *msg;
     struct jsonrpc *rpc;
@@ -250,13 +266,13 @@ do_request(int argc UNUSED, char *argv[])
 
     method = argv[2];
     params = parse_json(argv[3]);
-    msg = jsonrpc_create_request(method, params);
+    msg = jsonrpc_create_request(method, params, NULL);
     string = jsonrpc_msg_is_valid(msg);
     if (string) {
         ovs_fatal(0, "not a valid JSON-RPC request: %s", string);
     }
 
-    error = stream_open_block(argv[1], &stream);
+    error = stream_open_block(jsonrpc_stream_open(argv[1], &stream), &stream);
     if (error) {
         ovs_fatal(error, "could not open \"%s\"", argv[1]);
     }
@@ -277,7 +293,7 @@ do_request(int argc UNUSED, char *argv[])
 }
 
 static void
-do_notify(int argc UNUSED, char *argv[])
+do_notify(int argc OVS_UNUSED, char *argv[])
 {
     struct jsonrpc_msg *msg;
     struct jsonrpc *rpc;
@@ -295,7 +311,7 @@ do_notify(int argc UNUSED, char *argv[])
         ovs_fatal(0, "not a JSON RPC-valid notification: %s", string);
     }
 
-    error = stream_open_block(argv[1], &stream);
+    error = stream_open_block(jsonrpc_stream_open(argv[1], &stream), &stream);
     if (error) {
         ovs_fatal(error, "could not open \"%s\"", argv[1]);
     }
@@ -303,13 +319,13 @@ do_notify(int argc UNUSED, char *argv[])
 
     error = jsonrpc_send_block(rpc, msg);
     if (error) {
-        ovs_fatal(error, "could not send request");
+        ovs_fatal(error, "could not send notification");
     }
     jsonrpc_close(rpc);
 }
 
 static void
-do_help(int argc UNUSED, char *argv[] UNUSED)
+do_help(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     usage();
 }