src/HTTPDHandler.h
branchv_0
changeset 6 b04bde9083d4
parent 5 121981e6bd54
child 7 315d985f8424
equal deleted inserted replaced
5:121981e6bd54 6:b04bde9083d4
    51 	std::mutex relationalWriterMutex;
    51 	std::mutex relationalWriterMutex;
    52 	Configuration configuration;
    52 	Configuration configuration;
    53 	std::shared_ptr<HTTPServer> httpServer;
    53 	std::shared_ptr<HTTPServer> httpServer;
    54 	relpipe::common::type::StringX currentRelationName;
    54 	relpipe::common::type::StringX currentRelationName;
    55 	std::vector<relpipe::reader::handlers::AttributeMetadata> currentReaderMetadata;
    55 	std::vector<relpipe::reader::handlers::AttributeMetadata> currentReaderMetadata;
    56 	std::vector<relpipe::writer::AttributeMetadata> currentWriterMetadata;
       
    57 	size_t currentAttributeIndex = 0;
    56 	size_t currentAttributeIndex = 0;
    58 	size_t currentRecordNumber = 1;
    57 	size_t currentRecordNumber = 1;
    59 
    58 
    60 	class RequestMatcher {
    59 	class RequestMatcher {
    61 	public:
    60 	public:
   111 		std::mutex* templatesMutex;
   110 		std::mutex* templatesMutex;
   112 
   111 
   113 		void writeExchange(const HTTPServer::Request& request, const HTTPServer::Response& response) {
   112 		void writeExchange(const HTTPServer::Request& request, const HTTPServer::Response& response) {
   114 			std::wstring_convert < codecvt_utf8<wchar_t>> convertor; // TODO: support also other encoding than UTF-8
   113 			std::wstring_convert < codecvt_utf8<wchar_t>> convertor; // TODO: support also other encoding than UTF-8
   115 			std::lock_guard<std::mutex> lock(*relationalWriterMutex);
   114 			std::lock_guard<std::mutex> lock(*relationalWriterMutex);
   116 			
   115 
   117 			auto exchangeId = convertor.from_bytes(generateExchangeId());
   116 			auto exchangeId = convertor.from_bytes(generateExchangeId());
   118 
   117 
   119 
   118 
   120 			// TODO: multiple modes:
   119 			// TODO: multiple modes:
   121 			// a) interleaved (current)
   120 			// a) interleaved (current)
   123 
   122 
   124 			// TODO: data types
   123 			// TODO: data types
   125 			// TODO: support multiple encodings
   124 			// TODO: support multiple encodings
   126 
   125 
   127 			relationalWriter->startRelation(L"exchange",{
   126 			relationalWriter->startRelation(L"exchange",{
       
   127 				// TODO: timestamp
       
   128 				// TODO: ordinal number?
   128 				{L"id", relpipe::writer::TypeId::STRING},
   129 				{L"id", relpipe::writer::TypeId::STRING},
   129 				{L"url", relpipe::writer::TypeId::STRING},
   130 				{L"url", relpipe::writer::TypeId::STRING},
   130 				{L"method", relpipe::writer::TypeId::STRING},
   131 				{L"method", relpipe::writer::TypeId::STRING},
   131 				{L"request_text", relpipe::writer::TypeId::STRING},
   132 				{L"request_text", relpipe::writer::TypeId::STRING},
   132 				{L"request_data", relpipe::writer::TypeId::STRING},
   133 				{L"request_data", relpipe::writer::TypeId::STRING},
       
   134 				{L"request_size", relpipe::writer::TypeId::INTEGER},
   133 				{L"response_text", relpipe::writer::TypeId::STRING},
   135 				{L"response_text", relpipe::writer::TypeId::STRING},
   134 				{L"response_data", relpipe::writer::TypeId::STRING},
   136 				{L"response_data", relpipe::writer::TypeId::STRING},
       
   137 				{L"response_size", relpipe::writer::TypeId::INTEGER},
   135 				{L"response_code", relpipe::writer::TypeId::INTEGER},
   138 				{L"response_code", relpipe::writer::TypeId::INTEGER},
   136 			}, true);
   139 			}, true);
       
   140 
       
   141 			relpipe::common::type::Integer requestSize = request.body.size();
       
   142 			relpipe::common::type::Integer responseSize = response.body.size();
   137 
   143 
   138 			relationalWriter->writeAttribute(exchangeId);
   144 			relationalWriter->writeAttribute(exchangeId);
   139 			relationalWriter->writeAttribute(convertor.from_bytes(request.url));
   145 			relationalWriter->writeAttribute(convertor.from_bytes(request.url));
   140 			relationalWriter->writeAttribute(convertor.from_bytes(request.method));
   146 			relationalWriter->writeAttribute(convertor.from_bytes(request.method));
   141 			relationalWriter->writeAttribute(bodyToText(convertor, request.body));
   147 			relationalWriter->writeAttribute(bodyToText(convertor, request.body));
   142 			relationalWriter->writeAttribute(bodyToHex(convertor, request.body));
   148 			relationalWriter->writeAttribute(bodyToHex(convertor, request.body));
       
   149 			relationalWriter->writeAttribute(&requestSize, typeid (requestSize));
   143 			relationalWriter->writeAttribute(bodyToText(convertor, response.body));
   150 			relationalWriter->writeAttribute(bodyToText(convertor, response.body));
   144 			relationalWriter->writeAttribute(bodyToHex(convertor, response.body));
   151 			relationalWriter->writeAttribute(bodyToHex(convertor, response.body));
       
   152 			relationalWriter->writeAttribute(&responseSize, typeid (responseSize));
   145 			relationalWriter->writeAttribute(std::to_wstring(response.code));
   153 			relationalWriter->writeAttribute(std::to_wstring(response.code));
   146 
   154 
   147 
   155 
   148 			relationalWriter->startRelation(L"header",{
   156 			relationalWriter->startRelation(L"header",{
       
   157 				// TODO: ordinal number?
   149 				{L"exchange", relpipe::writer::TypeId::STRING},
   158 				{L"exchange", relpipe::writer::TypeId::STRING},
   150 				{L"url", relpipe::writer::TypeId::STRING},
   159 				{L"url", relpipe::writer::TypeId::STRING},
   151 				{L"direction", relpipe::writer::TypeId::STRING},
   160 				{L"direction", relpipe::writer::TypeId::STRING},
   152 				{L"name", relpipe::writer::TypeId::STRING},
   161 				{L"name", relpipe::writer::TypeId::STRING},
   153 				{L"value", relpipe::writer::TypeId::STRING},
   162 				{L"value", relpipe::writer::TypeId::STRING},