Lines Matching refs:session
92 Q(FRAC_BITS, session->ack_random_factor)
95 #define ACK_TIMEOUT Q(FRAC_BITS, session->ack_timeout)
236 if ( node->session ) { in coap_delete_node()
240 if (node->session->context->sendqueue) { in coap_delete_node()
241 LL_DELETE(node->session->context->sendqueue, node); in coap_delete_node()
243 coap_session_release(node->session); in coap_delete_node()
299 const coap_session_t *session, in coap_get_session_client_psk() argument
308 if (session->psk_identity && session->psk_key) { in coap_get_session_client_psk()
309 if (session->psk_identity->length <= max_identity_len && in coap_get_session_client_psk()
310 session->psk_key->length <= max_psk_len) { in coap_get_session_client_psk()
311 memcpy(identity, session->psk_identity->s, session->psk_identity->length); in coap_get_session_client_psk()
312 memcpy(psk, session->psk_key->s, session->psk_key->length); in coap_get_session_client_psk()
313 *identity_len = session->psk_identity->length; in coap_get_session_client_psk()
314 return session->psk_key->length; in coap_get_session_client_psk()
317 psk_info = &session->cpsk_setup_data.psk_info; in coap_get_session_client_psk()
335 const coap_session_t *session, in coap_get_context_server_psk() argument
343 if (!session) in coap_get_context_server_psk()
346 if (session->psk_key && in coap_get_context_server_psk()
347 session->psk_key->length <= max_psk_len) { in coap_get_context_server_psk()
348 memcpy(psk, session->psk_key->s, session->psk_key->length); in coap_get_context_server_psk()
349 return session->psk_key->length; in coap_get_context_server_psk()
351 psk_info = &session->context->spsk_setup_data.psk_info; in coap_get_context_server_psk()
363 const coap_session_t *session, in coap_get_context_server_hint() argument
368 if (!session) in coap_get_context_server_hint()
371 if (session->psk_hint && in coap_get_context_server_hint()
372 session->psk_hint->s && session->psk_hint->length > 0 && in coap_get_context_server_hint()
373 session->psk_hint->length <= max_hint_len) { in coap_get_context_server_hint()
374 memcpy(hint, session->psk_hint->s, session->psk_hint->length); in coap_get_context_server_hint()
375 return session->psk_hint->length; in coap_get_context_server_hint()
377 psk_info = &session->context->spsk_setup_data.psk_info; in coap_get_context_server_hint()
752 coap_send_ack(coap_session_t *session, const coap_pdu_t *request) { in coap_send_ack() argument
757 COAP_PROTO_NOT_RELIABLE(session->proto)) { in coap_send_ack()
760 result = coap_send_internal(session, response); in coap_send_ack()
766 coap_session_send_pdu(coap_session_t *session, coap_pdu_t *pdu) { in coap_session_send_pdu() argument
769 switch(session->proto) { in coap_session_send_pdu()
771 bytes_written = coap_session_send(session, pdu->token - pdu->hdr_size, in coap_session_send_pdu()
775 bytes_written = coap_dtls_send(session, pdu->token - pdu->hdr_size, in coap_session_send_pdu()
780 bytes_written = coap_session_write(session, pdu->token - pdu->hdr_size, in coap_session_send_pdu()
786 bytes_written = coap_tls_write(session, pdu->token - pdu->hdr_size, in coap_session_send_pdu()
799 coap_send_pdu(coap_session_t *session, coap_pdu_t *pdu, coap_queue_t *node) { in coap_send_pdu() argument
804 coap_socket_t *sock = &session->sock; in coap_send_pdu()
806 assert(session->endpoint != NULL); in coap_send_pdu()
807 sock = &session->endpoint->sock; in coap_send_pdu()
810 bytes_written = coap_socket_send_pdu(sock, session, pdu); in coap_send_pdu()
812 COAP_PROTO_NOT_RELIABLE(session->proto)) in coap_send_pdu()
813 session->con_active++; in coap_send_pdu()
818 coap_ticks(&session->last_rx_tx); in coap_send_pdu()
822 if (session->state == COAP_SESSION_STATE_NONE) { in coap_send_pdu()
823 if (session->proto == COAP_PROTO_DTLS && !session->tls) { in coap_send_pdu()
824 session->tls = coap_dtls_new_client_session(session); in coap_send_pdu()
825 if (session->tls) { in coap_send_pdu()
826 session->state = COAP_SESSION_STATE_HANDSHAKE; in coap_send_pdu()
827 return coap_session_delay_pdu(session, pdu, node); in coap_send_pdu()
829 coap_handle_event(session->context, COAP_EVENT_DTLS_ERROR, session); in coap_send_pdu()
832 } else if(COAP_PROTO_RELIABLE(session->proto)) { in coap_send_pdu()
834 &session->sock, &session->addr_info.local, &session->addr_info.remote, in coap_send_pdu()
835 session->proto == COAP_PROTO_TLS ? COAPS_DEFAULT_PORT : in coap_send_pdu()
837 &session->addr_info.local, &session->addr_info.remote in coap_send_pdu()
839 coap_handle_event(session->context, COAP_EVENT_TCP_FAILED, session); in coap_send_pdu()
842 session->last_ping = 0; in coap_send_pdu()
843 session->last_pong = 0; in coap_send_pdu()
844 session->csm_tx = 0; in coap_send_pdu()
845 coap_ticks( &session->last_rx_tx ); in coap_send_pdu()
846 if ((session->sock.flags & COAP_SOCKET_WANT_CONNECT) != 0) { in coap_send_pdu()
847 session->state = COAP_SESSION_STATE_CONNECTING; in coap_send_pdu()
848 return coap_session_delay_pdu(session, pdu, node); in coap_send_pdu()
850 coap_handle_event(session->context, COAP_EVENT_TCP_CONNECTED, session); in coap_send_pdu()
851 if (session->proto == COAP_PROTO_TLS) { in coap_send_pdu()
853 session->state = COAP_SESSION_STATE_HANDSHAKE; in coap_send_pdu()
854 session->tls = coap_tls_new_client_session(session, &connected); in coap_send_pdu()
855 if (session->tls) { in coap_send_pdu()
857 coap_handle_event(session->context, COAP_EVENT_DTLS_CONNECTED, session); in coap_send_pdu()
858 coap_session_send_csm(session); in coap_send_pdu()
860 return coap_session_delay_pdu(session, pdu, node); in coap_send_pdu()
862 coap_handle_event(session->context, COAP_EVENT_DTLS_ERROR, session); in coap_send_pdu()
863 coap_session_disconnected(session, COAP_NACK_TLS_FAILED); in coap_send_pdu()
866 coap_session_send_csm(session); in coap_send_pdu()
875 (session->sock.flags & COAP_SOCKET_NOT_EMPTY) && in coap_send_pdu()
876 (session->sock.flags & COAP_SOCKET_MULTICAST)) { in coap_send_pdu()
882 if (session->state != COAP_SESSION_STATE_ESTABLISHED || in coap_send_pdu()
883 (pdu->type == COAP_MESSAGE_CON && session->con_active >= COAP_DEFAULT_NSTART)) { in coap_send_pdu()
884 return coap_session_delay_pdu(session, pdu, node); in coap_send_pdu()
887 if ((session->sock.flags & COAP_SOCKET_NOT_EMPTY) && in coap_send_pdu()
888 (session->sock.flags & COAP_SOCKET_WANT_WRITE)) in coap_send_pdu()
889 return coap_session_delay_pdu(session, pdu, node); in coap_send_pdu()
891 bytes_written = coap_session_send_pdu(session, pdu); in coap_send_pdu()
893 COAP_PROTO_NOT_RELIABLE(session->proto)) in coap_send_pdu()
894 session->con_active++; in coap_send_pdu()
902 coap_send_error(coap_session_t *session, in coap_send_error() argument
910 assert(session); in coap_send_error()
914 result = coap_send_internal(session, response); in coap_send_error()
920 coap_send_message_type(coap_session_t *session, const coap_pdu_t *request, in coap_send_message_type() argument
928 result = coap_send_internal(session, response); in coap_send_message_type()
947 coap_calc_timeout(coap_session_t *session, unsigned char r) { in coap_calc_timeout() argument
973 coap_wait_ack(coap_context_t *context, coap_session_t *session, in coap_wait_ack() argument
977 node->session = coap_session_reference(session); in coap_wait_ack()
1019 coap_session_str(node->session), node->id, in coap_wait_ack()
1057 coap_send(coap_session_t *session, coap_pdu_t *pdu) { in coap_send() argument
1067 if (!(session->block_mode & COAP_BLOCK_USE_LIBCOAP)) { in coap_send()
1068 return coap_send_internal(session, pdu); in coap_send()
1091 ((pdu->type == COAP_MESSAGE_NON || COAP_PROTO_RELIABLE(session->proto)) && in coap_send()
1094 LL_FOREACH(session->lg_crcv, lg_crcv) { in coap_send()
1108 LL_DELETE(session->lg_crcv, lg_crcv); in coap_send()
1113 LL_DELETE(session->lg_crcv, lg_crcv); in coap_send()
1114 coap_block_delete_lg_crcv(session, lg_crcv); in coap_send()
1119 lg_crcv = coap_block_new_lg_crcv(session, pdu); in coap_send()
1122 if (have_block1 && session->lg_xmit) { in coap_send()
1125 LL_FOREACH(session->lg_xmit, lg_xmit) { in coap_send()
1132 coap_update_token(pdu, session->lg_xmit->b.b1.token_length, in coap_send()
1133 session->lg_xmit->b.b1.token); in coap_send()
1141 mid = coap_send_internal(session, pdu); in coap_send()
1144 LL_PREPEND(session->lg_crcv, lg_crcv); in coap_send()
1147 coap_block_delete_lg_crcv(session, lg_crcv); in coap_send()
1154 coap_send_internal(coap_session_t *session, coap_pdu_t *pdu) { in coap_send_internal() argument
1169 if (coap_print_addr(&session->addr_info.local, (uint8_t*)addr_str, in coap_send_internal()
1262 if (!coap_pdu_encode_header(pdu, session->proto)) { in coap_send_internal()
1267 if (COAP_PROTO_RELIABLE(session->proto) && in coap_send_internal()
1268 session->state == COAP_SESSION_STATE_ESTABLISHED && in coap_send_internal()
1269 !session->csm_block_supported) { in coap_send_internal()
1287 bytes_written = coap_send_pdu( session, pdu, NULL ); in coap_send_internal()
1300 if (COAP_PROTO_RELIABLE(session->proto) && in coap_send_internal()
1302 if (coap_session_delay_pdu(session, pdu, NULL) == COAP_PDU_DELAYED) { in coap_send_internal()
1303 session->partial_write = (size_t)bytes_written; in coap_send_internal()
1313 || COAP_PROTO_RELIABLE(session->proto)) { in coap_send_internal()
1329 node->timeout = coap_calc_timeout(session, r); in coap_send_internal()
1330 return coap_wait_ack(session->context, session, node); in coap_send_internal()
1342 if (node->retransmit_cnt < node->session->max_retransmit) { in coap_retransmit()
1362 coap_session_str(node->session), node->id, node->retransmit_cnt); in coap_retransmit()
1364 if (node->session->con_active) in coap_retransmit()
1365 node->session->con_active--; in coap_retransmit()
1366 bytes_written = coap_send_pdu(node->session, node->pdu, node); in coap_retransmit()
1384 coap_session_str(node->session), node->id, node->retransmit_cnt); in coap_retransmit()
1395 coap_handle_failed_notify(context, node->session, &token); in coap_retransmit()
1397 if (node->session->con_active) { in coap_retransmit()
1398 node->session->con_active--; in coap_retransmit()
1399 if (node->session->state == COAP_SESSION_STATE_ESTABLISHED) { in coap_retransmit()
1408 coap_session_connected(node->session); in coap_retransmit()
1414 context->nack_handler(node->session, node->pdu, COAP_NACK_TOO_MANY_RETRIES, node->id); in coap_retransmit()
1428 coap_handle_dgram_for_proto(coap_context_t *ctx, coap_session_t *session, coap_packet_t *packet) { in coap_handle_dgram_for_proto() argument
1435 if (session->proto == COAP_PROTO_DTLS) { in coap_handle_dgram_for_proto()
1436 if (session->type == COAP_SESSION_TYPE_HELLO) in coap_handle_dgram_for_proto()
1437 result = coap_dtls_hello(session, data, data_len); in coap_handle_dgram_for_proto()
1438 else if (session->tls) in coap_handle_dgram_for_proto()
1439 result = coap_dtls_receive(session, data, data_len); in coap_handle_dgram_for_proto()
1440 } else if (session->proto == COAP_PROTO_UDP) { in coap_handle_dgram_for_proto()
1441 result = coap_handle_dgram(ctx, session, data, data_len); in coap_handle_dgram_for_proto()
1448 coap_session_t *session, in coap_connect_session() argument
1452 (void)session; in coap_connect_session()
1455 if (coap_socket_connect_tcp2(&session->sock, &session->addr_info.local, in coap_connect_session()
1456 &session->addr_info.remote)) { in coap_connect_session()
1457 session->last_rx_tx = now; in coap_connect_session()
1458 coap_handle_event(session->context, COAP_EVENT_TCP_CONNECTED, session); in coap_connect_session()
1459 if (session->proto == COAP_PROTO_TCP) { in coap_connect_session()
1460 coap_session_send_csm(session); in coap_connect_session()
1461 } else if (session->proto == COAP_PROTO_TLS) { in coap_connect_session()
1463 session->state = COAP_SESSION_STATE_HANDSHAKE; in coap_connect_session()
1464 session->tls = coap_tls_new_client_session(session, &connected); in coap_connect_session()
1465 if (session->tls) { in coap_connect_session()
1467 coap_handle_event(session->context, COAP_EVENT_DTLS_CONNECTED, in coap_connect_session()
1468 session); in coap_connect_session()
1469 coap_session_send_csm(session); in coap_connect_session()
1472 coap_handle_event(session->context, COAP_EVENT_DTLS_ERROR, session); in coap_connect_session()
1473 coap_session_disconnected(session, COAP_NACK_TLS_FAILED); in coap_connect_session()
1477 coap_handle_event(session->context, COAP_EVENT_TCP_FAILED, session); in coap_connect_session()
1478 coap_session_disconnected(session, COAP_NACK_NOT_DELIVERABLE); in coap_connect_session()
1484 coap_write_session(coap_context_t *ctx, coap_session_t *session, coap_tick_t now) { in coap_write_session() argument
1486 assert(session->sock.flags & COAP_SOCKET_CONNECTED); in coap_write_session()
1488 while (session->delayqueue) { in coap_write_session()
1490 coap_queue_t *q = session->delayqueue; in coap_write_session()
1492 coap_session_str(session), (int)q->pdu->mid); in coap_write_session()
1493 assert(session->partial_write < q->pdu->used_size + q->pdu->hdr_size); in coap_write_session()
1494 switch (session->proto) { in coap_write_session()
1498 session, in coap_write_session()
1499 q->pdu->token - q->pdu->hdr_size - session->partial_write, in coap_write_session()
1500 q->pdu->used_size + q->pdu->hdr_size - session->partial_write in coap_write_session()
1507 session, in coap_write_session()
1508 q->pdu->token - q->pdu->hdr_size - session->partial_write, in coap_write_session()
1509 q->pdu->used_size + q->pdu->hdr_size - session->partial_write in coap_write_session()
1521 session->last_rx_tx = now; in coap_write_session()
1522 …en <= 0 || (size_t)bytes_written < q->pdu->used_size + q->pdu->hdr_size - session->partial_write) { in coap_write_session()
1524 session->partial_write += (size_t)bytes_written; in coap_write_session()
1527 session->delayqueue = q->next; in coap_write_session()
1528 session->partial_write = 0; in coap_write_session()
1534 coap_read_session(coap_context_t *ctx, coap_session_t *session, coap_tick_t now) { in coap_read_session() argument
1548 …assert(session->sock.flags & (COAP_SOCKET_CONNECTED | COAP_SOCKET_MULTICAST | COAP_SOCKET_BROADCAS… in coap_read_session()
1550 assert(session->sock.flags & (COAP_SOCKET_CONNECTED | COAP_SOCKET_MULTICAST)); in coap_read_session()
1553 if (COAP_PROTO_NOT_RELIABLE(session->proto)) { in coap_read_session()
1555 memcpy(&packet->addr_info, &session->addr_info, sizeof(packet->addr_info)); in coap_read_session()
1556 bytes_read = ctx->network_read(&session->sock, packet); in coap_read_session()
1561 coap_session_disconnected(session, COAP_NACK_ICMP_ISSUE); in coap_read_session()
1564 coap_session_str(session)); in coap_read_session()
1566 session->last_rx_tx = now; in coap_read_session()
1567 memcpy(&session->addr_info, &packet->addr_info, in coap_read_session()
1568 sizeof(session->addr_info)); in coap_read_session()
1570 coap_session_str(session), bytes_read); in coap_read_session()
1571 coap_handle_dgram_for_proto(ctx, session, packet); in coap_read_session()
1583 if (session->proto == COAP_PROTO_TCP) in coap_read_session()
1584 bytes_read = coap_socket_read(&session->sock, buf, buf_len); in coap_read_session()
1585 else if (session->proto == COAP_PROTO_TLS) in coap_read_session()
1586 bytes_read = coap_tls_read(session, buf, buf_len); in coap_read_session()
1589 coap_session_str(session), bytes_read); in coap_read_session()
1590 session->last_rx_tx = now; in coap_read_session()
1595 if (session->partial_pdu) { in coap_read_session()
1596 size_t len = session->partial_pdu->used_size in coap_read_session()
1597 + session->partial_pdu->hdr_size in coap_read_session()
1598 - session->partial_read; in coap_read_session()
1600 memcpy(session->partial_pdu->token - session->partial_pdu->hdr_size in coap_read_session()
1601 + session->partial_read, p, n); in coap_read_session()
1605 if (coap_pdu_parse_header(session->partial_pdu, session->proto) in coap_read_session()
1606 && coap_pdu_parse_opt(session->partial_pdu)) { in coap_read_session()
1607 coap_dispatch(ctx, session, session->partial_pdu); in coap_read_session()
1609 coap_delete_pdu(session->partial_pdu); in coap_read_session()
1610 session->partial_pdu = NULL; in coap_read_session()
1611 session->partial_read = 0; in coap_read_session()
1613 session->partial_read += n; in coap_read_session()
1615 } else if (session->partial_read > 0) { in coap_read_session()
1616 size_t hdr_size = coap_pdu_parse_header_size(session->proto, in coap_read_session()
1617 session->read_header); in coap_read_session()
1618 size_t len = hdr_size - session->partial_read; in coap_read_session()
1620 memcpy(session->read_header + session->partial_read, p, n); in coap_read_session()
1624 size_t size = coap_pdu_parse_size(session->proto, session->read_header, in coap_read_session()
1629 coap_session_str(session), in coap_read_session()
1635 session->partial_pdu = coap_pdu_init(0, 0, 0, in coap_read_session()
1636 coap_session_max_pdu_size(session)); in coap_read_session()
1637 if (session->partial_pdu == NULL) { in coap_read_session()
1641 … if (session->partial_pdu->alloc_size < size && !coap_pdu_resize(session->partial_pdu, size)) { in coap_read_session()
1645 session->partial_pdu->hdr_size = (uint8_t)hdr_size; in coap_read_session()
1646 session->partial_pdu->used_size = size; in coap_read_session()
1647 memcpy(session->partial_pdu->token - hdr_size, session->read_header, hdr_size); in coap_read_session()
1648 session->partial_read = hdr_size; in coap_read_session()
1650 if (coap_pdu_parse_header(session->partial_pdu, session->proto)) { in coap_read_session()
1651 coap_dispatch(ctx, session, session->partial_pdu); in coap_read_session()
1653 coap_delete_pdu(session->partial_pdu); in coap_read_session()
1654 session->partial_pdu = NULL; in coap_read_session()
1655 session->partial_read = 0; in coap_read_session()
1658 session->partial_read += bytes_read; in coap_read_session()
1661 session->read_header[0] = *p++; in coap_read_session()
1663 if (!coap_pdu_parse_header_size(session->proto, in coap_read_session()
1664 session->read_header)) { in coap_read_session()
1668 session->partial_read = 1; in coap_read_session()
1673 coap_session_disconnected(session, COAP_NACK_NOT_DELIVERABLE); in coap_read_session()
1709 coap_session_t *session = coap_endpoint_get_session(endpoint, packet, now); in coap_read_endpoint() local
1710 if (session) { in coap_read_endpoint()
1712 coap_session_str(session), bytes_read); in coap_read_endpoint()
1713 result = coap_handle_dgram_for_proto(ctx, session, packet); in coap_read_endpoint()
1714 … if (endpoint->proto == COAP_PROTO_DTLS && session->type == COAP_SESSION_TYPE_HELLO && result == 1) in coap_read_endpoint()
1715 coap_session_new_dtls_session(session, now); in coap_read_endpoint()
1735 coap_session_t *session = coap_new_server_session(ctx, endpoint); in coap_accept_endpoint() local
1736 if (session) in coap_accept_endpoint()
1737 session->last_rx_tx = now; in coap_accept_endpoint()
1738 return session != NULL; in coap_accept_endpoint()
1836 else if (sock->session) { in coap_io_do_epoll()
1837 coap_session_t *session = sock->session; in coap_io_do_epoll()
1841 coap_session_reference(session); in coap_io_do_epoll()
1845 coap_connect_session(session->context, session, now); in coap_io_do_epoll()
1854 coap_read_session(session->context, session, now); in coap_io_do_epoll()
1865 coap_write_session(session->context, session, now); in coap_io_do_epoll()
1868 coap_session_release(session); in coap_io_do_epoll()
1897 coap_handle_dgram(coap_context_t *ctx, coap_session_t *session, in coap_handle_dgram() argument
1902 assert(COAP_PROTO_NOT_RELIABLE(session->proto)); in coap_handle_dgram()
1909 pdu = coap_pdu_init(0, 0, 0, coap_session_max_pdu_size(session)); in coap_handle_dgram()
1913 if (!coap_pdu_parse(session->proto, msg, msg_len, pdu)) { in coap_handle_dgram()
1918 coap_dispatch(ctx, session, pdu); in coap_handle_dgram()
1927 coap_send_rst(session, pdu); in coap_handle_dgram()
1934 coap_remove_from_queue(coap_queue_t **queue, coap_session_t *session, coap_mid_t id, coap_queue_t *… in coap_remove_from_queue() argument
1942 if (session == (*queue)->session && id == (*queue)->id) { /* found message id */ in coap_remove_from_queue()
1950 coap_session_str(session), id); in coap_remove_from_queue()
1959 } while (q && (session != q->session || id != q->id)); in coap_remove_from_queue()
1969 coap_session_str(session), id); in coap_remove_from_queue()
1978 coap_cancel_session_messages(coap_context_t *context, coap_session_t *session, in coap_cancel_session_messages() argument
1982 while (context->sendqueue && context->sendqueue->session == session) { in coap_cancel_session_messages()
1986 coap_session_str(session), q->id); in coap_cancel_session_messages()
1988 context->nack_handler(session, q->pdu, reason, q->id); in coap_cancel_session_messages()
1999 if (q->session == session) { in coap_cancel_session_messages()
2002 coap_session_str(session), q->id); in coap_cancel_session_messages()
2004 context->nack_handler(session, q->pdu, reason, q->id); in coap_cancel_session_messages()
2015 coap_cancel_all_messages(coap_context_t *context, coap_session_t *session, in coap_cancel_all_messages() argument
2021 while (context->sendqueue && context->sendqueue->session == session && in coap_cancel_all_messages()
2028 coap_session_str(session), q->id); in coap_cancel_all_messages()
2040 if (q->session == session && in coap_cancel_all_messages()
2045 coap_session_str(session), q->id); in coap_cancel_all_messages()
2187 coap_wellknown_response(coap_context_t *context, coap_session_t *session, in coap_wellknown_response() argument
2204 request->mid, coap_session_max_pdu_size(session)); in coap_wellknown_response()
2351 coap_cancel_all_messages(context, sent->session, token.s, token.length); in coap_cancel()
2352 num_cancelled += coap_delete_observer(r, sent->session, &token); in coap_cancel()
2411 coap_session_t *session) { in no_response() argument
2433 COAP_PROTO_NOT_RELIABLE(session->proto)) { in no_response()
2452 COAP_PROTO_RELIABLE(session->proto))) { in no_response()
2462 if (coap_is_mcast(&session->addr_info.local)) { in no_response()
2482 handle_request(coap_context_t *context, coap_session_t *session, coap_pdu_t *pdu) { in handle_request() argument
2504 if (coap_is_mcast(&session->addr_info.local)) { in handle_request()
2505 if (COAP_PROTO_RELIABLE(session->proto) || pdu->type != COAP_MESSAGE_NON) { in handle_request()
2511 async = coap_find_async(session, tokenc); in handle_request()
2519 coap_send_ack(session, pdu); in handle_request()
2524 else if (coap_is_mcast(&session->addr_info.local)) { in handle_request()
2533 if (coap_register_async(session, pdu, delay)) in handle_request()
2666 response = coap_wellknown_response(context, session, pdu); in handle_request()
2716 if (response && (no_response(pdu, response, session) != RESPONSE_DROP)) { in handle_request()
2718 if (coap_send_internal(session, response) == COAP_INVALID_MID) in handle_request()
2748 0, pdu->mid, coap_session_max_pdu_size(session)); in handle_request()
2778 subscription = coap_add_observer(resource, session, &token, in handle_request()
2783 coap_touch_observer(context, session, &token); in handle_request()
2791 coap_delete_observer(resource, session, &token); in handle_request()
2799 if (session->block_mode & COAP_BLOCK_USE_LIBCOAP) { in handle_request()
2800 if (coap_handle_request_put_block(context, session, pdu, response, in handle_request()
2806 if (coap_handle_request_send_block(session, pdu, response, resource, in handle_request()
2815 h(resource, session, pdu, query, response); in handle_request()
2818 coap_check_code_lg_xmit(session, response, resource, query); in handle_request()
2821 respond = no_response(pdu, response, session); in handle_request()
2831 coap_delete_observer(resource, session, &token); in handle_request()
2847 if (coap_send_internal(session, response) == COAP_INVALID_MID) { in handle_request()
2865 response = coap_wellknown_response(context, session, pdu); in handle_request()
2871 if (response && (no_response(pdu, response, session) != RESPONSE_DROP)) { in handle_request()
2873 if (coap_send_internal(session, response) == COAP_INVALID_MID) in handle_request()
2891 if (coap_send_internal(session, response) == COAP_INVALID_MID) in handle_request()
2897 handle_response(coap_context_t *context, coap_session_t *session, in handle_response() argument
2905 coap_cancel_all_messages(context, session, rcvd->token, rcvd->token_length); in handle_response()
2908 if (session->block_mode & COAP_BLOCK_USE_LIBCOAP) { in handle_response()
2910 if (coap_handle_response_send_block(session, rcvd)) { in handle_response()
2912 coap_send_ack(session, rcvd); in handle_response()
2917 if (coap_handle_response_get_block(context, session, sent, rcvd, in handle_response()
2920 coap_send_ack(session, rcvd); in handle_response()
2927 if (context->response_handler(session, sent, rcvd, in handle_response()
2929 coap_send_rst(session, rcvd); in handle_response()
2931 coap_send_ack(session, rcvd); in handle_response()
2934 coap_send_ack(session, rcvd); in handle_response()
2940 handle_signaling(coap_context_t *context, coap_session_t *session, in handle_signaling() argument
2951 coap_session_set_mtu(session, coap_decode_var_bytes(coap_opt_value(option), in handle_signaling()
2954 session->csm_block_supported = 1; in handle_signaling()
2957 if (session->state == COAP_SESSION_STATE_CSM) in handle_signaling()
2958 coap_session_connected(session); in handle_signaling()
2962 context->ping_handler(session, pdu, pdu->mid); in handle_signaling()
2966 coap_send_internal(session, pong); in handle_signaling()
2969 session->last_pong = session->last_rx_tx; in handle_signaling()
2971 context->pong_handler(session, pdu, pdu->mid); in handle_signaling()
2975 coap_session_disconnected(session, COAP_NACK_RST); in handle_signaling()
2981 coap_dispatch(coap_context_t *context, coap_session_t *session, in coap_dispatch() argument
3005 coap_remove_from_queue(&context->sendqueue, session, pdu->mid, &sent); in coap_dispatch()
3007 if (sent && session->con_active) { in coap_dispatch()
3008 session->con_active--; in coap_dispatch()
3009 if (session->state == COAP_SESSION_STATE_ESTABLISHED) in coap_dispatch()
3011 coap_session_connected(session); in coap_dispatch()
3022 coap_touch_observer(context, sent->session, &token); in coap_dispatch()
3038 if (pdu->mid == session->last_ping_mid && in coap_dispatch()
3039 context->ping_timeout && session->last_ping > 0) in coap_dispatch()
3045 if (session->con_active) { in coap_dispatch()
3046 session->con_active--; in coap_dispatch()
3047 if (session->state == COAP_SESSION_STATE_ESTABLISHED) in coap_dispatch()
3049 coap_session_connected(session); in coap_dispatch()
3053 coap_remove_from_queue(&context->sendqueue, session, pdu->mid, &sent); in coap_dispatch()
3060 context->nack_handler(sent->session, sent->pdu, in coap_dispatch()
3065 context->pong_handler(session, pdu, pdu->mid); in coap_dispatch()
3067 session->last_pong = session->last_rx_tx; in coap_dispatch()
3068 session->last_ping_mid = COAP_INVALID_MID; in coap_dispatch()
3076 if (obs->pdu->mid == pdu->mid && obs->session == session) { in coap_dispatch()
3079 coap_delete_observer(r, session, &token); in coap_dispatch()
3089 coap_remove_from_queue(&context->sendqueue, session, pdu->mid, &sent); in coap_dispatch()
3092 coap_send_rst(session, pdu); in coap_dispatch()
3108 if (coap_send_internal(session, response) == COAP_INVALID_MID) in coap_dispatch()
3113 coap_send_rst(session, pdu); in coap_dispatch()
3125 handle_signaling(context, session, pdu); in coap_dispatch()
3129 handle_request(context, session, pdu); in coap_dispatch()
3131 handle_response(context, session, sent ? sent->pdu : NULL, pdu); in coap_dispatch()
3135 context->ping_handler(session, pdu, pdu->mid); in coap_dispatch()
3142 if (!coap_is_mcast(&session->addr_info.local)) { in coap_dispatch()
3144 if (session->proto != COAP_PROTO_TCP && session->proto != COAP_PROTO_TLS) { in coap_dispatch()
3147 if (session->last_tx_rst + COAP_TICKS_PER_SECOND/4 < now) { in coap_dispatch()
3148 coap_send_message_type(session, pdu, COAP_MESSAGE_RST); in coap_dispatch()
3149 session->last_tx_rst = now; in coap_dispatch()
3154 coap_send_message_type(session, pdu, COAP_MESSAGE_RST); in coap_dispatch()
3164 coap_handle_event(coap_context_t *context, coap_event_t event, coap_session_t *session) { in coap_handle_event() argument
3168 return context->handle_event(session, event); in coap_handle_event()
3207 handle_request(context, async->session, async->pdu); in coap_check_async()
3210 coap_free_async(async->session, async); in coap_check_async()
3504 coap_mcast_set_hops(coap_session_t *session, size_t hops) { in coap_mcast_set_hops() argument
3505 if (session && coap_is_mcast(&session->addr_info.remote)) { in coap_mcast_set_hops()
3506 switch (session->addr_info.remote.addr.sa.sa_family) { in coap_mcast_set_hops()
3508 if (setsockopt(session->sock.fd, IPPROTO_IP, IP_MULTICAST_TTL, in coap_mcast_set_hops()
3516 if (setsockopt(session->sock.fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, in coap_mcast_set_hops()
3537 coap_mcast_set_hops(coap_session_t *session COAP_UNUSED, in coap_mcast_set_hops()