PR: 2033
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de> Approved by: steve@openssl.org DTLS listen support.
This commit is contained in:
parent
b5b65403a4
commit
53f062d050
18
ssl/d1_lib.c
18
ssl/d1_lib.c
@ -68,6 +68,7 @@
|
|||||||
|
|
||||||
static void get_current_time(struct timeval *t);
|
static void get_current_time(struct timeval *t);
|
||||||
const char dtls1_version_str[]="DTLSv1" OPENSSL_VERSION_PTEXT;
|
const char dtls1_version_str[]="DTLSv1" OPENSSL_VERSION_PTEXT;
|
||||||
|
int dtls1_listen(SSL *s, struct sockaddr *client);
|
||||||
|
|
||||||
SSL3_ENC_METHOD DTLSv1_enc_data={
|
SSL3_ENC_METHOD DTLSv1_enc_data={
|
||||||
dtls1_enc,
|
dtls1_enc,
|
||||||
@ -203,6 +204,9 @@ long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
|
|||||||
case DTLS_CTRL_HANDLE_TIMEOUT:
|
case DTLS_CTRL_HANDLE_TIMEOUT:
|
||||||
ret = dtls1_handle_timeout(s);
|
ret = dtls1_handle_timeout(s);
|
||||||
break;
|
break;
|
||||||
|
case DTLS_CTRL_LISTEN:
|
||||||
|
ret = dtls1_listen(s, parg);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = ssl3_ctrl(s, cmd, larg, parg);
|
ret = ssl3_ctrl(s, cmd, larg, parg);
|
||||||
@ -364,3 +368,17 @@ static void get_current_time(struct timeval *t)
|
|||||||
gettimeofday(t, NULL);
|
gettimeofday(t, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int dtls1_listen(SSL *s, struct sockaddr *client)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
SSL_set_options(s, SSL_OP_COOKIE_EXCHANGE);
|
||||||
|
s->d1->listen = 1;
|
||||||
|
|
||||||
|
ret = SSL_accept(s);
|
||||||
|
if (ret <= 0) return ret;
|
||||||
|
|
||||||
|
(void) BIO_dgram_get_peer(SSL_get_rbio(s), client);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
@ -274,6 +274,15 @@ int dtls1_accept(SSL *s)
|
|||||||
s->state = SSL3_ST_SW_SRVR_HELLO_A;
|
s->state = SSL3_ST_SW_SRVR_HELLO_A;
|
||||||
|
|
||||||
s->init_num=0;
|
s->init_num=0;
|
||||||
|
|
||||||
|
/* If we're just listening, stop here */
|
||||||
|
if (s->d1->listen && s->state == SSL3_ST_SW_SRVR_HELLO_A)
|
||||||
|
{
|
||||||
|
ret = 2;
|
||||||
|
s->d1->listen = 0;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
|
case DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A:
|
||||||
|
@ -216,6 +216,9 @@ typedef struct dtls1_state_st
|
|||||||
*/
|
*/
|
||||||
record_pqueue buffered_app_data;
|
record_pqueue buffered_app_data;
|
||||||
|
|
||||||
|
/* Is set when listening for new connections with dtls1_listen() */
|
||||||
|
unsigned int listen;
|
||||||
|
|
||||||
unsigned int mtu; /* max DTLS packet size */
|
unsigned int mtu; /* max DTLS packet size */
|
||||||
|
|
||||||
struct hm_header_st w_msg_hdr;
|
struct hm_header_st w_msg_hdr;
|
||||||
|
@ -1398,11 +1398,14 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
|
|||||||
|
|
||||||
#define DTLS_CTRL_GET_TIMEOUT 73
|
#define DTLS_CTRL_GET_TIMEOUT 73
|
||||||
#define DTLS_CTRL_HANDLE_TIMEOUT 74
|
#define DTLS_CTRL_HANDLE_TIMEOUT 74
|
||||||
|
#define DTLS_CTRL_LISTEN 75
|
||||||
|
|
||||||
#define DTLSv1_get_timeout(ssl, arg) \
|
#define DTLSv1_get_timeout(ssl, arg) \
|
||||||
SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg)
|
SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg)
|
||||||
#define DTLSv1_handle_timeout(ssl) \
|
#define DTLSv1_handle_timeout(ssl) \
|
||||||
SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL)
|
SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL)
|
||||||
|
#define DTLSv1_listen(ssl, peer) \
|
||||||
|
SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer)
|
||||||
|
|
||||||
#define SSL_session_reused(ssl) \
|
#define SSL_session_reused(ssl) \
|
||||||
SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)
|
SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user