src/HTTPHandler.h
branchv_0
changeset 20 cad9f6d421ee
parent 19 0fc76872a921
child 21 1a4174f4693a
equal deleted inserted replaced
19:0fc76872a921 20:cad9f6d421ee
    46 class HTTPHandler : public relpipe::reader::handlers::RelationalReaderStringHandler {
    46 class HTTPHandler : public relpipe::reader::handlers::RelationalReaderStringHandler {
    47 private:
    47 private:
    48 
    48 
    49 	class HeaderDefinition {
    49 	class HeaderDefinition {
    50 	public:
    50 	public:
       
    51 		std::wregex request = std::wregex(L".*");
    51 		std::wregex url = std::wregex(L".*");
    52 		std::wregex url = std::wregex(L".*");
    52 		relpipe::common::type::StringX name;
    53 		relpipe::common::type::StringX name;
    53 		relpipe::common::type::StringX value;
    54 		relpipe::common::type::StringX value;
    54 
    55 
    55 		bool matches(const relpipe::common::type::StringX& url) const {
    56 		bool matches(const relpipe::common::type::StringX& request, const relpipe::common::type::StringX& url) const {
    56 			return std::regex_match(url, this->url);
    57 			bool result = false;
       
    58 			result |= std::regex_match(request, this->request);
       
    59 			result |= std::regex_match(url, this->url);
       
    60 			return result;
    57 		}
    61 		}
    58 	};
    62 	};
    59 
    63 
    60 	std::wstring_convert<codecvt_utf8<wchar_t>> convertor; // TODO: support also other encodings.
    64 	std::wstring_convert<codecvt_utf8<wchar_t>> convertor; // TODO: support also other encodings.
    61 	shared_ptr<relpipe::writer::RelationalWriter> relationalWriter;
    65 	shared_ptr<relpipe::writer::RelationalWriter> relationalWriter;
   154 	void headerAttribute(const relpipe::common::type::StringX& value) {
   158 	void headerAttribute(const relpipe::common::type::StringX& value) {
   155 		auto attributeName = currentReaderMetadata[currentAttributeIndex].getAttributeName();
   159 		auto attributeName = currentReaderMetadata[currentAttributeIndex].getAttributeName();
   156 
   160 
   157 		if (attributeName == L"name") requestHeader.name = value;
   161 		if (attributeName == L"name") requestHeader.name = value;
   158 		else if (attributeName == L"value") requestHeader.value = value;
   162 		else if (attributeName == L"value") requestHeader.value = value;
       
   163 		else if (attributeName == L"request") requestHeader.request = std::wregex(value.size() ? value : L".*"); // TODO: null instead of empty value (when supported)
   159 		else if (attributeName == L"url") requestHeader.url = std::wregex(value.size() ? value : L".*"); // TODO: null instead of empty value (when supported)
   164 		else if (attributeName == L"url") requestHeader.url = std::wregex(value.size() ? value : L".*"); // TODO: null instead of empty value (when supported)
   160 		else throw std::invalid_argument("Unsupported attribute in the header relation: " + convertor.to_bytes(attributeName + L" = " + value));
   165 		else throw std::invalid_argument("Unsupported attribute in the header relation: " + convertor.to_bytes(attributeName + L" = " + value));
   161 
   166 
   162 		currentAttributeIndex++;
   167 		currentAttributeIndex++;
   163 
   168 
   182 
   187 
   183 		if (currentAttributeIndex % currentReaderMetadata.size() == 0) {
   188 		if (currentAttributeIndex % currentReaderMetadata.size() == 0) {
   184 			currentAttributeIndex = 0;
   189 			currentAttributeIndex = 0;
   185 			std::shared_ptr<HTTPClient> http(HTTPClient::open());
   190 			std::shared_ptr<HTTPClient> http(HTTPClient::open());
   186 
   191 
   187 			for (const HeaderDefinition& h : requestHeaders) if (h.matches(convertor.from_bytes(request.url))) appendRequestHeader(h.name, h.value);
   192 			for (const HeaderDefinition& h : requestHeaders) if (h.matches(requestId, convertor.from_bytes(request.url))) appendRequestHeader(h.name, h.value);
   188 
   193 
   189 			std::string body;
   194 			std::string body;
   190 			relpipe::common::type::Integer responseCode = -1;
   195 			relpipe::common::type::Integer responseCode = -1;
   191 
   196 
   192 			try {
   197 			try {