PR: 2602
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de> Reviewed by: steve Fix DTLS bug which prevents manual MTU setting
This commit is contained in:
parent
0b96f60a56
commit
8f0968850b
4 changed files with 15 additions and 6 deletions
|
@ -158,7 +158,6 @@ static unsigned char bitmask_end_values[] = {0xff, 0x01, 0x03, 0x07, 0x0f, 0x1
|
||||||
/* XDTLS: figure out the right values */
|
/* XDTLS: figure out the right values */
|
||||||
static unsigned int g_probable_mtu[] = {1500 - 28, 512 - 28, 256 - 28};
|
static unsigned int g_probable_mtu[] = {1500 - 28, 512 - 28, 256 - 28};
|
||||||
|
|
||||||
static unsigned int dtls1_min_mtu(void);
|
|
||||||
static unsigned int dtls1_guess_mtu(unsigned int curr_mtu);
|
static unsigned int dtls1_guess_mtu(unsigned int curr_mtu);
|
||||||
static void dtls1_fix_message_header(SSL *s, unsigned long frag_off,
|
static void dtls1_fix_message_header(SSL *s, unsigned long frag_off,
|
||||||
unsigned long frag_len);
|
unsigned long frag_len);
|
||||||
|
@ -264,11 +263,10 @@ int dtls1_do_write(SSL *s, int type)
|
||||||
return ret;
|
return ret;
|
||||||
mtu = s->d1->mtu - (DTLS1_HM_HEADER_LENGTH + DTLS1_RT_HEADER_LENGTH);
|
mtu = s->d1->mtu - (DTLS1_HM_HEADER_LENGTH + DTLS1_RT_HEADER_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
OPENSSL_assert(mtu > 0); /* should have something reasonable now */
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
OPENSSL_assert(s->d1->mtu >= dtls1_min_mtu()); /* should have something reasonable now */
|
||||||
|
|
||||||
if ( s->init_off == 0 && type == SSL3_RT_HANDSHAKE)
|
if ( s->init_off == 0 && type == SSL3_RT_HANDSHAKE)
|
||||||
OPENSSL_assert(s->init_num ==
|
OPENSSL_assert(s->init_num ==
|
||||||
(int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH);
|
(int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH);
|
||||||
|
@ -1367,7 +1365,7 @@ dtls1_write_message_header(SSL *s, unsigned char *p)
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int
|
unsigned int
|
||||||
dtls1_min_mtu(void)
|
dtls1_min_mtu(void)
|
||||||
{
|
{
|
||||||
return (g_probable_mtu[(sizeof(g_probable_mtu) /
|
return (g_probable_mtu[(sizeof(g_probable_mtu) /
|
||||||
|
|
|
@ -204,7 +204,8 @@ void dtls1_clear(SSL *s)
|
||||||
pqueue buffered_messages;
|
pqueue buffered_messages;
|
||||||
pqueue sent_messages;
|
pqueue sent_messages;
|
||||||
pqueue buffered_app_data;
|
pqueue buffered_app_data;
|
||||||
|
unsigned int mtu;
|
||||||
|
|
||||||
if (s->d1)
|
if (s->d1)
|
||||||
{
|
{
|
||||||
unprocessed_rcds = s->d1->unprocessed_rcds.q;
|
unprocessed_rcds = s->d1->unprocessed_rcds.q;
|
||||||
|
@ -212,6 +213,7 @@ void dtls1_clear(SSL *s)
|
||||||
buffered_messages = s->d1->buffered_messages;
|
buffered_messages = s->d1->buffered_messages;
|
||||||
sent_messages = s->d1->sent_messages;
|
sent_messages = s->d1->sent_messages;
|
||||||
buffered_app_data = s->d1->buffered_app_data.q;
|
buffered_app_data = s->d1->buffered_app_data.q;
|
||||||
|
mtu = s->d1->mtu;
|
||||||
|
|
||||||
dtls1_clear_queues(s);
|
dtls1_clear_queues(s);
|
||||||
|
|
||||||
|
@ -222,6 +224,11 @@ void dtls1_clear(SSL *s)
|
||||||
s->d1->cookie_len = sizeof(s->d1->cookie);
|
s->d1->cookie_len = sizeof(s->d1->cookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)
|
||||||
|
{
|
||||||
|
s->d1->mtu = mtu;
|
||||||
|
}
|
||||||
|
|
||||||
s->d1->unprocessed_rcds.q = unprocessed_rcds;
|
s->d1->unprocessed_rcds.q = unprocessed_rcds;
|
||||||
s->d1->processed_rcds.q = processed_rcds;
|
s->d1->processed_rcds.q = processed_rcds;
|
||||||
s->d1->buffered_messages = buffered_messages;
|
s->d1->buffered_messages = buffered_messages;
|
||||||
|
|
|
@ -1054,6 +1054,9 @@ long SSL_ctrl(SSL *s,int cmd,long larg,void *parg)
|
||||||
s->max_cert_list=larg;
|
s->max_cert_list=larg;
|
||||||
return(l);
|
return(l);
|
||||||
case SSL_CTRL_SET_MTU:
|
case SSL_CTRL_SET_MTU:
|
||||||
|
if (larg < dtls1_min_mtu())
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (SSL_version(s) == DTLS1_VERSION ||
|
if (SSL_version(s) == DTLS1_VERSION ||
|
||||||
SSL_version(s) == DTLS1_BAD_VER)
|
SSL_version(s) == DTLS1_BAD_VER)
|
||||||
{
|
{
|
||||||
|
|
|
@ -950,6 +950,7 @@ void dtls1_stop_timer(SSL *s);
|
||||||
int dtls1_is_timer_expired(SSL *s);
|
int dtls1_is_timer_expired(SSL *s);
|
||||||
void dtls1_double_timeout(SSL *s);
|
void dtls1_double_timeout(SSL *s);
|
||||||
int dtls1_send_newsession_ticket(SSL *s);
|
int dtls1_send_newsession_ticket(SSL *s);
|
||||||
|
unsigned int dtls1_min_mtu(void);
|
||||||
|
|
||||||
/* some client-only functions */
|
/* some client-only functions */
|
||||||
int ssl3_client_hello(SSL *s);
|
int ssl3_client_hello(SSL *s);
|
||||||
|
|
Loading…
Reference in a new issue