static void prv_change(char * buffer, void * user_data) { lwm2m_context_t * lwm2mH = (lwm2m_context_t *) user_data; lwm2m_uri_t uri; char * end = NULL; int result; end = get_end_of_arg(buffer); if (end[0] == 0) goto syntax_error; result = lwm2m_stringToUri(buffer, end - buffer, &uri); if (result == 0) goto syntax_error; buffer = get_next_arg(end, &end); if (buffer[0] == 0) { fprintf(stderr, "report change!\n"); lwm2m_resource_value_changed(lwm2mH, &uri); } else { handle_value_changed(lwm2mH, &uri, buffer, end - buffer); } return; syntax_error: fprintf(stdout, "Syntax error !\n"); }
void handle_value_changed(lwm2m_context_t * lwm2mH, lwm2m_uri_t * uri, const char * value, size_t valueLength) { lwm2m_object_t * object = (lwm2m_object_t *)LWM2M_LIST_FIND(lwm2mH->objectList, uri->objectId); if (NULL != object) { if (object->writeFunc != NULL) { lwm2m_data_t * dataP; int result; dataP = lwm2m_data_new(1); if (dataP == NULL) { fprintf(stderr, "Internal allocation failure !\n"); return; } dataP->id = uri->resourceId; lwm2m_data_encode_nstring(value, valueLength, dataP); result = object->writeFunc(uri->instanceId, 1, dataP, object); if (COAP_405_METHOD_NOT_ALLOWED == result) { switch (uri->objectId) { case LWM2M_DEVICE_OBJECT_ID: result = device_change(dataP, object); break; default: break; } } if (COAP_204_CHANGED != result) { fprintf(stderr, "Failed to change value!\n"); } else { fprintf(stderr, "value changed!\n"); lwm2m_resource_value_changed(lwm2mH, uri); } lwm2m_data_free(1, dataP); return; } else { fprintf(stderr, "write not supported for specified resource!\n"); } return; } else { fprintf(stderr, "Object not found !\n"); } }
void handle_value_changed(lwm2m_context_t * lwm2mH, lwm2m_uri_t * uri, const char * value, size_t valueLength) { lwm2m_object_t * object = prv_find_object(lwm2mH, uri->objectId); if (NULL != object) { if (object->writeFunc != NULL) { lwm2m_data_t * dataP; int result; dataP = lwm2m_data_new(1); if (dataP == NULL) { fprintf(stderr, "Internal allocation failure !\n"); return; } dataP->flags = LWM2M_TLV_FLAG_STATIC_DATA | LWM2M_TLV_FLAG_TEXT_FORMAT; #ifdef LWM2M_BOOTSTRAP if (lwm2mH->bsState == BOOTSTRAP_PENDING) { dataP->flags |= LWM2M_TLV_FLAG_BOOTSTRAPPING; } #endif dataP->id = uri->resourceId; dataP->length = valueLength; dataP->value = (uint8_t*) value; result = object->writeFunc(uri->instanceId, 1, dataP, object); if (COAP_405_METHOD_NOT_ALLOWED == result) { switch (uri->objectId) { case LWM2M_DEVICE_OBJECT_ID: result = device_change(dataP, object); break; default: break; } } if (COAP_204_CHANGED != result) { fprintf(stderr, "Failed to change value!\n"); } else { fprintf(stderr, "value changed!\n"); lwm2m_resource_value_changed(lwm2mH, uri); } lwm2m_data_free(1, dataP); return; } else { fprintf(stderr, "write not supported for specified resource!\n"); } return; } else { fprintf(stderr, "Object not found !\n"); } }