Skip to content

Commit

Permalink
Tabs to spaces
Browse files Browse the repository at this point in the history
  • Loading branch information
codebutler committed Nov 14, 2010
1 parent 21cb28e commit 2155daf
Show file tree
Hide file tree
Showing 6 changed files with 446 additions and 443 deletions.
146 changes: 73 additions & 73 deletions backend/src/http_packet.cpp
Expand Up @@ -23,151 +23,151 @@
#include "http_packet.hpp"

HttpPacket::HttpPacket(string from, string to)
: m_from(from), m_to(to), m_complete(false)
: m_from(from), m_to(to), m_complete(false)
{
memset(&m_settings, 0, sizeof(m_settings));
m_settings.on_header_field = header_field_cb_wrapper;
m_settings.on_header_value = header_value_cb_wrapper;
m_settings.on_path = path_cb_wrapper;
m_settings.on_query_string = query_string_cb_wrapper;
m_settings.on_headers_complete = headers_complete_cb_wrapper;
m_settings.on_message_complete = message_complete_cb_wrapper;
http_parser_init(&m_parser, HTTP_REQUEST);
m_parser.data = this;
memset(&m_settings, 0, sizeof(m_settings));
m_settings.on_header_field = header_field_cb_wrapper;
m_settings.on_header_value = header_value_cb_wrapper;
m_settings.on_path = path_cb_wrapper;
m_settings.on_query_string = query_string_cb_wrapper;
m_settings.on_headers_complete = headers_complete_cb_wrapper;
m_settings.on_message_complete = message_complete_cb_wrapper;
http_parser_init(&m_parser, HTTP_REQUEST);
m_parser.data = this;
}

bool HttpPacket::parse(const char *payload, int payload_size)
{
if (payload_size > 0) {
int len = http_parser_execute(&m_parser, &m_settings, payload, payload_size);
return (m_parser.state != 1 && len == payload_size);
}
return false;
if (payload_size > 0) {
int len = http_parser_execute(&m_parser, &m_settings, payload, payload_size);
return (m_parser.state != 1 && len == payload_size);
}
return false;
}

bool HttpPacket::isComplete()
{
return m_complete;
return m_complete;
}

string HttpPacket::from()
{
return m_from;
return m_from;
}

string HttpPacket::to()
{
return m_to;
return m_to;
}

string HttpPacket::host()
{
return get_header("host");
return get_header("host");
}

string HttpPacket::method()
{
return http_method_str((enum http_method) m_parser.method);
return http_method_str((enum http_method) m_parser.method);
}

string HttpPacket::path()
{
return m_path;
return m_path;
}

string HttpPacket::query()
{
return m_query;
return m_query;
}

string HttpPacket::user_agent()
{
return get_header("user-agent");
return get_header("user-agent");
}

string HttpPacket::cookies()
{
return get_header("cookie");
return get_header("cookie");
}

HeaderMap HttpPacket::headers()
{
return m_headers;
return m_headers;
}

void HttpPacket::add_header(string name, string value)
{
HeaderMap::iterator iter;
iter = m_headers.find(name);
if (iter == m_headers.end()) {
m_headers[name] = value;
} else {
// FIXME: Technically this is allowed in certain situations, but I doubt
// any browsers would do this.
// http://github.com/ry/node/blob/master/lib/http.js#L219
cerr << "Ignoring duplicate header: " << name << endl;
cerr << " Old: " << m_headers[name] << endl;
cerr << " New: " << value << endl;
}
HeaderMap::iterator iter;
iter = m_headers.find(name);
if (iter == m_headers.end()) {
m_headers[name] = value;
} else {
// FIXME: Technically this is allowed in certain situations, but I doubt
// any browsers would do this.
// http://github.com/ry/node/blob/master/lib/http.js#L219
cerr << "Ignoring duplicate header: " << name << endl;
cerr << " Old: " << m_headers[name] << endl;
cerr << " New: " << value << endl;
}
}

