| Index: webrtc/p2p/base/p2ptransportchannel.h
 | 
| diff --git a/webrtc/p2p/base/p2ptransportchannel.h b/webrtc/p2p/base/p2ptransportchannel.h
 | 
| index e538dc2c9739f466ac603daeceb1e353a46a9df6..2327b2d4771b776e3086fc484e12841257e6160f 100644
 | 
| --- a/webrtc/p2p/base/p2ptransportchannel.h
 | 
| +++ b/webrtc/p2p/base/p2ptransportchannel.h
 | 
| @@ -26,14 +26,14 @@
 | 
|  #include <string>
 | 
|  #include <vector>
 | 
|  
 | 
| +#include "webrtc/base/asyncpacketsocket.h"
 | 
|  #include "webrtc/base/constructormagic.h"
 | 
| +#include "webrtc/base/sigslot.h"
 | 
|  #include "webrtc/p2p/base/candidate.h"
 | 
|  #include "webrtc/p2p/base/candidatepairinterface.h"
 | 
| +#include "webrtc/p2p/base/icetransportinternal.h"
 | 
|  #include "webrtc/p2p/base/portallocator.h"
 | 
|  #include "webrtc/p2p/base/portinterface.h"
 | 
| -#include "webrtc/p2p/base/transportchannelimpl.h"
 | 
| -#include "webrtc/base/asyncpacketsocket.h"
 | 
| -#include "webrtc/base/sigslot.h"
 | 
|  
 | 
