int CCgiSampleApplication::ProcessRequest(CCgiContext& ctx) { // Parse, verify, and look at cmd-line and CGI parameters via "CArgs" // (optional) x_LookAtArgs(); // Given "CGI context", get access to its "HTTP request" and // "HTTP response" sub-objects const CCgiRequest& request = ctx.GetRequest(); CCgiResponse& response = ctx.GetResponse(); // Try to retrieve the message ('message=...') from the HTTP request. // NOTE: the case sensitivity was turned off in Init(). bool is_message = false; string message = request.GetEntry("message", &is_message); if ( is_message ) { message = "'" + message + "'"; } else { message = "<NONE>"; } int iters = 5; for(int i = 0; i < iters; ++i) { PutProgressMessage( "Iteration " + NStr::IntToString(i) + " of " + NStr::IntToString(iters)); SleepSec(5); } string this_host = CSocketAPI::gethostname(); // Create a HTML page (using template HTML file "cgi_sample.html") auto_ptr<CHTMLPage> page; try { page.reset(new CHTMLPage("Sample Remote CGI", "rcgi_sample.html")); } catch (exception& e) { ERR_POST("Failed to create Sample CGI HTML page: " << e.what()); return 2; } // Register substitution for the template parameters <@MESSAGE@> and // <@SELF_URL@> try { CHTMLPlainText* host = new CHTMLPlainText(this_host); page->AddTagMap("HOST", host); CHTMLPlainText* text = new CHTMLPlainText(message); page->AddTagMap("MESSAGE", text); CHTMLPlainText* self_url = new CHTMLPlainText(ctx.GetSelfURL()); page->AddTagMap("SELF_URL", self_url); CHTMLPlainText* date = new CHTMLPlainText( GetFastLocalTime().AsString("D B Y, h:m:s")); page->AddTagMap("DATE", date); } catch (exception& e) { ERR_POST("Failed to populate Sample CGI HTML page: " << e.what()); return 3; } // Compose and flush the resultant HTML page try { response.SetHeaderValue("Pragma", "no-cache"); response.SetHeaderValue("Cache-Control", "no-cache"); response.WriteHeader(); page->Print(response.out(), CNCBINode::eHTML); } catch (exception& e) { ERR_POST("Failed to compose/send Sample CGI HTML page: " << e.what()); return 4; } return 0; }
int CCgiSampleApplication::ProcessRequest(CCgiContext& ctx) { // Parse, verify, and look at cmd-line and CGI parameters via "CArgs" // (optional) x_LookAtArgs(); // Given "CGI context", get access to its "HTTP request" and // "HTTP response" sub-objects const CCgiRequest& request = ctx.GetRequest(); const CCgiCookies& cookies = request.GetCookies(); CCgiResponse& response = ctx.GetResponse(); const CCgiCookie* cookie = cookies.Find(kSessionId, "", "" ); string message = "<EMPTY>"; string session_id; if (cookie) { session_id = cookie->GetValue(); m_NetCacheAPI.ReadData(session_id, message); if (!message.empty()) message = "'" + message + "'"; else message = "<EMPTY>"; } bool is_message = false; string new_message = request.GetEntry("Message", &is_message); if ( is_message && !new_message.empty() ) { auto_ptr<CNcbiOstream> os(m_NetCacheAPI.CreateOStream(session_id)); *os << new_message; os.reset(); CCgiCookies& rcookies = response.Cookies(); rcookies.Add(kSessionId, session_id); new_message = "'" + new_message + "'"; } else new_message = "<HAS NOT BEEN CHANGED>"; // Create a HTML page (using template HTML file "cgi_sample.html") auto_ptr<CHTMLPage> page; try { page.reset(new CHTMLPage("Sample CGI with NetCache Session", m_HtmlTempl)); } catch (exception& e) { ERR_POST("Failed to create Sample CGI HTML page: " << e.what()); return 2; } // Register substitution for the template parameters <@MESSAGE@> and // <@SELF_URL@> try { CHTMLPlainText* text = new CHTMLPlainText(message); page->AddTagMap("MESSAGE", text); text = new CHTMLPlainText(new_message); page->AddTagMap("NEW_MESSAGE", text); CHTMLPlainText* self_url = new CHTMLPlainText(ctx.GetSelfURL()); page->AddTagMap("SELF_URL", self_url); } catch (exception& e) { ERR_POST("Failed to populate Sample CGI HTML page: " << e.what()); return 3; } // Compose and flush the resultant HTML page try { response.WriteHeader(); page->Print(response.out(), CNCBINode::eHTML); } catch (exception& e) { ERR_POST("Failed to compose/send Sample CGI HTML page: " << e.what()); return 4; } return 0; }
int CCgiSampleApplication::ProcessRequest(CCgiContext& ctx) { // Parse, verify, and look at cmd-line and CGI parameters via "CArgs" // (optional) x_LookAtArgs(); // Given "CGI context", get access to its "HTTP request" and // "HTTP response" sub-objects const CCgiRequest& request = ctx.GetRequest(); CCgiResponse& response = ctx.GetResponse(); /* // To get CGI client API (in-house only, optional) const char* const* client_tracking_env = request.GetClientTrackingEnv(); unsigned int client_ip = NcbiGetCgiClientIP(eCgiClientIP_TryAll, client_tracking_env); int is_local_client = NcbiIsLocalCgiClient(client_tracking_env); */ // Try to retrieve the message ('message=...') from the HTTP request. // NOTE: the case sensitivity was turned off in Init(). bool is_message = false; string message = request.GetEntry("Message", &is_message); if ( is_message ) { message = "'" + message + "'"; } else { message = "<NONE>"; } // NOTE: While this sample uses the CHTML* classes for generating HTML, // you are encouraged to use XML/XSLT and the NCBI port of XmlWrapp. // For more info: // http://www.ncbi.nlm.nih.gov/books/NBK8829/ // http://www.ncbi.nlm.nih.gov/IEB/ToolBox/CPP_DOC/doxyhtml/namespacexml.html // Create a HTML page (using template HTML file "cgi_sample.html") auto_ptr<CHTMLPage> page; try { page.reset(new CHTMLPage("Sample CGI", "cgi_sample.html")); } catch (exception& e) { ERR_POST("Failed to create Sample CGI HTML page: " << e.what()); return 2; } // Register substitution for the template parameters <@MESSAGE@> and // <@SELF_URL@> try { CHTMLPlainText* text = new CHTMLPlainText(message); _TRACE("foo"); page->AddTagMap("MESSAGE", text); CHTMLPlainText* self_url = new CHTMLPlainText(ctx.GetSelfURL()); page->AddTagMap("SELF_URL", self_url); } catch (exception& e) { ERR_POST("Failed to populate Sample CGI HTML page: " << e.what()); return 3; } // Compose and flush the resultant HTML page try { _TRACE("stream status: " << ctx.GetStreamStatus()); response.WriteHeader(); page->Print(response.out(), CNCBINode::eHTML); } catch (exception& e) { ERR_POST("Failed to compose/send Sample CGI HTML page: " << e.what()); return 4; } return 0; }