Example #1
0
void Application::executeRequest(boost::function<void (HttpRequest*&, HttpResponse*&, void*)> convertData, void* data, boost::function<void (HttpRequest*, HttpResponse*)> requestFinish) {
	//Create request
	HttpRequest* request = NULL;
	HttpResponse* response = NULL;
	HttpSession* session = NULL;
	convertData(request, response, data);
	if(request==NULL||response==NULL) {
		requestFinish(request, response);

		return;
	}
	setContextToRequest(request);
	if(mSessionManager) {
		session = mSessionManager->startSession(*request, *response);
		if(session) {
			setSession(request, session);
		}
	}


	IUrlHandler* urlHandler = getBeanFactory()->getBean<IUrlHandler>("urlHandler");
	if(!urlHandler) {
		if(mSessionManager && session) {
			mSessionManager->endSession(session, *request, *response);
		}

		std::cout << "No URL Handler found set error page: 500" << std::endl;
		requestFinish(request, response);

		return;
	}
	if(!urlHandler->dispatchUrl(*request, *response)) {
		if(mSessionManager && session) {
			mSessionManager->endSession(session, *request, *response);
		}

		std::cout << "URL handle error set error page: 500" << std::endl;
		requestFinish(request, response);

		return;
	}

	if(mSessionManager && session) {
		mSessionManager->endSession(session, *request, *response);
	}

	response->flush();
	requestFinish(request, response);
}
Example #2
0
TEST_F(HttpClientTest, Post)
{
    HttpClient client;
    HttpResponse response;
    HttpClient::Options options;
    HttpClient::ErrorCode error;
    std::string data = "Post Content";
    EXPECT_FALSE(client.Post(m_server_address + "/aaa/bbb",
                             data,
                             options,
                             &response,
                             &error));
    EXPECT_NE(error, HttpClient::SUCCESS);
    EXPECT_EQ(HttpResponse::Status_NotFound, response.Status());
}
void onLcd(HttpRequest &request, HttpResponse &response)
{
	int y = request.getQueryParameter("y").toInt();
	String text = request.getQueryParameter("text");
	
	setLcd(y, text);
	
	JsonObjectStream* stream = new JsonObjectStream();
	JsonObject& json = stream->getRoot();
	json["status"] = (bool)true;
	response.setAllowCrossDomainOrigin("*");
	response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
	response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Request, X-Request, X-Requested-With");
	response.sendJsonObject(stream);
}
void onTune(HttpRequest &request, HttpResponse &response)
{
	
	
	setFrequency(request.getQueryParameter("freq").toFloat());
	
	JsonObjectStream* stream = new JsonObjectStream();
	JsonObject& json = stream->getRoot();
	json["status"] = (bool)true;
	response.setAllowCrossDomainOrigin("*");
	response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
	response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Request, X-Request, X-Requested-With");
	response.sendJsonObject(stream);
	
}
Example #5
0
void web_cb_scan_status(HttpRequest &request, HttpResponse &response) {
	JsonObjectStream* stream = new JsonObjectStream();
	JsonObject& json = stream->getRoot();
	JsonArray& netlist = json.createNestedArray("available");
	for (int i = 0; i < networks.count(); i++) {
		JsonObject &item = netlist.createNestedObject();
		item.add("id", (int)networks[i].getHashId());
		item.add("title", networks[i].ssid.c_str());
		item.add("signal", networks[i].rssi);
		item.add("encryption", networks[i].getAuthorizationMethodName());
	}

	response.setAllowCrossDomainOrigin("*");
	response.sendJsonObject(stream);
}
Example #6
0
static void runHttpClientGetTest(TestRunner& tr)
{
   tr.test("Http Client GET");

   // create client
   HttpClient client;

   // connect
   Url url("http://www.bitmunk.com");
   if(client.connect(&url))
   {
      printf("Connected to: %s\n", url.toString().c_str());
      InternetAddress address(url.getHost().c_str(), url.getPort());
      printf("%s\n", address.toString().c_str());

      // do get
      DynamicObject headers;
      headers["Test-Header"] = "bacon";
      HttpResponse* response = client.get(&url, &headers);
      if(response != NULL)
      {
         printf("Response=\n%s\n", response->getHeader()->toString().c_str());
         if(response->getHeader()->getStatusCode() == 200)
         {
            // receive content
            HttpTrailer trailer;
            File file("/tmp/index.html");
            FileOutputStream fos(file);
            if(client.receiveContent(&fos, &trailer))
            {
               printf("Content downloaded to '%s'\n",
                  file->getAbsolutePath());

               printf("HTTP trailers=\n%s\n", trailer.toString().c_str());
            }
            assertNoExceptionSet();
         }
      }
      else
      {
         printf("There was no response!\n");
      }

      client.disconnect();
   }

   tr.passIfNoException();
}
Example #7
0
//----------------------------------------------------------------------------
//
//----------------------------------------------------------------------------
void mqttOnHttpConfig(HttpRequest &request, HttpResponse &response)
{
  AppSettings.load();
  if (!g_http.isHttpClientAllowed(request, response))
    return;

  if (request.getRequestMethod() == RequestMethod::POST) {
    AppSettings.mqttUser     = request.getPostParameter("user");
    AppSettings.mqttPass     = request.getPostParameter("password");
    AppSettings.mqttServer   = request.getPostParameter("server");
    AppSettings.mqttPort     = atoi(request.getPostParameter("port").c_str());
    AppSettings.mqttClientId = request.getPostParameter("clientId");
    AppSettings.save();

    if (WifiStation.isConnected())
      mqttStartClient();
    } // if

  TemplateFileStream *tmpl = new TemplateFileStream("mqtt.html");
  auto &vars = tmpl->variables();

  vars["appAlias"] = szAPP_ALIAS;
  vars["user"]     = AppSettings.mqttUser;
  vars["password"] = AppSettings.mqttPass;
  vars["server"]   = AppSettings.mqttServer;
  vars["port"]     = AppSettings.mqttPort;
  vars["clientId"] = AppSettings.mqttClientId;
  response.sendTemplate(tmpl); // will be automatically deleted
  } // mqttOnHttpConfig
