--- a/src/HTTPHandler.h Sat Mar 12 20:48:25 2022 +0100
+++ b/src/HTTPHandler.h Sun Mar 13 01:17:59 2022 +0100
@@ -49,9 +49,25 @@
Configuration configuration;
std::vector<relpipe::reader::handlers::AttributeMetadata> currentReaderMetadata;
std::vector<relpipe::writer::AttributeMetadata> currentWriterMetadata;
+ std::vector<relpipe::common::type::StringX> responseHeaders;
size_t currentAttributeIndex = 0;
size_t currentRecordNumber = 1;
+ void writeHeaders() {
+ if (responseHeaders.size()) {
+ relationalWriter->startRelation(L"response_header",{
+ // TODO: request ID instead of URL (or both)
+ {L"url", relpipe::writer::TypeId::STRING},
+ {L"name", relpipe::writer::TypeId::STRING},
+ {L"value", relpipe::writer::TypeId::STRING},
+ }, true);
+
+ for (auto s : responseHeaders) relationalWriter->writeAttribute(s);
+
+ responseHeaders.clear();
+ }
+ }
+
public:
HTTPHandler(shared_ptr<relpipe::writer::RelationalWriter> relationalWriter, Configuration configuration) : relationalWriter(relationalWriter), configuration(configuration) {
@@ -62,6 +78,7 @@
void startRelation(relpipe::common::type::StringX name, std::vector<relpipe::reader::handlers::AttributeMetadata> attributes) override {
+ writeHeaders(); // from previous relation
relationalWriter->startRelation(name + L"_curl_info",{
{L"name", relpipe::writer::TypeId::STRING},
@@ -72,10 +89,11 @@
relationalWriter->writeAttribute(convertor.from_bytes(curl_version()));
relationalWriter->startRelation(name + L"_curl_response",{
+ // TODO: request ID
+ // TODO: body in hexadecimal/binary format
{L"url", relpipe::writer::TypeId::STRING},
{L"body", relpipe::writer::TypeId::STRING},
{L"response_code", relpipe::writer::TypeId::INTEGER},
- // {L"success", relpipe::writer::TypeId::BOOLEAN},
}, true);
}
@@ -91,17 +109,19 @@
HTTPClient::Response response = http->exchange(request);
relpipe::common::type::Integer responseCode = response.responseCode;
- // std::cerr << "url = >>>" << convertor.to_bytes(value) << "<<<" << std::endl;
- // std::cerr << "body = >>>" << response.body << "<<<" << std::endl;
-
relationalWriter->writeAttribute(value);
relationalWriter->writeAttribute(convertor.from_bytes(response.body));
relationalWriter->writeAttribute(&responseCode, typeid (responseCode));
- // relationalWriter->writeAttribute(&response.success, typeid (response.success));
+
+ for (size_t i = 0; i < response.headers.size(); i += 2) {
+ responseHeaders.push_back(convertor.from_bytes(request.url));
+ responseHeaders.push_back(convertor.from_bytes(response.headers[i]));
+ responseHeaders.push_back(convertor.from_bytes(response.headers[i + 1]));
+ }
}
void endOfPipe() {
-
+ writeHeaders(); // from last relation
}
};