X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/95d328f9ca4dd6ccd2065c6c84aca83d43001804..dff9e15c44ab6340d27215957c56fa72fad246a2:/examples/gras/rpc/rpc.c diff --git a/examples/gras/rpc/rpc.c b/examples/gras/rpc/rpc.c index b43db35c63..c6ffc36e4c 100644 --- a/examples/gras/rpc/rpc.c +++ b/examples/gras/rpc/rpc.c @@ -9,46 +9,50 @@ #include "gras.h" -XBT_LOG_NEW_DEFAULT_CATEGORY(Rpc,"Messages specific to this example"); +XBT_LOG_NEW_DEFAULT_CATEGORY(Rpc, "Messages specific to this example"); /* register messages which may be sent (common to client and server) */ -static void register_messages(void) { +static void register_messages(void) +{ gras_msgtype_declare_rpc("plain ping", - gras_datadesc_by_name("int"), - gras_datadesc_by_name("int")); + gras_datadesc_by_name("int"), + gras_datadesc_by_name("int")); gras_msgtype_declare_rpc("raise exception", NULL, NULL); gras_msgtype_declare_rpc("forward exception", NULL, NULL); - gras_msgtype_declare("kill",NULL); + gras_msgtype_declare("kill", NULL); } /* Function prototypes */ -int server (int argc,char *argv[]); -int forwarder (int argc,char *argv[]); -int client (int argc,char *argv[]); +int server(int argc, char *argv[]); +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) -static void exception_catching(void) { - int gotit = 0,i; +static void exception_catching(void) +{ + int gotit = 0, i; xbt_ex_t e; - for (i=0; i<5; i++) { - gotit=0; + for (i = 0; i < 5; i++) { + gotit = 0; TRY { exception_raising(); - } CATCH(e) { + } + CATCH(e) { gotit = 1; } if (!gotit) { - THROW0(unknown_error,0,"Didn't got the remote exception!"); + THROW0(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_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_assert1(!strncmp(e.msg, exception_msg, strlen(exception_msg)), + "Got wrong message: %s", e.msg); xbt_ex_free(e); } } @@ -58,29 +62,30 @@ static void exception_catching(void) { * **********************************************************************/ -int client(int argc,char *argv[]) { +int client(int argc, char *argv[]) +{ xbt_ex_t e; - gras_socket_t toserver=NULL; /* peer */ - gras_socket_t toforwarder=NULL; /* peer */ + gras_socket_t toserver = NULL; /* peer */ + gras_socket_t toforwarder = NULL; /* peer */ int ping, pong, i; - volatile int gotit=0; + volatile int gotit = 0; const char *host = "127.0.0.1"; - int port = 4000; + int port = 4000; - memset(&e,0,sizeof(xbt_ex_t)); + memset(&e, 0, sizeof(xbt_ex_t)); /* 1. Init the GRAS's infrastructure */ gras_init(&argc, argv); /* 2. Get the server's address. The command line override defaults when specified */ if (argc == 5) { - host=argv[1]; - port=atoi(argv[2]); + host = argv[1]; + port = atoi(argv[2]); } - INFO2("Launch client (server on %s:%d)",host,port); + INFO2("Launch client (server on %s:%d)", host, port); exception_catching(); @@ -90,30 +95,32 @@ int client(int argc,char *argv[]) { /* 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) { + 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"); } - INFO2("Connected to %s:%d.",host,port); + INFO2("Connected to %s:%d.", host, port); /* 5. Register the messages. - See, it doesn't have to be done completely at the beginning, - but only before use */ + See, it doesn't have to be done completely at the beginning, + but only before use */ exception_catching(); register_messages(); /* 6. Keep the user informed of what's going on */ INFO2("Connected to server which is on %s:%d", - gras_socket_peer_name(toserver),gras_socket_peer_port(toserver)); + gras_socket_peer_name(toserver), gras_socket_peer_port(toserver)); /* 7. Prepare and send the ping message to the server */ ping = 1234; TRY { exception_catching(); gras_msg_rpccall(toserver, 6000.0, "plain ping", &ping, &pong); - } CATCH(e) { + } + CATCH(e) { gras_socket_close(toserver); RETHROW0("Failed to execute a PING rpc on the server: %s"); } @@ -121,74 +128,81 @@ int client(int argc,char *argv[]) { /* 8. Keep the user informed of what's going on, again */ INFO4("The answer to PING(%d) on %s:%d is PONG(%d)", - ping, - gras_socket_peer_name(toserver),gras_socket_peer_port(toserver), - pong); + ping, + gras_socket_peer_name(toserver), gras_socket_peer_port(toserver), + pong); /* 9. Call a RPC which raises an exception (to test exception propagation) */ INFO0("Call the exception raising RPC"); TRY { gras_msg_rpccall(toserver, 6000.0, "raise exception", NULL, NULL); - } CATCH(e) { + } + CATCH(e) { gotit = 1; xbt_assert2(e.category == unknown_error, - "Got wrong category: %d (instead of %d)", - 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); - INFO0("Got the expected exception when calling the exception raising RPC"); + xbt_assert1(!strncmp(e.msg, exception_msg, strlen(exception_msg)), + "Got wrong message: %s", e.msg); + INFO0 + ("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!"); + THROW0(unknown_error, 0, "Didn't got the remote exception!"); INFO0("Called the exception raising RPC"); exception_catching(); /* doxygen_ignore */ - for (i=0; i<5; i++) { - - INFO1("Call the exception raising RPC (i=%d)",i); - TRY { - gras_msg_rpccall(toserver, 6000.0, "raise exception", NULL, NULL); - } CATCH(e) { - gotit = 1; - xbt_ex_free(e); - } - if (!gotit) { - THROW0(unknown_error,0,"Didn't got the remote exception!"); - } + for (i = 0; i < 5; i++) { + + INFO1("Call the exception raising RPC (i=%d)", i); + TRY { + gras_msg_rpccall(toserver, 6000.0, "raise exception", NULL, NULL); + } + CATCH(e) { + gotit = 1; + xbt_ex_free(e); + } + if (!gotit) { + THROW0(unknown_error, 0, "Didn't got the remote exception!"); + } } /* doxygen_resume */ /* 9. Call a RPC which raises an exception (to test that exception propagation works) */ - for (i=0;i<5;i++) { - INFO1("Call the exception raising RPC on the forwarder (i=%d)",i); + for (i = 0; i < 5; i++) { + INFO1("Call the exception raising RPC on the forwarder (i=%d)", i); TRY { gras_msg_rpccall(toforwarder, 6000.0, "forward exception", NULL, NULL); - } CATCH(e) { + } + CATCH(e) { gotit = 1; } if (!gotit) { - THROW0(unknown_error,0,"Didn't got the remote exception!"); + THROW0(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_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); - INFO0("Got the expected exception when calling the exception raising RPC"); + "Got wrong category: %d (instead of %d)", + e.category, unknown_error); + INFO0 + ("Got the expected exception when calling the exception raising RPC"); xbt_ex_free(e); exception_catching(); } - INFO2("Ask %s:%d to die",gras_socket_peer_name(toforwarder),gras_socket_peer_port(toforwarder)); - gras_msg_send(toforwarder,"kill",NULL); - INFO2("Ask %s:%d to die",gras_socket_peer_name(toserver),gras_socket_peer_port(toserver)); - gras_msg_send(toserver,"kill",NULL); + INFO2("Ask %s:%d to die", gras_socket_peer_name(toforwarder), + gras_socket_peer_port(toforwarder)); + gras_msg_send(toforwarder, "kill", NULL); + INFO2("Ask %s:%d to die", gras_socket_peer_name(toserver), + gras_socket_peer_port(toserver)); + gras_msg_send(toserver, "kill", NULL); /* 11. Cleanup the place before leaving */ gras_socket_close(toserver); @@ -196,7 +210,7 @@ int client(int argc,char *argv[]) { INFO0("Done."); gras_exit(); return 0; -} /* end_of_client */ +} /* end_of_client */ /* ********************************************************************** @@ -207,47 +221,49 @@ typedef struct { int done; } s_forward_data_t, *forward_data_t; -static int forwarder_cb_kill(gras_msg_cb_ctx_t ctx, - void *payload_data) { +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); - INFO2("Asked to die by %s:%d",gras_socket_peer_name(expeditor),gras_socket_peer_port(expeditor)); - fdata=gras_userdata_get(); + INFO2("Asked to die by %s:%d", gras_socket_peer_name(expeditor), + gras_socket_peer_port(expeditor)); + fdata = gras_userdata_get(); fdata->done = 1; return 0; } -static int forwarder_cb_forward_ex(gras_msg_cb_ctx_t ctx, - void *payload_data) { - forward_data_t fdata=gras_userdata_get(); +static int forwarder_cb_forward_ex(gras_msg_cb_ctx_t ctx, void *payload_data) +{ + forward_data_t fdata = gras_userdata_get(); INFO0("Forward a request"); - gras_msg_rpccall(fdata->server, 60, "raise exception",NULL,NULL); + gras_msg_rpccall(fdata->server, 60, "raise exception", NULL, NULL); return 0; } -int forwarder (int argc,char *argv[]) { +int forwarder(int argc, char *argv[]) +{ gras_socket_t mysock; int port; forward_data_t fdata; - gras_init(&argc,argv); + gras_init(&argc, argv); xbt_assert(argc == 4); - fdata=gras_userdata_new(s_forward_data_t); + fdata = gras_userdata_new(s_forward_data_t); fdata->done = 0; - port=atoi(argv[1]); + port = atoi(argv[1]); INFO1("Launch forwarder (port=%d)", port); mysock = gras_socket_server(port); - gras_os_sleep(1); /* wait for the server to be ready */ - fdata->server=gras_socket_client(argv[2],atoi(argv[3])); + gras_os_sleep(1); /* wait for the server to be ready */ + fdata->server = gras_socket_client(argv[2], atoi(argv[3])); register_messages(); gras_cb_register("forward exception", &forwarder_cb_forward_ex); - gras_cb_register("kill", &forwarder_cb_kill); + gras_cb_register("kill", &forwarder_cb_kill); while (!fdata->done) { gras_msg_handle(600.0); @@ -269,64 +285,66 @@ typedef struct { int done; } s_server_data_t, *server_data_t; -static int server_cb_kill(gras_msg_cb_ctx_t ctx, - void *payload_data) { +static int server_cb_kill(gras_msg_cb_ctx_t ctx, void *payload_data) +{ gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx); server_data_t sdata; - INFO2("Asked to die by %s:%d",gras_socket_peer_name(expeditor),gras_socket_peer_port(expeditor)); + INFO2("Asked to die by %s:%d", gras_socket_peer_name(expeditor), + gras_socket_peer_port(expeditor)); - sdata=gras_userdata_get(); + sdata = gras_userdata_get(); sdata->done = 1; return 0; } -static int server_cb_raise_ex(gras_msg_cb_ctx_t ctx, - void *payload_data) { +static int server_cb_raise_ex(gras_msg_cb_ctx_t ctx, void *payload_data) +{ exception_raising(); return 0; } -static int server_cb_ping(gras_msg_cb_ctx_t ctx, - void *payload_data) { +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; + int msg = *(int *) payload_data; gras_socket_t expeditor = gras_msg_cb_ctx_from(ctx); /* 2. Log which client connected */ INFO3("Got message PING(%d) from %s:%d", - msg, - gras_socket_peer_name(expeditor), gras_socket_peer_port(expeditor)); + msg, + gras_socket_peer_name(expeditor), gras_socket_peer_port(expeditor)); /* 4. Change the value of the msg variable */ msg = 4321; /* 5. Return as result */ - gras_msg_rpcreturn(6000,ctx,&msg); + gras_msg_rpcreturn(6000, ctx, &msg); INFO0("Answered with PONG(4321)"); /* 6. Cleanups, if any */ /* 7. Tell GRAS that we consummed this message */ return 0; -} /* end_of_server_cb_ping */ +} /* end_of_server_cb_ping */ -int server (int argc,char *argv[]) { +int server(int argc, char *argv[]) +{ gras_socket_t mysock; server_data_t sdata; int port = 4000; /* 1. Init the GRAS infrastructure */ - gras_init(&argc,argv); + gras_init(&argc, argv); /* 2. Get the port I should listen on from the command line, if specified */ if (argc == 2) - port=atoi(argv[1]); + port = atoi(argv[1]); - sdata=gras_userdata_new(s_server_data_t); + sdata = gras_userdata_new(s_server_data_t); sdata->done = 0; INFO1("Launch server (port=%d)", port); @@ -336,9 +354,9 @@ int server (int argc,char *argv[]) { /* 4. Register the known messages and register my callback */ register_messages(); - gras_cb_register("plain ping",&server_cb_ping); - gras_cb_register("raise exception",&server_cb_raise_ex); - gras_cb_register("kill",&server_cb_kill); + gras_cb_register("plain ping", &server_cb_ping); + gras_cb_register("raise exception", &server_cb_raise_ex); + gras_cb_register("kill", &server_cb_kill); INFO1("Listening on port %d", gras_socket_my_port(mysock)); @@ -380,5 +398,4 @@ int server (int argc,char *argv[]) { gras_exit(); return 0; -} /* end_of_server */ - +} /* end_of_server */