Example #8
0
TEST_F(HttpClientTest, Put)
{
    HttpClient client;
    HttpResponse response;
    HttpClient::Options options;
    HttpClient::ErrorCode error;
    std::string data = "Put Content";
    EXPECT_TRUE(client.Put(m_server_address + "/Put",
                           data,
                           options,
                           &response,
                           &error));
    EXPECT_EQ(HttpClient::SUCCESS, error);
    // www.qq.com always return 200.
    EXPECT_EQ(HttpResponse::Status_OK, response.Status());
}
Example #9
0
bool HttpServer::initWebSocket(HttpServerConnection& connection, HttpRequest& request, HttpResponse& response)
{
	if (!wsEnabled)
		return false;

    WebSocket *sock = new WebSocket(&connection);
    if (!sock->initialize(request, response))
        return false;

    connection.setTimeOut(USHRT_MAX); //Disable disconnection on connection idle (no rx/tx)
	connection.setDisconnectionHandler(HttpServerConnectionDelegate(&HttpServer::onCloseWebSocket, this)); // auto remove on close
	response.sendHeader(connection); // Will push header before user data

    wsocks.addElement(sock);
    if (wsConnect) wsConnect(*sock);
    if (wsCommandEnabled &&  (request.getQueryParameter(wsCommandRequestParam) == "true"))
    {
#if ENABLE_CMD_EXECUTOR
        debugf("WebSocket Commandprocessor started");
#else
        debugf("WebSocket Commandprocessor support DISABLED via ENABLE_CMD_EXECUTOR");
#endif
    	sock->enableCommand();
    }
}
Example #10
0
/**
 * just for testing
 */
