/*---------------------------------------------------------------------------*/ PROCESS_THREAD(coap_engine, ev, data, buf) { PROCESS_BEGIN(); #if 0 /* This is not used in Zephyr. */ PRINTF("Starting %s receiver...\n", coap_rest_implementation.name); rest_activate_resource(&res_well_known_core, ".well-known/core"); coap_register_as_transaction_handler(); coap_init_connection(SERVER_LISTEN_PORT); while(1) { PROCESS_YIELD(); if(ev == tcpip_event) { coap_engine_receive(COAP_CONTEXT_NONE); } else if(ev == PROCESS_EVENT_TIMER) { /* retransmissions are handled here */ coap_check_transactions(); } } /* while (1) */ #endif /* 0 */ PROCESS_END(); }
/*---------------------------------------------------------------------------*/ static int get_from_peer(struct dtls_context_t *ctx, session_t *session, uint8 *data, size_t len) { coap_context_t *coap_ctx; coap_ctx = dtls_get_app_data(ctx); if(coap_ctx != COAP_CONTEXT_NONE && coap_ctx->is_used) { uip_len(coap_ctx->buf) = len; memmove(uip_appdata(coap_ctx->buf), data, len); coap_engine_receive(coap_ctx); } return 0; }
/*---------------------------------------------------------------------------*/ int coap_context_wait_data(coap_context_t *coap_ctx, int32_t ticks) { struct net_buf *buf; buf = net_receive(coap_ctx->net_ctx, ticks); if (buf) { PRINTF("coap-context: got message from "); PRINT6ADDR(&UIP_IP_BUF(buf)->srcipaddr); PRINTF(":%d %u bytes\n", uip_ntohs(UIP_UDP_BUF(buf)->srcport), uip_appdatalen(buf)); PRINTF("Received data appdata %p appdatalen %d\n", ip_buf_appdata(buf), ip_buf_appdatalen(buf)); coap_ctx->buf = buf; coap_engine_receive(coap_ctx); return 1; } return 0; }