X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6ee7e9c2e455536ab817ae0136acfbb53822eecd..f28d984fb76ea5e45562168a2e67b60a8b1d0fb2:/examples/gras/rpc/rpc.c diff --git a/examples/gras/rpc/rpc.c b/examples/gras/rpc/rpc.c index 42b716f852..a12da5348f 100644 --- a/examples/gras/rpc/rpc.c +++ b/examples/gras/rpc/rpc.c @@ -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)