void HttpServer::testCgiRequest(const HttpRequestContext& requestContext, const HttpMessage& request, HttpMessage*& response) { UtlString url; UtlString value; requestContext.getEnvironmentVariable(HttpRequestContext::HTTP_ENV_RAW_URL, url); UtlString cgiDump("<HTML>\n<TITLE>\n"); cgiDump.append(url); cgiDump.append(" dump\n</TITLE>\n<BODY>\n<H3>Environment Variables\n</H3>\n"); cgiDump.append("<TABLE BORDER=1>\n<TR>\n<TH ALIGN=LEFT>Name</TH>\n<TH ALIGN=LEFT>Value</TH>\n</TR>\n"); requestContext.getEnvironmentVariable(HttpRequestContext::HTTP_ENV_RAW_URL, value); cgiDump.append("<TR>\n<TD ALIGN=LEFT>HTTP_ENV_RAW_URL</TD>\n<TD ALIGN=LEFT>"); cgiDump.append(value); cgiDump.append("</TD>\n</TR>\n"); requestContext.getEnvironmentVariable(HttpRequestContext::HTTP_ENV_UNMAPPED_FILE, value); cgiDump.append("<TR>\n<TD ALIGN=LEFT>HTTP_ENV_UNMAPPED_FILE</TD>\n<TD ALIGN=LEFT>"); cgiDump.append(value); cgiDump.append("</TD>\n</TR>\n"); requestContext.getEnvironmentVariable(HttpRequestContext::HTTP_ENV_MAPPED_FILE, value); cgiDump.append("<TR>\n<TD ALIGN=LEFT>HTTP_ENV_MAPPED_FILE</TD>\n<TD ALIGN=LEFT>"); cgiDump.append(value); cgiDump.append("</TD>\n</TR>\n"); requestContext.getEnvironmentVariable(HttpRequestContext::HTTP_ENV_QUERY_STRING, value); cgiDump.append("<TR>\n<TD ALIGN=LEFT>HTTP_ENV_QUERY_STRING</TD>\n<TD ALIGN=LEFT>"); cgiDump.append(value); cgiDump.append("</TD>\n</TR>\n"); requestContext.getEnvironmentVariable(HttpRequestContext::HTTP_ENV_SERVER_NAME, value); cgiDump.append("<TR>\n<TD ALIGN=LEFT>HTTP_ENV_SERVER_NAME</TD>\n<TD ALIGN=LEFT>"); cgiDump.append(value); cgiDump.append("</TD>\n</TR>\n"); requestContext.getEnvironmentVariable(HttpRequestContext::HTTP_ENV_REQUEST_METHOD, value); cgiDump.append("<TR>\n<TD ALIGN=LEFT>HTTP_ENV_REQUEST_METHOD</TD>\n<TD ALIGN=LEFT>"); cgiDump.append(value); cgiDump.append("</TD>\n</TR>\n"); requestContext.getEnvironmentVariable(HttpRequestContext::HTTP_ENV_USER, value); cgiDump.append("<TR>\n<TD ALIGN=LEFT>HTTP_ENV_USER</TD>\n<TD ALIGN=LEFT>"); cgiDump.append(value); cgiDump.append("</TD>\n</TR>\n</TABLE>\n"); cgiDump.append("<H3>CGI/Form Variables\n</H3>\n"); cgiDump.append("<TABLE BORDER=1>\n<TR>\n<TH>Name</TH>\n<TH>Value</TH>\n</TR>\n"); int index = 0; UtlString name; while(requestContext.getCgiVariable(index, name, value)) { cgiDump.append("<TR>\n<TD ALIGN=LEFT>"); cgiDump.append(name); cgiDump.append("</TD>\n<TD ALIGN=LEFT>"); cgiDump.append(value); cgiDump.append("</TD>\n</TR>\n"); index++; } cgiDump.append("</TABLE>\n"); createHtmlResponse(HTTP_OK_CODE, HTTP_OK_TEXT, cgiDump.data(), response); url.remove(0); value.remove(0); cgiDump.remove(0); name.remove(0); }
/* ============================ ACCESSORS ================================= */ void WebServer::ProcessEvent( const HttpRequestContext& requestContext, const HttpMessage& request, HttpMessage*& response ) { // get the action type (used to be the event) UtlString event; response = new HttpMessage(); ssize_t len; UtlString httpString; SubscribeServerPluginBase* plugin = NULL; request.getBytes(&httpString , &len); Os::Logger::instance().log(FAC_SIP, PRI_INFO, "WebServer::ProcessEvent HttpEvent \n%s", httpString.data()); // get the ACTION CGI variable requestContext.getCgiVariable( EVENTTYPE, event ); if( !event.isNull()) { //according to event type , get the correct plugin from spPluginTable StatusPluginReference* pluginContainer = spPluginTable->getPlugin(event); if(pluginContainer) { plugin = pluginContainer->getPlugin(); if(plugin) { // send 200 ok reply. response->setResponseFirstHeaderLine ( HTTP_PROTOCOL_VERSION, HTTP_OK_CODE, HTTP_OK_TEXT ); //call the event handler for the plugin plugin->handleEvent(requestContext, request, *response); } else { Os::Logger::instance().log(FAC_SIP, PRI_ERR, "WebServer::ProcessEvent no plugin in container for event type '%s'", event.data() ); } } else { Os::Logger::instance().log(FAC_SIP, PRI_WARNING, "WebServer::ProcessEvent no plugin found for event type '%s'", event.data() ); } } else { Os::Logger::instance().log(FAC_SIP, PRI_WARNING, "WebServer::ProcessEvent no '" EVENTTYPE "' variable found" ); } // We did not find a plugin so nobody handled this request. if(plugin == NULL) { response->setResponseFirstHeaderLine ( HTTP_PROTOCOL_VERSION, HTTP_FILE_NOT_FOUND_CODE, HTTP_FILE_NOT_FOUND_TEXT ); } Os::Logger::instance().flush(); }