/*! Make sure the string has at least 12 bytes available! */ char * int32_to_dec_cstr(char s[],int32_t n) { if(n < 0) { s[0] = '-'; uint32_to_dec_cstr(s+1, (uint32_t)-n); return s; } return uint32_to_dec_cstr(s, (uint32_t)n); }
smcp_status_t smcp_outbound_set_var_content_unsigned_long_int(unsigned long int v) { smcp_outbound_add_option_uint( COAP_OPTION_CONTENT_TYPE, SMCP_CONTENT_TYPE_APPLICATION_FORM_URLENCODED ); #if SMCP_AVOID_PRINTF { char nstr[12]; smcp_outbound_append_content("v=", SMCP_CSTR_LEN); return smcp_outbound_append_content(uint32_to_dec_cstr(nstr,v), SMCP_CSTR_LEN); } #else return smcp_outbound_set_content_formatted_const("v=%ul",v); #endif }
smcp_status_t plugtest_obs_handler( struct plugtest_server_s *self ) { smcp_status_t ret = SMCP_STATUS_NOT_ALLOWED; smcp_method_t method = smcp_inbound_get_code(); if(method==COAP_METHOD_GET) { char* content = NULL; coap_size_t max_len = 0; ret = smcp_outbound_begin_response(COAP_RESULT_205_CONTENT); require_noerr(ret, bail); ret = smcp_outbound_add_option_uint(COAP_OPTION_CONTENT_TYPE, COAP_CONTENT_TYPE_TEXT_PLAIN); require_noerr(ret, bail); if(!smcp_timer_is_scheduled(smcp_get_current_instance(), &self->obs_timer)) plugtest_obs_timer_callback(smcp_get_current_instance(),self); ret = smcp_observable_update(&self->observable,PLUGTEST_OBS_KEY); check_noerr(ret); ret = smcp_outbound_add_option_uint(COAP_OPTION_MAX_AGE,10); require_noerr(ret, bail); content = smcp_outbound_get_content_ptr(&max_len); require_action(content!=NULL, bail, ret = SMCP_STATUS_FAILURE); require_action(max_len>11, bail, ret = SMCP_STATUS_MESSAGE_TOO_BIG); ret = smcp_outbound_set_content_len( (coap_size_t)strlen(uint32_to_dec_cstr(content, (uint32_t)time(NULL))) ); require_noerr(ret, bail); ret = smcp_outbound_send(); require_noerr(ret, bail); } bail: return ret; }