|
@@ -480,9 +480,7 @@ bool DtlsTransport::send(message_ptr message) {
|
|
|
mCurrentDscp = message->dscp;
|
|
|
ret = mbedtls_ssl_write(&mSsl, reinterpret_cast<const unsigned char *>(message->data()),
|
|
|
message->size());
|
|
|
- } while (ret == MBEDTLS_ERR_SSL_WANT_WRITE);
|
|
|
-
|
|
|
- mbedtls::check(ret);
|
|
|
+ } while (!mbedtls::check(ret));
|
|
|
|
|
|
return mOutgoingResult;
|
|
|
}
|
|
@@ -535,7 +533,7 @@ void DtlsTransport::doRecv() {
|
|
|
ret = mbedtls_ssl_handshake(&mSsl);
|
|
|
}
|
|
|
|
|
|
- if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
|
|
|
+ if (ret == MBEDTLS_ERR_SSL_WANT_READ) {
|
|
|
ThreadPool::Instance().schedule(mTimerSetAt + milliseconds(mFinMs),
|
|
|
[weak_this = weak_from_this()]() {
|
|
|
if (auto locked = weak_this.lock())
|
|
@@ -544,17 +542,12 @@ void DtlsTransport::doRecv() {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (ret == MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS ||
|
|
|
- ret == MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS) {
|
|
|
- continue;
|
|
|
+ if(mbedtls::check(ret, "Handshake failed")) {
|
|
|
+ PLOG_INFO << "DTLS handshake finished";
|
|
|
+ changeState(State::Connected);
|
|
|
+ postHandshake();
|
|
|
+ break;
|
|
|
}
|
|
|
-
|
|
|
- mbedtls::check(ret, "Handshake failed");
|
|
|
-
|
|
|
- PLOG_INFO << "DTLS handshake finished";
|
|
|
- changeState(State::Connected);
|
|
|
- postHandshake();
|
|
|
- break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -567,25 +560,23 @@ void DtlsTransport::doRecv() {
|
|
|
bufferSize);
|
|
|
}
|
|
|
|
|
|
- if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
|
|
|
+ if (ret == MBEDTLS_ERR_SSL_WANT_READ) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (ret == MBEDTLS_ERR_SSL_ASYNC_IN_PROGRESS ||
|
|
|
- ret == MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if (ret == 0 || ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
|
|
|
- // Closed
|
|
|
+ if (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) {
|
|
|
PLOG_DEBUG << "DTLS connection cleanly closed";
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- mbedtls::check(ret);
|
|
|
-
|
|
|
- auto *b = reinterpret_cast<byte *>(buffer);
|
|
|
- recv(make_message(b, b + ret));
|
|
|
+ if(mbedtls::check(ret)) {
|
|
|
+ if(ret == 0) {
|
|
|
+ PLOG_DEBUG << "DTLS connection terminated";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ auto *b = reinterpret_cast<byte *>(buffer);
|
|
|
+ recv(make_message(b, b + ret));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
} catch (const std::exception &e) {
|