src/HTTPServer.cpp
branchv_0
changeset 9 36479a47faa8
parent 8 90990c8b6aef
equal deleted inserted replaced
8:90990c8b6aef 9:36479a47faa8
    57 			request.method = method;
    57 			request.method = method;
    58 			request.url = url;
    58 			request.url = url;
    59 
    59 
    60 			// TODO: return also client IP address etc.
    60 			// TODO: return also client IP address etc.
    61 			// const MHD_ConnectionInfo* connetionInfo = MHD_get_connection_info(connection, MHD_ConnectionInfoType::MHD_CONNECTION_INFO_CLIENT_ADDRESS);
    61 			// const MHD_ConnectionInfo* connetionInfo = MHD_get_connection_info(connection, MHD_ConnectionInfoType::MHD_CONNECTION_INFO_CLIENT_ADDRESS);
    62 			
    62 
    63 			// FIXME: request.body = ...
    63 			// FIXME: request.body = ...
    64 			// FIXME: multiple calls for one request
    64 			// FIXME: multiple calls for one request
    65 			// FIXME: POST parameters
    65 			// FIXME: POST parameters
    66 			
    66 
    67 			// HTTP headers:
    67 			// MHD_create_post_processor()
    68 			MHD_get_connection_values(connection, MHD_ValueKind::MHD_HEADER_KIND, [](void* cls, MHD_ValueKind kind, const char* key, const char* value) {
    68 			// https://git.gnunet.org/libmicrohttpd.git/tree/src/examples/post_example.c
       
    69 
       
    70 			MHD_KeyValueIterator avpVectorAppender = [](void* cls, MHD_ValueKind kind, const char* key, const char* value) {
    69 				(static_cast<std::vector<AVP>*> (cls))->push_back({key, value});
    71 				(static_cast<std::vector<AVP>*> (cls))->push_back({key, value});
    70 				return MHD_YES;
    72 				return MHD_YES;
    71 			}, &request.header);
    73 			};
    72 
    74 
    73 			// GET parameters:
    75 			MHD_get_connection_values(connection, MHD_ValueKind::MHD_HEADER_KIND, avpVectorAppender, &request.header);
    74 			MHD_get_connection_values(connection, MHD_ValueKind::MHD_GET_ARGUMENT_KIND, [](void* cls, MHD_ValueKind kind, const char* key, const char* value) {
    76 			MHD_get_connection_values(connection, MHD_ValueKind::MHD_COOKIE_KIND, avpVectorAppender, &request.cookie);
    75 				(static_cast<std::vector<AVP>*> (cls))->push_back({key, value});
    77 			MHD_get_connection_values(connection, MHD_ValueKind::MHD_GET_ARGUMENT_KIND, avpVectorAppender, &request.getParameter);
    76 				return MHD_YES;
    78 			MHD_get_connection_values(connection, MHD_ValueKind::MHD_POSTDATA_KIND, avpVectorAppender, &request.postParameter);
    77 			}, &request.getParameter);
       
    78 
       
    79 			// COOKIE parameters:
       
    80 			MHD_get_connection_values(connection, MHD_ValueKind::MHD_COOKIE_KIND, [](void* cls, MHD_ValueKind kind, const char* key, const char* value) {
       
    81 				(static_cast<std::vector<AVP>*> (cls))->push_back({key, value});
       
    82 				return MHD_YES;
       
    83 			}, &request.cookie);
       
    84 
    79 
    85 			const HTTPServer::Response response = impl->requestHandler->handle(request);
    80 			const HTTPServer::Response response = impl->requestHandler->handle(request);
    86 			struct MHD_Response* mhdResponse = MHD_create_response_from_buffer(response.body.size(), (void*) response.body.c_str(), MHD_RESPMEM_MUST_COPY);
    81 			struct MHD_Response* mhdResponse = MHD_create_response_from_buffer(response.body.size(), (void*) response.body.c_str(), MHD_RESPMEM_MUST_COPY);
    87 			for (AVP h : response.header) MHD_add_response_header(mhdResponse, h.name.c_str(), h.value.c_str());
    82 			for (AVP h : response.header) MHD_add_response_header(mhdResponse, h.name.c_str(), h.value.c_str());
    88 			// FIXME: cookies: for (AVP c : response.cookie) ...
    83 			// FIXME: cookies: for (AVP c : response.cookie) ...