예제 #1
0
 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);
 }
예제 #2
0
 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);
 }
예제 #3
0
 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();
     }
 }
예제 #4
0
RemoteCommandRequest NetworkInterfaceMock::scheduleErrorResponse(NetworkOperationIterator noi,
                                                                 Date_t when,
                                                                 const Status& response) {
    scheduleResponse(noi, when, response);
    return noi->getRequest();
}
예제 #5
0
RemoteCommandRequest NetworkInterfaceMock::scheduleErrorResponse(const ResponseStatus response) {
    auto noi = getNextReadyRequest();
    scheduleResponse(noi, now(), response);
    return noi->getRequest();
}