summaryrefslogtreecommitdiffstats
path: root/ssl/d1_lib.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2009-09-09 17:05:42 +0000
committerDr. Stephen Henson <steve@openssl.org>2009-09-09 17:05:42 +0000
commit53f062d0503e4f18e0a08c172df17c5ce5049e7a (patch)
tree02b41db26faa87a9276726e0ad797a4748642276 /ssl/d1_lib.c
parentb5b65403a4987ecb8b9d23754a3153df476fdfc0 (diff)
PR: 2033
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de> Approved by: steve@openssl.org DTLS listen support.
Diffstat (limited to 'ssl/d1_lib.c')
-rw-r--r--ssl/d1_lib.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c
index 6392ba12f4..eeffce3ccc 100644
--- a/ssl/d1_lib.c
+++ b/ssl/d1_lib.c
@@ -68,6 +68,7 @@
static void get_current_time(struct timeval *t);
const char dtls1_version_str[]="DTLSv1" OPENSSL_VERSION_PTEXT;
+int dtls1_listen(SSL *s, struct sockaddr *client);
SSL3_ENC_METHOD DTLSv1_enc_data={
dtls1_enc,
@@ -203,6 +204,9 @@ long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
case DTLS_CTRL_HANDLE_TIMEOUT:
ret = dtls1_handle_timeout(s);
break;
+ case DTLS_CTRL_LISTEN:
+ ret = dtls1_listen(s, parg);
+ break;
default:
ret = ssl3_ctrl(s, cmd, larg, parg);
@@ -364,3 +368,17 @@ static void get_current_time(struct timeval *t)
gettimeofday(t, NULL);
#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;
+ }