| 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 |