• Home
  • Raw
  • Download

Lines Matching refs:session

33 coap_session_set_max_retransmit (coap_session_t *session, unsigned int value) {  in coap_session_set_max_retransmit()  argument
35 session->max_retransmit = value; in coap_session_set_max_retransmit()
37 coap_session_str(session), session->max_retransmit); in coap_session_set_max_retransmit()
42 coap_session_set_ack_timeout (coap_session_t *session, coap_fixed_point_t value) { in coap_session_set_ack_timeout() argument
44 session->ack_timeout = value; in coap_session_set_ack_timeout()
46 coap_session_str(session), session->ack_timeout.integer_part, in coap_session_set_ack_timeout()
47 session->ack_timeout.fractional_part); in coap_session_set_ack_timeout()
52 coap_session_set_ack_random_factor (coap_session_t *session, in coap_session_set_ack_random_factor() argument
55 session->ack_random_factor = value; in coap_session_set_ack_random_factor()
57 coap_session_str(session), session->ack_random_factor.integer_part, in coap_session_set_ack_random_factor()
58 session->ack_random_factor.fractional_part); in coap_session_set_ack_random_factor()
63 coap_session_get_max_retransmit (const coap_session_t *session) { in coap_session_get_max_retransmit() argument
64 return session->max_retransmit; in coap_session_get_max_retransmit()
68 coap_session_get_ack_timeout (const coap_session_t *session) { in coap_session_get_ack_timeout() argument
69 return session->ack_timeout; in coap_session_get_ack_timeout()
73 coap_session_get_ack_random_factor (const coap_session_t *session) { in coap_session_get_ack_random_factor() argument
74 return session->ack_random_factor; in coap_session_get_ack_random_factor()
78 coap_session_reference(coap_session_t *session) { in coap_session_reference() argument
79 ++session->ref; in coap_session_reference()
80 return session; in coap_session_reference()
84 coap_session_release(coap_session_t *session) { in coap_session_release() argument
85 if (session) { in coap_session_release()
87 assert(session->ref > 0); in coap_session_release()
88 if (session->ref > 0) in coap_session_release()
89 --session->ref; in coap_session_release()
90 if (session->ref == 0 && session->type == COAP_SESSION_TYPE_CLIENT) in coap_session_release()
91 coap_session_free(session); in coap_session_release()
95 --session->ref; in coap_session_release()
96 __coverity_negative_sink__(session->ref); in coap_session_release()
98 if (session->ref == 0 && session->type == COAP_SESSION_TYPE_CLIENT) { in coap_session_release()
99 __coverity_free__(session); in coap_session_release()
106 coap_session_set_app_data(coap_session_t *session, void *app_data) { in coap_session_set_app_data() argument
107 assert(session); in coap_session_set_app_data()
108 session->app = app_data; in coap_session_set_app_data()
112 coap_session_get_app_data(const coap_session_t *session) { in coap_session_get_app_data() argument
113 assert(session); in coap_session_get_app_data()
114 return session->app; in coap_session_get_app_data()
122 coap_session_t *session = (coap_session_t*)coap_malloc_type(COAP_SESSION, sizeof(coap_session_t)); in coap_make_session() local
123 if (!session) in coap_make_session()
125 memset(session, 0, sizeof(*session)); in coap_make_session()
126 session->proto = proto; in coap_make_session()
127 session->type = type; in coap_make_session()
129 memcpy(&session->addr_hash, addr_hash, sizeof(session->addr_hash)); in coap_make_session()
131 memset(&session->addr_hash, 0, sizeof(session->addr_hash)); in coap_make_session()
133 coap_address_copy(&session->addr_info.local, local_addr); in coap_make_session()
135 coap_address_init(&session->addr_info.local); in coap_make_session()
137 coap_address_copy(&session->addr_info.remote, remote_addr); in coap_make_session()
139 coap_address_init(&session->addr_info.remote); in coap_make_session()
140 session->ifindex = ifindex; in coap_make_session()
141 session->context = context; in coap_make_session()
142 session->endpoint = endpoint; in coap_make_session()
143 session->block_mode = context->block_mode; in coap_make_session()
145 session->mtu = endpoint->default_mtu; in coap_make_session()
147 session->mtu = COAP_DEFAULT_MTU; in coap_make_session()
149 session->tls_overhead = 29; in coap_make_session()
150 if (session->tls_overhead >= session->mtu) { in coap_make_session()
151 session->tls_overhead = session->mtu; in coap_make_session()
155 session->max_retransmit = COAP_DEFAULT_MAX_RETRANSMIT; in coap_make_session()
156 session->ack_timeout = COAP_DEFAULT_ACK_TIMEOUT; in coap_make_session()
157 session->ack_random_factor = COAP_DEFAULT_ACK_RANDOM_FACTOR; in coap_make_session()
158 session->dtls_event = -1; in coap_make_session()
159 session->last_ping_mid = COAP_INVALID_MID; in coap_make_session()
162 coap_prng((unsigned char *)&session->tx_mid, sizeof(session->tx_mid)); in coap_make_session()
164 return session; in coap_make_session()
167 void coap_session_mfree(coap_session_t *session) { in coap_session_mfree() argument
175 LL_FOREACH_SAFE(session->lg_crcv, cq, etmp) { in coap_session_mfree()
178 if (coap_cancel_observe(session, cq->app_token, COAP_MESSAGE_NON)) { in coap_session_mfree()
180 coap_queue_t *queue = session->context->sendqueue; in coap_session_mfree()
183 if (queue->session == session) { in coap_session_mfree()
191 LL_DELETE(session->lg_crcv, cq); in coap_session_mfree()
192 coap_block_delete_lg_crcv(session, cq); in coap_session_mfree()
195 if (session->partial_pdu) in coap_session_mfree()
196 coap_delete_pdu(session->partial_pdu); in coap_session_mfree()
197 if (session->proto == COAP_PROTO_DTLS) in coap_session_mfree()
198 coap_dtls_free_session(session); in coap_session_mfree()
200 else if (session->proto == COAP_PROTO_TLS) in coap_session_mfree()
201 coap_tls_free_session(session); in coap_session_mfree()
203 if (session->sock.flags != COAP_SOCKET_EMPTY) in coap_session_mfree()
204 coap_socket_close(&session->sock); in coap_session_mfree()
205 if (session->psk_identity) in coap_session_mfree()
206 coap_free(session->psk_identity); in coap_session_mfree()
207 if (session->psk_key) in coap_session_mfree()
208 coap_free(session->psk_key); in coap_session_mfree()
209 if (session->psk_hint) in coap_session_mfree()
210 coap_free(session->psk_hint); in coap_session_mfree()
212 HASH_ITER(hh, session->context->cache, cp, ctmp) { in coap_session_mfree()
214 if (cp->session == session) { in coap_session_mfree()
215 coap_delete_cache_entry(session->context, cp); in coap_session_mfree()
218 LL_FOREACH_SAFE(session->delayqueue, q, tmp) { in coap_session_mfree()
219 if (q->pdu->type==COAP_MESSAGE_CON && session->context && session->context->nack_handler) in coap_session_mfree()
220session->context->nack_handler(session, q->pdu, session->proto == COAP_PROTO_DTLS ? COAP_NACK_TLS_… in coap_session_mfree()
223 LL_FOREACH_SAFE(session->lg_xmit, lq, ltmp) { in coap_session_mfree()
224 LL_DELETE(session->lg_xmit, lq); in coap_session_mfree()
225 coap_block_delete_lg_xmit(session, lq); in coap_session_mfree()
227 LL_FOREACH_SAFE(session->lg_srcv, sq, stmp) { in coap_session_mfree()
228 LL_DELETE(session->lg_srcv, sq); in coap_session_mfree()
229 coap_block_delete_lg_srcv(session, sq); in coap_session_mfree()
233 void coap_session_free(coap_session_t *session) { in coap_session_free() argument
234 if (!session) in coap_session_free()
236 assert(session->ref == 0); in coap_session_free()
237 if (session->ref) in coap_session_free()
239 coap_session_mfree(session); in coap_session_free()
240 if (session->endpoint) { in coap_session_free()
241 if (session->endpoint->sessions) in coap_session_free()
242 SESSIONS_DELETE(session->endpoint->sessions, session); in coap_session_free()
243 } else if (session->context) { in coap_session_free()
244 if (session->context->sessions) in coap_session_free()
245 SESSIONS_DELETE(session->context->sessions, session); in coap_session_free()
247 coap_log(LOG_DEBUG, "***%s: session closed\n", coap_session_str(session)); in coap_session_free()
249 coap_free_type(COAP_SESSION, session); in coap_session_free()
252 size_t coap_session_max_pdu_size(const coap_session_t *session) { in coap_session_max_pdu_size() argument
253 size_t max_with_header = (size_t)(session->mtu - session->tls_overhead); in coap_session_max_pdu_size()
257 if (COAP_PROTO_NOT_RELIABLE(session->proto)) in coap_session_max_pdu_size()
273 void coap_session_set_mtu(coap_session_t *session, unsigned mtu) { in coap_session_set_mtu() argument
278 session->mtu = mtu; in coap_session_set_mtu()
279 if (session->tls_overhead >= session->mtu) { in coap_session_set_mtu()
280 session->tls_overhead = session->mtu; in coap_session_set_mtu()
285 ssize_t coap_session_send(coap_session_t *session, const uint8_t *data, size_t datalen) { in coap_session_send() argument
288 coap_socket_t *sock = &session->sock; in coap_session_send()
290 assert(session->endpoint != NULL); in coap_session_send()
291 sock = &session->endpoint->sock; in coap_session_send()
294 bytes_written = coap_socket_send(sock, session, data, datalen); in coap_session_send()
296 coap_ticks(&session->last_rx_tx); in coap_session_send()
298 coap_session_str(session), datalen); in coap_session_send()
301 coap_session_str(session), datalen); in coap_session_send()
306 ssize_t coap_session_write(coap_session_t *session, const uint8_t *data, size_t datalen) { in coap_session_write() argument
307 ssize_t bytes_written = coap_socket_write(&session->sock, data, datalen); in coap_session_write()
309 coap_ticks(&session->last_rx_tx); in coap_session_write()
311 coap_session_str(session), datalen); in coap_session_write()
314 coap_session_str(session), datalen ); in coap_session_write()
320 coap_session_delay_pdu(coap_session_t *session, coap_pdu_t *pdu, in coap_session_delay_pdu() argument
325 coap_remove_from_queue(&session->context->sendqueue, session, node->id, &removed); in coap_session_delay_pdu()
327 coap_session_release(node->session); in coap_session_delay_pdu()
328 node->session = NULL; in coap_session_delay_pdu()
333 LL_FOREACH(session->delayqueue, q) { in coap_session_delay_pdu()
336 coap_session_str(session), pdu->mid); in coap_session_delay_pdu()
345 if (pdu->type == COAP_MESSAGE_CON && COAP_PROTO_NOT_RELIABLE(session->proto)) { in coap_session_delay_pdu()
349 node->timeout = coap_calc_timeout(session, r); in coap_session_delay_pdu()
352 LL_APPEND(session->delayqueue, node); in coap_session_delay_pdu()
354 coap_session_str(session), node->id); in coap_session_delay_pdu()
359 void coap_session_send_csm(coap_session_t *session) { in coap_session_send_csm() argument
362 assert(COAP_PROTO_RELIABLE(session->proto)); in coap_session_send_csm()
363 coap_log(LOG_DEBUG, "***%s: sending CSM\n", coap_session_str(session)); in coap_session_send_csm()
364 session->state = COAP_SESSION_STATE_CSM; in coap_session_send_csm()
365 session->partial_write = 0; in coap_session_send_csm()
366 if (session->mtu == 0) in coap_session_send_csm()
367 session->mtu = COAP_DEFAULT_MTU; /* base value */ in coap_session_send_csm()
376 || coap_pdu_encode_header(pdu, session->proto) == 0 in coap_session_send_csm()
378 coap_session_disconnected(session, COAP_NACK_NOT_DELIVERABLE); in coap_session_send_csm()
380 ssize_t bytes_written = coap_session_send_pdu(session, pdu); in coap_session_send_csm()
382 coap_session_disconnected(session, COAP_NACK_NOT_DELIVERABLE); in coap_session_send_csm()
389 coap_mid_t coap_session_send_ping(coap_session_t *session) { in coap_session_send_ping() argument
391 if (session->state != COAP_SESSION_STATE_ESTABLISHED) in coap_session_send_ping()
393 if (COAP_PROTO_NOT_RELIABLE(session->proto)) { in coap_session_send_ping()
394 uint16_t mid = coap_new_message_id (session); in coap_session_send_ping()
404 return coap_send_internal(session, ping); in coap_session_send_ping()
407 void coap_session_connected(coap_session_t *session) { in coap_session_connected() argument
408 if (session->state != COAP_SESSION_STATE_ESTABLISHED) { in coap_session_connected()
410 coap_session_str(session)); in coap_session_connected()
411 if (session->state == COAP_SESSION_STATE_CSM) in coap_session_connected()
412 coap_handle_event(session->context, COAP_EVENT_SESSION_CONNECTED, session); in coap_session_connected()
415 session->state = COAP_SESSION_STATE_ESTABLISHED; in coap_session_connected()
416 session->partial_write = 0; in coap_session_connected()
418 if ( session->proto==COAP_PROTO_DTLS) { in coap_session_connected()
419 session->tls_overhead = coap_dtls_get_overhead(session); in coap_session_connected()
420 if (session->tls_overhead >= session->mtu) { in coap_session_connected()
421 session->tls_overhead = session->mtu; in coap_session_connected()
426 while (session->delayqueue && session->state == COAP_SESSION_STATE_ESTABLISHED) { in coap_session_connected()
428 coap_queue_t *q = session->delayqueue; in coap_session_connected()
429 if (q->pdu->type == COAP_MESSAGE_CON && COAP_PROTO_NOT_RELIABLE(session->proto)) { in coap_session_connected()
430 if (session->con_active >= COAP_DEFAULT_NSTART) in coap_session_connected()
432 session->con_active++; in coap_session_connected()
435 session->delayqueue = q->next; in coap_session_connected()
439 coap_session_str(session), (int)q->pdu->mid); in coap_session_connected()
440 bytes_written = coap_session_send_pdu(session, q->pdu); in coap_session_connected()
441 if (q->pdu->type == COAP_MESSAGE_CON && COAP_PROTO_NOT_RELIABLE(session->proto)) { in coap_session_connected()
442 if (coap_wait_ack(session->context, session, q) >= 0) in coap_session_connected()
445 if (COAP_PROTO_NOT_RELIABLE(session->proto)) { in coap_session_connected()
452 q->next = session->delayqueue; in coap_session_connected()
453 session->delayqueue = q; in coap_session_connected()
455 session->partial_write = (size_t)bytes_written; in coap_session_connected()
464 void coap_session_disconnected(coap_session_t *session, coap_nack_reason_t reason) { in coap_session_disconnected() argument
466 coap_session_state_t state = session->state; in coap_session_disconnected()
470 coap_session_str(session), reason); in coap_session_disconnected()
471 coap_delete_observers( session->context, session ); in coap_session_disconnected()
473 if ( session->tls) { in coap_session_disconnected()
474 if (session->proto == COAP_PROTO_DTLS) in coap_session_disconnected()
475 coap_dtls_free_session(session); in coap_session_disconnected()
477 else if (session->proto == COAP_PROTO_TLS) in coap_session_disconnected()
478 coap_tls_free_session(session); in coap_session_disconnected()
480 session->tls = NULL; in coap_session_disconnected()
483 if (session->proto == COAP_PROTO_UDP) in coap_session_disconnected()
484 session->state = COAP_SESSION_STATE_ESTABLISHED; in coap_session_disconnected()
486 session->state = COAP_SESSION_STATE_NONE; in coap_session_disconnected()
488 session->con_active = 0; in coap_session_disconnected()
490 if (session->partial_pdu) { in coap_session_disconnected()
491 coap_delete_pdu(session->partial_pdu); in coap_session_disconnected()
492 session->partial_pdu = NULL; in coap_session_disconnected()
494 session->partial_read = 0; in coap_session_disconnected()
496 while (session->delayqueue) { in coap_session_disconnected()
497 coap_queue_t *q = session->delayqueue; in coap_session_disconnected()
498 session->delayqueue = q->next; in coap_session_disconnected()
501 coap_session_str(session), q->id); in coap_session_disconnected()
503 && COAP_PROTO_NOT_RELIABLE(session->proto) in coap_session_disconnected()
507 if (coap_wait_ack(session->context, session, q) >= 0) { in coap_session_disconnected()
508 if (session->context->nack_handler) { in coap_session_disconnected()
509 session->context->nack_handler(session, q->pdu, reason, q->id); in coap_session_disconnected()
515 && session->context->nack_handler) in coap_session_disconnected()
517 session->context->nack_handler(session, q->pdu, reason, q->id); in coap_session_disconnected()
523 coap_cancel_session_messages(session->context, session, reason); in coap_session_disconnected()
525 else if (session->context->nack_handler) { in coap_session_disconnected()
526 coap_queue_t *q = session->context->sendqueue; in coap_session_disconnected()
528 if (q->session == session) { in coap_session_disconnected()
529 session->context->nack_handler(session, q->pdu, reason, q->id); in coap_session_disconnected()
536 if (COAP_PROTO_RELIABLE(session->proto)) { in coap_session_disconnected()
537 if (session->sock.flags != COAP_SOCKET_EMPTY) { in coap_session_disconnected()
538 coap_socket_close(&session->sock); in coap_session_disconnected()
539 coap_handle_event(session->context, in coap_session_disconnected()
541 COAP_EVENT_TCP_FAILED : COAP_EVENT_TCP_CLOSED, session); in coap_session_disconnected()
544 coap_handle_event(session->context, in coap_session_disconnected()
546 COAP_EVENT_SESSION_CLOSED : COAP_EVENT_SESSION_FAILED, session); in coap_session_disconnected()
622 coap_session_t *session; in coap_endpoint_get_session() local
636 SESSIONS_FIND(endpoint->sessions, addr_hash, session); in coap_endpoint_get_session()
637 if (session) { in coap_endpoint_get_session()
639 coap_address_copy(&session->addr_info.local, &packet->addr_info.local); in coap_endpoint_get_session()
640 session->ifindex = packet->ifindex; in coap_endpoint_get_session()
641 session->last_rx_tx = now; in coap_endpoint_get_session()
642 return session; in coap_endpoint_get_session()
645 SESSIONS_ITER(endpoint->sessions, session, rtmp) { in coap_endpoint_get_session()
646 if (session->ref == 0 && session->delayqueue == NULL) { in coap_endpoint_get_session()
647 if (session->type == COAP_SESSION_TYPE_SERVER) { in coap_endpoint_get_session()
649 if (oldest==NULL || session->last_rx_tx < oldest->last_rx_tx) in coap_endpoint_get_session()
650 oldest = session; in coap_endpoint_get_session()
652 if (session->state == COAP_SESSION_STATE_HANDSHAKE) { in coap_endpoint_get_session()
656 if ((session->last_rx_tx + COAP_PARTIAL_SESSION_TIMEOUT_TICKS) < now) { in coap_endpoint_get_session()
658 session->last_rx_tx < oldest_hs->last_rx_tx) in coap_endpoint_get_session()
659 oldest_hs = session; in coap_endpoint_get_session()
663 else if (session->type == COAP_SESSION_TYPE_HELLO) { in coap_endpoint_get_session()
667 if ((session->last_rx_tx + COAP_PARTIAL_SESSION_TIMEOUT_TICKS) < now) { in coap_endpoint_get_session()
669 session->last_rx_tx < oldest_hs->last_rx_tx) in coap_endpoint_get_session()
670 oldest_hs = session; in coap_endpoint_get_session()
743 session = coap_make_session(endpoint->proto, COAP_SESSION_TYPE_SERVER, in coap_endpoint_get_session()
747 if (session) { in coap_endpoint_get_session()
748 session->last_rx_tx = now; in coap_endpoint_get_session()
750 session->state = COAP_SESSION_STATE_ESTABLISHED; in coap_endpoint_get_session()
752 session->type = COAP_SESSION_TYPE_HELLO; in coap_endpoint_get_session()
754 SESSIONS_ADD(endpoint->sessions, session); in coap_endpoint_get_session()
756 coap_session_str(session)); in coap_endpoint_get_session()
758 return session; in coap_endpoint_get_session()
762 coap_session_new_dtls_session(coap_session_t *session, in coap_session_new_dtls_session() argument
764 if (session) { in coap_session_new_dtls_session()
765 session->last_rx_tx = now; in coap_session_new_dtls_session()
766 session->type = COAP_SESSION_TYPE_SERVER; in coap_session_new_dtls_session()
767 session->tls = coap_dtls_new_server_session(session); in coap_session_new_dtls_session()
768 if (session->tls) { in coap_session_new_dtls_session()
769 session->state = COAP_SESSION_STATE_HANDSHAKE; in coap_session_new_dtls_session()
771 coap_session_free(session); in coap_session_new_dtls_session()
772 session = NULL; in coap_session_new_dtls_session()
775 return session; in coap_session_new_dtls_session()
791 context = sock->session ? sock->session->context : in coap_epoll_ctl_add()
818 coap_session_t *session = NULL; in coap_session_create_client() local
848 session = coap_make_session(proto, COAP_SESSION_TYPE_CLIENT, NULL, in coap_session_create_client()
850 if (!session) in coap_session_create_client()
853 coap_session_reference(session); in coap_session_create_client()
856 if (!coap_socket_connect_udp(&session->sock, local_if, server, in coap_session_create_client()
858 &session->addr_info.local, &session->addr_info.remote)) { in coap_session_create_client()
863 if (!coap_socket_connect_tcp1(&session->sock, local_if, server, in coap_session_create_client()
865 &session->addr_info.local, &session->addr_info.remote)) { in coap_session_create_client()
872 session->sock.session = session; in coap_session_create_client()
873 coap_epoll_ctl_add(&session->sock, in coap_session_create_client()
875 ((session->sock.flags & COAP_SOCKET_WANT_CONNECT) ? in coap_session_create_client()
880 session->sock.flags |= COAP_SOCKET_NOT_EMPTY | COAP_SOCKET_WANT_READ; in coap_session_create_client()
882 session->sock.flags |= COAP_SOCKET_BOUND; in coap_session_create_client()
883 SESSIONS_ADD(ctx->sessions, session); in coap_session_create_client()
884 return session; in coap_session_create_client()
887 coap_session_release(session); in coap_session_create_client()
892 coap_session_connect(coap_session_t *session) { in coap_session_connect() argument
893 if (session->proto == COAP_PROTO_UDP) { in coap_session_connect()
894 session->state = COAP_SESSION_STATE_ESTABLISHED; in coap_session_connect()
895 } else if (session->proto == COAP_PROTO_DTLS) { in coap_session_connect()
896 session->tls = coap_dtls_new_client_session(session); in coap_session_connect()
897 if (session->tls) { in coap_session_connect()
898 session->state = COAP_SESSION_STATE_HANDSHAKE; in coap_session_connect()
904 coap_session_reference(session); in coap_session_connect()
905 coap_session_release(session); in coap_session_connect()
910 if (session->proto == COAP_PROTO_TCP || session->proto == COAP_PROTO_TLS) { in coap_session_connect()
911 if (session->sock.flags & COAP_SOCKET_WANT_CONNECT) { in coap_session_connect()
912 session->state = COAP_SESSION_STATE_CONNECTING; in coap_session_connect()
913 } else if (session->proto == COAP_PROTO_TLS) { in coap_session_connect()
915 session->tls = coap_tls_new_client_session(session, &connected); in coap_session_connect()
916 if (session->tls) { in coap_session_connect()
917 session->state = COAP_SESSION_STATE_HANDSHAKE; in coap_session_connect()
919 coap_session_send_csm(session); in coap_session_connect()
925 coap_session_reference(session); in coap_session_connect()
926 coap_session_release(session); in coap_session_connect()
930 coap_session_send_csm(session); in coap_session_connect()
935 coap_ticks(&session->last_rx_tx); in coap_session_connect()
936 return session; in coap_session_connect()
940 coap_session_accept(coap_session_t *session) { in coap_session_accept() argument
942 if (session->proto == COAP_PROTO_TCP || session->proto == COAP_PROTO_TLS) in coap_session_accept()
943 coap_handle_event(session->context, COAP_EVENT_TCP_CONNECTED, session); in coap_session_accept()
944 if (session->proto == COAP_PROTO_TCP) { in coap_session_accept()
945 coap_session_send_csm(session); in coap_session_accept()
946 } else if (session->proto == COAP_PROTO_TLS) { in coap_session_accept()
948 session->tls = coap_tls_new_server_session(session, &connected); in coap_session_accept()
949 if (session->tls) { in coap_session_accept()
950 session->state = COAP_SESSION_STATE_HANDSHAKE; in coap_session_accept()
952 coap_handle_event(session->context, COAP_EVENT_DTLS_CONNECTED, session); in coap_session_accept()
953 coap_session_send_csm(session); in coap_session_accept()
960 coap_session_reference(session); in coap_session_accept()
961 coap_session_release(session); in coap_session_accept()
962 session = NULL; in coap_session_accept()
966 return session; in coap_session_accept()
975 coap_session_t *session = coap_session_create_client(ctx, local_if, server, proto); in coap_new_client_session() local
976 if (session) { in coap_new_client_session()
978 coap_session_str(session)); in coap_new_client_session()
979 session = coap_session_connect(session); in coap_new_client_session()
981 return session; in coap_new_client_session()
1018 coap_session_t *session = coap_session_create_client(ctx, local_if, in coap_new_client_session_psk2() local
1021 if (!session) in coap_new_client_session_psk2()
1024 session->cpsk_setup_data = *setup_data; in coap_new_client_session_psk2()
1026 session->psk_identity = in coap_new_client_session_psk2()
1029 if (!session->psk_identity) { in coap_new_client_session_psk2()
1031 coap_session_release(session); in coap_new_client_session_psk2()
1037 coap_session_release(session); in coap_new_client_session_psk2()
1042 session->psk_key = coap_new_bin_const(setup_data->psk_info.key.s, in coap_new_client_session_psk2()
1044 if (!session->psk_key) { in coap_new_client_session_psk2()
1046 coap_session_release(session); in coap_new_client_session_psk2()
1052 coap_session_release(session); in coap_new_client_session_psk2()
1058 coap_session_release(session); in coap_new_client_session_psk2()
1063 coap_session_str(session)); in coap_new_client_session_psk2()
1064 return coap_session_connect(session); in coap_new_client_session_psk2()
1067 int coap_session_refresh_psk_hint(coap_session_t *session, in coap_session_refresh_psk_hint() argument
1071 coap_bin_const_t *old_psk_hint = session->psk_hint; in coap_session_refresh_psk_hint()
1074 if (session->psk_hint) { in coap_session_refresh_psk_hint()
1075 if (coap_binary_equal(session->psk_hint, psk_hint)) in coap_session_refresh_psk_hint()
1078 session->psk_hint = coap_new_bin_const(psk_hint->s, in coap_session_refresh_psk_hint()
1080 if (!session->psk_hint) { in coap_session_refresh_psk_hint()
1088 session->psk_hint = NULL; in coap_session_refresh_psk_hint()
1096 int coap_session_refresh_psk_key(coap_session_t *session, in coap_session_refresh_psk_key() argument
1100 coap_bin_const_t *old_psk_key = session->psk_key; in coap_session_refresh_psk_key()
1103 if (session->psk_key) { in coap_session_refresh_psk_key()
1104 if (coap_binary_equal(session->psk_key, psk_key)) in coap_session_refresh_psk_key()
1107 session->psk_key = coap_new_bin_const(psk_key->s, psk_key->length); in coap_session_refresh_psk_key()
1108 if (!session->psk_key) { in coap_session_refresh_psk_key()
1116 session->psk_key = NULL; in coap_session_refresh_psk_key()
1125 coap_session_get_psk_hint(const coap_session_t *session) { in coap_session_get_psk_hint() argument
1126 if (session) in coap_session_get_psk_hint()
1127 return session->psk_hint; in coap_session_get_psk_hint()
1132 coap_session_get_psk_key(const coap_session_t *session) { in coap_session_get_psk_key() argument
1133 if (session) in coap_session_get_psk_key()
1134 return session->psk_key; in coap_session_get_psk_key()
1145 coap_session_t *session; in coap_new_client_session_pki() local
1159 session = coap_session_create_client(ctx, local_if, server, proto); in coap_new_client_session_pki()
1161 if (!session) { in coap_new_client_session_pki()
1168 coap_session_release(session); in coap_new_client_session_pki()
1173 coap_session_str(session)); in coap_new_client_session_pki()
1174 return coap_session_connect(session); in coap_new_client_session_pki()
1181 coap_session_t *session; in coap_new_server_session() local
1182 session = coap_make_session( ep->proto, COAP_SESSION_TYPE_SERVER, in coap_new_server_session()
1184 if (!session) in coap_new_server_session()
1188 if (!coap_socket_accept_tcp(&ep->sock, &session->sock, in coap_new_server_session()
1189 &session->addr_info.local, in coap_new_server_session()
1190 &session->addr_info.remote)) in coap_new_server_session()
1192 coap_make_addr_hash(&session->addr_hash, session->proto, &session->addr_info); in coap_new_server_session()
1195 session->sock.flags |= COAP_SOCKET_NOT_EMPTY | COAP_SOCKET_CONNECTED in coap_new_server_session()
1198 session->sock.session = session; in coap_new_server_session()
1199 coap_epoll_ctl_add(&session->sock, in coap_new_server_session()
1203 SESSIONS_ADD(ep->sessions, session); in coap_new_server_session()
1204 if (session) { in coap_new_server_session()
1206 coap_session_str(session)); in coap_new_server_session()
1207 session = coap_session_accept(session); in coap_new_server_session()
1209 return session; in coap_new_server_session()
1212 coap_session_free(session); in coap_new_server_session()
1217 coap_session_init_token(coap_session_t *session, size_t len, in coap_session_init_token() argument
1219 session->tx_token = coap_decode_var_bytes8(data, len); in coap_session_init_token()
1222 void coap_session_new_token(coap_session_t *session, size_t *len, in coap_session_new_token() argument
1225 sizeof(session->tx_token), ++session->tx_token); in coap_session_new_token()
1229 coap_new_message_id(coap_session_t *session) { in coap_new_message_id() argument
1230 return ++session->tx_mid; in coap_new_message_id()
1234 coap_session_get_addr_remote(const coap_session_t *session) { in coap_session_get_addr_remote() argument
1235 if (session) in coap_session_get_addr_remote()
1236 return &session->addr_info.remote; in coap_session_get_addr_remote()
1241 coap_session_get_addr_local(const coap_session_t *session) { in coap_session_get_addr_local() argument
1242 if (session) in coap_session_get_addr_local()
1243 return &session->addr_info.local; in coap_session_get_addr_local()
1248 coap_session_get_context(const coap_session_t *session) { in coap_session_get_context() argument
1249 if (session) in coap_session_get_context()
1250 return session->context; in coap_session_get_context()
1255 coap_session_get_proto(const coap_session_t *session) { in coap_session_get_proto() argument
1256 if (session) in coap_session_get_proto()
1257 return session->proto; in coap_session_get_proto()
1262 coap_session_get_type(const coap_session_t *session) { in coap_session_get_type() argument
1263 if (session) in coap_session_get_type()
1264 return session->type; in coap_session_get_type()
1269 coap_session_set_type_client(coap_session_t *session) { in coap_session_set_type_client() argument
1270 if (session && session->type == COAP_SESSION_TYPE_SERVER) { in coap_session_set_type_client()
1271 coap_session_reference(session); in coap_session_set_type_client()
1272 session->type = COAP_SESSION_TYPE_CLIENT; in coap_session_set_type_client()
1279 coap_session_get_state(const coap_session_t *session) { in coap_session_get_state() argument
1280 if (session) in coap_session_get_state()
1281 return session->state; in coap_session_get_state()
1285 int coap_session_get_ifindex(const coap_session_t *session) { in coap_session_get_ifindex() argument
1286 if (session) in coap_session_get_ifindex()
1287 return session->ifindex; in coap_session_get_ifindex()
1291 void *coap_session_get_tls(const coap_session_t *session, in coap_session_get_tls() argument
1293 if (session) in coap_session_get_tls()
1294 return coap_dtls_get_tls(session, tls_lib); in coap_session_get_tls()
1397 coap_session_t *session, *rtmp; in coap_free_endpoint() local
1399 SESSIONS_ITER_SAFE(ep->sessions, session, rtmp) { in coap_free_endpoint()
1400 assert(session->ref == 0); in coap_free_endpoint()
1401 if (session->ref == 0) { in coap_free_endpoint()
1402 coap_session_free(session); in coap_free_endpoint()
1417 assert(ep->sock.session == NULL); in coap_free_endpoint()
1451 const char *coap_session_str(const coap_session_t *session) { in coap_session_str() argument
1454 if (coap_print_addr(&session->addr_info.local, in coap_session_str()
1462 if (coap_print_addr(&session->addr_info.remote, in coap_session_str()
1466 if (session->ifindex > 0 && p + 1 < end) in coap_session_str()
1467 p += snprintf(p, end - p, " (if%d)", session->ifindex); in coap_session_str()
1469 if (session->proto == COAP_PROTO_UDP) { in coap_session_str()
1472 } else if (session->proto == COAP_PROTO_DTLS) { in coap_session_str()
1475 } else if (session->proto == COAP_PROTO_TCP) { in coap_session_str()
1478 } else if (session->proto == COAP_PROTO_TLS) { in coap_session_str()