avformat/whip: remove DTLSState enum

This patch aims to simplify the dtls handshake process
since dtls handshake use force block mode

We can just use the return code instead of DTLSState enum

Signed-off-by: Jack Lau <jacklau1222@qq.com>
This commit is contained in:
Jack Lau 2025-07-21 15:47:37 +08:00 committed by stevenliu
parent 50affd2b09
commit 37507c6a78
4 changed files with 13 additions and 77 deletions

View file

@ -34,17 +34,6 @@
*/
#define MAX_CERTIFICATE_SIZE 8192
enum DTLSState {
DTLS_STATE_NONE,
/* Whether DTLS handshake is finished. */
DTLS_STATE_FINISHED,
/* Whether DTLS session is closed. */
DTLS_STATE_CLOSED,
/* Whether DTLS handshake is failed. */
DTLS_STATE_FAILED,
};
typedef struct TLSShared {
char *ca_file;
int verify;
@ -65,8 +54,6 @@ typedef struct TLSShared {
int is_dtls;
int use_srtp;
enum DTLSState state;
/* The certificate and private key content used for DTLS handshake */
char* cert_buf;
char* key_buf;
@ -112,8 +99,6 @@ int ff_tls_set_external_socket(URLContext *h, URLContext *sock);
int ff_dtls_export_materials(URLContext *h, char *dtls_srtp_materials, size_t materials_sz);
int ff_dtls_state(URLContext *h);
int ff_ssl_read_key_cert(char *key_url, char *cert_url, char *key_buf, size_t key_sz, char *cert_buf, size_t cert_sz, char **fingerprint);
int ff_ssl_gen_key_cert(char *key_buf, size_t key_sz, char *cert_buf, size_t cert_sz, char **fingerprint);

View file

@ -476,12 +476,6 @@ int ff_dtls_export_materials(URLContext *h, char *dtls_srtp_materials, size_t ma
return 0;
}
int ff_dtls_state(URLContext *h)
{
TLSContext *c = h->priv_data;
return c->tls_shared.state;
}
static int print_ssl_error(URLContext *h, int ret)
{
TLSContext *c = h->priv_data;
@ -656,7 +650,6 @@ static int dtls_handshake(URLContext *h)
goto end;
ret = 0;
c->tls_shared.state = DTLS_STATE_FINISHED;
end:
return ret;
}

View file

@ -681,12 +681,6 @@ int ff_dtls_export_materials(URLContext *h, char *dtls_srtp_materials, size_t ma
#endif
}
int ff_dtls_state(URLContext *h)
{
TLSContext *c = h->priv_data;
return c->tls_shared.state;
}
static void init_sec_buffer(SecBuffer *buffer, unsigned long type,
void *data, unsigned long size)
{
@ -1111,7 +1105,6 @@ static int tls_handshake(URLContext *h)
#endif
c->connected = 1;
s->state = DTLS_STATE_FINISHED;
fail:
return ret;

View file

@ -198,9 +198,6 @@ typedef struct WHIPContext {
/* The state of the RTC connection. */
enum WHIPState state;
/* The callback return value for DTLS. */
int dtls_ret;
int dtls_closed;
/* Parameters for the input audio and video codecs. */
AVCodecParameters *audio_par;
@ -348,41 +345,6 @@ static av_cold int certificate_key_init(AVFormatContext *s)
return ret;
}
/**
* When DTLS state change.
*/
static int dtls_context_on_state(AVFormatContext *s, const char* type, const char* desc)
{
int ret = 0;
WHIPContext *whip = s->priv_data;
int state = ff_dtls_state(whip->dtls_uc);
if (state == DTLS_STATE_CLOSED) {
whip->dtls_closed = 1;
av_log(whip, AV_LOG_VERBOSE, "DTLS session closed, type=%s, desc=%s, elapsed=%dms\n",
type ? type : "", desc ? desc : "", ELAPSED(whip->whip_starttime, av_gettime()));
goto error;
}
if (state == DTLS_STATE_FAILED) {
whip->state = WHIP_STATE_FAILED;
av_log(whip, AV_LOG_ERROR, "DTLS session failed, type=%s, desc=%s\n",
type ? type : "", desc ? desc : "");
whip->dtls_ret = AVERROR(EIO);
goto error;
}
if (state == DTLS_STATE_FINISHED && whip->state < WHIP_STATE_DTLS_FINISHED) {
whip->state = WHIP_STATE_DTLS_FINISHED;
whip->whip_dtls_time = av_gettime();
av_log(whip, AV_LOG_VERBOSE, "DTLS handshake is done, elapsed=%dms\n",
ELAPSED(whip->whip_starttime, av_gettime()));
return ret;
}
error:
return -1;
}
static av_cold int dtls_initialize(AVFormatContext *s)
{
WHIPContext *whip = s->priv_data;
@ -1326,9 +1288,18 @@ next_packet:
/* If got any DTLS messages, handle it. */
if (is_dtls_packet(whip->buf, ret) && whip->state >= WHIP_STATE_ICE_CONNECTED || whip->state == WHIP_STATE_DTLS_CONNECTING) {
whip->state = WHIP_STATE_DTLS_CONNECTING;
if ((ret = ffurl_handshake(whip->dtls_uc)) < 0)
ret = ffurl_handshake(whip->dtls_uc);
if (ret < 0) {
whip->state = WHIP_STATE_FAILED;
av_log(whip, AV_LOG_VERBOSE, "DTLS session failed\n");
goto end;
dtls_context_on_state(s, NULL, NULL);
}
if (!ret) {
whip->state = WHIP_STATE_DTLS_FINISHED;
whip->whip_dtls_time = av_gettime();
av_log(whip, AV_LOG_VERBOSE, "DTLS handshake is done, elapsed=%dms\n",
ELAPSED(whip->whip_starttime, whip->whip_dtls_time));
}
goto next_packet;
}
}
@ -1771,10 +1742,8 @@ static av_cold int whip_init(AVFormatContext *s)
goto end;
end:
if (ret < 0 && whip->state < WHIP_STATE_FAILED)
if (ret < 0)
whip->state = WHIP_STATE_FAILED;
if (ret >= 0 && whip->state >= WHIP_STATE_FAILED && whip->dtls_ret < 0)
ret = whip->dtls_ret;
return ret;
}
@ -1822,12 +1791,8 @@ static int whip_write_packet(AVFormatContext *s, AVPacket *pkt)
}
end:
if (ret < 0 && whip->state < WHIP_STATE_FAILED)
if (ret < 0)
whip->state = WHIP_STATE_FAILED;
if (ret >= 0 && whip->state >= WHIP_STATE_FAILED && whip->dtls_ret < 0)
ret = whip->dtls_ret;
if (ret >= 0 && whip->dtls_closed)
ret = AVERROR(EIO);
return ret;
}