void ICACHE_FLASH_ATTR onTest(HttpRequest &request, HttpResponse &response)
{
	response.sendString("Hello, World!<br/>");
	response.sendString("files:");


	Vector<String> files=fileList();
	for(int i=0;i<files.size();i++){

		response.sendString(files[i]);
		response.sendString("\r\n");

		//ebugf("file %d=%s",i,files[i]);
	}

}
Example #11
0
void HttpThread::OnTransactionCompleted(HttpSession & /*httpSession*/,
                                          HttpTransaction & httpTransaction)
{
  HttpResponse * pResponse = httpTransaction.GetResponse();
  if (pResponse->GetHttpStatusCode() == HTTP_STATUS_OK
      || pResponse->GetHttpStatusCode() == HTTP_STATUS_PARTIAL_CONTENT)
  {
    m_callback.OnFinish(200, m_begRange, m_endRange);
  }
  else
  {
    LOG(LWARNING, ("Download has finished with status code:", pResponse->GetHttpStatusCode(),
                   " and text:", FromTizenString(pResponse->GetStatusText() )));
    m_callback.OnFinish(-100, m_begRange, m_endRange);
  }
}
Example #12
0
bool ConsoleHandler::AutocompleteScriptHelper(HttpRequest& request, HttpResponse& response,
    const String& command, const String& session, bool sandboxed)
{
	Log(LogInformation, "Console")
	    << "Auto-completing expression: " << command;

	ApiScriptFrame& lsf = l_ApiScriptFrames[session];
	lsf.Seen = Utility::GetTime();

	if (!lsf.Locals)
		lsf.Locals = new Dictionary();

	Array::Ptr results = new Array();
	Dictionary::Ptr resultInfo = new Dictionary();

	ScriptFrame frame;
	frame.Locals = lsf.Locals;
	frame.Self = lsf.Locals;
	frame.Sandboxed = sandboxed;

	resultInfo->Set("code", 200);
	resultInfo->Set("status", "Auto-completed successfully.");
	resultInfo->Set("suggestions", Array::FromVector(GetAutocompletionSuggestions(command, frame)));

	results->Add(resultInfo);

	Dictionary::Ptr result = new Dictionary();
	result->Set("results", results);

	response.SetStatus(200, "OK");
	HttpUtility::SendJsonBody(response, result);

	return true;
}
Example #13
0
void onIndex(HttpRequest &request, HttpResponse &response)
{
	TemplateFileStream *tmpl = new TemplateFileStream("index.html");
	auto &vars = tmpl->variables();
	//vars["counter"] = String(counter);
	response.sendTemplate(tmpl); // this template object will be deleted automatically
}
Example #14
0
void onAjaxInput(HttpRequest &request, HttpResponse &response)
{
	JsonObjectStream* stream = new JsonObjectStream();
	JsonObject& json = stream->getRoot();
	json["status"] = (bool)true;

	String stringKey = "StringKey";
	String stringValue = "StringValue";

	json[stringKey] = stringValue;

    for( int i = 0; i < 11; i++)
    {
        char buff[3];
        itoa(i, buff, 10);
        String desiredString = "sensor_";
        desiredString += buff;
        json[desiredString] = desiredString;
    }


	JsonObject& gpio = json.createNestedObject("gpio");
	for (int i = 0; i < countInputs; i++)
		gpio[namesInput[i].c_str()] = digitalRead(inputs[i]);

	response.sendJsonObject(stream);
}
Example #15
0
HttpSession HttpSessionStore::getSession(HttpRequest& request, HttpResponse& response, bool allowCreate) {
    QByteArray sessionId=getSessionId(request,response);
    mutex.lock();
    if (!sessionId.isEmpty()) {
        HttpSession session=sessions.value(sessionId);
        if (!session.isNull()) {
            mutex.unlock();
            session.setLastAccess();
            return session;
        }
    }
    // Need to create a new session
    if (allowCreate) {
        QByteArray cookieName=settings->value("cookieName","sessionid").toByteArray();
        QByteArray cookiePath=settings->value("cookiePath","/").toByteArray();
        QByteArray cookieComment=settings->value("cookieComment").toByteArray();
        QByteArray cookieDomain=settings->value("cookieDomain").toByteArray();
        HttpSession session(true);
        qDebug("HttpSessionStore: create new session with ID %s",session.getId().data());
        sessions.insert(session.getId(),session);
        response.setCookie(HttpCookie(cookieName,session.getId(),expirationTime/1000,cookiePath,cookieComment,cookieDomain));
        mutex.unlock();
        return session;
    }
    // Return a null session
    mutex.unlock();
    return HttpSession();
}
void onMute(HttpRequest &request, HttpResponse &response)
{
	

	setMmute(!mute);
	
	
	JsonObjectStream* stream = new JsonObjectStream();
	JsonObject& json = stream->getRoot();
	json["status"] = (bool)true;
	json["state"] = (bool)mute;
	response.setAllowCrossDomainOrigin("*");
	response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
	response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Request, X-Request, X-Requested-With");
	response.sendJsonObject(stream);
}
Example #17
0
void
UserProfileForm::OnTransactionHeaderCompleted(HttpSession& httpSession, HttpTransaction& httpTransaction, int headerLen, bool rs)
{

	HttpResponse* pHttpResponse = httpTransaction.GetResponse();
	if(pHttpResponse == null)
		return;
	HttpHeader* pHttpHeader = pHttpResponse->GetHeader();
	if(pHttpHeader != null)
	{
		String* tempHeaderString = pHttpHeader->GetRawHeaderN();
		AppLog("HeaderString=%ls\n",tempHeaderString->GetPointer());
	}

	AppLog("OnTransactionHeaderCompleted\n");
}
Example #18
0
bool HttpServer::processRequest(HttpServerConnection &connection, HttpRequest &request, HttpResponse &response)
{
	if (request.isWebSocket())
	{
		bool res = initWebSocket(connection, request, response);
		if (!res) response.badRequest();
	}
	String path = request.getPath();
	if (path.length() > 1 && path.endsWith("/"))
		path = path.substring(0, path.length() - 1);

	if (paths.contains(path))
	{
		paths[path](request, response);
		return true;
	}

	if (defaultHandler)
	{
		debugf("Default server handler for: '%s'", path.c_str());
		defaultHandler(request, response);
		return true;
	}

	debugf("ERROR at server 404: '%s' not found", path.c_str());
	return false;
}
Example #19
0
void onIpConfig(HttpRequest &request, HttpResponse &response)
{
	if (request.getRequestMethod() == RequestMethod::POST)
	{
		AppSettings.dhcp = request.getPostParameter("dhcp") == "1";
		AppSettings.ip = request.getPostParameter("ip");
		AppSettings.netmask = request.getPostParameter("netmask");
		AppSettings.gateway = request.getPostParameter("gateway");
		debugf("Updating IP settings: %d", AppSettings.ip.isNull());
		AppSettings.save();
	}

	TemplateFileStream *tmpl = new TemplateFileStream("settings.html");
	auto &vars = tmpl->variables();

	bool dhcp = WifiStation.isEnabledDHCP();
	vars["dhcpon"] = dhcp ? "checked='checked'" : "";
	vars["dhcpoff"] = !dhcp ? "checked='checked'" : "";

	if (!WifiStation.getIP().isNull())
	{
		vars["ip"] = WifiStation.getIP().toString();
		vars["netmask"] = WifiStation.getNetworkMask().toString();
		vars["gateway"] = WifiStation.getNetworkGateway().toString();
	}
	else
	{
		vars["ip"] = "192.168.1.77";
		vars["netmask"] = "255.255.255.0";
		vars["gateway"] = "192.168.1.1";
	}

	response.sendTemplate(tmpl); // will be automatically deleted
}
Example #20
0
void onMqttConfig(HttpRequest &request, HttpResponse &response)
{
	if (request.getRequestMethod() == RequestMethod::POST)
	{
		AppSettings.mqtt_password = request.getPostParameter("password");
		AppSettings.mqtt_user = request.getPostParameter("user");
		AppSettings.mqtt_server = request.getPostParameter("adr");
		AppSettings.mqtt_period = request.getPostParameter("period").toInt();
		AppSettings.mqtt_port = request.getPostParameter("port").toInt();
		AppSettings.mqtt_nodeName = request.getPostParameter("nodeName");
		//debugf("Updating MQTT settings: %d", AppSettings.ip.isNull());
		AppSettings.save();
	}

	TemplateFileStream *tmpl = new TemplateFileStream("mqttsettings.html");
	auto &vars = tmpl->variables();

	vars["user"] = AppSettings.mqtt_user;
	vars["password"] = AppSettings.mqtt_password;
	vars["period"] = AppSettings.mqtt_period;
	vars["port"] = AppSettings.mqtt_port;
	vars["adr"] = AppSettings.mqtt_server;
	vars["nodeName"] = AppSettings.mqtt_nodeName;

	response.sendTemplate(tmpl); // will be automatically deleted
}
Example #21
0
/*****************************************************************************
 * Function - doGetCGI
 * DESCRIPTION: HTTP GET with URL /get.cgi
 ****************************************************************************/
