10 #include "EchoService.hpp" 11 #include <boost/bind.hpp> 12 #include <pion/algorithm.hpp> 13 #include <pion/http/response_writer.hpp> 14 #include <pion/user.hpp> 23 void writeDictionaryTerm(http::response_writer_ptr& writer,
24 const ihash_multimap::value_type& val)
27 writer << val.first << http::types::HEADER_NAME_VALUE_DELIMITER
29 << http::types::STRING_CRLF;
40 static const std::string REQUEST_ECHO_TEXT(
"[Request Echo]");
41 static const std::string REQUEST_HEADERS_TEXT(
"[Request Headers]");
42 static const std::string QUERY_PARAMS_TEXT(
"[Query Parameters]");
43 static const std::string COOKIE_PARAMS_TEXT(
"[Cookie Parameters]");
44 static const std::string POST_CONTENT_TEXT(
"[POST Content]");
45 static const std::string USER_INFO_TEXT(
"[USER Info]");
50 writer->get_response().set_content_type(http::types::CONTENT_TYPE_TEXT);
53 writer->write_no_copy(REQUEST_ECHO_TEXT);
54 writer->write_no_copy(http::types::STRING_CRLF);
55 writer->write_no_copy(http::types::STRING_CRLF);
58 << http_request_ptr->get_method()
59 << http::types::STRING_CRLF
60 <<
"Resource originally requested: " 61 << http_request_ptr->get_original_resource()
62 << http::types::STRING_CRLF
63 <<
"Resource delivered: " 64 << http_request_ptr->get_resource()
65 << http::types::STRING_CRLF
67 << http_request_ptr->get_query_string()
68 << http::types::STRING_CRLF
70 << http_request_ptr->get_version_major() <<
'.' << http_request_ptr->get_version_minor()
71 << http::types::STRING_CRLF
73 << (
unsigned long)http_request_ptr->get_content_length()
74 << http::types::STRING_CRLF
75 << http::types::STRING_CRLF;
78 writer->write_no_copy(REQUEST_HEADERS_TEXT);
79 writer->write_no_copy(http::types::STRING_CRLF);
80 writer->write_no_copy(http::types::STRING_CRLF);
81 std::for_each(http_request_ptr->get_headers().begin(), http_request_ptr->get_headers().end(),
82 boost::bind(&writeDictionaryTerm, writer, _1));
83 writer->write_no_copy(http::types::STRING_CRLF);
86 writer->write_no_copy(QUERY_PARAMS_TEXT);
87 writer->write_no_copy(http::types::STRING_CRLF);
88 writer->write_no_copy(http::types::STRING_CRLF);
89 std::for_each(http_request_ptr->get_queries().begin(), http_request_ptr->get_queries().end(),
90 boost::bind(&writeDictionaryTerm, writer, _1));
91 writer->write_no_copy(http::types::STRING_CRLF);
94 writer->write_no_copy(COOKIE_PARAMS_TEXT);
95 writer->write_no_copy(http::types::STRING_CRLF);
96 writer->write_no_copy(http::types::STRING_CRLF);
97 std::for_each(http_request_ptr->get_cookies().begin(), http_request_ptr->get_cookies().end(),
98 boost::bind(&writeDictionaryTerm, writer, _1));
99 writer->write_no_copy(http::types::STRING_CRLF);
102 writer->write_no_copy(POST_CONTENT_TEXT);
103 writer->write_no_copy(http::types::STRING_CRLF);
104 writer->write_no_copy(http::types::STRING_CRLF);
105 if (http_request_ptr->get_content_length() != 0) {
106 writer->write(http_request_ptr->get_content(), http_request_ptr->get_content_length());
107 writer->write_no_copy(http::types::STRING_CRLF);
108 writer->write_no_copy(http::types::STRING_CRLF);
112 user_ptr
user = http_request_ptr->get_user();
114 writer->write_no_copy(USER_INFO_TEXT);
115 writer->write_no_copy(http::types::STRING_CRLF);
116 writer->write_no_copy(http::types::STRING_CRLF);
117 writer <<
"User authenticated, username: " << user->
get_username();
118 writer->write_no_copy(http::types::STRING_CRLF);
static boost::shared_ptr< response_writer > create(const tcp::connection_ptr &tcp_conn, const http::response_ptr &http_response_ptr, finished_handler_t handler=finished_handler_t())
std::string const & get_username() const
returns user name as a string
virtual void operator()(const pion::http::request_ptr &http_request_ptr, const pion::tcp::connection_ptr &tcp_conn)
handles requests for EchoService