equal
deleted
inserted
replaced
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 } |