libcoap  4.3.1
coap_dtls_internal.h
Go to the documentation of this file.
1 /*
2  * coap_dtls_internal.h -- (Datagram) Transport Layer Support for libcoap
3  *
4  * Copyright (C) 2016 Olaf Bergmann <bergmann@tzi.org>
5  * Copyright (C) 2017 Jean-Claude Michelou <jcm@spinetix.com>
6  *
7  * SPDX-License-Identifier: BSD-2-Clause
8  *
9  * This file is part of the CoAP library libcoap. Please see README for terms
10  * of use.
11  */
12 
18 #ifndef COAP_DTLS_INTERNAL_H_
19 #define COAP_DTLS_INTERNAL_H_
20 
21 #include "coap_internal.h"
22 
30 /* https://tools.ietf.org/html/rfc6347#section-4.2.4.1 */
31 #ifndef COAP_DTLS_RETRANSMIT_MS
32 #define COAP_DTLS_RETRANSMIT_MS 1000
33 #endif
34 #ifndef COAP_DTLS_RETRANSMIT_TOTAL_MS
35 #define COAP_DTLS_RETRANSMIT_TOTAL_MS 60000
36 #endif
37 
38 #define COAP_DTLS_RETRANSMIT_COAP_TICKS (COAP_DTLS_RETRANSMIT_MS * COAP_TICKS_PER_SECOND / 1000)
39 
48 void *
50 
51 #if COAP_SERVER_SUPPORT
63 int
65  coap_dtls_spsk_t *setup_data);
66 #endif /* COAP_SERVER_SUPPORT */
67 
68 #if COAP_CLIENT_SUPPORT
80 int
82  coap_dtls_cpsk_t *setup_data);
83 #endif /* COAP_CLIENT_SUPPORT */
84 
102 int
104  const coap_dtls_pki_t *setup_data,
105  const coap_dtls_role_t role);
106 
119 int
121  const char *ca_file,
122  const char *ca_dir);
123 
134 
140 void coap_dtls_free_context(void *dtls_context);
141 
142 #if COAP_CLIENT_SUPPORT
152 #endif /* COAP_CLIENT_SUPPORT */
153 
154 #if COAP_SERVER_SUPPORT
167 #endif /* COAP_SERVER_SUPPORT */
168 
176 
184 
195 int coap_dtls_send(coap_session_t *coap_session,
196  const uint8_t *data,
197  size_t data_len);
198 
206 
215 
225  coap_tick_t now);
226 
235 
247  const uint8_t *data,
248  size_t data_len);
249 
250 #if COAP_SERVER_SUPPORT
263 int coap_dtls_hello(coap_session_t *coap_session,
264  const uint8_t *data,
265  size_t data_len);
266 #endif /* COAP_SERVER_SUPPORT */
267 
275 unsigned int coap_dtls_get_overhead(coap_session_t *coap_session);
276 
277 #if COAP_CLIENT_SUPPORT
288 void *coap_tls_new_client_session(coap_session_t *coap_session, int *connected);
289 #endif /* COAP_CLIENT_SUPPORT */
290 
291 #if COAP_SERVER_SUPPORT
302 void *coap_tls_new_server_session(coap_session_t *coap_session, int *connected);
303 #endif /* COAP_SERVER_SUPPORT */
304 
311 void coap_tls_free_session( coap_session_t *coap_session );
312 
323 ssize_t coap_tls_write(coap_session_t *coap_session,
324  const uint8_t *data,
325  size_t data_len
326  );
327 
338 ssize_t coap_tls_read(coap_session_t *coap_session,
339  uint8_t *data,
340  size_t data_len
341  );
342 
351  const coap_session_t *coap_session);
352 
361  const coap_session_t *coap_session);
362 
371  const coap_session_t *coap_session);
372 
381  const coap_session_t *coap_session);
382 
387 void coap_dtls_startup(void);
388 
393 void coap_dtls_shutdown(void);
394 
403 void *coap_dtls_get_tls(const coap_session_t *session,
404  coap_tls_library_t *tls_lib);
405 
408 #endif /* COAP_DTLS_INTERNAL_H */
Pulls together all the internal only header files.
uint64_t coap_tick_t
This data type represents internal timer ticks with COAP_TICKS_PER_SECOND resolution.
Definition: coap_time.h:127
void coap_tls_free_session(coap_session_t *coap_session)
Terminates the TLS session (may send an ALERT if necessary) then frees the underlying TLS library obj...
const coap_bin_const_t * coap_get_session_client_psk_identity(const coap_session_t *coap_session)
Get the current client's PSK identity.
Definition: net.c:318
coap_tick_t coap_dtls_get_context_timeout(void *dtls_context)
Do all pending retransmits and get next timeout.
const coap_bin_const_t * coap_get_session_client_psk_key(const coap_session_t *coap_session)
Get the current client's PSK key.
void coap_dtls_startup(void)
Initialize the underlying (D)TLS Library layer.
Definition: coap_notls.c:82
coap_tick_t coap_dtls_get_timeout(coap_session_t *coap_session, coap_tick_t now)
Get next timeout for this session.
void coap_dtls_session_update_mtu(coap_session_t *coap_session)
Notify of a change in the CoAP session's MTU, for example after a PMTU update.
unsigned int coap_dtls_get_overhead(coap_session_t *coap_session)
Get DTLS overhead over cleartext PDUs.
ssize_t coap_tls_write(coap_session_t *coap_session, const uint8_t *data, size_t data_len)
Send data to a TLS peer, with implicit flush.
void * coap_tls_new_client_session(coap_session_t *coap_session, int *connected)
Create a new TLS client-side session.
int coap_dtls_send(coap_session_t *coap_session, const uint8_t *data, size_t data_len)
Send data to a DTLS peer.
int coap_dtls_hello(coap_session_t *coap_session, const uint8_t *data, size_t data_len)
Handling client HELLO messages from a new candiate peer.
void * coap_dtls_get_tls(const coap_session_t *session, coap_tls_library_t *tls_lib)
Get the actual (D)TLS object for the session.
void * coap_dtls_new_context(coap_context_t *coap_context)
Creates a new DTLS context for the given coap_context.
void coap_dtls_free_session(coap_session_t *coap_session)
Terminates the DTLS session (may send an ALERT if necessary) then frees the underlying TLS library ob...
int coap_dtls_is_context_timeout(void)
Check if timeout is handled per CoAP session or per CoAP context.
Definition: coap_notls.c:141
int coap_dtls_context_set_cpsk(coap_context_t *coap_context, coap_dtls_cpsk_t *setup_data)
Set the DTLS context's default client PSK information.
int coap_dtls_context_set_spsk(coap_context_t *coap_context, coap_dtls_spsk_t *setup_data)
Set the DTLS context's default server PSK information.
int coap_dtls_handle_timeout(coap_session_t *coap_session)
Handle a DTLS timeout expiration.
int coap_dtls_context_set_pki_root_cas(coap_context_t *coap_context, const char *ca_file, const char *ca_dir)
Set the dtls context's default Root CA information for a client or server.
void coap_dtls_shutdown(void)
Close down the underlying (D)TLS Library layer.
Definition: coap_notls.c:93
ssize_t coap_tls_read(coap_session_t *coap_session, uint8_t *data, size_t data_len)
Read some data from a TLS peer.
const coap_bin_const_t * coap_get_session_server_psk_hint(const coap_session_t *coap_session)
Get the current server's PSK identity hint.
void * coap_dtls_new_client_session(coap_session_t *coap_session)
Create a new client-side session.
int coap_dtls_context_set_pki(coap_context_t *coap_context, const coap_dtls_pki_t *setup_data, const coap_dtls_role_t role)
Set the DTLS context's default server PKI information.
const coap_bin_const_t * coap_get_session_server_psk_key(const coap_session_t *coap_session)
Get the current server's PSK key.
void coap_dtls_free_context(void *dtls_context)
Releases the storage allocated for dtls_context.
void * coap_tls_new_server_session(coap_session_t *coap_session, int *connected)
Create a TLS new server-side session.
void * coap_dtls_new_server_session(coap_session_t *coap_session)
Create a new DTLS server-side session.
int coap_dtls_receive(coap_session_t *coap_session, const uint8_t *data, size_t data_len)
Handling incoming data from a DTLS peer.
int coap_dtls_context_check_keys_enabled(coap_context_t *coap_context)
Check whether one of the coap_dtls_context_set_{psk|pki}() functions have been called.
coap_dtls_role_t
Definition: coap_dtls.h:43
coap_tls_library_t
Definition: coap_dtls.h:64
CoAP binary data definition with const data.
Definition: str.h:64
The CoAP stack's global state is stored in a coap_context_t object.
The structure used for defining the Client PSK setup data to be used.
Definition: coap_dtls.h:350
The structure used for defining the PKI setup data to be used.
Definition: coap_dtls.h:256
The structure used for defining the Server PSK setup data to be used.
Definition: coap_dtls.h:437
Abstraction of virtual session that can be attached to coap_context_t (client) or coap_endpoint_t (se...