Lines Matching refs:lg_crcv

407   coap_lg_crcv_t *lg_crcv, *q;
419 LL_FOREACH_SAFE(session->lg_crcv, lg_crcv, q) {
420 if (lg_crcv->observe_set) {
421 if ((!token && !lg_crcv->app_token->length) || (token &&
422 coap_binary_equal(token, lg_crcv->app_token))) {
429 int using_q_block1 = coap_get_block_b(session, &lg_crcv->pdu,
432 coap_bin_const_t *otoken = lg_crcv->obs_token ?
433 lg_crcv->obs_token[0] ?
434 lg_crcv->obs_token[0] :
435 (coap_bin_const_t *)lg_crcv->app_token :
436 (coap_bin_const_t *)lg_crcv->app_token;
437 coap_pdu_t *pdu = coap_pdu_duplicate(&lg_crcv->pdu,
443 lg_crcv->observe_set = 0;
463 if (coap_get_data(&lg_crcv->pdu, &size, &data))
471 pdu->lg_xmit->b.b1.state_token = lg_crcv->state_token;
497 coap_lg_crcv_t *lg_crcv;
509 LL_FOREACH(session->lg_crcv, lg_crcv) {
510 if (token_match != STATE_TOKEN_BASE(lg_crcv->state_token) &&
511 !coap_binary_equal(&pdu->actual_token, lg_crcv->app_token)) {
516 /* lg_crcv found */
519 token = STATE_TOKEN_FULL(lg_crcv->state_token,
520 ++lg_crcv->retry_counter);
531 if (coap_get_data(&lg_crcv->pdu, &data_len, &data)) {
1205 coap_request_missing_q_block2(coap_session_t *session, coap_lg_crcv_t *lg_crcv) {
1223 if (lg_crcv->rec_blocks.used &&
1224 (lg_crcv->rec_blocks.used < 2 ||
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)))) {
1227 block = lg_crcv->rec_blocks.range[0].end + 1;
1228 block_size = (size_t)1 << (lg_crcv->szx + 4);
1230 if (sofar < lg_crcv->total_len) {
1233 pdu = coap_build_missing_pdu(session, lg_crcv);
1239 (block << 4) | (1 << 3) | lg_crcv->szx),
1247 for (i = 0; i < lg_crcv->rec_blocks.used; i++) {
1248 if (block < (int)lg_crcv->rec_blocks.range[i].begin &&
1249 lg_crcv->rec_blocks.range[i].begin != 0) {
1252 pdu = coap_build_missing_pdu(session, lg_crcv);
1259 for (; block < (int)lg_crcv->rec_blocks.range[i].begin &&
1263 (block << 4) | (0 << 3) | lg_crcv->szx),
1267 if (block < (int)lg_crcv->rec_blocks.range[i].end) {
1268 block = lg_crcv->rec_blocks.range[i].end;
1271 block_size = (size_t)1 << (lg_crcv->szx + 4);
1273 if (sofar < lg_crcv->total_len) {
1276 pdu = coap_build_missing_pdu(session, lg_crcv);
1280 sofar = (lg_crcv->total_len + block_size - 1)/block_size;
1288 (block << 4) | (0 << 3) | lg_crcv->szx),
1295 lg_crcv->rec_blocks.retry++;
1297 lg_crcv->rec_blocks.processing_payload_set = block_payload_set;
1298 coap_ticks(&lg_crcv->rec_blocks.last_seen);
1325 LL_FOREACH_SAFE(session->lg_crcv, p, q) {
1360 LL_DELETE(session->lg_crcv, p);
1363 /* Delay until the lg_crcv needs to expire */
1887 track_fetch_observe(coap_pdu_t *pdu, coap_lg_crcv_t *lg_crcv,
1894 if (opt && lg_crcv) {
1901 /* Save the token in lg_crcv */
1902 tmp = coap_realloc_type(COAP_STRING, lg_crcv->obs_token,
1903 (block_num + 1) * sizeof(lg_crcv->obs_token[0]));
1906 lg_crcv->obs_token = tmp;
1907 if (block_num + 1 == lg_crcv->obs_token_cnt)
1908 coap_delete_bin_const(lg_crcv->obs_token[block_num]);
1910 lg_crcv->obs_token_cnt = block_num + 1;
1911 lg_crcv->obs_token[block_num] = coap_new_bin_const(token->s,
1913 if (lg_crcv->obs_token[block_num] == NULL)
1916 /* Use the token in lg_crcv */
1917 if (block_num < lg_crcv->obs_token_cnt) {
1918 if (lg_crcv->obs_token[block_num]) {
1919 return lg_crcv->obs_token[block_num];
2031 coap_lg_crcv_t *lg_crcv;
2039 lg_crcv = coap_malloc_type(COAP_LG_CRCV, sizeof(coap_lg_crcv_t));
2041 if (lg_crcv == NULL)
2044 coap_log_debug("** %s: lg_crcv %p initialized - stateless token xxxx%012llx\n",
2045 coap_session_str(session), (void *)lg_crcv,
2047 memset(lg_crcv, 0, sizeof(coap_lg_crcv_t));
2048 lg_crcv->initial = 1;
2049 coap_ticks(&lg_crcv->last_used);
2051 memcpy(&lg_crcv->pdu, pdu, sizeof(lg_crcv->pdu));
2053 lg_crcv->pdu.max_size = token_options + data_len + 9;
2054 lg_crcv->pdu.used_size = token_options + data_len;
2055 lg_crcv->pdu.token = coap_malloc_type(COAP_PDU_BUF,
2056 token_options + data_len + lg_crcv->pdu.max_hdr_size);
2057 if (!lg_crcv->pdu.token) {
2058 coap_block_delete_lg_crcv(session, lg_crcv);
2061 lg_crcv->pdu.token += lg_crcv->pdu.max_hdr_size;
2062 memcpy(lg_crcv->pdu.token, pdu->token, token_options);
2063 if (lg_crcv->pdu.data) {
2064 lg_crcv->pdu.data = lg_crcv->pdu.token + token_options;
2065 memcpy(lg_crcv->pdu.data, lg_xmit ? lg_xmit->data : pdu->data, data_len);
2069 lg_crcv->app_token = coap_new_binary(pdu->actual_token.length);
2070 if (!lg_crcv->app_token) {
2071 coap_block_delete_lg_crcv(session, lg_crcv);
2074 memcpy(lg_crcv->app_token->s, pdu->actual_token.s, pdu->actual_token.length);
2077 lg_crcv->retry_counter = 1;
2078 lg_crcv->state_token = state_token;
2084 new_token = track_fetch_observe(pdu, lg_crcv, 0, &pdu->actual_token);
2090 coap_remove_option(&lg_crcv->pdu, COAP_OPTION_BLOCK1);
2092 return lg_crcv;
2097 coap_lg_crcv_t *lg_crcv) {
2103 if (lg_crcv == NULL)
2106 if (lg_crcv->pdu.token)
2107 coap_free_type(COAP_PDU_BUF, lg_crcv->pdu.token - lg_crcv->pdu.max_hdr_size);
2108 coap_free_type(COAP_STRING, lg_crcv->body_data);
2109 coap_log_debug("** %s: lg_crcv %p released\n",
2110 coap_session_str(session), (void *)lg_crcv);
2111 coap_delete_binary(lg_crcv->app_token);
2112 for (i = 0; i < lg_crcv->obs_token_cnt; i++) {
2113 coap_delete_bin_const(lg_crcv->obs_token[i]);
2115 coap_free_type(COAP_STRING, lg_crcv->obs_token);
2116 coap_free_type(COAP_LG_CRCV, lg_crcv);
2914 coap_lg_xmit_t *lg_xmit, coap_lg_crcv_t *lg_crcv) {
2920 if (sent || lg_xmit || lg_crcv) {
2944 } else { /* lg_crcv */
2945 sent = &lg_crcv->pdu;
2953 token = STATE_TOKEN_FULL(lg_crcv->state_token,
2954 ++lg_crcv->retry_counter);
2967 track_fetch_observe(echo_pdu, lg_crcv, 0, &echo_pdu->actual_token);
2976 lg_crcv->state_token = token;
3029 coap_lg_crcv_t *lg_crcv = NULL;
3105 LL_FOREACH(session->lg_crcv, lg_crcv) {
3106 if (coap_binary_equal(p->b.b1.app_token, lg_crcv->app_token)) {
3111 new_token = track_fetch_observe(&p->pdu, lg_crcv, block.num + 1,
3256 if (session->lg_crcv) {
3257 LL_FOREACH(session->lg_crcv, lg_crcv) {
3259 STATE_TOKEN_BASE(lg_crcv->state_token)) {
3261 lg_crcv->state_token = p->b.b1.state_token;
3266 if (!lg_crcv) {
3357 LL_FOREACH(session->lg_crcv, p) {
3368 /* lg_crcv found */
3696 LL_DELETE(session->lg_crcv, p);
3746 /* lg_crcv no longer required - cache it for 1 sec */
3806 coap_lg_crcv_t *lg_crcv = coap_block_new_lg_crcv(session, sent, NULL);
3808 if (lg_crcv) {
3809 LL_PREPEND(session->lg_crcv, lg_crcv);
3816 coap_lg_crcv_t *lg_crcv = coap_block_new_lg_crcv(session, sent, NULL);
3818 if (lg_crcv) {
3819 LL_PREPEND(session->lg_crcv, lg_crcv);
3835 LL_DELETE(session->lg_crcv, p);
3874 coap_lg_crcv_t *lg_crcv;
3876 if (session->lg_crcv) {
3877 LL_FOREACH(session->lg_crcv, lg_crcv) {
3878 if (coap_binary_equal(&pdu->actual_token, lg_crcv->app_token))
3880 if (token_match == STATE_TOKEN_BASE(lg_crcv->state_token)) {
3881 coap_update_token(pdu, lg_crcv->app_token->length,
3882 lg_crcv->app_token->s);