本文整理汇总了C++中CCgiContext类的典型用法代码示例。如果您正苦于以下问题:C++ CCgiContext类的具体用法?C++ CCgiContext怎么用?C++ CCgiContext使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CCgiContext类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ProcessRequest
int CSoapServerApplication::ProcessRequest(CCgiContext& ctx)
{
const CCgiRequest& request = ctx.GetRequest();
CCgiResponse& response = ctx.GetResponse();
response.SetContentType("text/xml");
if (!x_ProcessWsdlRequest(response, request)) {
x_ProcessSoapRequest(response, request);
}
response.Flush();
return 0;
}
示例2: ProcessRequest
int CNetCacheBlobFetchApp::ProcessRequest(CCgiContext& ctx)
{
const CCgiRequest& request = ctx.GetRequest();
CCgiResponse& reply = ctx.GetResponse();
bool is_found;
string key = request.GetEntry("key", &is_found);
if (key.empty() || !is_found) {
NCBI_THROW(CArgException, eNoArg, "CGI entry 'key' is missing");
}
string fmt = request.GetEntry("fmt", &is_found);
if (fmt.empty() || !is_found)
fmt = "image/png";
string filename(request.GetEntry("filename", &is_found));
if (is_found && !filename.empty()) {
string is_inline(request.GetEntry("inline", &is_found));
reply.SetHeaderValue("Content-Disposition",
(is_found && NStr::StringToBool(is_inline) ?
"inline; filename=" : "attachment; filename=") +
filename);
}
reply.SetContentType(fmt);
reply.WriteHeader();
CNetStorageObject netstorage_object(m_NetStorage.Open(key));
char buffer[NETSTORAGE_IO_BUFFER_SIZE];
size_t total_bytes_written = 0;
while (!netstorage_object.Eof()) {
size_t bytes_read = netstorage_object.Read(buffer, sizeof(buffer));
reply.out().write(buffer, bytes_read);
total_bytes_written += bytes_read;
if (bytes_read < sizeof(buffer))
break;
}
netstorage_object.Close();
LOG_POST(Info << "retrieved data: " << total_bytes_written << " bytes");
return 0;
}
示例3: Execute
void CSeqBasicCommand::Execute( CCgiContext& ctx )
{
const CNcbiRegistry& reg = ctx.GetConfig();
/* load in the html template file */
string baseFile = reg.Get( "filesystem", "HtmlBaseFile" );
auto_ptr<CHTMLPage> page( new CHTMLPage( NcbiEmptyString, baseFile ) );
/* set up to replace <@[email protected]> in template file with html returned
from CreateView */
page->AddTagMap( "QUICKSEARCH", CreateQuickSearch(ctx) );
page->AddTagMap( "VIEW", CreateView( ctx ) );
/* actual page output */
ctx.GetResponse().WriteHeader();
page->Print(ctx.GetResponse().out(), CNCBINode::eHTML );
}
示例4: Execute
void CHelloCommand::Execute( CCgiContext& ctx )
{
const CNcbiRegistry& reg = ctx.GetConfig();
// load in the html template file
string baseFile = reg.Get( "filesystem", "HtmlBaseFile" );
auto_ptr<CHTMLPage> page( new CHTMLPage( NcbiEmptyString, baseFile ) );
// set up to replace <@[email protected]> in template file with html returned
// from CreateView
page->AddTagMap( "VIEW", CreateView( ctx ) );
// actual page output
ctx.GetResponse().WriteHeader();
page->Print(ctx.GetResponse().out(), CNCBINode::eHTML );
}
示例5: HandleRequest
void CNcbiResource::HandleRequest( CCgiContext& ctx )
{
bool defCom = false;
try {
TCmdList::iterator it = find_if( m_cmd.begin(), m_cmd.end(),
PRequested<CNcbiCommand>( ctx ) );
unique_ptr<CNcbiCommand> cmd( ( it == m_cmd.end() )
? ( defCom = true, GetDefaultCommand() )
: (*it)->Clone() );
cmd->Execute( ctx );
#if !defined(NCBI_COMPILER_GCC) || NCBI_COMPILER_VERSION >= 300 || defined(_IO_THROW)
} catch( IOS_BASE::failure& /* e */ ) {
throw;
#endif
} catch( std::exception& e ) {
_TRACE( e.what() );
ctx.PutMsg( string("Error handling request: ") + e.what() );
if( !defCom ) {
unique_ptr<CNcbiCommand> cmd( GetDefaultCommand() );
cmd->Execute( ctx );
}
}
}
示例6: IsRequested
bool CNcbiCommand::IsRequested( const CCgiContext& ctx ) const
{
const string value = GetName();
TCgiEntries& entries =
const_cast<TCgiEntries&>(ctx.GetRequest().GetEntries());
pair<TCgiEntriesI,TCgiEntriesI> p = entries.equal_range( GetEntry() );
for ( TCgiEntriesI itEntr = p.first; itEntr != p.second; ++itEntr ) {
if( AStrEquiv( value, itEntr->second, PNocase() ) ) {
return true;
} // if
} // for
// if there is no 'cmd' entry
// check the same for IMAGE value
p = entries.equal_range( NcbiEmptyString );
for ( TCgiEntriesI iti = p.first; iti != p.second; ++iti ) {
if( AStrEquiv( value, iti->second, PNocase() ) ) {
return true;
} // if
}
return false;
}
示例7: ProcessRequest
int CVAApp::ProcessRequest(CCgiContext& ctx)
{
// execute request
ctx.GetResource().HandleRequest(ctx);
return(0);
}
示例8: GetQueryStringValue
/* returns the string 'value' portion of the 'key=value' pairing
* in the querystring. */
inline string CSeqCommand::GetQueryStringValue(CCgiContext& ctx, const string &key)
{
TCgiEntries& entries = const_cast<TCgiEntries&> (ctx.GetRequest().GetEntries());
pair<TCgiEntriesI, TCgiEntriesI> Map = entries.equal_range(key);
string value = kEmptyStr;
for(TCgiEntriesI i = Map.first; i != Map.second; ++i)
{
value = i->second;
}
return value;
}
示例9: Execute
void CNcbiRelocateCommand::Execute( CCgiContext& ctx )
{
try {
string url = GetLink(ctx);
_TRACE("CNcbiRelocateCommand::Execute changing location to:" << url);
// Theoretically, the status should be set, but...
// Commented temporarily to avoid the redirection to go out of
// NCBI and confuse some not-so-smart clients.
// It can be restored later when (and if) the NCBI internal HTTP
// servers are tuned to intercept the redirections and resolve these
// internally.
//
// ctx.GetResponse().SetStatus(301, "Moved");
ctx.GetResponse().SetHeaderValue("Location", url);
ctx.GetResponse().WriteHeader();
}
catch (exception&) {
ERR_POST_X(1, "CNcbiRelocateCommand::Execute error getting url");
throw;
}
}
示例10: x_GetCGIContextParams
void CBlastHitMatrixCGIApplication::x_GetCGIContextParams(CCgiContext &ctx)
{
const CCgiRequest& request = ctx.GetRequest();
const TCgiEntries& entries = request.GetEntries();
m_RID = s_GetRequestParam(entries,"rid");
string paramVal = s_GetRequestParam(entries,"width");
m_Width = !paramVal.empty() ? NStr::StringToInt(paramVal) : 800;
paramVal = s_GetRequestParam(entries,"height");
m_Height = !paramVal.empty() ? NStr::StringToInt(paramVal) : 600;
//Indicates that image should output in the file
m_File = s_GetRequestParam(entries,"file");
m_Thumbnail = s_GetRequestParam(entries,"thumbnail");
}
示例11: x_GetSeqAnnot
void CBlastHitMatrixCGIApplication::x_GetSeqAnnot(CCgiContext& ctx)
{
const CNcbiRegistry & reg = ctx.GetConfig();
string blastURL = reg.Get("NetParams", "BlastURL");
string url = (string)blastURL + "?CMD=Get&RID=" + m_RID + "&FORMAT_TYPE=ASN.1&FORMAT_OBJECT=Alignment";
SConnNetInfo* net_info = ConnNetInfo_Create(NULL);
// create HTTP connection
CConn_HttpStream inHttp(url,net_info);
try {
m_Annot.Reset(new CSeq_annot);
auto_ptr<CObjectIStream> is
(CObjectIStream::Open(eSerial_AsnText, inHttp));
*is >> *m_Annot;
}
catch (CException& e) {
m_Annot.Reset();
NCBI_THROW(CBlastHitMatrixCGIException, eInvalidSeqAnnot, "Exception reading SeqAnnot via url " + url + ", exception message: " + e.GetMsg());
}
}
示例12: ProcessRequest
int CBlastHitMatrixCGIApplication::ProcessRequest(CCgiContext &ctx)
{
// retrieve our CGI rendering params
x_GetCGIContextParams(ctx);
x_InitAppData(ctx);
bool success = true;
if(m_BlastHitMatrix->IsFileOut()) {
success = m_BlastHitMatrix->WriteToFile();
}
else {
string encoding("image/png");
CCgiResponse& response = ctx.GetResponse();
response.SetContentType(encoding);
response.WriteHeader();
success = m_BlastHitMatrix->Display(response.out());
}
if(!success) {
NCBI_THROW(CBlastHitMatrixCGIException, eImageRenderError, "Exception occured, exception message: " + m_BlastHitMatrix->GetErrorMessage());
}
return 0;
}
示例13: ProcessRequest
int CTestMultipartCgiApplication::ProcessRequest(CCgiContext& ctx)
{
const CArgs& args = GetArgs();
CCgiResponse& response = ctx.GetResponse();
string mode = args["mode"].AsString();
if (mode == "mixed") {
response.SetMultipartMode(CCgiResponse::eMultipart_mixed);
} else if (mode == "related") {
response.SetMultipartMode(CCgiResponse::eMultipart_related);
} else if (mode == "replace") {
response.SetMultipartMode(CCgiResponse::eMultipart_replace);
}
response.WriteHeader();
response.out() << "main document" << endl;
if (mode == "mixed") {
response.BeginPart("attachment.foo", "application/x-foo-bar");
response.out() << "attachment" << endl;
} else if (mode == "related") {
response.BeginPart("more-content.foo", "application/x-foo-bar");
response.out() << "more content" << endl;
} else if (mode == "replace") {
response.EndPart();
SleepSec(1);
response.BeginPart(kEmptyStr, "text/html");
response.out() << "updated document" << endl;
}
if (mode != "none") {
response.EndLastPart();
}
return 0;
}
示例14: Execute
void CVACommand :: Execute(CCgiContext& ctx)
{
CCgiRequest& req = ctx.GetRequest();
CCgiResponse& resp = ctx.GetResponse();
string mst = req.GetEntry("master").GetValue();
if ( mst.empty() ) {
PrtMes::PrintErrorHeader(&resp, "VastAlign", 1);
PrtMes::PrintMsgWithTail(&resp,
"<h3>No master privided. </h3>n");
}
if ( 4 == mst.size() ) mst += ' ';
if ( 6 <= mst.size() ) {
mst[4] = mst[5];
if ( 6 == mst.size() ) mst[5] = '\0';
}
if ( 'x' == mst[4] ) mst[4] = ' ';
unsigned i;
for (i=0; i< mst.size(); i++) mst[i] = toupper(mst[i]);
string slv = req.GetEntry("slave").GetValue();
if ( slv.empty() ) {
PrtMes::PrintErrorHeader(&resp, "VastAlign", 1);
PrtMes::PrintMsgWithTail(&resp, "<h3>No slave privided. </h3>n");
}
if ( 4 == slv.size() ) slv += ' ';
if ( 6 <= slv.size() ) {
slv[4] = slv[5];
if ( 6 == slv.size()) slv[5] = '\0';
}
if ( 'x' == slv[4] ) slv[4] = ' ';
for (i=0; i< slv.size(); i++) slv[i] = toupper(slv[i]);
string value = req.GetEntry("from").GetValue();
unsigned from = 0;
if ( !value.empty() ) from = atoi(value.c_str());
value = req.GetEntry("to").GetValue();
unsigned to = 0;
if ( !value.empty() ) to = atoi(value.c_str());
VastPageDataPtr vpp = NewDataType <VastPageData> (1);
unsigned row_count =
constructTopNBestAlignedVastRows(vpp,1, (char *)mst.c_str(),
(char *)slv.c_str(), from, to, 0, 0,1);
if (!row_count) vpp[0].IpdpLen = 0;
BiostrucAnnotSetPtr pbsa = constructBASPFromVastPagePtr(vpp, 1);
{AsnIoPtr aip;
aip = AsnIoOpen("pbsa.out", "w");
BiostrucAnnotSetAsnWrite(pbsa, aip, NULL);
AsnIoClose(aip);
}
auto_ptr <CObjectOStream> oos
( CObjectOStream::Open( eSerial_AsnBinary, resp.out() ) ); //Cn3D
CObjectOStream::AsnIo aip(*oos, "Biostruc-annot-set");
// printf("Content-type: chemical/ncbi-asn1-binary\n\n"); launch Cn3D
// printf("Content-type: text/html\n\n"); for test
/*
auto_ptr <CObjectOStream> oos
( CObjectOStream::Open( eSerial_AsnText, resp.out() ) );
aip = AsnIoOpen("pbsa.out", "w");
*/
resp.SetContentType("application/octet-stream"); // Cn3D
resp.WriteHeader();
BiostrucAnnotSetAsnWrite(pbsa, aip, NULL);
aip.End();
BiostrucAnnotSetFree(pbsa);
delete [] vpp;
return;
}