Lines Matching refs:s

17 static int dtls1_handshake_write(SSL *s);
67 int dtls1_new(SSL *s) in dtls1_new() argument
71 if (!DTLS_RECORD_LAYER_new(&s->rlayer)) { in dtls1_new()
75 if (!ssl3_new(s)) in dtls1_new()
78 ssl3_free(s); in dtls1_new()
85 if (s->server) { in dtls1_new()
86 d1->cookie_len = sizeof(s->d1->cookie); in dtls1_new()
96 ssl3_free(s); in dtls1_new()
100 s->d1 = d1; in dtls1_new()
102 if (!s->method->ssl_clear(s)) in dtls1_new()
108 static void dtls1_clear_queues(SSL *s) in dtls1_clear_queues() argument
110 dtls1_clear_received_buffer(s); in dtls1_clear_queues()
111 dtls1_clear_sent_buffer(s); in dtls1_clear_queues()
114 void dtls1_clear_received_buffer(SSL *s) in dtls1_clear_received_buffer() argument
119 while ((item = pqueue_pop(s->d1->buffered_messages)) != NULL) { in dtls1_clear_received_buffer()
126 void dtls1_clear_sent_buffer(SSL *s) in dtls1_clear_sent_buffer() argument
131 while ((item = pqueue_pop(s->d1->sent_messages)) != NULL) { in dtls1_clear_sent_buffer()
139 void dtls1_free(SSL *s) in dtls1_free() argument
141 DTLS_RECORD_LAYER_free(&s->rlayer); in dtls1_free()
143 ssl3_free(s); in dtls1_free()
145 if (s->d1 != NULL) { in dtls1_free()
146 dtls1_clear_queues(s); in dtls1_free()
147 pqueue_free(s->d1->buffered_messages); in dtls1_free()
148 pqueue_free(s->d1->sent_messages); in dtls1_free()
151 OPENSSL_free(s->d1); in dtls1_free()
152 s->d1 = NULL; in dtls1_free()
155 int dtls1_clear(SSL *s) in dtls1_clear() argument
162 DTLS_RECORD_LAYER_clear(&s->rlayer); in dtls1_clear()
164 if (s->d1) { in dtls1_clear()
165 DTLS_timer_cb timer_cb = s->d1->timer_cb; in dtls1_clear()
167 buffered_messages = s->d1->buffered_messages; in dtls1_clear()
168 sent_messages = s->d1->sent_messages; in dtls1_clear()
169 mtu = s->d1->mtu; in dtls1_clear()
170 link_mtu = s->d1->link_mtu; in dtls1_clear()
172 dtls1_clear_queues(s); in dtls1_clear()
174 memset(s->d1, 0, sizeof(*s->d1)); in dtls1_clear()
177 s->d1->timer_cb = timer_cb; in dtls1_clear()
179 if (s->server) { in dtls1_clear()
180 s->d1->cookie_len = sizeof(s->d1->cookie); in dtls1_clear()
183 if (SSL_get_options(s) & SSL_OP_NO_QUERY_MTU) { in dtls1_clear()
184 s->d1->mtu = mtu; in dtls1_clear()
185 s->d1->link_mtu = link_mtu; in dtls1_clear()
188 s->d1->buffered_messages = buffered_messages; in dtls1_clear()
189 s->d1->sent_messages = sent_messages; in dtls1_clear()
192 if (!ssl3_clear(s)) in dtls1_clear()
195 if (s->method->version == DTLS_ANY_VERSION) in dtls1_clear()
196 s->version = DTLS_MAX_VERSION_INTERNAL; in dtls1_clear()
198 else if (s->options & SSL_OP_CISCO_ANYCONNECT) in dtls1_clear()
199 s->client_version = s->version = DTLS1_BAD_VER; in dtls1_clear()
202 s->version = s->method->version; in dtls1_clear()
207 long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg) in dtls1_ctrl() argument
213 if (dtls1_get_timeout(s, (struct timeval *)parg) != NULL) { in dtls1_ctrl()
218 ret = dtls1_handle_timeout(s); in dtls1_ctrl()
223 s->d1->link_mtu = larg; in dtls1_ctrl()
234 s->d1->mtu = larg; in dtls1_ctrl()
237 ret = ssl3_ctrl(s, cmd, larg, parg); in dtls1_ctrl()
243 void dtls1_start_timer(SSL *s) in dtls1_start_timer() argument
249 if (BIO_dgram_is_sctp(SSL_get_wbio(s))) { in dtls1_start_timer()
250 memset(&s->d1->next_timeout, 0, sizeof(s->d1->next_timeout)); in dtls1_start_timer()
259 if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) { in dtls1_start_timer()
261 if (s->d1->timer_cb != NULL) in dtls1_start_timer()
262 s->d1->timeout_duration_us = s->d1->timer_cb(s, 0); in dtls1_start_timer()
264 s->d1->timeout_duration_us = 1000000; in dtls1_start_timer()
268 get_current_time(&(s->d1->next_timeout)); in dtls1_start_timer()
272 sec = s->d1->timeout_duration_us / 1000000; in dtls1_start_timer()
273 usec = s->d1->timeout_duration_us - (sec * 1000000); in dtls1_start_timer()
275 s->d1->next_timeout.tv_sec += sec; in dtls1_start_timer()
276 s->d1->next_timeout.tv_usec += usec; in dtls1_start_timer()
278 if (s->d1->next_timeout.tv_usec >= 1000000) { in dtls1_start_timer()
279 s->d1->next_timeout.tv_sec++; in dtls1_start_timer()
280 s->d1->next_timeout.tv_usec -= 1000000; in dtls1_start_timer()
283 BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, in dtls1_start_timer()
284 &(s->d1->next_timeout)); in dtls1_start_timer()
287 struct timeval *dtls1_get_timeout(SSL *s, struct timeval *timeleft) in dtls1_get_timeout() argument
292 if (s->d1->next_timeout.tv_sec == 0 && s->d1->next_timeout.tv_usec == 0) { in dtls1_get_timeout()
300 if (s->d1->next_timeout.tv_sec < timenow.tv_sec || in dtls1_get_timeout()
301 (s->d1->next_timeout.tv_sec == timenow.tv_sec && in dtls1_get_timeout()
302 s->d1->next_timeout.tv_usec <= timenow.tv_usec)) { in dtls1_get_timeout()
308 memcpy(timeleft, &(s->d1->next_timeout), sizeof(struct timeval)); in dtls1_get_timeout()
327 int dtls1_is_timer_expired(SSL *s) in dtls1_is_timer_expired() argument
332 if (dtls1_get_timeout(s, &timeleft) == NULL) { in dtls1_is_timer_expired()
345 static void dtls1_double_timeout(SSL *s) in dtls1_double_timeout() argument
347 s->d1->timeout_duration_us *= 2; in dtls1_double_timeout()
348 if (s->d1->timeout_duration_us > 60000000) in dtls1_double_timeout()
349 s->d1->timeout_duration_us = 60000000; in dtls1_double_timeout()
352 void dtls1_stop_timer(SSL *s) in dtls1_stop_timer() argument
355 s->d1->timeout_num_alerts = 0; in dtls1_stop_timer()
356 memset(&s->d1->next_timeout, 0, sizeof(s->d1->next_timeout)); in dtls1_stop_timer()
357 s->d1->timeout_duration_us = 1000000; in dtls1_stop_timer()
358 BIO_ctrl(SSL_get_rbio(s), BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT, 0, in dtls1_stop_timer()
359 &(s->d1->next_timeout)); in dtls1_stop_timer()
361 dtls1_clear_sent_buffer(s); in dtls1_stop_timer()
364 int dtls1_check_timeout_num(SSL *s) in dtls1_check_timeout_num() argument
368 s->d1->timeout_num_alerts++; in dtls1_check_timeout_num()
371 if (s->d1->timeout_num_alerts > 2 in dtls1_check_timeout_num()
372 && !(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) { in dtls1_check_timeout_num()
374 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_GET_FALLBACK_MTU, 0, NULL); in dtls1_check_timeout_num()
375 if (mtu < s->d1->mtu) in dtls1_check_timeout_num()
376 s->d1->mtu = mtu; in dtls1_check_timeout_num()
379 if (s->d1->timeout_num_alerts > DTLS1_TMO_ALERT_COUNT) { in dtls1_check_timeout_num()
381 SSLfatal(s, SSL_AD_NO_ALERT, SSL_R_READ_TIMEOUT_EXPIRED); in dtls1_check_timeout_num()
388 int dtls1_handle_timeout(SSL *s) in dtls1_handle_timeout() argument
391 if (!dtls1_is_timer_expired(s)) { in dtls1_handle_timeout()
395 if (s->d1->timer_cb != NULL) in dtls1_handle_timeout()
396 s->d1->timeout_duration_us = s->d1->timer_cb(s, s->d1->timeout_duration_us); in dtls1_handle_timeout()
398 dtls1_double_timeout(s); in dtls1_handle_timeout()
400 if (dtls1_check_timeout_num(s) < 0) { in dtls1_handle_timeout()
405 dtls1_start_timer(s); in dtls1_handle_timeout()
407 return dtls1_retransmit_buffered_messages(s); in dtls1_handle_timeout()
440 int DTLSv1_listen(SSL *s, BIO_ADDR *client) in DTLSv1_listen() argument
453 if (s->handshake_func == NULL) { in DTLSv1_listen()
455 SSL_set_accept_state(s); in DTLSv1_listen()
459 if (!SSL_clear(s)) in DTLSv1_listen()
464 rbio = SSL_get_rbio(s); in DTLSv1_listen()
465 wbio = SSL_get_wbio(s); in DTLSv1_listen()
479 if ((s->version & 0xff00) != (DTLS1_VERSION & 0xff00)) { in DTLSv1_listen()
484 if (!ssl3_setup_buffers(s)) { in DTLSv1_listen()
488 buf = RECORD_LAYER_get_rbuf(&s->rlayer)->buf; in DTLSv1_listen()
489 wbuf = RECORD_LAYER_get_wbuf(&s->rlayer)[0].buf; in DTLSv1_listen()
538 if (s->msg_callback) in DTLSv1_listen()
539 s->msg_callback(0, 0, SSL3_RT_HEADER, buf, in DTLSv1_listen()
540 DTLS1_RT_HEADER_LENGTH, s, s->msg_callback_arg); in DTLSv1_listen()
621 if (s->msg_callback) in DTLSv1_listen()
622 s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, data, in DTLSv1_listen()
623 fraglen + DTLS1_HM_HEADER_LENGTH, s, in DTLSv1_listen()
624 s->msg_callback_arg); in DTLSv1_listen()
634 if (DTLS_VERSION_LT(clientvers, (unsigned int)s->method->version) && in DTLSv1_listen()
635 s->method->version != DTLS_ANY_VERSION) { in DTLSv1_listen()
661 if (s->ctx->app_verify_cookie_cb == NULL) { in DTLSv1_listen()
666 if (s->ctx->app_verify_cookie_cb(s, PACKET_data(&cookiepkt), in DTLSv1_listen()
691 if (s->ctx->app_gen_cookie_cb == NULL || in DTLSv1_listen()
692 s->ctx->app_gen_cookie_cb(s, cookie, &cookielen) == 0 || in DTLSv1_listen()
704 version = (s->method->version == DTLS_ANY_VERSION) ? DTLS1_VERSION in DTLSv1_listen()
705 : s->version; in DTLSv1_listen()
710 ssl_get_max_send_fragment(s) in DTLSv1_listen()
774 if (s->msg_callback) in DTLSv1_listen()
775 s->msg_callback(1, 0, SSL3_RT_HEADER, buf, in DTLSv1_listen()
776 DTLS1_RT_HEADER_LENGTH, s, s->msg_callback_arg); in DTLSv1_listen()
821 s->d1->handshake_read_seq = 1; in DTLSv1_listen()
822 s->d1->handshake_write_seq = 1; in DTLSv1_listen()
823 s->d1->next_handshake_write_seq = 1; in DTLSv1_listen()
824 DTLS_RECORD_LAYER_set_write_sequence(&s->rlayer, seq); in DTLSv1_listen()
830 SSL_set_options(s, SSL_OP_COOKIE_EXCHANGE); in DTLSv1_listen()
836 ossl_statem_set_hello_verify_done(s); in DTLSv1_listen()
845 if (!dtls_buffer_listen_record(s, reclen, seq, align)) in DTLSv1_listen()
855 static int dtls1_handshake_write(SSL *s) in dtls1_handshake_write() argument
857 return dtls1_do_write(s, SSL3_RT_HANDSHAKE); in dtls1_handshake_write()
860 int dtls1_shutdown(SSL *s) in dtls1_shutdown() argument
866 wbio = SSL_get_wbio(s); in dtls1_shutdown()
868 !(s->shutdown & SSL_SENT_SHUTDOWN)) { in dtls1_shutdown()
874 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN, 1, in dtls1_shutdown()
878 ret = ssl3_shutdown(s); in dtls1_shutdown()
880 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN, 0, NULL); in dtls1_shutdown()
885 int dtls1_query_mtu(SSL *s) in dtls1_query_mtu() argument
887 if (s->d1->link_mtu) { in dtls1_query_mtu()
888 s->d1->mtu = in dtls1_query_mtu()
889 s->d1->link_mtu - BIO_dgram_get_mtu_overhead(SSL_get_wbio(s)); in dtls1_query_mtu()
890 s->d1->link_mtu = 0; in dtls1_query_mtu()
894 if (s->d1->mtu < dtls1_min_mtu(s)) { in dtls1_query_mtu()
895 if (!(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) { in dtls1_query_mtu()
896 s->d1->mtu = in dtls1_query_mtu()
897 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); in dtls1_query_mtu()
903 if (s->d1->mtu < dtls1_min_mtu(s)) { in dtls1_query_mtu()
905 s->d1->mtu = dtls1_min_mtu(s); in dtls1_query_mtu()
906 BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SET_MTU, in dtls1_query_mtu()
907 (long)s->d1->mtu, NULL); in dtls1_query_mtu()
921 size_t dtls1_min_mtu(SSL *s) in dtls1_min_mtu() argument
923 return dtls1_link_min_mtu() - BIO_dgram_get_mtu_overhead(SSL_get_wbio(s)); in dtls1_min_mtu()
926 size_t DTLS_get_data_mtu(const SSL *s) in DTLS_get_data_mtu() argument
929 const SSL_CIPHER *ciph = SSL_get_current_cipher(s); in DTLS_get_data_mtu()
930 size_t mtu = s->d1->mtu; in DTLS_get_data_mtu()
939 if (SSL_READ_ETM(s)) in DTLS_get_data_mtu()
962 void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb) in DTLS_set_timer_cb() argument
964 s->d1->timer_cb = cb; in DTLS_set_timer_cb()