string HttpPacket::get_header(string name)
{
HeaderMap::iterator iter;
iter = m_headers.find(name);
if (iter != m_headers.end())
return iter->second;
else
return string();
{
HeaderMap::iterator iter;
iter = m_headers.find(name);
if (iter != m_headers.end())
return iter->second;
else
return string();
}

int HttpPacket::path_cb(const char *buf, size_t len)
{
m_path.append(buf, len);
m_path.append(buf, len);
return 0;
}

int HttpPacket::query_string_cb(const char *buf, size_t len)
{
m_query.append(buf, len);
return 0;
m_query.append(buf, len);
return 0;
}
int HttpPacket::header_field_cb(const char *buf, size_t len)
{
string str(buf, len);
boost::to_lower(str);
if (!m_tmp_header_value.empty()) {
add_header(m_tmp_header_name, m_tmp_header_value);
m_tmp_header_name.clear();
m_tmp_header_value.clear();
}
m_tmp_header_name.append(str);
return 0;
string str(buf, len);
boost::to_lower(str);
if (!m_tmp_header_value.empty()) {
add_header(m_tmp_header_name, m_tmp_header_value);
m_tmp_header_name.clear();
m_tmp_header_value.clear();
}
m_tmp_header_name.append(str);
return 0;
}

int HttpPacket::header_value_cb(const char *buf, size_t len)
{
m_tmp_header_value.append(buf, len);
return 0;
m_tmp_header_value.append(buf, len);
return 0;
}

int HttpPacket::headers_complete_cb()
{
if (!m_tmp_header_value.empty()) {
add_header(m_tmp_header_name, m_tmp_header_value);
m_tmp_header_name.clear();
m_tmp_header_value.clear();
}
return 1; // Skip body
{
if (!m_tmp_header_value.empty()) {
add_header(m_tmp_header_name, m_tmp_header_value);
m_tmp_header_name.clear();
m_tmp_header_value.clear();
}
return 1; // Skip body
}

int HttpPacket::message_complete_cb()
{
m_complete = true;
return 0;
}
m_complete = true;
return 0;
}
96 changes: 48 additions & 48 deletions backend/src/http_packet.hpp
Expand Up @@ -32,65 +32,65 @@

using namespace std;

#define HTTP_PARSER_DATA_CALLBACK(NAME) \
static int NAME##_cb_wrapper (http_parser *parser, const char *buf, size_t len) { \
HttpPacket *packet = (HttpPacket *)parser; \
return packet->NAME##_cb(buf, len); \
} \
#define HTTP_PARSER_DATA_CALLBACK(NAME) \
static int NAME##_cb_wrapper (http_parser *parser, const char *buf, size_t len) { \
HttpPacket *packet = (HttpPacket *)parser; \
return packet->NAME##_cb(buf, len); \
} \
int NAME##_cb(const char *buf, size_t len);

#define HTTP_PARSER_CALLBACK(NAME) \
static int NAME##_cb_wrapper (http_parser *parser) { \
HttpPacket *packet = (HttpPacket *)parser; \
return packet->NAME##_cb(); \
} \
#define HTTP_PARSER_CALLBACK(NAME) \
static int NAME##_cb_wrapper (http_parser *parser) { \
HttpPacket *packet = (HttpPacket *)parser; \
return packet->NAME##_cb(); \
} \
int NAME##_cb();

typedef map<string, string> HeaderMap;

class HttpPacket {
public:
HttpPacket(string from, string to);
bool parse(const char *payload, int payload_size);
bool isComplete();
string from();
string to();
string host();
string method();
string path();
string user_agent();
string query();
string cookies();
HeaderMap headers();
HttpPacket(string from, string to);
bool parse(const char *payload, int payload_size);
bool isComplete();
string from();
string to();
string host();
string method();
string path();
string user_agent();
string query();
string cookies();
HeaderMap headers();
private:
http_parser m_parser;
http_parser_settings m_settings;
string m_from;
string m_to;
string m_url;
string m_path;
string m_query;
HeaderMap m_headers;
string m_tmp_header_name;
string m_tmp_header_value;
bool m_complete;
http_parser m_parser;
http_parser_settings m_settings;
string m_from;
string m_to;
string m_url;
string m_path;
string m_query;
HeaderMap m_headers;
string m_tmp_header_name;
string m_tmp_header_value;
bool m_complete;

HTTP_PARSER_DATA_CALLBACK(url);
HTTP_PARSER_DATA_CALLBACK(header_field);
HTTP_PARSER_DATA_CALLBACK(header_value);
HTTP_PARSER_DATA_CALLBACK(path);
HTTP_PARSER_DATA_CALLBACK(query_string);
HTTP_PARSER_CALLBACK(headers_complete);
HTTP_PARSER_CALLBACK(message_complete);
void add_header(string name, string value);
string get_header(string name);
HTTP_PARSER_DATA_CALLBACK(url);
HTTP_PARSER_DATA_CALLBACK(header_field);
HTTP_PARSER_DATA_CALLBACK(header_value);
HTTP_PARSER_DATA_CALLBACK(path);
HTTP_PARSER_DATA_CALLBACK(query_string);
HTTP_PARSER_CALLBACK(headers_complete);
HTTP_PARSER_CALLBACK(message_complete);
void add_header(string name, string value);
string get_header(string name);
};

typedef void (*http_packet_cb) (HttpPacket*);

#endif
#endif

0 comments on commit 2155daf

Please sign in to comment.