From f97c4ab165fa646df3ffcb33a615562eca96907c Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 27 Apr 2014 01:20:04 +0800 Subject: [PATCH] Restored options for AppServers (and implemented registration) --- src/appserver.c | 13 +++++++--- src/apptransport.c | 61 ++++++++++++++++++++++++++++++---------------- src/apptransport.h | 3 +++ tests/appserver.c | 2 +- 4 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/appserver.c b/src/appserver.c index 95ebdbd..b24c91c 100644 --- a/src/appserver.c +++ b/src/appserver.c @@ -53,15 +53,16 @@ static int _appserver_helper_message(void * data, AppTransport * transport, /* public */ /* functions */ /* appserver_new */ -AppServer * appserver_new(const char * app, char const * name) +AppServer * appserver_new(AppServerOptions options, const char * app, + char const * name) { - return appserver_new_event(app, name, NULL); + return appserver_new_event(options, app, name, NULL); } /* appserver_new_event */ -AppServer * appserver_new_event(char const * app, char const * name, - Event * event) +AppServer * appserver_new_event(AppServerOptions options, char const * app, + char const * name, Event * event) { AppServer * appserver; @@ -81,6 +82,10 @@ AppServer * appserver_new_event(char const * app, char const * name, appserver_delete(appserver); return NULL; } + /* register the server if requested */ + if(options & ASO_REGISTER) + /* XXX should we really ignore errors? */ + apptransport_server_register(appserver->transport, app); return appserver; } diff --git a/src/apptransport.c b/src/apptransport.c index 72ade9d..d11f59a 100644 --- a/src/apptransport.c +++ b/src/apptransport.c @@ -141,7 +141,6 @@ static void _new_helper(AppTransport * transport, AppTransportMode mode, /* apptransport_new_app */ static String * _new_app_name(char const * app, char const * name); -static String * _new_app_query(char const * app); static String * _new_app_transport(String ** name); AppTransport * apptransport_new_app(AppTransportMode mode, @@ -188,29 +187,10 @@ static String * _new_app_name(char const * app, char const * name) name = getenv(var); string_delete(var); if(name == NULL) - return _new_app_query(app); + return apptransport_lookup(app); return string_new(name); } -static String * _new_app_query(char const * app) -{ - const char session[] = "Session"; - String * name = NULL; - AppClient * appclient; - -#ifdef DEBUG - fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, app); -#endif - if(strcmp(app, session) == 0) - return NULL; - if((appclient = appclient_new(session, NULL)) == NULL) - return NULL; - /* we can ignore errors */ - appclient_call(appclient, (void **)&name, "lookup", app); - appclient_delete(appclient); - return name; -} - static String * _new_app_transport(String ** name) { String * p; @@ -274,6 +254,27 @@ String const * apptransport_client_get_name(AppTransportClient * client) /* useful */ +/* apptransport_lookup */ +String * apptransport_lookup(char const * app) +{ + const char session[] = "Session"; + String * name = NULL; + AppClient * appclient; + +#ifdef DEBUG + fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, app); +#endif + if(strcmp(app, session) == 0) + return NULL; + if((appclient = appclient_new(session, NULL)) == NULL) + return NULL; + /* we can ignore errors */ + appclient_call(appclient, (void **)&name, "lookup", app); + appclient_delete(appclient); + return name; +} + + /* apptransport_client_send */ int apptransport_client_send(AppTransport * transport, AppMessage * message, int acknowledge) @@ -287,6 +288,24 @@ int apptransport_client_send(AppTransport * transport, AppMessage * message, } +/* apptransport_server_register */ +int apptransport_server_register(AppTransport * transport, char const * app) +{ + int ret; + AppClient * appclient; + int res = -1; + + if((appclient = appclient_new("Session", NULL)) == NULL) + return -1; + ret = appclient_call(appclient, (void **)&res, "register", app, + transport->name); + ret = (ret == 0 && res == 0) ? 0 : -1; + /* FIXME really keep alive until the transport exits */ + appclient_delete(appclient); + return ret; +} + + /* apptransport_server_send */ int apptransport_server_send(AppTransport * transport, AppTransportClient * client, AppMessage * message) diff --git a/src/apptransport.h b/src/apptransport.h index 05ebf7e..ebd3603 100644 --- a/src/apptransport.h +++ b/src/apptransport.h @@ -49,11 +49,14 @@ String const * apptransport_get_transport(AppTransport * transport); String const * apptransport_client_get_name(AppTransportClient * client); /* useful */ +String * apptransport_lookup(char const * app); + /* ATM_CLIENT */ int apptransport_client_send(AppTransport * transport, AppMessage * message, int acknowledge); /* ATM_SERVER */ +int apptransport_server_register(AppTransport * transport, char const * app); int apptransport_server_send(AppTransport * transport, AppTransportClient * client, AppMessage * message); diff --git a/tests/appserver.c b/tests/appserver.c index 5a5931f..d54a2f9 100644 --- a/tests/appserver.c +++ b/tests/appserver.c @@ -52,7 +52,7 @@ int main(int argc, char * argv[]) default: return _usage(); } - if((appserver = appserver_new(app, name)) == NULL) + if((appserver = appserver_new(0, app, name)) == NULL) { error_print("appserver"); return 2;