diff options
Diffstat (limited to 'apps/http-proxy/src/forwarder_interface.h')
-rw-r--r-- | apps/http-proxy/src/forwarder_interface.h | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/apps/http-proxy/src/forwarder_interface.h b/apps/http-proxy/src/forwarder_interface.h deleted file mode 100644 index 116b09a07..000000000 --- a/apps/http-proxy/src/forwarder_interface.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2020 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -extern "C" { -#include <hicn/ctrl/api.h> -#include <hicn/util/ip_address.h> -} - -#ifndef ASIO_STANDALONE -#define ASIO_STANDALONE 1 -#endif -#include <asio.hpp> -#include <asio/steady_timer.hpp> -#include <functional> -#include <thread> -#include <unordered_map> - -namespace transport { - -typedef std::function<void(uint32_t, bool)> SetRouteCallback; - -struct route_info_t { - int family; - std::string remote_addr; - uint16_t remote_port; - std::string route_addr; - uint8_t route_len; -}; - -using RouteInfoPtr = std::shared_ptr<route_info_t>; - -class ForwarderInterface { - public: - ForwarderInterface(asio::io_service &io_service) - : external_ioservice_(io_service), - work_(std::make_unique<asio::io_service::work>(internal_ioservice_)), - sock_(nullptr), - thread_(std::make_unique<std::thread>( - [this]() { internal_ioservice_.run(); })), - check_routes_timer_(nullptr), - pending_add_route_counter_(0), - route_id_(0) {} - - ~ForwarderInterface(); - - int connectToForwarder(); - - void removeConnectedUserNow(uint32_t route_id); - - // to be called at the server - // at the client this creates a race condition - // and the program enters in a loop - void scheduleRemoveConnectedUser(uint32_t route_id); - - template <typename Callback> - void createFaceAndRoute(RouteInfoPtr &&route_info, Callback &&callback) { - internal_ioservice_.post([this, _route_info = std::move(route_info), - _callback = std::forward<Callback>(callback)]() { - pending_add_route_counter_++; - uint8_t max_try = 5; - auto timer = new asio::steady_timer(internal_ioservice_); - internalCreateFaceAndRoute(std::move(_route_info), max_try, timer, - std::move(_callback)); - }); - } - - int32_t getMainListenerPort(); - - void close(); - - private: - void internalRemoveConnectedUser(uint32_t route_id); - - void internalCreateFaceAndRoute(RouteInfoPtr route_info, uint8_t max_try, - asio::steady_timer *timer, - SetRouteCallback callback); - - int tryToCreateFaceAndRoute(route_info_t *route_info); - - asio::io_service &external_ioservice_; - asio::io_service internal_ioservice_; - std::unique_ptr<asio::io_service::work> work_; - hc_sock_t *sock_; - std::unique_ptr<std::thread> thread_; - std::unordered_map<uint32_t, RouteInfoPtr> route_status_; - std::unique_ptr<asio::steady_timer> check_routes_timer_; - uint32_t pending_add_route_counter_; - uint32_t route_id_; -}; - -} // namespace transport |