src/HTTPHandler.h
branchv_0
changeset 2 dccedac46e7e
parent 1 ddc12e789d00
child 3 9c710397ced6
equal deleted inserted replaced
1:ddc12e789d00 2:dccedac46e7e
    49 	std::vector<relpipe::reader::handlers::AttributeMetadata> currentReaderMetadata;
    49 	std::vector<relpipe::reader::handlers::AttributeMetadata> currentReaderMetadata;
    50 	std::vector<relpipe::writer::AttributeMetadata> currentWriterMetadata;
    50 	std::vector<relpipe::writer::AttributeMetadata> currentWriterMetadata;
    51 	size_t currentAttributeIndex = 0;
    51 	size_t currentAttributeIndex = 0;
    52 	size_t currentRecordNumber = 1;
    52 	size_t currentRecordNumber = 1;
    53 
    53 
       
    54 	void writeCallback(std::string value) {
       
    55 		relationalWriter->writeAttribute(L"got response: " + convertor.from_bytes(value));
       
    56 	}
       
    57 
       
    58 	static uint writeCurlCallback(char* in, uint size, uint nmemb, HTTPHandler* instance) {
       
    59 		uint r = size * nmemb;
       
    60 		instance->writeCallback(std::string(in, r));
       
    61 		return r;
       
    62 	}
       
    63 
    54 public:
    64 public:
    55 
    65 
    56 	HTTPHandler(shared_ptr<relpipe::writer::RelationalWriter> relationalWriter, Configuration configuration) : relationalWriter(relationalWriter), configuration(configuration) {
    66 	HTTPHandler(shared_ptr<relpipe::writer::RelationalWriter> relationalWriter, Configuration configuration) : relationalWriter(relationalWriter), configuration(configuration) {
    57 	}
    67 	}
    58 
    68 
    60 	}
    70 	}
    61 
    71 
    62 	void startRelation(relpipe::common::type::StringX name, std::vector<relpipe::reader::handlers::AttributeMetadata> attributes) override {
    72 	void startRelation(relpipe::common::type::StringX name, std::vector<relpipe::reader::handlers::AttributeMetadata> attributes) override {
    63 
    73 
    64 
    74 
    65 		relationalWriter->startRelation(name + L"_curl_info",{
    75 		relationalWriter->startRelation(name + L"_curl",{
    66 			{L"version", relpipe::writer::TypeId::STRING}
    76 			{L"value", relpipe::writer::TypeId::STRING}
    67 		}, true);
    77 		}, true);
    68 
    78 
    69 		relationalWriter->writeAttribute(convertor.from_bytes(curl_version()));
    79 		relationalWriter->writeAttribute(L"curl version = " + convertor.from_bytes(curl_version()));
    70 
    80 
    71 	}
    81 	}
    72 
    82 
    73 	void attribute(const relpipe::common::type::StringX& value) override {
    83 	void attribute(const relpipe::common::type::StringX& value) override {
    74 
    84 
       
    85 		std::string url = convertor.to_bytes(value);
       
    86 
       
    87 		CURL* curl = curl_easy_init();
       
    88 		curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
       
    89 		curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
       
    90 		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCurlCallback);
       
    91 		curl_easy_perform(curl);
       
    92 		curl_easy_cleanup(curl);
    75 	}
    93 	}
    76 
    94 
    77 	void endOfPipe() {
    95 	void endOfPipe() {
    78 
    96 
    79 	}
    97 	}