Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid
[simgrid.git] / examples / gras / rpc / rpc.c
index 42b716f..a12da53 100644 (file)
@@ -14,8 +14,8 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(Rpc, "Messages specific to this example");
 static void register_messages(void)
 {
   gras_msgtype_declare_rpc("plain ping",
-                           gras_datadesc_by_name("int"),
-                           gras_datadesc_by_name("int"));
+                           xbt_datadesc_by_name("int"),
+                           xbt_datadesc_by_name("int"));
 
   gras_msgtype_declare_rpc("raise exception", NULL, NULL);
   gras_msgtype_declare_rpc("forward exception", NULL, NULL);
@@ -28,7 +28,7 @@ int forwarder(int argc, char *argv[]);
 int client(int argc, char *argv[]);
 
 #define exception_msg       "Error for the client"
-#define exception_raising() THROW0(unknown_error,42,exception_msg)
+#define exception_raising() THROWF(unknown_error,42,exception_msg)
 
 static void exception_catching(void)
 {
@@ -42,17 +42,17 @@ static void exception_catching(void)
     }
     CATCH(e) {
       gotit = 1;
+      xbt_assert(e.category == unknown_error,
+                 "Got wrong category: %d (instead of %d)", e.category,
+                 unknown_error);
+      xbt_assert(e.value == 42, "Got wrong value: %d (!=42)", e.value);
+      xbt_assert(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
+                 "Got wrong message: %s", e.msg);
+      xbt_ex_free(e);
     }
     if (!gotit) {
-      THROW0(unknown_error, 0, "Didn't got the remote exception!");
+      THROWF(unknown_error, 0, "Didn't got the remote exception!");
     }
-    xbt_assert2(e.category == unknown_error,
-                "Got wrong category: %d (instead of %d)", e.category,
-                unknown_error);
-    xbt_assert1(e.value == 42, "Got wrong value: %d (!=42)", e.value);
-    xbt_assert1(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
-                "Got wrong message: %s", e.msg);
-    xbt_ex_free(e);
   }
 }
 
@@ -60,12 +60,26 @@ static void exception_catching(void)
  * Client code
  * **********************************************************************/
 
+static void client_create_sockets(xbt_socket_t *toserver,
+                                  xbt_socket_t *toforwarder,
+                                  const char *srv_host, int srv_port,
+                                  const char *fwd_host, int fwd_port)
+{
+  TRY {
+    exception_catching();
+    *toserver = gras_socket_client(srv_host, srv_port);
+    *toforwarder = gras_socket_client(fwd_host, fwd_port);
+  }
+  CATCH_ANONYMOUS {
+    RETHROWF("Unable to connect to the server: %s");
+  }
+}
 
 int client(int argc, char *argv[])
 {
   xbt_ex_t e;
-  gras_socket_t toserver = NULL;        /* peer */
-  gras_socket_t toforwarder = NULL;     /* peer */
+  xbt_socket_t toserver = NULL;        /* peer */
+  xbt_socket_t toforwarder = NULL;     /* peer */
 
   int ping, pong, i;
   volatile int gotit = 0;
@@ -92,14 +106,8 @@ int client(int argc, char *argv[])
   gras_os_sleep(2);
 
   /* 4. Create a socket to speak to the server */
-  TRY {
-    exception_catching();
-    toserver = gras_socket_client(host, port);
-    toforwarder = gras_socket_client(argv[3], atoi(argv[4]));
-  }
-  CATCH(e) {
-    RETHROW0("Unable to connect to the server: %s");
-  }
+  client_create_sockets(&toserver, &toforwarder,
+                        host, port, argv[3], atoi(argv[4]));
   XBT_INFO("Connected to %s:%d.", host, port);
 
 
@@ -111,7 +119,7 @@ int client(int argc, char *argv[])
 
   /* 6. Keep the user informed of what's going on */
   XBT_INFO("Connected to server which is on %s:%d",
-        gras_socket_peer_name(toserver), gras_socket_peer_port(toserver));
+        xbt_socket_peer_name(toserver), xbt_socket_peer_port(toserver));
 
   /* 7. Prepare and send the ping message to the server */
   ping = 1234;