void WebIfHandler::doGetCGI(HttpRequest& req, HttpResponse& res)
{
  if (req.HasParam("io_status"))
  {
    res.StartHTMLContent();
    
    if (req.GetParam("io_status", "").compare("iob") == 0)
    {
      res << "<h2>IOB</h2><i>Status not implemented!</i>";
    }
    else if (req.GetParam("io_status", "").compare("io351iomodules") == 0)
    {
      for (int i = 0; i < sizeof(m_pIO351IOModules) / sizeof(m_pIO351IOModules[0]); i++)
      {
        if (i)
        {
          res << "<br/>";
        }
        
        res << "<h2>IO351 IO Module #" << (i + 1) << " Status</h2>";
        if (m_pIO351IOModules[i])
          m_pIO351IOModules[i]->webifMakeStatusHtml(res);
        else
          res << "<i>Pointer to IO351 IO Module not set!</i>";
      }
    }
    else
    {
      res << "<b>Unhandled io_status=" << req.GetParam("io_status", "") << "</b>";
    }
  }

  // firmware_update.html
  if (req.HasParam("firmware_update"))
  {
    res.StartHTMLContent();

    if (req.GetParam("firmware_update", "").compare("status") == 0)
    {
      FirmwareUpdateCtrl::GetInstance()->webifMakeStatus(res);
    }
    else
    {
      res << "<b>Unhandled firmware_update=" << req.GetParam("firmware_update", "") << "</b>";
    }
  }
}
Example #22
0
		void HttpServer::readCb(bufferevent *bev, void *ctx) {
			size_t length = evbuffer_get_length(bufferevent_get_input(bev));
			char *data = (char *) malloc(sizeof(char) * length);

			evbuffer_remove(bufferevent_get_input(bev), data, length);
			HttpRequestParser requestParser;
			HttpRequest request;
			HttpResponse response;

			requestParser.reset();
			requestParser.parse(request, data, length);
			HttpRequestHandler requestHandler(rootDir_);
			requestHandler.handleRequest(&request, &response);
			evbuffer_add(bufferevent_get_output(bev), response.toString().c_str(), response.toString().length());

			free(data);
		}
