| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2016 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 30 matching lines...) Expand all Loading... |
| 41 // Once the wrapped transport channel is connected, QuicTransportChannel | 41 // Once the wrapped transport channel is connected, QuicTransportChannel |
| 42 // negotiates the crypto handshake and establishes SRTP keying material. | 42 // negotiates the crypto handshake and establishes SRTP keying material. |
| 43 // | 43 // |
| 44 // How it works: | 44 // How it works: |
| 45 // | 45 // |
| 46 // QuicTransportChannel { | 46 // QuicTransportChannel { |
| 47 // QuicSession* quic_; | 47 // QuicSession* quic_; |
| 48 // TransportChannelImpl* channel_; | 48 // TransportChannelImpl* channel_; |
| 49 // } | 49 // } |
| 50 // | 50 // |
| 51 // - Data written to SendPacket() is passed directly to |channel_| if it is | 51 // - Data written to SendPacket() is passed directly to |channel_| if it is |
| 52 // an SRTP packet with the PF_SRTP_BYPASS flag. | 52 // an SRTP packet with the PF_SRTP_BYPASS flag. |
| 53 // | 53 // |
| 54 // - |quic_| passes outgoing packets to WritePacket(), which transfers them | 54 // - |quic_| passes outgoing packets to WritePacket(), which transfers them |
| 55 // to |channel_| to be sent across the network. | 55 // to |channel_| to be sent across the network. |
| 56 // | 56 // |
| 57 // - Data which comes into QuicTransportChannel::OnReadPacket is checked to | 57 // - Data which comes into QuicTransportChannel::OnReadPacket is checked to |
| 58 // see if it is QUIC, and if it is, passed to |quic_|. SRTP packets are | 58 // see if it is QUIC, and if it is, passed to |quic_|. SRTP packets are |
| 59 // signaled upwards as bypass packets. | 59 // signaled upwards as bypass packets. |
| 60 // | 60 // |
| 61 // - When the QUIC handshake is completed, quic_state() returns | 61 // - When the QUIC handshake is completed, quic_state() returns |
| 62 // QUIC_TRANSPORT_CONNECTED and SRTP keying material can be exported. | 62 // QUIC_TRANSPORT_CONNECTED and SRTP keying material can be exported. |
| 63 // | 63 // |
| 64 // TODO(mikescarlett): Implement secure QUIC handshake, 0-RTT handshakes, and | 64 // - CreateQuicStream() creates an outgoing QUIC stream. Once the local peer |
| 65 // QUIC data streams. | 65 // sends data from this stream, the remote peer emits SignalIncomingStream |
| 66 // with a QUIC stream of the same id to handle received data. |
| 67 // |
| 68 // TODO(mikescarlett): Implement secure QUIC handshake and 0-RTT handshakes. |
| 66 class QuicTransportChannel : public TransportChannelImpl, | 69 class QuicTransportChannel : public TransportChannelImpl, |
| 67 public net::QuicPacketWriter, | 70 public net::QuicPacketWriter, |
| 68 public net::QuicCryptoClientStream::ProofHandler { | 71 public net::QuicCryptoClientStream::ProofHandler { |
| 69 public: | 72 public: |
| 70 // |channel| - the TransportChannelImpl we are wrapping. | 73 // |channel| - the TransportChannelImpl we are wrapping. |
| 71 explicit QuicTransportChannel(TransportChannelImpl* channel); | 74 explicit QuicTransportChannel(TransportChannelImpl* channel); |
| 72 ~QuicTransportChannel() override; | 75 ~QuicTransportChannel() override; |
| 73 | 76 |
| 74 // TransportChannel overrides. | 77 // TransportChannel overrides. |
| 75 // TODO(mikescarlett): Implement certificate authentication. | 78 // TODO(mikescarlett): Implement certificate authentication. |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 void OnProofVerifyDetailsAvailable( | 202 void OnProofVerifyDetailsAvailable( |
| 200 const net::ProofVerifyDetails& verify_details) override; | 203 const net::ProofVerifyDetails& verify_details) override; |
| 201 | 204 |
| 202 // Returns true if |quic_| has queued data which wasn't written due | 205 // Returns true if |quic_| has queued data which wasn't written due |
| 203 // to |channel_| being write blocked. | 206 // to |channel_| being write blocked. |
| 204 bool HasDataToWrite() const; | 207 bool HasDataToWrite() const; |
| 205 // Writes queued data for |quic_| when |channel_| is no longer write blocked. | 208 // Writes queued data for |quic_| when |channel_| is no longer write blocked. |
| 206 void OnCanWrite(); | 209 void OnCanWrite(); |
| 207 // Connectivity state of QuicTransportChannel. | 210 // Connectivity state of QuicTransportChannel. |
| 208 QuicTransportState quic_state() const { return quic_state_; } | 211 QuicTransportState quic_state() const { return quic_state_; } |
| 212 // Creates a new QUIC stream that can send data. |
| 213 ReliableQuicStream* CreateQuicStream(); |
| 214 |
| 215 // Emitted when |quic_| creates a QUIC stream to receive data from the remote |
| 216 // peer, when the stream did not exist previously. |
| 217 sigslot::signal1<ReliableQuicStream*> SignalIncomingStream; |
| 218 // Emitted when the QuicTransportChannel state becomes QUIC_TRANSPORT_CLOSED. |
| 219 sigslot::signal0<> SignalClosed; |
| 209 | 220 |
| 210 private: | 221 private: |
| 211 // Fingerprint of remote peer. | 222 // Fingerprint of remote peer. |
| 212 struct RemoteFingerprint { | 223 struct RemoteFingerprint { |
| 213 std::string value; | 224 std::string value; |
| 214 std::string algorithm; | 225 std::string algorithm; |
| 215 }; | 226 }; |
| 216 | 227 |
| 217 // Callbacks for |channel_|. | 228 // Callbacks for |channel_|. |
| 218 void OnReadableState(TransportChannel* channel); | 229 void OnReadableState(TransportChannel* channel); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 234 TransportChannel* channel, | 245 TransportChannel* channel, |
| 235 CandidatePairInterface* selected_candidate_pair, | 246 CandidatePairInterface* selected_candidate_pair, |
| 236 int last_sent_packet_id); | 247 int last_sent_packet_id); |
| 237 void OnConnectionRemoved(TransportChannelImpl* channel); | 248 void OnConnectionRemoved(TransportChannelImpl* channel); |
| 238 | 249 |
| 239 // Callbacks for |quic_|. | 250 // Callbacks for |quic_|. |
| 240 // Called when |quic_| has established the crypto handshake. | 251 // Called when |quic_| has established the crypto handshake. |
| 241 void OnHandshakeComplete(); | 252 void OnHandshakeComplete(); |
| 242 // Called when |quic_| has closed the connection. | 253 // Called when |quic_| has closed the connection. |
| 243 void OnConnectionClosed(net::QuicErrorCode error, bool from_peer); | 254 void OnConnectionClosed(net::QuicErrorCode error, bool from_peer); |
| 255 // Called when |quic_| has created a new QUIC stream for incoming data. |
| 256 void OnIncomingStream(ReliableQuicStream* stream); |
| 244 | 257 |
| 245 // Called by OnReadPacket() when a QUIC packet is received. | 258 // Called by OnReadPacket() when a QUIC packet is received. |
| 246 bool HandleQuicPacket(const char* data, size_t size); | 259 bool HandleQuicPacket(const char* data, size_t size); |
| 247 // Sets up the QUIC handshake. | 260 // Sets up the QUIC handshake. |
| 248 bool MaybeStartQuic(); | 261 bool MaybeStartQuic(); |
| 249 // Creates the QUIC connection and |quic_|. | 262 // Creates the QUIC connection and |quic_|. |
| 250 bool CreateQuicSession(); | 263 bool CreateQuicSession(); |
| 251 // Creates the crypto stream and initializes the handshake. | 264 // Creates the crypto stream and initializes the handshake. |
| 252 bool StartQuicHandshake(); | 265 bool StartQuicHandshake(); |
| 253 // Sets the QuicTransportChannel connectivity state. | 266 // Sets the QuicTransportChannel connectivity state. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 280 rtc::scoped_refptr<rtc::RTCCertificate> local_certificate_; | 293 rtc::scoped_refptr<rtc::RTCCertificate> local_certificate_; |
| 281 // Fingerprint of the remote peer. This must be set before we start QUIC. | 294 // Fingerprint of the remote peer. This must be set before we start QUIC. |
| 282 rtc::Optional<RemoteFingerprint> remote_fingerprint_; | 295 rtc::Optional<RemoteFingerprint> remote_fingerprint_; |
| 283 | 296 |
| 284 RTC_DISALLOW_COPY_AND_ASSIGN(QuicTransportChannel); | 297 RTC_DISALLOW_COPY_AND_ASSIGN(QuicTransportChannel); |
| 285 }; | 298 }; |
| 286 | 299 |
| 287 } // namespace cricket | 300 } // namespace cricket |
| 288 | 301 |
| 289 #endif // WEBRTC_P2P_QUIC_QUICTRANSPORTCHANNEL_H_ | 302 #endif // WEBRTC_P2P_QUIC_QUICTRANSPORTCHANNEL_H_ |
| OLD | NEW |