Beispiel #1
0
smcp_status_t
plugtest_separate_async_resend_response(void* context)
{
	smcp_status_t ret = 0;
	struct smcp_async_response_s* async_response = (void*)context;

#if !SMCP_AVOID_PRINTF || VERBOSE_DEBUG
	printf("Resending async response. . . %p\n",async_response);
#endif

	ret = smcp_outbound_begin_async_response(COAP_RESULT_205_CONTENT,async_response);
	require_noerr(ret,bail);

	ret = smcp_outbound_add_option_uint(COAP_OPTION_CONTENT_TYPE, COAP_CONTENT_TYPE_TEXT_PLAIN);
	require_noerr(ret,bail);

	ret = smcp_outbound_append_content("This was an asynchronous response!",SMCP_CSTR_LEN);
	require_noerr(ret,bail);

	ret = smcp_outbound_send();
	require_noerr(ret,bail);

bail:
	return ret;
}
Beispiel #2
0
smcp_status_t
resend_async_response(void* context) {
	smcp_status_t ret = 0;
	struct smcp_async_response_s* async_response = (void*)context;

	ret = smcp_outbound_begin_async_response(COAP_RESULT_205_CONTENT,async_response);
	require_noerr(ret,bail);

	ret = smcp_outbound_add_option_uint(COAP_OPTION_CONTENT_TYPE, COAP_CONTENT_TYPE_TEXT_PLAIN);
	require_noerr(ret,bail);

	ret = smcp_outbound_set_content_formatted("This was an asynchronous response!");
	require_noerr(ret,bail);

	ret = smcp_outbound_send();
	require_noerr(ret,bail);

	if(ret) {
		assert_printf(
			"smcp_outbound_send() returned error %d(%s).\n",
			ret,
			smcp_status_to_cstr(ret)
		);
		goto bail;
	}

bail:
	return ret;
}
Beispiel #3
0
static smcp_status_t
resend_async_response(void* context) {
    smcp_status_t ret = 0;
    smcp_curl_request_t request = (smcp_curl_request_t)context;
    struct smcp_async_response_s* async_response = &request->async_response;

    coap_size_t len = (coap_size_t)request->content_len;
    if(len>512) {
        len = 512;
    }

    {
        uint16_t code;
        curl_easy_getinfo(request->curl, CURLINFO_RESPONSE_CODE,&code);
        code = http_to_coap_code(code);

        ret = smcp_outbound_begin_async_response(code,async_response);
        require_noerr(ret,bail);
    }

    {
        const char* content_type_string;
        curl_easy_getinfo(request->curl, CURLINFO_CONTENT_TYPE,&content_type_string);
        coap_content_type_t content_type = coap_content_type_from_cstr(content_type_string);
        if(content_type!=COAP_CONTENT_TYPE_UNKNOWN) {
            ret = smcp_outbound_add_option_uint(COAP_OPTION_CONTENT_TYPE, content_type);
            check_noerr(ret);
        } else {
            DEBUG_PRINTF("Unrecognised content-type: %s",content_type_string);
        }
    }

    ret = smcp_outbound_append_content(request->content, len);
    require_noerr(ret,bail);

    ret = smcp_outbound_send();
    require_noerr(ret,bail);

    if(ret) {
        assert_printf(
            "smcp_outbound_send() returned error %d(%s).\n",
            ret,
            smcp_status_to_cstr(ret)
        );
        goto bail;
    }

bail:
    return ret;
}
Beispiel #4
0
smcp_status_t
cgi_node_async_resend_response(void* context)
{
	smcp_status_t ret = 0;
	cgi_node_request_t request = context;
	coap_size_t block_len = (1<<((request->block2&0x7)+4));
	coap_size_t max_len;

	syslog(LOG_INFO, "cgi-node: Resending async response. . .");

	ret = smcp_outbound_begin_async_response(COAP_RESULT_205_CONTENT,&request->async_response);
	require_noerr(ret,bail);

//	ret = smcp_outbound_add_option_uint(COAP_OPTION_CONTENT_TYPE, COAP_CONTENT_TYPE_TEXT_PLAIN);
//	require_noerr(ret,bail);

	if(request->block1!=BLOCK_OPTION_UNSPECIFIED) {
		ret = smcp_outbound_add_option_uint(COAP_OPTION_BLOCK1,request->block1);
		require_noerr(ret,bail);
	}

	if(request->state == CGI_NODE_STATE_ACTIVE_BLOCK2_WAIT_ACK) {
		if(request->stdout_buffer_len>block_len || request->fd_cmd_stdout>=0 || ((request->block2>>4)!=0)) {
			if(request->stdout_buffer_len>block_len || request->fd_cmd_stdout>=0)
				request->block2 |= (1<<3);
			else
				request->block2 &= ~(1<<3);
			ret = smcp_outbound_add_option_uint(COAP_OPTION_BLOCK2,request->block2);
			require_noerr(ret,bail);
		}

		char *content = smcp_outbound_get_content_ptr(&max_len);
		require_noerr(ret,bail);

		memcpy(content,request->stdout_buffer,MIN(request->stdout_buffer_len,block_len));

		ret = smcp_outbound_set_content_len(MIN(request->stdout_buffer_len,block_len));
		require_noerr(ret,bail);
	}

	ret = smcp_outbound_send();
	require_noerr(ret,bail);

bail:
	return ret;
}