Example #23
0
void RpcServer::processRequest(const HttpRequest& request, HttpResponse& response) {
  auto url = request.getUrl();
  
  auto it = s_handlers.find(url);
  if (it == s_handlers.end()) {
    response.setStatus(HttpResponse::STATUS_404);
    return;
  }

  if (url != "/json_rpc" && !checkCoreReady()) {
    response.setStatus(HttpResponse::STATUS_500);
    response.setBody("Core is busy");
    return;
  }

  it->second(this, request, response);
}
void onVolume(HttpRequest &request, HttpResponse &response)
{
	
	int channel = request.getQueryParameter("channel").toInt();
	int value = request.getQueryParameter("value").toInt();
	
	setVolume(channel, value);
	
	JsonObjectStream* stream = new JsonObjectStream();
	JsonObject& json = stream->getRoot();
	json["status"] = (bool)true;
	response.setAllowCrossDomainOrigin("*");
	response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
	response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Request, X-Request, X-Requested-With");

	response.sendJsonObject(stream);
}
Example #25
0
bool RpcServer::processJsonRpcRequest(const HttpRequest& request, HttpResponse& response) {

  using namespace JsonRpc;

  response.addHeader("Content-Type", "application/json");

  JsonRpcRequest jsonRequest;
  JsonRpcResponse jsonResponse;

  try {
    logger(TRACE) << "JSON-RPC request: " << request.getBody();
    jsonRequest.parseRequest(request.getBody());
    jsonResponse.setId(jsonRequest.getId()); // copy id

    static std::unordered_map<std::string, JsonMemberMethod> jsonRpcHandlers = {
      { "getblockcount", makeMemberMethod(&RpcServer::on_getblockcount) },
      { "on_getblockhash", makeMemberMethod(&RpcServer::on_getblockhash) },
      { "getblocktemplate", makeMemberMethod(&RpcServer::on_getblocktemplate) },
      { "getcurrencyid", makeMemberMethod(&RpcServer::on_get_currency_id) },
      { "submitblock", makeMemberMethod(&RpcServer::on_submitblock) },
      { "getlastblockheader", makeMemberMethod(&RpcServer::on_get_last_block_header) },
      { "getblockheaderbyhash", makeMemberMethod(&RpcServer::on_get_block_header_by_hash) },
      { "getblockheaderbyheight", makeMemberMethod(&RpcServer::on_get_block_header_by_height) }
    };

    auto it = jsonRpcHandlers.find(jsonRequest.getMethod());
    if (it == jsonRpcHandlers.end()) {
      throw JsonRpcError(JsonRpc::errMethodNotFound);
    }

    if (jsonRequest.getMethod() != "getcurrencyid" && !checkCoreReady()) {
      throw JsonRpcError(CORE_RPC_ERROR_CODE_CORE_BUSY, "Core is busy");
    }

    it->second(this, jsonRequest, jsonResponse);

  } catch (const JsonRpcError& err) {
    jsonResponse.setError(err);
  } catch (const std::exception& e) {
    jsonResponse.setError(JsonRpcError(JsonRpc::errInternalError, e.what()));
  }

  response.setBody(jsonResponse.getBody());
  logger(TRACE) << "JSON-RPC response: " << jsonResponse.getBody();
  return true;
}
Example #26
0
  TEST(Packager, List) 
  {
    QVariant var;
    HttpResponse resp;
    JsonPackager pack;

    QList<QVariant> list;
    list.append(QVariant("A"));
    list.append(QVariant("B"));
    list.append(QVariant("C"));

    var.setValue(list);
    ASSERT_TRUE(pack.Package(var, resp));

    QString data = resp.GetBody();
    ASSERT_EQ(QString("[ \"A\", \"B\", \"C\" ]\n"), resp.GetBody());
  }
