TSP: The Transport Sample Protocol



Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

tsp_provider_init.c

Go to the documentation of this file.
00001 
00039 #include "tsp_sys_headers.h"
00040 
00041 #include "tsp_provider.h"
00042 #include "tsp_request.h"
00043 #include "tsp_server.h"
00044 #include "tsp_provider_init.h"
00045 
00046 int TSP_provider_init(int* argc, char** argv[])
00047 {
00048 
00049   int ret;
00050   STRACE_IO(("-->IN"));
00051 
00052   ret = TSP_provider_private_init(argc, argv);
00053   
00054   /* Initialize tsp request handlers structures */
00055   ret = TSP_provider_rqh_manager_init();
00056 
00057   /* install atexit handler to close properly */
00058   atexit(TSP_provider_end);
00059 
00060   STRACE_IO(("-->OUT"));
00061   return ret;
00062 
00063 } /* End of TSP_provider_init */
00064 
00065 int TSP_provider_run(int spawn_mode)
00066 {
00067   int ret = FALSE;
00068 
00069   STRACE_IO(("-->IN"));
00070   
00071   
00072   if(TSP_provider_is_initialized())
00073     {            
00074       /* build and install default request handler (RPC) */
00075       TSP_provider_rqh_manager_install(0,TSP_rpc_request);
00076 
00077       if (spawn_mode & TSP_ASYNC_REQUEST_DYNAMIC) {
00078         /*
00079          * un-comment this if you want to test
00080          * more then one RPC request handler
00081          * TSP_provider_rqh_manager_install(1,TSP_rpc_request);
00082          */
00083 
00084         /* TODO : call TSP_provider_rqh_manager_install with new ranks
00085            & other protocols (XML, CORBA, ...) */
00086       }
00087 
00088       ret = TSP_provider_rqh_manager_refresh();
00089 
00090 
00091       /* If we are launched in a blocking mode 
00092        * Wait for every request handler thread to terminate
00093        * !!! Thread MUST NOT DETACHED themslevs though !!!
00094        */
00095       if (spawn_mode & TSP_ASYNC_REQUEST_BLOCKING) {
00096         TSP_provider_rqh_manager_waitend();
00097       }
00098     }
00099   else
00100     {
00101       STRACE_ERROR(("Call TSP_provider_init first, and then call TSP_provider_run ! "))
00102         }
00103   
00104   STRACE_IO(("-->OUT"));
00105   return ret;  
00106   
00107 } /* TSP_provider_run */
00108 
00109 
00110 void TSP_provider_end(void)
00111 {
00112   /* TODO : call flush on streams */
00113 
00114   /* remove any published URL */
00115   {
00116     char systemCmd[512];
00117     sprintf(systemCmd, "rm -f /tmp/TSP.%d", getpid());
00118     system(systemCmd);
00119   }
00120 
00121   /* Call handlers end function */
00122   TSP_provider_rqh_manager_end();
00123 }
00124 
00125 void TSP_provider_print_usage(void)
00126 {
00127    printf(TSP_ARG_PROVIDER_USAGE"\n");
00128 }
00129 
00130 char **TSP_provider_urls(int pub_mode)
00131 {
00132   int rank, nb;
00133   char **urls = NULL, *url;
00134 
00135   /* Check running handlers and copy their URLs */
00136   nb = TSP_provider_rqh_manager_get_nb_running();
00137   if(nb > 0)
00138     {      urls = (char**)calloc(nb,sizeof(char*));
00139       for(rank = 0; rank < nb; rank ++)
00140         {
00141           url = TSP_provider_rqh_manager_get_url(rank);
00142           if(url)
00143             {
00144               urls[rank] = strdup(url);
00145 
00146               if(pub_mode & TSP_PUBLISH_URLS_PRINT)
00147                 printf("TSP Provider on PID %d - URL #%d : <%s>\n", getpid(), rank, url);
00148 
00149               if(pub_mode & TSP_PUBLISH_URLS_FILE)
00150                 {
00151                   char systemCmd[512];
00152                   sprintf(systemCmd, "echo \"%s\" > /tmp/TSP.%d", url, getpid());
00153                   system(systemCmd);
00154                 }
00155 
00156               if(pub_mode & TSP_PUBLISH_URLS_SNMP)
00157                 /* TODO */
00158                 STRACE_ERROR(("SNMP publication of TSP URLs not yet implemented\n"));
00159             }
00160           else
00161             {
00162               STRACE_ERROR(("Request Handler #%d did not provided an URL", rank));
00163               urls[rank] = strdup("");
00164             }
00165         }
00166     }
00167   return urls;
00168 }
00169 
Framework Home Page.

Beware !! TSP wave is coming...