| Index: webrtc/p2p/client/basicportallocator.h
|
| diff --git a/webrtc/p2p/client/basicportallocator.h b/webrtc/p2p/client/basicportallocator.h
|
| index 96468d32ccafab6eb574909c9a34cfffa9897bc6..1b52cb963095f1ee34c6bfbbddf4b7c972e98ac6 100644
|
| --- a/webrtc/p2p/client/basicportallocator.h
|
| +++ b/webrtc/p2p/client/basicportallocator.h
|
| @@ -236,6 +236,93 @@ struct PortConfiguration : public rtc::MessageData {
|
| RelayType turn_type, ProtocolType type) const;
|
| };
|
|
|
| +class UDPPort;
|
| +class TurnPort;
|
| +
|
| +// Performs the allocation of ports, in a sequenced (timed) manner, for a given
|
| +// network and IP address.
|
| +class AllocationSequence : public rtc::MessageHandler,
|
| + public sigslot::has_slots<> {
|
| + public:
|
| + enum State {
|
| + kInit, // Initial state.
|
| + kRunning, // Started allocating ports.
|
| + kStopped, // Stopped from running.
|
| + kCompleted, // All ports are allocated.
|
| +
|
| + // kInit --> kRunning --> {kCompleted|kStopped}
|
| + };
|
| + AllocationSequence(BasicPortAllocatorSession* session,
|
| + rtc::Network* network,
|
| + PortConfiguration* config,
|
| + uint32 flags);
|
| + ~AllocationSequence();
|
| + bool Init();
|
| + void Clear();
|
| +
|
| + State state() const { return state_; }
|
| +
|
| + // Disables the phases for a new sequence that this one already covers for an
|
| + // equivalent network setup.
|
| + void DisableEquivalentPhases(rtc::Network* network,
|
| + PortConfiguration* config,
|
| + uint32* flags);
|
| +
|
| + // Starts and stops the sequence. When started, it will continue allocating
|
| + // new ports on its own timed schedule.
|
| + void Start();
|
| + void Stop();
|
| +
|
| + // MessageHandler
|
| + void OnMessage(rtc::Message* msg);
|
| +
|
| + void EnableProtocol(ProtocolType proto);
|
| + bool ProtocolEnabled(ProtocolType proto) const;
|
| +
|
| + // Signal from AllocationSequence, when it's done with allocating ports.
|
| + // This signal is useful, when port allocation fails which doesn't result
|
| + // in any candidates. Using this signal BasicPortAllocatorSession can send
|
| + // its candidate discovery conclusion signal. Without this signal,
|
| + // BasicPortAllocatorSession doesn't have any event to trigger signal. This
|
| + // can also be achieved by starting timer in BPAS.
|
| + sigslot::signal1<AllocationSequence*> SignalPortAllocationComplete;
|
| +
|
| + protected:
|
| + // For testing.
|
| + void CreateTurnPort(const RelayServerConfig& config);
|
| +
|
| + private:
|
| + typedef std::vector<ProtocolType> ProtocolList;
|
| +
|
| + bool IsFlagSet(uint32 flag) { return ((flags_ & flag) != 0); }
|
| + void CreateUDPPorts();
|
| + void CreateTCPPorts();
|
| + void CreateStunPorts();
|
| + void CreateRelayPorts();
|
| + void CreateGturnPort(const RelayServerConfig& config);
|
| +
|
| + void OnReadPacket(rtc::AsyncPacketSocket* socket,
|
| + const char* data,
|
| + size_t size,
|
| + const rtc::SocketAddress& remote_addr,
|
| + const rtc::PacketTime& packet_time);
|
| +
|
| + void OnPortDestroyed(PortInterface* port);
|
| +
|
| + BasicPortAllocatorSession* session_;
|
| + rtc::Network* network_;
|
| + rtc::IPAddress ip_;
|
| + PortConfiguration* config_;
|
| + State state_;
|
| + uint32 flags_;
|
| + ProtocolList protocols_;
|
| + rtc::scoped_ptr<rtc::AsyncPacketSocket> udp_socket_;
|
| + // There will be only one udp port per AllocationSequence.
|
| + UDPPort* udp_port_;
|
| + std::vector<TurnPort*> turn_ports_;
|
| + int phase_;
|
| +};
|
| +
|
| } // namespace cricket
|
|
|
| #endif // WEBRTC_P2P_CLIENT_BASICPORTALLOCATOR_H_
|
|
|