Example #27
0
void RequestHandler::service(HttpRequest& request, HttpResponse& response) {
    QByteArray path=request.getPath();
    qDebug("Conroller: path=%s",path.data());

    // Set a response header
    response.setHeader("Content-Type", "text/html; charset=ISO-8859-1");

    // Return a simple HTML document
    response.write("<html><body>Hello World</body></html>",true);

    qDebug("RequestHandler: finished request");

    // Clear the log buffer
    if (logger) {
       logger->clear();
    }
}
Example #28
0
HttpResponse* listToResponse(HttpRequest* pRequest,
                             const Rcpp::List& response) {
  using namespace Rcpp;

  if (response.isNULL() || response.size() == 0)
    return NULL;

  CharacterVector names = response.names();

  int status = Rcpp::as<int>(response["status"]);
  std::string statusDesc = getStatusDescription(status);

  List responseHeaders = response["headers"];

  // Self-frees when response is written
  DataSource* pDataSource = NULL;

  // The response can either contain:
  // - bodyFile: String value that names the file that should be streamed
  // - body: Character vector (which is charToRaw-ed) or raw vector, or NULL
    if (std::find(names.begin(), names.end(), "bodyFile") != names.end()) {
    FileDataSource* pFDS = new FileDataSource();
    pFDS->initialize(Rcpp::as<std::string>(response["bodyFile"]),
        Rcpp::as<bool>(response["bodyFileOwned"]));
    pDataSource = pFDS;
  }
  else if (Rf_isString(response["body"])) {
    RawVector responseBytes = Function("charToRaw")(response["body"]);
    pDataSource = new RawVectorDataSource(responseBytes);
  }
  else {
    RawVector responseBytes = response["body"];
    pDataSource = new RawVectorDataSource(responseBytes);
  }

  HttpResponse* pResp = new HttpResponse(pRequest, status, statusDesc,
                                         pDataSource);
  CharacterVector headerNames = responseHeaders.names();
  for (R_len_t i = 0; i < responseHeaders.size(); i++) {
    pResp->addHeader(
      std::string((char*)headerNames[i], headerNames[i].size()),
      Rcpp::as<std::string>(responseHeaders[i]));
  }

  return pResp;
}
Example #29
0
void brain_stroke_web::service(HttpRequest &request, HttpResponse &response){
    QLOG_ERROR() << "debug thread" << QThread::currentThread();
    QByteArray path = request.getPath();
    if(path =="/getallversion"){
        get_version_controller_ins.service(request,response);
        return;
    }
    else if (path == "/getfile") {
        download_version_controller_ins.service(request,response);
        return;
    }
    else if (path == "/rename"){
        //POST
        if(request.getMethod() != "POST"){
            netutil::write(response, 401, "wrong method");
            return;
        }
        rename_version_controller_ins.service(request,response);
        return;
    }
    else if(path == "/delete"){
        //POST
        if(request.getMethod() != "POST"){
            netutil::write(response, 401, "wrong method");
            return;
        }
        delete_version_controller_ins.service(request,response);
        return;
    }
    else if(path.startsWith("/data")){
        QString key = request.getParameter("key");
        if(key != QString(inner_data_trans_key)){
            response.setStatus(401,"key error");
            response.write("key error");
        }
        else{
            StaticFileController_ins->service(request,response);
            return;
        }
    }
    else{
        response.setStatus(401,"no matched request");
        response.write("no matched request", false);
    }
}
void download_version_controller::service(HttpRequest &request, HttpResponse &response){
    QString version_name = request.getParameter("version_name");
    QString pid = request.getParameter("pid");
    if(pid == "" || version_name == ""){
        QLOG_ERROR() << "input para wrong pid, version" << "download_version_controller";
        response.setStatus(401,"para error");
        response.write("para error");
        return;
    }
    QDir result_dir = Config::single() -> mp["pdata_dir"] + "/" + pid + "/result/" + version_name;
    if(!result_dir.exists()){
        response.setStatus(401,"data not exists");
        response.write("data not exists");
        return;
    }
    QProcess process;
    process.setWorkingDirectory(Config::single() -> mp["pdata_dir"] + "/" + pid + "/result");
    process.start("zip -r " + version_name + ".zip " + version_name);
    bool ret_code = process.waitForFinished();
    if(!ret_code){
        response.setStatus(401,"zip error");
        response.write("zip error");
    }
    response.redirect(("/data/"+ pid + "/result/" + version_name + ".zip?key=" + QString(inner_data_trans_key)).toUtf8()) ;
}