示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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);
}
示例#4
0
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;
}