00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <mpcl/net/cgi/abstract_application.hh>
00028 #include <mpcl/net/cgi/exceptions.hh>
00029
00030
00031
00032
00033
00034
00035 void mpcl::net::cgi::TAbstractApplication::
00036 buildSourcePage (void)
00037 {
00038
00039 using text::html::TBasePage;
00040 using text::html::kcIdentifierSeparator;
00041
00042 TString yPathInfo (tConfigProcessor.environmentValue ("PATH_INFO"));
00043
00044 qtSourcePage = (TBasePage*) NULL;
00045 ptSourceForm = NULL;
00046 if ( !yPathInfo.empty() )
00047 {
00048 TString yPageName;
00049 TString yFormName;
00050 TString::size_type zOffset;
00051 TString::size_type zBegin = 0;
00052
00053
00054
00055
00056 if ( yPathInfo [0] == kcIdentifierSeparator )
00057 {
00058
00059
00060
00061 ++zBegin;
00062 }
00063 zOffset = yPathInfo.find (kcIdentifierSeparator, zBegin);
00064 yPageName = yPathInfo.substr (zBegin, (zOffset - zBegin));
00065 yFormName = yPathInfo.substr (zOffset + 1);
00066 qtSourcePage = buildPage (yPageName);
00067 if ( !qtSourcePage.isNull() )
00068 {
00069 ptSourceForm = qtSourcePage->tag (yFormName).dynamicCast<TForm*>();
00070 if ( tConfigProcessor.hasInput() && ptSourceForm )
00071 {
00072 tConfigProcessor.updateForm (*ptSourceForm);
00073 }
00074 }
00075 }
00076
00077 }
00078
00079
00080
00081
00082
00083
00084 void mpcl::net::cgi::TAbstractApplication::
00085 writeResponse (void) const
00086 {
00087
00088 if ( gIsRedirected )
00089 {
00090 *ptTargetOstream << "Location: " << yTargetUrl << "\n";
00091 if ( !tSession.isEmpty() )
00092 {
00093 *ptTargetOstream << tSession;
00094 }
00095 *ptTargetOstream << std::endl;
00096 }
00097 else
00098 {
00099 qtTargetPage->update();
00100 *ptTargetOstream << "Content-type: text/html\n";
00101 if ( !tSession.isEmpty() )
00102 {
00103 *ptTargetOstream << tSession;
00104 }
00105 *ptTargetOstream << std::endl;
00106 *ptTargetOstream << *qtTargetPage;
00107 }
00108
00109 }