Skip to content
Snippets Groups Projects
Select Git revision
  • b5e083ecc33896c6f6bc3ba74090816f8fd8395e
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
31 results

dringctrl.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    dht_proxy_server.cpp 38.75 KiB
    /*
     *  Copyright (C) 2017-2019 Savoir-faire Linux Inc.
     *  Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
     *          Adrien Béraud <adrien.beraud@savoirfairelinux.com>
     *          Vsevolod Ivanov <vsevolod.ivanov@savoirfairelinux.com>
     *
     *  This program is free software; you can redistribute it and/or modify
     *  it under the terms of the GNU General Public License as published by
     *  the Free Software Foundation; either version 3 of the License, or
     *  (at your option) any later version.
     *
     *  This program is distributed in the hope that it will be useful,
     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *  GNU General Public License for more details.
     *
     *  You should have received a copy of the GNU General Public License
     *  along with this program. If not, see <https://www.gnu.org/licenses/>.
     */
    
    #include "dht_proxy_server.h"
    
    #include "default_types.h"
    #include "dhtrunner.h"
    
    #include <msgpack.hpp>
    #include <json/json.h>
    
    #include <chrono>
    #include <functional>
    #include <limits>
    #include <iostream>
    
    using namespace std::placeholders;
    
    namespace dht {
    
    constexpr char RESP_MSG_DESTINATION_NOT_FOUND[] = "{\"err\":\"No destination found\"}";
    constexpr char RESP_MSG_NO_TOKEN[] = "{\"err\":\"No token\"}";
    constexpr char RESP_MSG_JSON_NOT_ENABLED[] = "{\"err\":\"JSON not enabled on this instance\"}";
    constexpr char RESP_MSG_JSON_INCORRECT[] = "{\"err:\":\"Incorrect JSON\"}";
    constexpr char RESP_MSG_SERVICE_UNAVAILABLE[] = "{\"err\":\"Incorrect DhtRunner\"}";
    constexpr char RESP_MSG_INTERNAL_SERVER_ERRROR[] = "{\"err\":\"Internal server error\"}";
    constexpr char RESP_MSG_MISSING_PARAMS[] = "{\"err\":\"Missing parameters\"}";
    constexpr char RESP_MSG_PUT_FAILED[] = "{\"err\":\"Put failed\"}";
    
    constexpr const std::chrono::minutes PRINT_STATS_PERIOD {2};
    
    DhtProxyServer::DhtProxyServer(std::shared_ptr<DhtRunner> dht, in_port_t port,
                                  const std::string& pushServer,
                                  std::shared_ptr<dht::Logger> logger
    ):
            dht_(dht), logger_(logger), lockListener_(std::make_shared<std::mutex>()),
            listeners_(std::make_shared<std::map<restinio::connection_id_t, http::ListenerSession>>()),
            connListener_(std::make_shared<http::ConnectionListener>(
                            dht, listeners_, lockListener_, logger)),
            pushServer_(pushServer)
    {
        if (not dht_)
            throw std::invalid_argument("A DHT instance must be provided");
    
        std::cout << "Running DHT proxy server on port " << port << std::endl;
        if (not pushServer.empty()){
    #ifdef OPENDHT_PUSH_NOTIFICATIONS
            std::cout << "Using push notification server: " << pushServer << std::endl;
    #else
            std::cerr << "Push server defined but built OpenDHT built without push notification support" << std::endl;
    #endif
        }