extern ServerPool *servers;
-HTTPInput::HTTPInput(const string &url)
+HTTPInput::HTTPInput(const string &url, Input::Encoding encoding)
: state(NOT_CONNECTED),
url(url),
+ encoding(encoding),
has_metacube_header(false),
sock(-1)
{
HTTPInput::HTTPInput(const InputProto &serialized)
: state(State(serialized.state())),
url(serialized.url()),
+ encoding(serialized.is_metacube_encoded() ?
+ Input::INPUT_ENCODING_METACUBE :
+ Input::INPUT_ENCODING_RAW),
request(serialized.request()),
request_bytes_sent(serialized.request_bytes_sent()),
response(serialized.response()),
serialized.set_bytes_received(stats.bytes_received);
serialized.set_data_bytes_received(stats.data_bytes_received);
serialized.set_connect_time(stats.connect_time);
+ if (encoding == Input::INPUT_ENCODING_METACUBE) {
+ serialized.set_is_metacube_encoded(true);
+ } else {
+ assert(encoding == Input::INPUT_ENCODING_RAW);
+ serialized.set_is_metacube_encoded(false);
+ }
return serialized;
}
process_data(&extra_data[0], extra_data.size());
}
- log(INFO, "[%s] Connected to '%s', receiving data.",
- url.c_str(), url.c_str());
+ if (encoding == Input::INPUT_ENCODING_RAW) {
+ log(INFO, "[%s] Connected to '%s', receiving raw data.",
+ url.c_str(), url.c_str());
+ } else {
+ assert(encoding == Input::INPUT_ENCODING_METACUBE);
+ log(INFO, "[%s] Connected to '%s', receiving data.",
+ url.c_str(), url.c_str());
+ }
state = RECEIVING_DATA;
break;
}
stats.bytes_received += bytes;
}
+ if (encoding == Input::INPUT_ENCODING_RAW) {
+ for (size_t i = 0; i < stream_indices.size(); ++i) {
+ servers->add_data(stream_indices[i], ptr, bytes, SUITABLE_FOR_STREAM_START);
+ }
+ return;
+ }
+
+ assert(encoding == Input::INPUT_ENCODING_METACUBE);
+
for ( ;; ) {
// If we don't have enough data (yet) for even the Metacube header, just return.
if (pending_data.size() < sizeof(metacube2_block_header)) {