OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2011 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 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 // The check for OPEN shouldn't be necessary but let's make | 530 // The check for OPEN shouldn't be necessary but let's make |
531 // sure we don't accidentally frob the state if it's closed. | 531 // sure we don't accidentally frob the state if it's closed. |
532 set_dtls_state(DTLS_TRANSPORT_CONNECTED); | 532 set_dtls_state(DTLS_TRANSPORT_CONNECTED); |
533 set_writable(true); | 533 set_writable(true); |
534 } | 534 } |
535 } | 535 } |
536 if (sig & rtc::SE_READ) { | 536 if (sig & rtc::SE_READ) { |
537 char buf[kMaxDtlsPacketLen]; | 537 char buf[kMaxDtlsPacketLen]; |
538 size_t read; | 538 size_t read; |
539 int read_error; | 539 int read_error; |
540 rtc::StreamResult ret = dtls_->Read(buf, sizeof(buf), &read, &read_error); | 540 rtc::StreamResult ret; |
541 if (ret == rtc::SR_SUCCESS) { | 541 // The underlying DTLS stream may have received multiple DTLS records in |
542 SignalReadPacket(this, buf, read, rtc::CreatePacketTime(0), 0); | 542 // one packet, so read all of them. |
543 } else if (ret == rtc::SR_EOS) { | 543 do { |
544 // Remote peer shut down the association with no error. | 544 ret = dtls_->Read(buf, sizeof(buf), &read, &read_error); |
545 LOG_J(LS_INFO, this) << "DTLS transport closed"; | 545 if (ret == rtc::SR_SUCCESS) { |
546 set_writable(false); | 546 SignalReadPacket(this, buf, read, rtc::CreatePacketTime(0), 0); |
547 set_dtls_state(DTLS_TRANSPORT_CLOSED); | 547 } else if (ret == rtc::SR_EOS) { |
548 } else if (ret == rtc::SR_ERROR) { | 548 // Remote peer shut down the association with no error. |
549 // Remote peer shut down the association with an error. | 549 LOG_J(LS_INFO, this) << "DTLS transport closed"; |
550 LOG_J(LS_INFO, this) << "DTLS transport error, code=" << read_error; | 550 set_writable(false); |
551 set_writable(false); | 551 set_dtls_state(DTLS_TRANSPORT_CLOSED); |
552 set_dtls_state(DTLS_TRANSPORT_FAILED); | 552 } else if (ret == rtc::SR_ERROR) { |
553 } | 553 // Remote peer shut down the association with an error. |
| 554 LOG_J(LS_INFO, this) << "DTLS transport error, code=" << read_error; |
| 555 set_writable(false); |
| 556 set_dtls_state(DTLS_TRANSPORT_FAILED); |
| 557 } |
| 558 } while (ret == rtc::SR_SUCCESS); |
554 } | 559 } |
555 if (sig & rtc::SE_CLOSE) { | 560 if (sig & rtc::SE_CLOSE) { |
556 RTC_DCHECK(sig == rtc::SE_CLOSE); // SE_CLOSE should be by itself. | 561 RTC_DCHECK(sig == rtc::SE_CLOSE); // SE_CLOSE should be by itself. |
557 set_writable(false); | 562 set_writable(false); |
558 if (!err) { | 563 if (!err) { |
559 LOG_J(LS_INFO, this) << "DTLS transport closed"; | 564 LOG_J(LS_INFO, this) << "DTLS transport closed"; |
560 set_dtls_state(DTLS_TRANSPORT_CLOSED); | 565 set_dtls_state(DTLS_TRANSPORT_CLOSED); |
561 } else { | 566 } else { |
562 LOG_J(LS_INFO, this) << "DTLS transport error, code=" << err; | 567 LOG_J(LS_INFO, this) << "DTLS transport error, code=" << err; |
563 set_dtls_state(DTLS_TRANSPORT_FAILED); | 568 set_dtls_state(DTLS_TRANSPORT_FAILED); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
673 | 678 |
674 dtls_->SetInitialRetransmissionTimeout(initial_timeout); | 679 dtls_->SetInitialRetransmissionTimeout(initial_timeout); |
675 } else { | 680 } else { |
676 LOG_J(LS_INFO, this) | 681 LOG_J(LS_INFO, this) |
677 << "no RTT estimate - using default DTLS handshake timeout"; | 682 << "no RTT estimate - using default DTLS handshake timeout"; |
678 } | 683 } |
679 } | 684 } |
680 | 685 |
681 | 686 |
682 } // namespace cricket | 687 } // namespace cricket |
OLD | NEW |