void BaseClonerTest::scheduleNetworkResponse(NetworkOperationIterator noi, ErrorCodes::Error code, const std::string& reason) { auto net = getNet(); ReplicationExecutor::ResponseStatus responseStatus(code, reason); net->scheduleResponse(noi, net->now(), responseStatus); }
void BaseClonerTest::scheduleNetworkResponse(NetworkOperationIterator noi, const BSONObj& obj) { auto net = getNet(); Milliseconds millis(0); RemoteCommandResponse response(obj, millis); ReplicationExecutor::ResponseStatus responseStatus(response); net->scheduleResponse(noi, net->now(), responseStatus); }
void HttpInterface::incomingData(Stream *stream) { if (stream == asebaStream) { // incoming Aseba message if (verbose) cerr << "incoming for asebaStream " << stream << endl; Message *message(Message::receive(stream)); // pass message to description manager, which builds // the node descriptions in background NodesManager::processMessage(message); // if variables, check for pending requests const Variables *variables(dynamic_cast<Variables *>(message)); if (variables) incomingVariables(variables); // if event, retransmit it on an HTTP SSE channel if one exists const UserMessage *userMsg(dynamic_cast<UserMessage *>(message)); if (userMsg) incomingUserMsg(userMsg); delete message; } else { // incoming HTTP request if (verbose) cerr << "incoming for HTTP stream " << stream << endl; HttpRequest* req = new HttpRequest; // [promise] we will eventually delete req in sendAvailableResponses, unscheduleResponse, or stream shutdown if ( ! req->initialize(stream)) { // protocol failure, shut down connection stream->write("HTTP/1.1 400 Bad request\r\n"); stream->fail(DashelException::Unknown, 0, "400 Bad request"); unscheduleAllResponses(stream); delete req; // not yet in queue, so delete it here [promise] return; } if (verbose) { cerr << stream << " Request " << req->method.c_str() << " " << req->uri.c_str() << " [ "; for (unsigned int i = 0; i < req->tokens.size(); ++i) cerr << req->tokens[i] << " "; cerr << "] " << req->protocol_version << " new req " << req << endl; } // continue with incomingData scheduleResponse(stream, req); req->incomingData(); // read request all at once if (req->ready) routeRequest(req); // run response queues immediately to save time sendAvailableResponses(); } }
RemoteCommandRequest NetworkInterfaceMock::scheduleErrorResponse(NetworkOperationIterator noi, Date_t when, const Status& response) { scheduleResponse(noi, when, response); return noi->getRequest(); }
RemoteCommandRequest NetworkInterfaceMock::scheduleErrorResponse(const ResponseStatus response) { auto noi = getNextReadyRequest(); scheduleResponse(noi, now(), response); return noi->getRequest(); }