|  namespace cricket {
 | 
|  
 | 
| @@ -60,7 +60,7 @@ class RemoteCandidate : public Candidate {
 | 
|  
 | 
|  // P2PTransportChannel manages the candidates and connection process to keep
 | 
|  // two P2P clients connected to each other.
 | 
| -class P2PTransportChannel : public TransportChannelImpl,
 | 
| +class P2PTransportChannel : public IceTransportInternal,
 | 
|                              public rtc::MessageHandler {
 | 
|   public:
 | 
|    P2PTransportChannel(const std::string& transport_name,
 | 
| @@ -69,7 +69,11 @@ class P2PTransportChannel : public TransportChannelImpl,
 | 
|    virtual ~P2PTransportChannel();
 | 
|  
 | 
|    // From TransportChannelImpl:
 | 
| -  TransportChannelState GetState() const override;
 | 
| +  IceTransportState GetState() const override;
 | 
| +  const std::string& transport_name() const override { return transport_name_; }
 | 
| +  int component() const override { return component_; }
 | 
| +  bool writable() const override { return writable_; }
 | 
| +  bool receiving() const override { return receiving_; }
 | 
|    void SetIceRole(IceRole role) override;
 | 
|    IceRole GetIceRole() const override { return ice_role_; }
 | 
|    void SetIceTiebreaker(uint64_t tiebreaker) override;
 | 
| @@ -118,57 +122,6 @@ class P2PTransportChannel : public TransportChannelImpl,
 | 
|  
 | 
|    IceMode remote_ice_mode() const { return remote_ice_mode_; }
 | 
|  
 | 
| -  // DTLS methods.
 | 
| -  bool IsDtlsActive() const override { return false; }
 | 
| -
 | 
| -  // Default implementation.
 | 
| -  bool GetSslRole(rtc::SSLRole* role) const override { return false; }
 | 
| -
 | 
| -  bool SetSslRole(rtc::SSLRole role) override { return false; }
 | 
| -
 | 
| -  // Set up the ciphers to use for DTLS-SRTP.
 | 
| -  bool SetSrtpCryptoSuites(const std::vector<int>& ciphers) override {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  // Find out which DTLS-SRTP cipher was negotiated.
 | 
| -  bool GetSrtpCryptoSuite(int* cipher) override { return false; }
 | 
| -
 | 
| -  // Find out which DTLS cipher was negotiated.
 | 
| -  bool GetSslCipherSuite(int* cipher) override { return false; }
 | 
| -
 | 
| -  // Returns null because the channel is not encrypted by default.
 | 
| -  rtc::scoped_refptr<rtc::RTCCertificate> GetLocalCertificate() const override {
 | 
| -    return nullptr;
 | 
| -  }
 | 
| -
 | 
| -  std::unique_ptr<rtc::SSLCertificate> GetRemoteSSLCertificate()
 | 
| -      const override {
 | 
| -    return nullptr;
 | 
| -  }
 | 
| -
 | 
| -  // Allows key material to be extracted for external encryption.
 | 
| -  bool ExportKeyingMaterial(const std::string& label,
 | 
| -                            const uint8_t* context,
 | 
| -                            size_t context_len,
 | 
| -                            bool use_context,
 | 
| -                            uint8_t* result,
 | 
| -                            size_t result_len) override {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  bool SetLocalCertificate(
 | 
| -      const rtc::scoped_refptr<rtc::RTCCertificate>& certificate) override {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  // Set DTLS Remote fingerprint. Must be after local identity set.
 | 
| -  bool SetRemoteFingerprint(const std::string& digest_alg,
 | 
| -                            const uint8_t* digest,
 | 
| -                            size_t digest_len) override {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
|    void PruneAllPorts();
 | 
|    int receiving_timeout() const { return config_.receiving_timeout; }
 | 
|    int check_receiving_interval() const { return check_receiving_interval_; }
 | 
| @@ -193,6 +146,15 @@ class P2PTransportChannel : public TransportChannelImpl,
 | 
|      return remote_candidates_;
 | 
|    }
 | 
|  
 | 
| +  std::string ToString() const {
 | 
| +    const char RECEIVING_ABBREV[2] = {'_', 'R'};
 | 
| +    const char WRITABLE_ABBREV[2] = {'_', 'W'};
 | 
| +    std::stringstream ss;
 | 
| +    ss << "Channel[" << transport_name_ << "|" << component_ << "|"
 | 
| +       << RECEIVING_ABBREV[receiving_] << WRITABLE_ABBREV[writable_] << "]";
 | 
| +    return ss.str();
 | 
| +  }
 | 
| +
 | 
|   private:
 | 
|    rtc::Thread* thread() const { return network_thread_; }
 | 
|    bool IsGettingPorts() { return allocator_session()->IsGettingPorts(); }
 | 
| @@ -239,7 +201,7 @@ class P2PTransportChannel : public TransportChannelImpl,
 | 
|    void UpdateState();
 | 
|    void HandleAllTimedOut();
 | 
|    void MaybeStopPortAllocatorSessions();
 | 
| -  TransportChannelState ComputeState() const;
 | 
| +  IceTransportState ComputeState() const;
 | 
|  
 | 
|    Connection* GetBestConnectionOnNetwork(rtc::Network* network) const;
 | 
|    bool CreateConnections(const Candidate& remote_candidate,
 | 
| @@ -347,6 +309,13 @@ class P2PTransportChannel : public TransportChannelImpl,
 | 
|                 : static_cast<uint32_t>(remote_ice_parameters_.size() - 1);
 | 
|    }
 | 
|  
 | 
| +  // Sets the writable state, signaling if necessary.
 | 
| +  void set_writable(bool writable);
 | 
| +  // Sets the receiving state, signaling if necessary.
 | 
| +  void set_receiving(bool receiving);
 | 
| +
 | 
| +  std::string transport_name_;
 | 
| +  int component_;
 | 
|    PortAllocator* allocator_;
 | 
|    rtc::Thread* network_thread_;
 | 
|    bool incoming_only_;
 | 
| @@ -387,13 +356,15 @@ class P2PTransportChannel : public TransportChannelImpl,
 | 
|    int check_receiving_interval_;
 | 
|    int64_t last_ping_sent_ms_ = 0;
 | 
|    int weak_ping_interval_ = WEAK_PING_INTERVAL;
 | 
| -  TransportChannelState state_ = TransportChannelState::STATE_INIT;
 | 
| +  IceTransportState state_ = IceTransportState::STATE_INIT;
 | 
|    IceConfig config_;
 | 
|    int last_sent_packet_id_ = -1;  // -1 indicates no packet was sent before.
 | 
|    bool started_pinging_ = false;
 | 
|    // The value put in the "nomination" attribute for the next nominated
 | 
|    // connection. A zero-value indicates the connection will not be nominated.
 | 
|    uint32_t nomination_ = 0;
 | 
| +  bool receiving_ = false;
 | 
| +  bool writable_ = false;
 | 
|  
 | 
|    webrtc::MetricsObserverInterface* metrics_observer_ = nullptr;
 | 
|  
 | 
| 
 |