Lines Matching refs:session

58 coap_get_block_b(const coap_session_t *session, const coap_pdu_t *pdu,
76 if (session == NULL || COAP_PROTO_NOT_RELIABLE(session->proto) ||
77 !(session->csm_bert_rem_support && session->csm_bert_loc_support))
128 setup_block_b(coap_session_t *session, coap_pdu_t *pdu, coap_block_b_t *block,
140 if (can_use_bert && blk_size == 6 && avail >= 1024 && session != NULL &&
141 COAP_PROTO_RELIABLE(session->proto) &&
142 session->csm_bert_rem_support && session->csm_bert_loc_support) {
203 coap_write_block_b_opt(coap_session_t *session, coap_block_b_t *block,
219 if (!setup_block_b(session, pdu, block, block->num,
405 coap_cancel_observe(coap_session_t *session, coap_binary_t *token,
409 assert(session);
410 if (!session)
413 if (!(session->block_mode & COAP_BLOCK_USE_LIBCOAP)) {
415 coap_session_str(session));
419 LL_FOREACH_SAFE(session->lg_crcv, lg_crcv, q) {
429 int using_q_block1 = coap_get_block_b(session, &lg_crcv->pdu,
438 session,
464 coap_add_data_large_request(session, pdu, size, data, NULL, NULL);
476 mid = coap_send_q_block1(session, block, pdu, COAP_SEND_INC_PDU);
478 mid = coap_send_internal(session, pdu);
481 mid = coap_send_internal(session, pdu);
494 coap_retransmit_oscore_pdu(coap_session_t *session,
509 LL_FOREACH(session->lg_crcv, lg_crcv) {
523 resend_pdu = coap_pdu_duplicate(pdu, session, ltoken_len,
532 if (coap_get_block_b(session, resend_pdu, COAP_OPTION_BLOCK1, &block)) {
540 return coap_send_internal(session, resend_pdu);
553 coap_find_lg_xmit_response(const coap_session_t *session,
565 LL_FOREACH(session->lg_xmit, lg_xmit) {
592 coap_add_data_large_internal(coap_session_t *session,
627 release_func(session, app_ptr);
631 if (!(session->block_mode & COAP_BLOCK_USE_LIBCOAP)) {
633 coap_session_str(session));
638 if (COAP_PROTO_RELIABLE(session->proto) && pdu->type == COAP_MESSAGE_NON)
658 if (session->block_mode & (COAP_BLOCK_HAS_Q_BLOCK|COAP_BLOCK_TRY_Q_BLOCK)) {
666 if (coap_get_block_b(session, pdu, COAP_OPTION_Q_BLOCK1, &block)) {
673 LL_FOREACH_SAFE(session->lg_xmit, lg_xmit, q) {
676 LL_DELETE(session->lg_xmit, lg_xmit);
677 coap_block_delete_lg_xmit(session, lg_xmit);
679 coap_handle_event(session->context, COAP_EVENT_XMIT_BLOCK_FAIL, session);
687 if (session->block_mode & COAP_BLOCK_HAS_Q_BLOCK) {
695 if (coap_get_block_b(session, pdu, COAP_OPTION_Q_BLOCK2, &block)) {
705 lg_xmit = coap_find_lg_xmit_response(session, request, resource, query);
708 LL_DELETE(session->lg_xmit, lg_xmit);
709 coap_block_delete_lg_xmit(session, lg_xmit);
711 coap_handle_event(session->context, COAP_EVENT_XMIT_BLOCK_FAIL, session);
716 if (session->oscore_encryption) {
728 avail -= coap_oscore_overhead(session, pdu);
737 if (coap_get_block_b(session, pdu, option, &block)) {
744 if (coap_get_block_b(session, pdu, alt_option, &alt_block)) {
779 release_func(session, app_ptr);
797 coap_session_str(session), (void *)lg_xmit);
806 coap_get_non_timeout_random_ticks(session);
825 lg_xmit->b.b1.state_token = STATE_TOKEN_FULL(++session->tx_token,
840 ++session->tx_rtag),
881 if (++session->context->etag == 0)
882 ++session->context->etag;
883 etag = session->context->etag;
891 if (!setup_block_b(session, pdu, &block, block.num,
926 avail -= coap_oscore_overhead(session, pdu);
959 LL_PREPEND(session->lg_xmit,lg_xmit);
979 release_func(session, app_ptr);
985 coap_block_delete_lg_xmit(session, lg_xmit);
987 release_func(session, app_ptr);
994 coap_add_data_large_request(coap_session_t *session,
1001 * Delay if session->doing_first is set.
1004 if (coap_client_delay_first(session) == 0) {
1006 release_func(session, app_ptr);
1009 return coap_add_data_large_internal(session, NULL, pdu, NULL, NULL, -1, 0,
1017 coap_session_t *session,
1034 uint16_t block_opt = (session->block_mode & COAP_BLOCK_HAS_Q_BLOCK) ?
1046 if (coap_get_block_b(session, request, COAP_OPTION_BLOCK2, &block)) {
1057 else if (coap_get_block_b(session, request, COAP_OPTION_Q_BLOCK2, &block)) {
1066 if (!(session->block_mode & COAP_BLOCK_HAS_Q_BLOCK)) {
1067 set_block_mode_has_q(session->block_mode);
1090 res = coap_write_block_b_opt(session, &block, block_opt, response,
1110 !coap_add_data_large_internal(session, request, response, resource,
1122 release_func(session, app_ptr);
1138 coap_block_check_lg_xmit_timeouts(coap_session_t *session, coap_tick_t now,
1143 coap_tick_t idle_timeout = 4 * COAP_NON_TIMEOUT_TICKS(session);
1147 coap_tick_t partial_timeout = COAP_MAX_TRANSMIT_WAIT_TICKS(session);
1152 LL_FOREACH_SAFE(session->lg_xmit, p, q) {
1156 LL_DELETE(session->lg_xmit, p);
1157 coap_block_delete_lg_xmit(session, p);
1168 LL_DELETE(session->lg_xmit, p);
1169 coap_block_delete_lg_xmit(session, p);
1170 coap_handle_event(session->context, COAP_EVENT_XMIT_BLOCK_FAIL, session);
1186 coap_build_missing_pdu(coap_session_t *session, coap_lg_crcv_t *p) {
1196 pdu = coap_pdu_duplicate(&p->pdu, session, len, buf,
1205 coap_request_missing_q_block2(coap_session_t *session, coap_lg_crcv_t *lg_crcv) {
1214 if (session->block_mode & COAP_BLOCK_USE_M_Q_BLOCK) {
1225 ((lg_crcv->rec_blocks.range[0].end + 1) / COAP_MAX_PAYLOADS(session) !=
1226 (lg_crcv->rec_blocks.range[1].begin -1) / COAP_MAX_PAYLOADS(session)))) {
1233 pdu = coap_build_missing_pdu(session, lg_crcv);
1241 block_payload_set = block / COAP_MAX_PAYLOADS(session);
1252 pdu = coap_build_missing_pdu(session, lg_crcv);
1258 block_payload_set = block / COAP_MAX_PAYLOADS(session);
1260 block_payload_set == (block / COAP_MAX_PAYLOADS(session)); block++) {
1276 pdu = coap_build_missing_pdu(session, lg_crcv);
1283 block_payload_set = block / COAP_MAX_PAYLOADS(session);
1285 block_payload_set == (block / COAP_MAX_PAYLOADS(session)); block++) {
1294 coap_send_internal(session, pdu);
1307 coap_block_check_lg_crcv_timeouts(coap_session_t *session, coap_tick_t now,
1313 coap_tick_t receive_timeout = COAP_NON_RECEIVE_TIMEOUT_TICKS(session);
1319 if (COAP_PROTO_NOT_RELIABLE(session->proto))
1320 partial_timeout = COAP_NON_PARTIAL_TIMEOUT_TICKS(session);
1323 partial_timeout = COAP_MAX_TRANSMIT_WAIT_TICKS(session);
1325 LL_FOREACH_SAFE(session->lg_crcv, p, q) {
1326 if (COAP_PROTO_RELIABLE(session->proto) || p->last_type != COAP_MESSAGE_NON)
1334 if (p->rec_blocks.retry >= COAP_NON_MAX_RETRANSMIT(session)) {
1337 session->context->nack_handler(session, &p->pdu,
1343 coap_request_missing_q_block2(session, p);
1360 LL_DELETE(session->lg_crcv, p);
1361 coap_block_delete_lg_crcv(session, p);
1377 pdu_408_build(coap_session_t *session, coap_lg_srcv_t *p) {
1383 coap_new_message_id(session),
1384 coap_session_max_pdu_size(session));
1470 check_all_blocks_in_for_payload_set(coap_session_t *session,
1473 (rec_blocks->range[0].end + 1) / COAP_MAX_PAYLOADS(session) >
1480 check_any_blocks_next_payload_set(coap_session_t *session,
1483 rec_blocks->range[1].begin / COAP_MAX_PAYLOADS(session) ==
1497 coap_block_check_lg_srcv_timeouts(coap_session_t *session, coap_tick_t now,
1503 coap_tick_t receive_timeout = COAP_NON_RECEIVE_TIMEOUT_TICKS(session);
1509 if (COAP_PROTO_NOT_RELIABLE(session->proto))
1510 partial_timeout = COAP_NON_PARTIAL_TIMEOUT_TICKS(session);
1513 partial_timeout = COAP_MAX_TRANSMIT_WAIT_TICKS(session);
1515 LL_FOREACH_SAFE(session->lg_srcv, p, q) {
1516 if (COAP_PROTO_RELIABLE(session->proto) || p->last_type != COAP_MESSAGE_NON)
1524 if (p->rec_blocks.retry >= COAP_NON_MAX_RETRANSMIT(session)) {
1553 cur_payload = block / COAP_MAX_PAYLOADS(session);
1554 last_payload_block = (cur_payload + 1) * COAP_MAX_PAYLOADS(session) - 1;
1562 last_payload_block += COAP_MAX_PAYLOADS(session);
1575 pdu = pdu_408_build(session, p);
1593 pdu = pdu_408_build(session, p);
1602 coap_send_internal(session, pdu);
1619 LL_DELETE(session->lg_srcv, p);
1620 coap_block_delete_lg_srcv(session, p);
1638 coap_send_q_blocks(coap_session_t *session,
1655 return coap_send_internal(session, pdu);
1662 delayqueue_cnt = session->con_active +
1664 LL_FOREACH(session->delayqueue, delayqueue) {
1671 ((block.num + 1) % COAP_MAX_PAYLOADS(session)) + 1 !=
1672 COAP_MAX_PAYLOADS(session)) ||
1676 delayqueue_cnt < COAP_NSTART(session)) ||
1677 COAP_PROTO_RELIABLE(session->proto))) {
1690 block_pdu = coap_pdu_duplicate(pdu, session,
1699 (mid = coap_send_internal(session, pdu)) == COAP_INVALID_MID) {
1714 (block.num % COAP_MAX_PAYLOADS(session)) + 1 !=
1715 COAP_MAX_PAYLOADS(session)) ||
1717 delayqueue_cnt + 1 < COAP_NSTART(session)) ||
1718 COAP_PROTO_RELIABLE(session->proto))) {
1733 t_pdu = coap_pdu_duplicate(block_pdu, session,
1762 mid = coap_send_internal(session, block_pdu);
1780 coap_block_check_q_block1_xmit(coap_session_t *session, coap_tick_t now) {
1786 LL_FOREACH_SAFE(session->lg_xmit, lg_xmit, q) {
1803 coap_send_q_blocks(session, lg_xmit, block, &lg_xmit->pdu, COAP_SEND_SKIP_PDU);
1812 non_timeout = COAP_NON_TIMEOUT_TICKS(session);
1815 LL_DELETE(session->lg_xmit, lg_xmit);
1816 coap_block_delete_lg_xmit(session, lg_xmit);
1830 coap_block_check_q_block2_xmit(coap_session_t *session, coap_tick_t now) {
1836 LL_FOREACH_SAFE(session->lg_xmit, lg_xmit, q) {
1854 coap_send_q_blocks(session, lg_xmit, block, &lg_xmit->pdu, COAP_SEND_SKIP_PDU);
1863 non_timeout = COAP_NON_TIMEOUT_TICKS(session);
1866 LL_DELETE(session->lg_xmit, lg_xmit);
1867 coap_block_delete_lg_xmit(session, lg_xmit);
1929 coap_send_q_block1(coap_session_t *session,
1939 LL_FOREACH(session->lg_xmit, lg_xmit) {
1948 return coap_send_q_blocks(session, lg_xmit, block, request, send_request);
1959 coap_send_q_block2(coap_session_t *session,
1970 LL_FOREACH(session->lg_xmit, lg_xmit) {
1978 return coap_send_q_blocks(session, lg_xmit, block, response, send_response);
1989 coap_block_test_q_block(coap_session_t *session, coap_pdu_t *actual) {
1999 assert(session->block_mode & COAP_BLOCK_TRY_Q_BLOCK &&
2000 session->type == COAP_SESSION_TYPE_CLIENT &&
2006 coap_new_message_id(session),
2007 coap_session_max_pdu_size(session));
2012 coap_session_new_token(session, &token_len, token);
2019 set_block_mode_probe_q(session->block_mode);
2020 mid = coap_send_internal(session, pdu);
2023 session->remote_test_mid = mid;
2029 coap_block_new_lg_crcv(coap_session_t *session, coap_pdu_t *pdu,
2032 uint64_t state_token = STATE_TOKEN_FULL(++session->tx_token, 1);
2045 coap_session_str(session), (void *)lg_crcv,
2058 coap_block_delete_lg_crcv(session, lg_crcv);
2071 coap_block_delete_lg_crcv(session, lg_crcv);
2096 coap_block_delete_lg_crcv(coap_session_t *session,
2101 (void)session;
2110 coap_session_str(session), (void *)lg_crcv);
2122 coap_block_delete_lg_srcv(coap_session_t *session,
2125 (void)session;
2136 coap_session_str(session), (void *)lg_srcv);
2142 coap_block_delete_lg_xmit(coap_session_t *session,
2148 lg_xmit->release_func(session, lg_xmit->app_ptr);
2159 coap_session_str(session), (void *)lg_xmit);
2213 coap_handle_request_send_block(coap_session_t *session,
2235 if (coap_get_block_b(session, pdu, COAP_OPTION_Q_BLOCK2, &block)) {
2236 if (!(session->block_mode & COAP_BLOCK_HAS_Q_BLOCK))
2237 set_block_mode_has_q(session->block_mode);
2241 if (coap_get_block_b(session, pdu, COAP_OPTION_BLOCK2, &alt_block)) {
2258 p = coap_find_lg_xmit_response(session, pdu, resource, query);
2263 out_blocks = coap_malloc_type(COAP_STRING, sizeof(send_track) * COAP_MAX_PAYLOADS(session));
2348 if ((num % COAP_MAX_PAYLOADS(session)) == 0) {
2354 for (i = 0; i < COAP_MAX_PAYLOADS(session) &&
2357 COAP_MAX_PAYLOADS(session));
2362 for (i = 0; i < COAP_MAX_PAYLOADS(session) -
2363 num % COAP_MAX_PAYLOADS(session) &&
2366 COAP_MAX_PAYLOADS(session));
2371 COAP_MAX_PAYLOADS(session));
2400 out_pdu = coap_pdu_duplicate(&p->pdu, session, p->pdu.actual_token.length,
2403 out_pdu = coap_pdu_duplicate(&p->pdu, session, pdu->actual_token.length,
2486 coap_send_internal(session, out_pdu);
2577 coap_session_t *session,
2599 if (coap_get_block_b(session, pdu, COAP_OPTION_BLOCK1, &block)) {
2612 else if (coap_get_block_b(session, pdu, COAP_OPTION_Q_BLOCK1, &block)) {
2614 set_block_mode_has_q(session->block_mode);
2643 LL_FOREACH(session->lg_srcv, p) {
2676 coap_session_str(session), (void *)p);
2699 LL_PREPEND(session->lg_srcv, p);
2725 if (session->block_mode &
2741 coap_handle_event(context, COAP_EVENT_PARTIAL_BLOCK, session);
2756 block.num / COAP_MAX_PAYLOADS(session);
2782 (p->rec_blocks.range[0].end % COAP_MAX_PAYLOADS(session)) + 1
2783 == COAP_MAX_PAYLOADS(session)) {
2791 if (COAP_PROTO_RELIABLE(session->proto) ||
2862 LL_DELETE(session->lg_srcv, p);
2863 coap_block_delete_lg_srcv(session, p);
2913 check_freshness(coap_session_t *session, coap_pdu_t *rcvd, coap_pdu_t *sent,
2957 echo_pdu = coap_pdu_duplicate(sent, session, ltoken_len, ltoken, NULL);
2969 if (session->oscore_encryption &&
2980 mid = coap_send_internal(session, echo_pdu);
2987 coap_delete_bin_const(session->echo);
2988 session->echo = coap_new_bin_const(coap_opt_value(opt),
2996 track_echo(coap_session_t *session, coap_pdu_t *rcvd) {
3001 coap_delete_bin_const(session->echo);
3002 session->echo = coap_new_bin_const(coap_opt_value(opt),
3022 coap_handle_response_send_block(coap_session_t *session, coap_pdu_t *sent,
3031 LL_FOREACH_SAFE(session->lg_xmit, p, q) {
3045 coap_get_block_b(session, rcvd, p->option, &block)) {
3077 track_echo(session, rcvd);
3105 LL_FOREACH(session->lg_crcv, lg_crcv) {
3122 pdu = coap_pdu_duplicate(&p->pdu, session, len, buf, NULL);
3152 if (coap_send_q_block1(session, block, pdu,
3156 } else if (coap_send_internal(session, pdu) == COAP_INVALID_MID)
3159 if (coap_send_internal(session, pdu) == COAP_INVALID_MID)
3165 if (check_freshness(session, rcvd, sent, p, NULL))
3170 if (coap_get_block_b(session, rcvd, COAP_OPTION_Q_BLOCK2, &block) ||
3171 coap_get_block_b(session, rcvd, COAP_OPTION_Q_BLOCK1, &block))
3189 if (COAP_PROTO_RELIABLE(session->proto) ||
3207 i < COAP_MAX_PAYLOADS(session); i++) {
3220 pdu = coap_pdu_duplicate(&p->pdu, session, ltoken_length,
3238 if (coap_send_internal(session, pdu) == COAP_INVALID_MID)
3252 coap_handle_event(session->context, COAP_EVENT_XMIT_BLOCK_FAIL, session);
3256 if (session->lg_crcv) {
3257 LL_FOREACH(session->lg_crcv, lg_crcv) {
3275 LL_DELETE(session->lg_xmit, p);
3276 coap_block_delete_lg_xmit(session, p);
3336 coap_session_t *session,
3357 LL_FOREACH(session->lg_crcv, p) {
3383 if (coap_get_block_b(session, rcvd, COAP_OPTION_BLOCK2, &block)) {
3388 if (coap_get_block_b(session, rcvd, COAP_OPTION_Q_BLOCK2, &qblock)) {
3396 if (!(session->block_mode & COAP_BLOCK_HAS_Q_BLOCK)) {
3397 set_block_mode_has_q(session->block_mode);
3401 track_echo(session, rcvd);
3478 if (!(session->block_mode & COAP_BLOCK_SINGLE_BODY))
3479 coap_handle_event(context, COAP_EVENT_PARTIAL_BLOCK, session);
3485 coap_session_new_token(session, &len, buf);
3488 pdu = coap_pdu_duplicate(&p->pdu, session, len, buf, &drop_options);
3497 if (coap_send_internal(session, pdu) == COAP_INVALID_MID)
3534 uint32_t this_payload_set = block.num / COAP_MAX_PAYLOADS(session);
3543 coap_request_missing_q_block2(session, p);
3549 coap_handle_event(context, COAP_EVENT_PARTIAL_BLOCK, session);
3562 if ((session->block_mode & COAP_SINGLE_BLOCK_OR_Q) || block.bert) {
3587 if (check_all_blocks_in_for_payload_set(session,
3592 block.num / COAP_MAX_PAYLOADS(session) + 1;
3593 if (check_any_blocks_next_payload_set(session,
3596 coap_request_missing_q_block2(session, p);
3604 if (COAP_PROTO_RELIABLE(session->proto) ||
3615 pdu = coap_pdu_duplicate(&p->pdu, session, len, buf, NULL);
3631 if (coap_send_internal(session, pdu) == COAP_INVALID_MID)
3634 if ((session->block_mode & COAP_SINGLE_BLOCK_OR_Q) || block.bert)
3653 if ((session->block_mode & COAP_SINGLE_BLOCK_OR_Q) || block.bert) {
3685 if (context->response_handler(session, sent, rcvd,
3687 coap_send_rst(session, rcvd);
3689 coap_send_ack(session, rcvd);
3691 coap_send_ack(session, rcvd);
3696 LL_DELETE(session->lg_crcv, p);
3697 coap_block_delete_lg_crcv(session, p);
3732 if (check_freshness(session, rcvd,
3733 (session->oscore_encryption == 0) ? sent : NULL,
3736 if (check_freshness(session, rcvd, sent, NULL, p))
3748 p->last_used = p->last_used - COAP_MAX_TRANSMIT_WAIT_TICKS(session) +
3763 if (coap_get_block_b(session, rcvd, COAP_OPTION_BLOCK2, &block)
3766 coap_get_block_b(session, rcvd, COAP_OPTION_Q_BLOCK2, &block)
3770 coap_session_str(session));
3774 if (coap_get_block_b(session, rcvd, COAP_OPTION_BLOCK2, &block)) {
3776 if (session->block_mode & COAP_BLOCK_PROBE_Q_BLOCK) {
3777 set_block_mode_drop_q(session->block_mode);
3796 else if (coap_get_block_b(session, rcvd, COAP_OPTION_Q_BLOCK2, &block)) {
3800 if (!(session->block_mode & COAP_BLOCK_HAS_Q_BLOCK)) {
3801 set_block_mode_has_q(session->block_mode);
3806 coap_lg_crcv_t *lg_crcv = coap_block_new_lg_crcv(session, sent, NULL);
3809 LL_PREPEND(session->lg_crcv, lg_crcv);
3810 return coap_handle_response_get_block(context, session, sent, rcvd,
3814 track_echo(session, rcvd);
3816 coap_lg_crcv_t *lg_crcv = coap_block_new_lg_crcv(session, sent, NULL);
3819 LL_PREPEND(session->lg_crcv, lg_crcv);
3820 return coap_handle_response_get_block(context, session, sent, rcvd,
3835 LL_DELETE(session->lg_crcv, p);
3836 coap_block_delete_lg_crcv(session, p);
3843 coap_send_ack(session, rcvd);
3851 coap_check_code_lg_xmit(const coap_session_t *session,
3859 lg_xmit = coap_find_lg_xmit_response(session, request, resource, query);
3869 coap_check_update_token(coap_session_t *session, coap_pdu_t *pdu) {
3876 if (session->lg_crcv) {
3877 LL_FOREACH(session->lg_crcv, lg_crcv) {
3889 if (COAP_PDU_IS_REQUEST(pdu) && session->lg_xmit) {
3890 LL_FOREACH(session->lg_xmit, lg_xmit) {