src/HTTPHandler.h
branchv_0
changeset 21 1a4174f4693a
parent 20 cad9f6d421ee
child 22 1bbfcb95db82
equal deleted inserted replaced
20:cad9f6d421ee 21:1a4174f4693a
    23 #include <regex>
    23 #include <regex>
    24 #include <locale>
    24 #include <locale>
    25 #include <stdexcept>
    25 #include <stdexcept>
    26 
    26 
    27 #include <curl/curl.h>
    27 #include <curl/curl.h>
       
    28 #include <uuid/uuid.h>
    28 
    29 
    29 #include <relpipe/common/type/typedefs.h>
    30 #include <relpipe/common/type/typedefs.h>
    30 #include <relpipe/reader/TypeId.h>
    31 #include <relpipe/reader/TypeId.h>
    31 #include <relpipe/reader/handlers/RelationalReaderStringHandler.h>
    32 #include <relpipe/reader/handlers/RelationalReaderStringHandler.h>
    32 #include <relpipe/reader/handlers/AttributeMetadata.h>
    33 #include <relpipe/reader/handlers/AttributeMetadata.h>
   117 	void appendRequestHeader(const relpipe::common::type::StringX& name, const relpipe::common::type::StringX& value) {
   118 	void appendRequestHeader(const relpipe::common::type::StringX& name, const relpipe::common::type::StringX& value) {
   118 		request.headers.push_back(convertor.to_bytes(name));
   119 		request.headers.push_back(convertor.to_bytes(name));
   119 		request.headers.push_back(convertor.to_bytes(value));
   120 		request.headers.push_back(convertor.to_bytes(value));
   120 	}
   121 	}
   121 
   122 
       
   123 	relpipe::common::type::StringX generateRequestId() {
       
   124 		char buffer[37];
       
   125 		uuid_t uuid;
       
   126 		uuid_generate_random(uuid);
       
   127 		// uuid_generate_time(uuid);
       
   128 		uuid_unparse_lower(uuid, buffer);
       
   129 		return convertor.from_bytes(buffer);
       
   130 	}
       
   131 
   122 public:
   132 public:
   123 
   133 
   124 	HTTPHandler(shared_ptr<relpipe::writer::RelationalWriter> relationalWriter, Configuration configuration) : relationalWriter(relationalWriter), configuration(configuration) {
   134 	HTTPHandler(shared_ptr<relpipe::writer::RelationalWriter> relationalWriter, Configuration configuration) : relationalWriter(relationalWriter), configuration(configuration) {
   125 	}
   135 	}
   126 
   136 
   187 
   197 
   188 		if (currentAttributeIndex % currentReaderMetadata.size() == 0) {
   198 		if (currentAttributeIndex % currentReaderMetadata.size() == 0) {
   189 			currentAttributeIndex = 0;
   199 			currentAttributeIndex = 0;
   190 			std::shared_ptr<HTTPClient> http(HTTPClient::open());
   200 			std::shared_ptr<HTTPClient> http(HTTPClient::open());
   191 
   201 
       
   202 			if (requestId.empty()) requestId = generateRequestId();
       
   203 
   192 			for (const HeaderDefinition& h : requestHeaders) if (h.matches(requestId, convertor.from_bytes(request.url))) appendRequestHeader(h.name, h.value);
   204 			for (const HeaderDefinition& h : requestHeaders) if (h.matches(requestId, convertor.from_bytes(request.url))) appendRequestHeader(h.name, h.value);
   193 
   205 
   194 			std::string body;
   206 			std::string body;
   195 			relpipe::common::type::Integer responseCode = -1;
   207 			relpipe::common::type::Integer responseCode = -1;
   196 
   208