@@ -119,16 +127,16 @@ int client(int argc, char *argv[])
     exception_catching();
     gras_msg_rpccall(toserver, 6000.0, "plain ping", &ping, &pong);
   }
-  CATCH(e) {
+  CATCH_ANONYMOUS {
     gras_socket_close(toserver);
-    RETHROW0("Failed to execute a PING rpc on the server: %s");
+    RETHROWF("Failed to execute a PING rpc on the server: %s");
   }
   exception_catching();
 
   /* 8. Keep the user informed of what's going on, again */
   XBT_INFO("The answer to PING(%d) on %s:%d is PONG(%d)",
         ping,
-        gras_socket_peer_name(toserver), gras_socket_peer_port(toserver),
+        xbt_socket_peer_name(toserver), xbt_socket_peer_port(toserver),
         pong);
 
   /* 9. Call a RPC which raises an exception (to test exception propagation) */
@@ -138,11 +146,11 @@ int client(int argc, char *argv[])
   }
   CATCH(e) {
     gotit = 1;
-    xbt_assert2(e.category == unknown_error,
+    xbt_assert(e.category == unknown_error,
                 "Got wrong category: %d (instead of %d)",
                 e.category, unknown_error);
-    xbt_assert1(e.value == 42, "Got wrong value: %d (!=42)", e.value);
-    xbt_assert1(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
+    xbt_assert(e.value == 42, "Got wrong value: %d (!=42)", e.value);
+    xbt_assert(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
                 "Got wrong message: %s", e.msg);
     XBT_INFO
         ("Got the expected exception when calling the exception raising RPC");
@@ -150,7 +158,7 @@ int client(int argc, char *argv[])
   }
 
   if (!gotit)
-    THROW0(unknown_error, 0, "Didn't got the remote exception!");
+    THROWF(unknown_error, 0, "Didn't got the remote exception!");
 
   XBT_INFO("Called the exception raising RPC");
   exception_catching();
@@ -167,7 +175,7 @@ int client(int argc, char *argv[])
       xbt_ex_free(e);
     }
     if (!gotit) {
-      THROW0(unknown_error, 0, "Didn't got the remote exception!");
+      THROWF(unknown_error, 0, "Didn't got the remote exception!");
     }
   }
   /* doxygen_resume */
@@ -181,27 +189,27 @@ int client(int argc, char *argv[])
     }
     CATCH(e) {
       gotit = 1;
+      xbt_assert(e.value == 42, "Got wrong value: %d (!=42)", e.value);
+      xbt_assert(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
+                 "Got wrong message: %s", e.msg);
+      xbt_assert(e.category == unknown_error,
+                 "Got wrong category: %d (instead of %d)",
+                 e.category, unknown_error);
+      XBT_INFO
+        ("Got the expected exception when calling the exception raising RPC");
+      xbt_ex_free(e);
     }
     if (!gotit) {
-      THROW0(unknown_error, 0, "Didn't got the remote exception!");
+      THROWF(unknown_error, 0, "Didn't got the remote exception!");
     }
-    xbt_assert1(e.value == 42, "Got wrong value: %d (!=42)", e.value);
-    xbt_assert1(!strncmp(e.msg, exception_msg, strlen(exception_msg)),
-                "Got wrong message: %s", e.msg);
-    xbt_assert2(e.category == unknown_error,
-                "Got wrong category: %d (instead of %d)",
-                e.category, unknown_error);
-    XBT_INFO
-        ("Got the expected exception when calling the exception raising RPC");
-    xbt_ex_free(e);
     exception_catching();
   }
 
-  XBT_INFO("Ask %s:%d to die", gras_socket_peer_name(toforwarder),
-        gras_socket_peer_port(toforwarder));
+  XBT_INFO("Ask %s:%d to die", xbt_socket_peer_name(toforwarder),
+        xbt_socket_peer_port(toforwarder));
   gras_msg_send(toforwarder, "kill", NULL);
