OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 namespace cricket { | 22 namespace cricket { |
23 | 23 |
24 class RelayEntry; | 24 class RelayEntry; |
25 class RelayConnection; | 25 class RelayConnection; |
26 | 26 |
27 // Communicates using an allocated port on the relay server. For each | 27 // Communicates using an allocated port on the relay server. For each |
28 // remote candidate that we try to send data to a RelayEntry instance | 28 // remote candidate that we try to send data to a RelayEntry instance |
29 // is created. The RelayEntry will try to reach the remote destination | 29 // is created. The RelayEntry will try to reach the remote destination |
30 // by connecting to all available server addresses in a pre defined | 30 // by connecting to all available server addresses in a pre defined |
31 // order with a small delay in between. When a connection is | 31 // order with a small delay in between. When a connection is |
32 // successful all other connection attemts are aborted. | 32 // successful all other connection attempts are aborted. |
33 class RelayPort : public Port { | 33 class RelayPort : public Port { |
34 public: | 34 public: |
35 typedef std::pair<rtc::Socket::Option, int> OptionValue; | 35 typedef std::pair<rtc::Socket::Option, int> OptionValue; |
36 | 36 |
37 // RelayPort doesn't yet do anything fancy in the ctor. | 37 // RelayPort doesn't yet do anything fancy in the ctor. |
38 static RelayPort* Create(rtc::Thread* thread, | 38 static RelayPort* Create(rtc::Thread* thread, |
39 rtc::PacketSocketFactory* factory, | 39 rtc::PacketSocketFactory* factory, |
40 rtc::Network* network, | 40 rtc::Network* network, |
41 const rtc::IPAddress& ip, | 41 const rtc::IPAddress& ip, |
42 uint16_t min_port, | 42 uint16_t min_port, |
43 uint16_t max_port, | 43 uint16_t max_port, |
44 const std::string& username, | 44 const std::string& username, |
45 const std::string& password) { | 45 const std::string& password) { |
46 return new RelayPort(thread, factory, network, ip, min_port, max_port, | 46 return new RelayPort(thread, factory, network, ip, min_port, max_port, |
47 username, password); | 47 username, password); |
48 } | 48 } |
49 virtual ~RelayPort(); | 49 ~RelayPort() override; |
50 | 50 |
51 void AddServerAddress(const ProtocolAddress& addr); | 51 void AddServerAddress(const ProtocolAddress& addr); |
52 void AddExternalAddress(const ProtocolAddress& addr); | 52 void AddExternalAddress(const ProtocolAddress& addr); |
53 | 53 |
54 const std::vector<OptionValue>& options() const { return options_; } | 54 const std::vector<OptionValue>& options() const { return options_; } |
55 bool HasMagicCookie(const char* data, size_t size); | 55 bool HasMagicCookie(const char* data, size_t size); |
56 | 56 |
57 virtual void PrepareAddress(); | 57 void PrepareAddress() override; |
58 virtual Connection* CreateConnection(const Candidate& address, | 58 Connection* CreateConnection(const Candidate& address, |
59 CandidateOrigin origin); | 59 CandidateOrigin origin) override; |
60 virtual int SetOption(rtc::Socket::Option opt, int value); | 60 int SetOption(rtc::Socket::Option opt, int value) override; |
61 virtual int GetOption(rtc::Socket::Option opt, int* value); | 61 int GetOption(rtc::Socket::Option opt, int* value) override; |
62 virtual int GetError(); | 62 int GetError() override; |
63 virtual bool SupportsProtocol(const std::string& protocol) const { | 63 bool SupportsProtocol(const std::string& protocol) const override { |
64 // Relay port may create both TCP and UDP connections. | 64 // Relay port may create both TCP and UDP connections. |
65 return true; | 65 return true; |
66 } | 66 } |
67 | 67 |
68 const ProtocolAddress * ServerAddress(size_t index) const; | 68 const ProtocolAddress * ServerAddress(size_t index) const; |
69 bool IsReady() { return ready_; } | 69 bool IsReady() { return ready_; } |
70 | 70 |
71 // Used for testing. | 71 // Used for testing. |
72 sigslot::signal1<const ProtocolAddress*> SignalConnectFailure; | 72 sigslot::signal1<const ProtocolAddress*> SignalConnectFailure; |
73 sigslot::signal1<const ProtocolAddress*> SignalSoftTimeout; | 73 sigslot::signal1<const ProtocolAddress*> SignalSoftTimeout; |
74 | 74 |
75 protected: | 75 protected: |
76 RelayPort(rtc::Thread* thread, | 76 RelayPort(rtc::Thread* thread, |
77 rtc::PacketSocketFactory* factory, | 77 rtc::PacketSocketFactory* factory, |
78 rtc::Network*, | 78 rtc::Network*, |
79 const rtc::IPAddress& ip, | 79 const rtc::IPAddress& ip, |
80 uint16_t min_port, | 80 uint16_t min_port, |
81 uint16_t max_port, | 81 uint16_t max_port, |
82 const std::string& username, | 82 const std::string& username, |
83 const std::string& password); | 83 const std::string& password); |
84 bool Init(); | 84 bool Init(); |
85 | 85 |
86 void SetReady(); | 86 void SetReady(); |
87 | 87 |
88 virtual int SendTo(const void* data, size_t size, | 88 int SendTo(const void* data, |
89 const rtc::SocketAddress& addr, | 89 size_t size, |
90 const rtc::PacketOptions& options, | 90 const rtc::SocketAddress& addr, |
91 bool payload); | 91 const rtc::PacketOptions& options, |
| 92 bool payload) override; |
92 | 93 |
93 // Dispatches the given packet to the port or connection as appropriate. | 94 // Dispatches the given packet to the port or connection as appropriate. |
94 void OnReadPacket(const char* data, size_t size, | 95 void OnReadPacket(const char* data, size_t size, |
95 const rtc::SocketAddress& remote_addr, | 96 const rtc::SocketAddress& remote_addr, |
96 ProtocolType proto, | 97 ProtocolType proto, |
97 const rtc::PacketTime& packet_time); | 98 const rtc::PacketTime& packet_time); |
98 | 99 |
| 100 // The OnSentPacket callback is left empty here since they are handled by |
| 101 // RelayEntry. |
| 102 void OnSentPacket(rtc::AsyncPacketSocket* socket, |
| 103 const rtc::SentPacket& sent_packet) override {} |
| 104 |
99 private: | 105 private: |
100 friend class RelayEntry; | 106 friend class RelayEntry; |
101 | 107 |
102 std::deque<ProtocolAddress> server_addr_; | 108 std::deque<ProtocolAddress> server_addr_; |
103 std::vector<ProtocolAddress> external_addr_; | 109 std::vector<ProtocolAddress> external_addr_; |
104 bool ready_; | 110 bool ready_; |
105 std::vector<RelayEntry*> entries_; | 111 std::vector<RelayEntry*> entries_; |
106 std::vector<OptionValue> options_; | 112 std::vector<OptionValue> options_; |
107 int error_; | 113 int error_; |
108 }; | 114 }; |
109 | 115 |
110 } // namespace cricket | 116 } // namespace cricket |
111 | 117 |
112 #endif // WEBRTC_P2P_BASE_RELAYPORT_H_ | 118 #endif // WEBRTC_P2P_BASE_RELAYPORT_H_ |
OLD | NEW |