本文整理汇总了C++中HeaderList::push_back方法的典型用法代码示例。如果您正苦于以下问题:C++ HeaderList::push_back方法的具体用法?C++ HeaderList::push_back怎么用?C++ HeaderList::push_back使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HeaderList
的用法示例。
在下文中一共展示了HeaderList::push_back方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parse_request
bool CHttpServer::parse_request(String &method, String &uri, String &query, HeaderList &headers, String &body )
{
method.clear();
uri.clear();
headers.clear();
body.clear();
size_t s = 0;
ByteVector request;
bool parsing_headers = true;
size_t content_length = 0;
for (;;) {
if (!receive_request(request))
return false;
size_t lim = request.size();
while (parsing_headers) {
size_t e;
for(e = s; e < lim && request[e] != '\r'; ++e);
if (e >= lim - 1) {
// Incomplete line, will read further
break;
}
if (request[e + 1] != '\n') {
if (verbose) RAWLOG_ERROR("Wrong request syntax, line should ends by '\\r\\n'");
return false;
}
String line(&request[s], e - s);
s = e + 2;
if (line.empty()) {
parsing_headers = false;
break;
}
if (uri.empty()) {
// Parse start line
if (!parse_startline(line, method, uri, query) || uri.empty())
return false;
}
else {
Header hdr;
if (!parse_header(line, hdr) || hdr.name.empty())
return false;
headers.push_back(hdr);
String low;
std::transform(hdr.name.begin(), hdr.name.end(), std::back_inserter(low), &::tolower);
if (low == "content-length") {
content_length = ::atoi(hdr.value.c_str());
}
}
}
if (!parsing_headers) {
if (content_length == 0)
return true;
if (lim - s < content_length)
continue;
body.assign(&request[s], &request[s] + content_length);
return true;
}
}
}
示例2: receive_request
//.........这里部分代码省略.........
}
#else
int flags = fcntl(m_sock, F_GETFL);
if (flags == -1) {
if (verbose) RAWLOG_ERROR1("Can not get current socket mode: %d", errno);
return false;
}
if (fcntl(m_sock, F_SETFL, flags & ~O_NONBLOCK) == -1) {
if (verbose) RAWLOG_ERROR1("Can not set blocking socket mode: %d", errno);
return false;
}
#endif
size_t pos = 0;
for(; pos < data.size();) {
int n = send(m_sock, data.c_str() + pos, data.size() - pos, 0);
if (n == -1) {
int e = RHO_NET_ERROR_CODE;
#if !defined(WINDOWS_PLATFORM)
if (e == EINTR)
continue;
#endif
if (verbose) RAWLOG_ERROR1("Can not send response data: %d", e);
return false;
}
if (n == 0)
break;
pos += n;
}
//String dbg_response = response.size() > 100 ? response.substr(0, 100) : response;
//RAWTRACE2("Sent response:\n%s%s", dbg_response.c_str(), response.size() > 100 ? "..." : " ");
if (continuation) {
if (verbose) RAWTRACE1("Sent response body: %d bytes", data.size());
}
else if ( !rho_conf_getBool("log_skip_post") ) {
if (verbose) RAWTRACE1("Sent response (only headers displayed):\n%s", data.c_str());
}
return true;
}
bool CHttpServer::send_response(String const &response, bool redirect)
{
#ifdef OS_ANDROID
if (redirect) {
CAutoPtr<IRhoThreadImpl> ptrThread = rho_get_RhoClassFactory()->createThreadImpl();
ptrThread->sleep(20);
}
#endif
return send_response_impl(response, false);
}
String CHttpServer::create_response(String const &reason)
{
return create_response(reason, "");
}
String CHttpServer::create_response(String const &reason, HeaderList const &headers)
{
return create_response(reason, headers, "");
}
String CHttpServer::create_response(String const &reason, String const &body)
{
return create_response(reason, HeaderList(), body);
}
String CHttpServer::create_response(String const &reason, HeaderList const &hdrs, String const &body)
{
String response = "HTTP/1.1 ";
response += reason;
response += "\r\n";
char buf[50];
snprintf(buf, sizeof(buf), "%d", m_port);
HeaderList headers;
headers.push_back(Header("Host", String("127.0.0.1:") + buf));
headers.push_back(Header("Connection", "close"));
headers.push_back(HttpHeader("Access-Control-Allow-Origin", "*"));
std::copy(hdrs.begin(), hdrs.end(), std::back_inserter(headers));
for(HeaderList::const_iterator it = headers.begin(), lim = headers.end();
it != lim; ++it) {
response += it->name;
response += ": ";
response += it->value;
response += "\r\n";
}
response += "\r\n";
response += body;
return response;
}
示例3: decide
bool CHttpServer::decide(String const &method, String const &arg_uri, String const &query,
HeaderList const &headers, String const &body/*, IResponseSender& respSender*/ )
{
if (verbose) RAWTRACE1("Decide what to do with uri %s", arg_uri.c_str());
callback_t callback = registered(arg_uri);
if (callback) {
if (verbose) RAWTRACE1("Uri %s is registered callback, so handle it appropriately", arg_uri.c_str());
if ( callback == rho_http_ruby_proc_callback )
call_ruby_proc( query, body );
else
callback(this, query.length() ? query : body);
return false;
}
String uri = arg_uri;
String fullPath = CFilePath::join(m_root, uri);
#ifndef RHO_NO_RUBY_API
if (rho_ruby_is_started())
{
Route route;
if (dispatch(uri, route)) {
if (verbose) RAWTRACE1("Uri %s is correct route, so enable MVC logic", uri.c_str());
VALUE req = create_request_hash(route.application, route.model, route.action, route.id,
method, uri, query, headers, body);
VALUE data = callFramework(req);
String reply(getStringFromValue(data), getStringLenFromValue(data));
rho_ruby_releaseValue(data);
bool isRedirect = String_startsWith(reply, "HTTP/1.1 301") ||
String_startsWith(reply, "HTTP/1.1 302");
if (!send_response(reply, isRedirect))
return false;
if (method == "GET")
rho_rhodesapp_keeplastvisitedurl(uri.c_str());
if ( sync::RhoconnectClientManager::haveRhoconnectClientImpl() ) {
if (!route.id.empty()) {
sync::RhoconnectClientManager::rho_sync_addobjectnotify_bysrcname(route.model.c_str(), route.id.c_str());
}
}
return true;
}
if (isdir(fullPath)) {
if (verbose) RAWTRACE1("Uri %s is directory, redirecting to index", uri.c_str());
String q = query.empty() ? "" : "?" + query;
HeaderList headers;
headers.push_back(Header("Location", CFilePath::join( uri, "index" RHO_ERB_EXT) + q));
send_response(create_response("301 Moved Permanently", headers), true);
return false;
}
if (isindex(uri)) {
if (!isfile(fullPath)) {
if (verbose) RAWLOG_ERROR1("The file %s was not found", fullPath.c_str());
String error = "<!DOCTYPE html><html><font size=\"+4\"><h2>404 Not Found.</h2> The file " + uri + " was not found.</font></html>";
send_response(create_response("404 Not Found",error));
return false;
}
if (verbose) RAWTRACE1("Uri %s is index file, call serveIndex", uri.c_str());
VALUE req = create_request_hash(route.application, route.model, route.action, route.id,
method, uri, query, headers, body);
VALUE data = callServeIndex((char *)fullPath.c_str(), req);
String reply(getStringFromValue(data), getStringLenFromValue(data));
rho_ruby_releaseValue(data);
if (!send_response(reply))
return false;
if (method == "GET")
rho_rhodesapp_keeplastvisitedurl(uri.c_str());
return true;
}
}
#endif
// Try to send requested file
if (verbose) RAWTRACE1("Uri %s should be regular file, trying to send it", uri.c_str());
PROF_START("READ_FILE");
bool bRes = send_file(uri, headers);
PROF_STOP("READ_FILE");
return bRes;
}
示例4: send_file
bool CHttpServer::send_file(String const &path, HeaderList const &hdrs)
{
String fullPath = CFilePath::normalizePath(path);
if (String_startsWith(fullPath,"/app/db/db-files") )
fullPath = CFilePath::join( rho_native_rhodbpath(), path.substr(4) );
else if (fullPath.find(m_root) != 0 && fullPath.find(m_strRhoRoot) != 0 && fullPath.find(m_strRuntimeRoot) != 0 && fullPath.find(m_userroot) != 0 && fullPath.find(m_strRhoUserRoot) != 0)
fullPath = CFilePath::join( m_root, path );
struct stat st;
bool bCheckExist = true;
#ifdef RHODES_EMULATOR
String strPlatform = RHOSIMCONF().getString("platform");
if ( strPlatform.length() > 0 )
{
String fullPath1 = fullPath;
int nDot = fullPath1.rfind('.');
if ( nDot >= 0 )
fullPath1.insert(nDot, String(".") + strPlatform);
else
fullPath1 += String(".") + strPlatform;
if (stat(fullPath1.c_str(), &st) == 0 && S_ISREG(st.st_mode))
{
fullPath = fullPath1;
bCheckExist = false;
}
}
#endif
bool doesNotExists = bCheckExist && (stat(fullPath.c_str(), &st) != 0 || !S_ISREG(st.st_mode));
if ( doesNotExists ) {
// looking for files at 'rho/apps' at runtime folder
fullPath = CFilePath::join( m_strRuntimeRoot, path );
}
if (verbose) RAWTRACE1("Sending file %s...", fullPath.c_str());
if ( doesNotExists ) {
if ( stat(fullPath.c_str(), &st) != 0 || !S_ISREG(st.st_mode) ) {
doesNotExists = true;
}else
doesNotExists = false;
}
#ifdef RHODES_EMULATOR
if ( doesNotExists )
{
CTokenizer oTokenizer( RHOSIMCONF().getString("ext_path"), ";" );
while (oTokenizer.hasMoreTokens())
{
String tok = oTokenizer.nextToken();
tok = String_trim(tok);
String fullPath1 = CFilePath::join( tok, path );
if (stat(fullPath1.c_str(), &st) == 0 && S_ISREG(st.st_mode))
{
fullPath = fullPath1;
doesNotExists = false;
break;
}
}
}
#endif
if ( doesNotExists ) {
if (verbose) RAWLOG_ERROR1("The file %s was not found", path.c_str());
String error = "<!DOCTYPE html><html><font size=\"+4\"><h2>404 Not Found.</h2> The file " + path + " was not found.</font></html>";
send_response(create_response("404 Not Found",error));
return false;
}
PROF_START("LOW_FILE");
FILE *fp = fopen(fullPath.c_str(), "rb");
PROF_STOP("LOW_FILE");
if (!fp) {
if (verbose) RAWLOG_ERROR1("The file %s could not be opened", path.c_str());
String error = "<!DOCTYPE html><html><font size=\"+4\"><h2>404 Not Found.</h2> The file " + path + " could not be opened.</font></html";
send_response(create_response("404 Not Found",error));
return false;
}
HeaderList headers;
// Detect mime type
headers.push_back(Header("Content-Type", get_mime_type(path)));
if ( String_startsWith(path, "/public") )
{
headers.push_back(Header("Expires", "Thu, 15 Apr 2020 20:00:00 GMT") );
headers.push_back(Header("Cache-Control", "max-age=2592000") );
}
// Content length
char* buf = new char[FILE_BUF_SIZE];
String start_line;
size_t file_size = st.st_size;
//.........这里部分代码省略.........
示例5: read
void CsvFile::read(HeaderList& header, DataMap& data) const throw (FileException, CustomException)
{
std::ifstream file(filename.c_str());
if (!file) throw FileException("Cannot open file", filename, __FUNCTION_NAME__);
// a buffer to store the line read
std::string line;
if ( ! std::getline(file, line))
throw FileException("Cannot get the first line of file", filename, __FUNCTION_NAME__);
unsigned int pointer = 0;
unsigned int rawnb = 0;
std::string word ="";
int localHostColNumber = -1, tmp=0;
bool uselocalhost=false;
bool useotherthanlocalhost=false;
// Parse the first line (header line)
while(pointer < line.size())
{
while( pointer < line.size() && line[pointer] != separator)
{
//remove white spaces
if (line[pointer] != ' ')
{
word.push_back(line[pointer]);
}
pointer++;
}
if( !word.empty())
{
// warning if id already in
if (std::find(header.begin(), header.end(), word) != header.end() )
{
// Was error before, now just a warning: may be convenient to have several time the same name in a header
Msg::warning("Duplicate header element '"+ word+"' in file "+filename, __FUNCTION_NAME__);
// throw FileException("Duplicate header elements'"+ word+"'",filename, __FUNCTION_NAME__);
}
header.push_back(word);
tmp++;
}
// if we have "localhost" in csv file, note the column number.
if(word == "localhost" || word == "Localhost" || word == "127.0.0.1")
localHostColNumber = tmp;
pointer++;
word.clear();
}
// Parse the lines
while (std::getline(file, line))
{
rawnb++;
pointer = 0;
bool firstWord = true; // Are we parsing the first column
unsigned int column = 0; // Which column is being scanned?
std::string id;
while(line.size() > pointer)
{
// get word
word.clear();
while(line.size() > pointer && line[pointer] != separator)
{
if (line[pointer] != ' ')
word.push_back(line[pointer]);
pointer++;
}
pointer++;
if (firstWord)
{
// it's the map id
if ( word.empty() ) break; // forget about this line and go to parse next line
id = word;
if(data.find(id) != data.end())
throw CustomException("Component : " + id + " is specified twice in CSV file.", __FUNCTION_NAME__ );
// init the raw of this id with zeros.
data[id].insert(data[id].begin(), header.size(),0);
firstWord = false;
}
else
{
if (!word.empty())
{
// store data
try{
data[id].at(column) = convertTo<int>(word);
if (data[id].at(column) > 0)// one component instance at least mapped
{
if(column == localHostColNumber-1) // we are reading in a locahost column
{
// Remember that we have one component mapped on a localHost.
uselocalhost=true;
//.........这里部分代码省略.........
示例6: decide
bool CHttpServer::decide(String const &method, String const &arg_uri, String const &query,
HeaderList const &headers, String const &body)
{
RAWTRACE1("Decide what to do with uri %s", arg_uri.c_str());
callback_t callback = registered(arg_uri);
if (callback) {
RAWTRACE1("Uri %s is registered callback, so handle it appropriately", arg_uri.c_str());
if ( callback == rho_http_ruby_proc_callback )
call_ruby_proc( query, body );
else
callback(this, query.length() ? query : body);
return false;
}
String uri = arg_uri;
//#ifdef OS_ANDROID
// //Work around malformed Android WebView URLs
// if (!String_startsWith(uri, "/app") &&
// !String_startsWith(uri, "/public") &&
// !String_startsWith(uri, "/data"))
// {
// RAWTRACE1("Malformed URL: '%s', adding '/app' prefix.", uri.c_str());
// uri = CFilePath::join("/app", uri);
// }
//#endif
String fullPath = CFilePath::join(m_root, uri);
Route route;
if (dispatch(uri, route)) {
RAWTRACE1("Uri %s is correct route, so enable MVC logic", uri.c_str());
VALUE req = create_request_hash(route.application, route.model, route.action, route.id,
method, uri, query, headers, body);
VALUE data = callFramework(req);
String reply(getStringFromValue(data), getStringLenFromValue(data));
rho_ruby_releaseValue(data);
bool isRedirect = String_startsWith(reply, "HTTP/1.1 301") ||
String_startsWith(reply, "HTTP/1.1 302");
if (!send_response(reply, isRedirect))
return false;
if (method == "GET")
rho_rhodesapp_keeplastvisitedurl(uri.c_str());
if ( sync::RhoconnectClientManager::haveRhoconnectClientImpl() ) {
if (!route.id.empty()) {
sync::RhoconnectClientManager::rho_sync_addobjectnotify_bysrcname(route.model.c_str(), route.id.c_str());
}
}
return true;
}
//#ifndef OS_ANDROID
if (isdir(fullPath)) {
RAWTRACE1("Uri %s is directory, redirecting to index", uri.c_str());
String q = query.empty() ? "" : "?" + query;
HeaderList headers;
headers.push_back(Header("Location", CFilePath::join( uri, "index"RHO_ERB_EXT) + q));
send_response(create_response("301 Moved Permanently", headers), true);
return false;
}
//#else
// //Work around this Android redirect bug:
// //http://code.google.com/p/android/issues/detail?can=2&q=11583&id=11583
// if (isdir(fullPath)) {
// RAWTRACE1("Uri %s is directory, override with index", uri.c_str());
// return decide(method, CFilePath::join( uri, "index"RHO_ERB_EXT), query, headers, body);
// }
//#endif
if (isindex(uri)) {
if (!isfile(fullPath)) {
RAWLOG_ERROR1("The file %s was not found", fullPath.c_str());
String error = "<html><font size=\"+4\"><h2>404 Not Found.</h2> The file " + uri + " was not found.</font></html>";
send_response(create_response("404 Not Found",error));
return false;
}
RAWTRACE1("Uri %s is index file, call serveIndex", uri.c_str());
VALUE req = create_request_hash(route.application, route.model, route.action, route.id,
method, uri, query, headers, body);
VALUE data = callServeIndex((char *)fullPath.c_str(), req);
String reply(getStringFromValue(data), getStringLenFromValue(data));
rho_ruby_releaseValue(data);
if (!send_response(reply))
return false;
if (method == "GET")
//.........这里部分代码省略.........