Lines Matching defs:lg_xmit
467 * Need to fix lg_xmit stateless token as using tokens from
470 if (pdu->lg_xmit)
471 pdu->lg_xmit->b.b1.state_token = lg_crcv->state_token;
550 * Find the response lg_xmit
557 coap_lg_xmit_t *lg_xmit;
565 LL_FOREACH(session->lg_xmit, lg_xmit) {
568 if (COAP_PDU_IS_REQUEST(&lg_xmit->pdu) ||
569 resource != lg_xmit->b.b2.resource ||
570 request->code != lg_xmit->b.b2.request_method ||
572 lg_xmit->b.b2.query ?
573 lg_xmit->b.b2.query : &empty)) {
577 /* lg_xmit is a response */
578 if (rtag_opt || lg_xmit->b.b2.rtag_set == 1) {
579 if (!(rtag_opt && lg_xmit->b.b2.rtag_set == 1))
581 if (lg_xmit->b.b2.rtag_length != rtag_length ||
582 memcmp(lg_xmit->b.b2.rtag, rtag, rtag_length) != 0)
585 return lg_xmit;
611 coap_lg_xmit_t *lg_xmit = NULL;
673 LL_FOREACH_SAFE(session->lg_xmit, lg_xmit, q) {
674 if (coap_binary_equal(&pdu->actual_token, lg_xmit->b.b1.app_token)) {
676 LL_DELETE(session->lg_xmit, lg_xmit);
677 coap_block_delete_lg_xmit(session, lg_xmit);
678 lg_xmit = NULL;
705 lg_xmit = coap_find_lg_xmit_response(session, request, resource, query);
706 if (lg_xmit) {
708 LL_DELETE(session->lg_xmit, lg_xmit);
709 coap_block_delete_lg_xmit(session, lg_xmit);
710 lg_xmit = NULL;
781 /* Only add in lg_xmit if more than one block needs to be handled */
784 lg_xmit = coap_malloc_type(COAP_LG_XMIT, sizeof(coap_lg_xmit_t));
785 if (!lg_xmit)
796 coap_log_debug("** %s: lg_xmit %p initialized\n",
797 coap_session_str(session), (void *)lg_xmit);
798 /* Update lg_xmit with large data information */
799 memset(lg_xmit, 0, sizeof(coap_lg_xmit_t));
800 lg_xmit->blk_size = blk_size;
801 lg_xmit->option = option;
802 lg_xmit->data = data;
803 lg_xmit->length = length;
805 lg_xmit->non_timeout_random_ticks =
808 lg_xmit->release_func = release_func;
809 lg_xmit->app_ptr = app_ptr;
810 pdu->lg_xmit = lg_xmit;
811 coap_ticks(&lg_xmit->last_obs);
812 coap_ticks(&lg_xmit->last_sent);
815 lg_xmit->b.b1.app_token = coap_new_binary(pdu->actual_token.length);
816 if (!lg_xmit->b.b1.app_token)
818 memcpy(lg_xmit->b.b1.app_token->s, pdu->actual_token.s,
824 lg_xmit->b.b1.count = 1;
825 lg_xmit->b.b1.state_token = STATE_TOKEN_FULL(++session->tx_token,
826 lg_xmit->b.b1.count);
847 lg_xmit->b.b2.resource = resource;
849 lg_xmit->b.b2.query = coap_new_string(query->length);
850 if (lg_xmit->b.b2.query) {
851 memcpy(lg_xmit->b.b2.query->s, query->s, query->length);
854 lg_xmit->b.b2.query = NULL;
858 lg_xmit->b.b2.rtag_length = (uint8_t)min(coap_opt_length(opt),
859 sizeof(lg_xmit->b.b2.rtag));
860 memcpy(lg_xmit->b.b2.rtag, coap_opt_value(opt), coap_opt_length(opt));
861 lg_xmit->b.b2.rtag_set = 1;
863 lg_xmit->b.b2.rtag_set = 0;
865 lg_xmit->b.b2.etag = etag;
866 lg_xmit->b.b2.request_method = request_method;
871 lg_xmit->b.b2.maxage_expire = coap_ticks_to_rt(now) + maxage;
873 lg_xmit->b.b2.maxage_expire = 0;
892 blk_size, lg_xmit->length))
897 lg_xmit->option,
903 memcpy(&lg_xmit->pdu, pdu, sizeof(lg_xmit->pdu));
904 lg_xmit->pdu.token = coap_malloc_type(COAP_PDU_BUF,
905 lg_xmit->pdu.used_size + lg_xmit->pdu.max_hdr_size);
906 if (!lg_xmit->pdu.token)
909 lg_xmit->pdu.alloc_size = lg_xmit->pdu.used_size;
910 lg_xmit->pdu.token += lg_xmit->pdu.max_hdr_size;
911 memcpy(lg_xmit->pdu.token, pdu->token, lg_xmit->pdu.used_size);
913 lg_xmit->pdu.data = lg_xmit->pdu.token + (pdu->data - pdu->token);
914 lg_xmit->pdu.actual_token.s = lg_xmit->pdu.token + pdu->e_token_length -
916 lg_xmit->pdu.actual_token.length = pdu->actual_token.length;
935 block.num = block.num << (lg_xmit->blk_size - blk_size);
936 lg_xmit->blk_size = blk_size;
937 chunk = (size_t)1 << (lg_xmit->blk_size + 4);
941 lg_xmit->option,
943 (block.num << 4) | (block.m << 3) | lg_xmit->blk_size),
948 if (rem > lg_xmit->length - block.num * chunk)
949 rem = lg_xmit->length - block.num * chunk;
954 lg_xmit->b.b1.bert_size = rem;
956 lg_xmit->last_block = -1;
958 /* Link the new lg_xmit in */
959 LL_PREPEND(session->lg_xmit,lg_xmit);
984 if (lg_xmit) {
985 coap_block_delete_lg_xmit(session, lg_xmit);
1152 LL_FOREACH_SAFE(session->lg_xmit, p, q) {
1156 LL_DELETE(session->lg_xmit, p);
1159 /* Delay until the lg_xmit needs to expire */
1168 LL_DELETE(session->lg_xmit, p);
1172 /* Delay until the lg_xmit needs to expire */
1639 coap_lg_xmit_t *lg_xmit,
1653 if (!lg_xmit) {
1668 pdu->lg_xmit = lg_xmit;
1674 lg_xmit->option == COAP_OPTION_Q_BLOCK2) ||
1683 token = STATE_TOKEN_FULL(lg_xmit->b.b1.state_token,++lg_xmit->b.b1.count);
1689 coap_option_filter_set(&drop_options, lg_xmit->option);
1708 size_t chunk = ((size_t)1 << (lg_xmit->blk_size + 4));
1711 lg_xmit->offset = block.num * chunk;
1712 block.m = lg_xmit->offset + chunk < lg_xmit->length;
1729 token = STATE_TOKEN_FULL(lg_xmit->b.b1.state_token,++lg_xmit->b.b1.count);
1736 if (!coap_update_option(block_pdu, lg_xmit->option,
1750 lg_xmit->length,
1751 lg_xmit->data,
1760 lg_xmit->last_block = block.num;
1771 lg_xmit->last_payload = 0;
1772 coap_ticks(&lg_xmit->last_all_sent);
1774 coap_ticks(&lg_xmit->last_payload);
1781 coap_lg_xmit_t *lg_xmit;
1786 LL_FOREACH_SAFE(session->lg_xmit, lg_xmit, q) {
1787 coap_tick_t non_timeout = lg_xmit->non_timeout_random_ticks;
1793 if (lg_xmit->last_payload) {
1794 if (lg_xmit->last_payload <= timed_out) {
1797 size_t chunk = (size_t)1 << (lg_xmit->blk_size + 4);
1800 block.num = (uint32_t)(lg_xmit->offset / chunk);
1801 block.m = lg_xmit->offset + chunk < lg_xmit->length;
1802 block.szx = lg_xmit->blk_size;
1803 coap_send_q_blocks(session, lg_xmit, block, &lg_xmit->pdu, COAP_SEND_SKIP_PDU);
1808 if (tim_rem > lg_xmit->last_payload - timed_out)
1809 tim_rem = lg_xmit->last_payload - timed_out;
1811 } else if (lg_xmit->last_all_sent) {
1813 if (lg_xmit->last_all_sent + 4 * non_timeout <= now) {
1815 LL_DELETE(session->lg_xmit, lg_xmit);
1816 coap_block_delete_lg_xmit(session, lg_xmit);
1818 /* Delay until the lg_xmit needs to expire */
1819 if (tim_rem > lg_xmit->last_all_sent + 4 * non_timeout - now)
1820 tim_rem = lg_xmit->last_all_sent + 4 * non_timeout - now;
1831 coap_lg_xmit_t *lg_xmit;
1836 LL_FOREACH_SAFE(session->lg_xmit, lg_xmit, q) {
1837 coap_tick_t non_timeout = lg_xmit->non_timeout_random_ticks;
1843 if (lg_xmit->last_payload) {
1844 if (lg_xmit->last_payload <= timed_out) {
1847 size_t chunk = (size_t)1 << (lg_xmit->blk_size + 4);
1850 block.num = (uint32_t)(lg_xmit->offset / chunk);
1851 block.m = lg_xmit->offset + chunk < lg_xmit->length;
1852 block.szx = lg_xmit->blk_size;
1853 if (block.num == (uint32_t)lg_xmit->last_block)
1854 coap_send_q_blocks(session, lg_xmit, block, &lg_xmit->pdu, COAP_SEND_SKIP_PDU);
1859 if (tim_rem > lg_xmit->last_payload - timed_out)
1860 tim_rem = lg_xmit->last_payload - timed_out;
1862 } else if (lg_xmit->last_all_sent) {
1864 if (lg_xmit->last_all_sent + 4 * non_timeout <= now) {
1866 LL_DELETE(session->lg_xmit, lg_xmit);
1867 coap_block_delete_lg_xmit(session, lg_xmit);
1869 /* Delay until the lg_xmit needs to expire */
1870 if (tim_rem > lg_xmit->last_all_sent + 4 * non_timeout - now)
1871 tim_rem = lg_xmit->last_all_sent + 4 * non_timeout - now;
1934 coap_lg_xmit_t *lg_xmit;
1939 LL_FOREACH(session->lg_xmit, lg_xmit) {
1940 if (lg_xmit->option == COAP_OPTION_Q_BLOCK1 &&
1941 (token_match == STATE_TOKEN_BASE(lg_xmit->b.b1.state_token) ||
1943 STATE_TOKEN_BASE(coap_decode_var_bytes8(lg_xmit->b.b1.app_token->s,
1944 lg_xmit->b.b1.app_token->length))))
1948 return coap_send_q_blocks(session, lg_xmit, block, request, send_request);
1967 coap_lg_xmit_t *lg_xmit;
1970 LL_FOREACH(session->lg_xmit, lg_xmit) {
1971 if (lg_xmit->option == COAP_OPTION_Q_BLOCK2 &&
1972 resource == lg_xmit->b.b2.resource &&
1973 request_method == lg_xmit->b.b2.request_method &&
1975 lg_xmit->b.b2.query ? lg_xmit->b.b2.query : &empty))
1978 return coap_send_q_blocks(session, lg_xmit, block, response, send_response);
2030 coap_lg_xmit_t *lg_xmit) {
2035 size_t data_len = lg_xmit ? lg_xmit->length :
2065 memcpy(lg_crcv->pdu.data, lg_xmit ? lg_xmit->data : pdu->data, data_len);
2143 coap_lg_xmit_t *lg_xmit) {
2144 if (lg_xmit == NULL)
2147 if (lg_xmit->release_func) {
2148 lg_xmit->release_func(session, lg_xmit->app_ptr);
2150 if (lg_xmit->pdu.token) {
2151 coap_free_type(COAP_PDU_BUF, lg_xmit->pdu.token - lg_xmit->pdu.max_hdr_size);
2153 if (COAP_PDU_IS_REQUEST(&lg_xmit->pdu))
2154 coap_delete_binary(lg_xmit->b.b1.app_token);
2156 coap_delete_string(lg_xmit->b.b2.query);
2158 coap_log_debug("** %s: lg_xmit %p released\n",
2159 coap_session_str(session), (void *)lg_xmit);
2160 coap_free_type(COAP_LG_XMIT, lg_xmit);
2271 /* lg_xmit (response) found */
2914 coap_lg_xmit_t *lg_xmit, coap_lg_crcv_t *lg_crcv) {
2920 if (sent || lg_xmit || lg_crcv) {
2934 } else if (lg_xmit) {
2935 sent = &lg_xmit->pdu;
2936 if (lg_xmit->length) {
2937 size_t blk_size = (size_t)1 << (lg_xmit->blk_size + 4);
2938 size_t offset = (lg_xmit->last_block + 1) * blk_size;
2940 data = &lg_xmit->data[offset];
2941 data_len = (lg_xmit->length - offset) > blk_size ? blk_size :
2942 lg_xmit->length - offset;
2949 if (lg_xmit) {
2950 token = STATE_TOKEN_FULL(lg_xmit->b.b1.state_token,
2951 ++lg_xmit->b.b1.count);
2973 if (lg_xmit) {
2974 lg_xmit->b.b1.state_token = token;
3031 LL_FOREACH_SAFE(session->lg_xmit, p, q) {
3040 /* lg_xmit found */
3275 LL_DELETE(session->lg_xmit, p);
3849 /* Check if lg_xmit generated and update PDU code if so */
3855 coap_lg_xmit_t *lg_xmit;
3859 lg_xmit = coap_find_lg_xmit_response(session, request, resource, query);
3860 if (lg_xmit && lg_xmit->pdu.code == 0) {
3861 lg_xmit->pdu.code = response->code;
3873 coap_lg_xmit_t *lg_xmit;
3889 if (COAP_PDU_IS_REQUEST(pdu) && session->lg_xmit) {
3890 LL_FOREACH(session->lg_xmit, lg_xmit) {
3891 if (coap_binary_equal(&pdu->actual_token, lg_xmit->b.b1.app_token))
3893 if (token_match == STATE_TOKEN_BASE(lg_xmit->b.b1.state_token)) {
3894 coap_update_token(pdu, lg_xmit->b.b1.app_token->length,
3895 lg_xmit->b.b1.app_token->s);