Hi, All
below is echo server source code - Do Not Work. Could I extract headers from
request?
Looking from three miles down to design decision, made in cpp-netlib,
it would be nice to have uniform methods, applicable to both *request*
and*response.
*
There are, of course, some differences to be handled in a different way, but
for both
headers(request|response) shall return pointer/reference to headers, and
preferable of the same type,
body(request|response) shall return pointer/reference to headers, and
preferable of the same type
and so on and so forth. After all, they're very similar and both based upon
basic_message building block
sincerely
Sever
PS BOOST 1.46 gcc 4.4, Ubuntu 10.10 x64
------------------------------------------------------------- cut here
---------------------------------------------------------------------
//
// "echo" server
// simple test server, should just print source/body/headers of the request
and copy into response
//
#include <boost/network/protocol/http/server.hpp>
#include <boost/function_output_iterator.hpp>
#include <string>
#include <iostream>
struct headerPrinter
{
std::ostream& _os;
headerPrinter(std::ostream & os):
_os(os)
{
}
headerPrinter(const headerPrinter& hp):
_os(hp._os)
{
}
template <class Pair> void operator()(const Pair& p)
{
_os << p.first << ": " << p.second << std::endl;
}
};
struct theHandler
{
#pragma region Data
std::ostream* _log;
#pragma endregion
#pragma region Ctor/Dtor
theHandler(std::ostream* log = 0):
_log(log)
{
}
theHandler(const theHandler& thH):
_log(thH._log)
{
}
theHandler& operator=(const theHandler& thH)
{
if (this != &thH)
{
_log = thH._log;
}
return *this;
}
~theHandler()
{
}
#pragma endregion
#pragma region Handler
void operator() (const
boost::network::http::server<theHandler>::request& request,
boost::network::http::server<theHandler>::response& response)
{
using namespace boost::network;
/*
std::copy(headers_.begin(), headers_.end(),
boost::make_function_output_iterator(header_printer(cout)));
cout << endl;
*/
std::ostringstream data;
// ok, printing source
http::server<theHandler>::string_type src = source(request);
data << "Hello, " << src << "!" << std::endl;
// now printing body
http::server<theHandler>::string_type body = body(request);
data << body << std::endl;
// try to print headers
// DNW!
// headers_range<http::server<theHandler>::request>::type _headers =
request.headers();
// DNW either
headers_range<http::server<theHandler>::request>::type _headers =
headers(request);
std::copy(_headers.begin(), _headers.end(),
boost::make_function_output_iterator(headerPrinter(data)));
data << std::endl;
response =
http::server<theHandler>::response::stock_reply(http::server<theHandler>::response::ok,
data.str());
}
#pragma endregion
#pragma region Logger
void log(...)
{
if (_log)
{
(*_log) << "LOG: " << std::endl;
}
}
#pragma endregion
};
int main(int argc, char * argv[])
{
using namespace boost::network;
if (argc != 3)
{
std::cerr << "Usage: " << argv[0] << " address" << " port" <<
std::endl;
return EXIT_FAILURE;
}
try
{
// Creates the request handler
theHandler handler;
// Creates the server
http::server<theHandler> server_(argv[1], argv[2], handler);
// Runs the server
server_.run();
}
catch (std::exception &e)
{
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in
Real-Time with Splunk. Collect, index and harness all the fast moving IT data
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business
insights. http://p.sf.net/sfu/splunk-dev2dev
_______________________________________________
Cpp-netlib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cpp-netlib-devel