-  XBT_INFO("Ask %s:%d to die", gras_socket_peer_name(toserver),
-        gras_socket_peer_port(toserver));
+  XBT_INFO("Ask %s:%d to die", xbt_socket_peer_name(toserver),
+        xbt_socket_peer_port(toserver));
   gras_msg_send(toserver, "kill", NULL);
 
   /* 11. Cleanup the place before leaving */
@@ -217,16 +225,16 @@ int client(int argc, char *argv[])
  * Forwarder code
  * **********************************************************************/
 typedef struct {
-  gras_socket_t server;
+  xbt_socket_t server;
   int done;
 } s_forward_data_t, *forward_data_t;
 
 static int forwarder_cb_kill(gras_msg_cb_ctx_t ctx, void *payload_data)
 {
   forward_data_t fdata;
-  gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
-  XBT_INFO("Asked to die by %s:%d", gras_socket_peer_name(expeditor),
-        gras_socket_peer_port(expeditor));
+  xbt_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
+  XBT_INFO("Asked to die by %s:%d", xbt_socket_peer_name(expeditor),
+        xbt_socket_peer_port(expeditor));
   fdata = gras_userdata_get();
   fdata->done = 1;
   return 0;
@@ -244,7 +252,7 @@ static int forwarder_cb_forward_ex(gras_msg_cb_ctx_t ctx,
 
 int forwarder(int argc, char *argv[])
 {
-  gras_socket_t mysock;
+  xbt_socket_t mysock;
   int port;
   forward_data_t fdata;
 
@@ -282,17 +290,17 @@ int forwarder(int argc, char *argv[])
  * Server code
  * **********************************************************************/
 typedef struct {
-  gras_socket_t server;
+  xbt_socket_t server;
   int done;
 } s_server_data_t, *server_data_t;
 
 static int server_cb_kill(gras_msg_cb_ctx_t ctx, void *payload_data)
 {
-  gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
+  xbt_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
   server_data_t sdata;
 
-  XBT_INFO("Asked to die by %s:%d", gras_socket_peer_name(expeditor),
-        gras_socket_peer_port(expeditor));
+  XBT_INFO("Asked to die by %s:%d", xbt_socket_peer_name(expeditor),
+        xbt_socket_peer_port(expeditor));
 
   sdata = gras_userdata_get();
   sdata->done = 1;
@@ -310,13 +318,13 @@ static int server_cb_ping(gras_msg_cb_ctx_t ctx, void *payload_data)
 
   /* 1. Get the payload into the msg variable, and retrieve who called us */
   int msg = *(int *) payload_data;
-  gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
+  xbt_socket_t expeditor = gras_msg_cb_ctx_from(ctx);
 
   /* 2. Log which client connected */
   XBT_INFO("Got message PING(%d) from %s:%d",
         msg,
-        gras_socket_peer_name(expeditor),
-        gras_socket_peer_port(expeditor));
+        xbt_socket_peer_name(expeditor),
+        xbt_socket_peer_port(expeditor));
 
   /* 4. Change the value of the msg variable */
   msg = 4321;
@@ -334,7 +342,7 @@ static int server_cb_ping(gras_msg_cb_ctx_t ctx, void *payload_data)
 
 int server(int argc, char *argv[])
 {
-  gras_socket_t mysock;
+  xbt_socket_t mysock;
   server_data_t sdata;
 
   int port = 4001;
@@ -360,13 +368,13 @@ int server(int argc, char *argv[])
   gras_cb_register("raise exception", &server_cb_raise_ex);
   gras_cb_register("kill", &server_cb_kill);
 
-  XBT_INFO("Listening on port %d", gras_socket_my_port(mysock));
+  XBT_INFO("Listening on port %d", xbt_socket_my_port(mysock));
 
-  /* 5. Wait for the ping incomming messages */
+  /* 5. Wait for the ping incoming messages */
 
   /** \bug if the server is gone before the forwarder tries to connect,
      it dies awfully with the following message. The problem stands somewhere
-     at the interface between the gras_socket_t and the msg mess. There is thus
+     at the interface between the xbt_socket_t and the msg mess. There is thus
      no way for me to dive into this before this interface is rewritten
 ==15875== Invalid read of size 4
 ==15875==    at 0x408B805: find_port (transport_plugin_sg.c:68)