blob: 6bfbdc3de0b26b2c87187de9f8861f54b3fc01c5 [file] [log] [blame]
Yukai Tu2d6d5632015-10-26 11:06:02 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2014-2015, Regents of the University of California,
4 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis.
10 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24 */
25
26#ifndef NFD_DAEMON_FACE_WEBSOCKET_TRANSPORT_HPP
27#define NFD_DAEMON_FACE_WEBSOCKET_TRANSPORT_HPP
28
29#include "transport.hpp"
30#include "websocketpp.hpp"
31#include "core/scheduler.hpp"
32
33namespace nfd {
34namespace face {
35
36/**
37 * \brief A Transport that communicates on a WebSocket connection
38 */
39class WebSocketTransport : public Transport
40{
41public:
42 WebSocketTransport(websocketpp::connection_hdl hdl,
43 websocket::Server& server,
44 time::milliseconds pingInterval);
45
46 /** \brief Translates a message into a Block
47 * and delivers it to the link service
48 */
49 void
50 receiveMessage(const std::string& msg);
51
52 void
53 handlePong();
54
55 void
56 handlePongTimeout();
57
58protected:
59 virtual void
60 beforeChangePersistency(ndn::nfd::FacePersistency newPersistency) DECL_OVERRIDE;
61
62 virtual void
63 doClose() DECL_OVERRIDE;
64
65private:
66 virtual void
67 doSend(Transport::Packet&& packet) DECL_OVERRIDE;
68
69 void
70 schedulePing();
71
72 void
73 sendPing();
74
75 void
76 processErrorCode(const websocketpp::lib::error_code& error);
77
78private:
79 websocketpp::connection_hdl m_handle;
80 websocket::Server& m_server;
81 time::milliseconds m_pingInterval;
82 scheduler::ScopedEventId m_pingEventId;
83};
84
85} // namespace face
86} // namespace nfd
87
88#endif // NFD_DAEMON_FACE_WEBSOCKET_TRANSPORT_HPP