static void free_observer(struct smcp_observer_s *observer) { smcp_observable_t const context = observer->observable; int8_t i = observer - observer_table; #if SMCP_EMBEDDED smcp_t const interface = smcp_get_current_instance(); #else if(!observer->observable) goto bail; smcp_t const interface = observer->observable->interface; #endif smcp_transaction_end(interface, &observer->transaction); if((context->first_observer==i+1) && (context->last_observer==i+1)) { context->first_observer = context->last_observer = 0; } else if(context->first_observer==i+1) { context->first_observer = observer_table[i].next; } else { int8_t prev; for(prev = context->first_observer-1; prev>=0; i = observer_table[i].next - 1) { if(observer_table[prev].next == i) break; } observer_table[prev].next = observer_table[i].next; if(context->last_observer == i+1) context->last_observer = prev; } bail: smcp_finish_async_response(&observer->async_response); return; }
static smcp_status_t async_response_ack_handler(int statuscode, void* context) { smcp_curl_request_t request = (smcp_curl_request_t)context; struct smcp_async_response_s* async_response = &request->async_response; smcp_finish_async_response(async_response); smcp_curl_request_release(request); return SMCP_STATUS_OK; }
static void async_response_ack_handler(int statuscode, void* context) { struct smcp_async_response_s* async_response = (void*)context; printf(" *** Finished sending async response.\n"); printf(" * RESULT CODE = %d (%s)\n", statuscode, (statuscode>0)?coap_code_to_cstr(statuscode):smcp_status_to_cstr(statuscode)); smcp_finish_async_response(async_response); }
smcp_status_t plugtest_separate_async_ack_handler(int statuscode, void* context) { struct smcp_async_response_s* async_response = (void*)context; #if !SMCP_AVOID_PRINTF || VERBOSE_DEBUG printf("Finished sending async response. code=%d async_response=%p\n",statuscode,async_response); #endif if(statuscode == SMCP_STATUS_TRANSACTION_INVALIDATED) { smcp_finish_async_response(async_response); free(async_response); } return SMCP_STATUS_OK; }