char * get_next_arg(char * buffer, char** end) { // skip arg buffer = get_end_of_arg(buffer); // skip space buffer = prv_end_of_space(buffer); if (NULL != end) { *end = get_end_of_arg(buffer); } return buffer; }
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"); }
static void prv_object_dump(char * buffer, void * user_data) { lwm2m_context_t * lwm2mH = (lwm2m_context_t *) user_data; lwm2m_uri_t uri; char * end = NULL; int result; lwm2m_object_t * objectP; uint16_t i; 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; if (uri.flag & LWM2M_URI_FLAG_RESOURCE_ID) goto syntax_error; objectP = prv_find_object(lwm2mH, uri.objectId); if (objectP == NULL) { fprintf(stdout, "Object not found.\n"); return; } if (uri.flag & LWM2M_URI_FLAG_INSTANCE_ID) { prv_instance_dump(objectP, uri.instanceId); } else { lwm2m_list_t * instanceP; for (instanceP = objectP->instanceList; instanceP != NULL ; instanceP = instanceP->next) { fprintf(stdout, "Instance %d:\r\n", instanceP->id); prv_instance_dump(objectP, instanceP->id); fprintf(stdout, "\r\n"); } } return; syntax_error: fprintf(stdout, "Syntax error !\n"); }
static void prv_bootstrap_client(char * buffer, void * user_data) { internal_data_t * dataP = (internal_data_t *)user_data; char * uri; char * name; char* end = NULL; char * host; char * port; connection_t * newConnP = NULL; uri = buffer; end = get_end_of_arg(buffer); if (end[0] != 0) { *end = 0; buffer = end + 1; name = get_next_arg(buffer, &end); } if (!check_end_of_args(end)) goto syntax_error; // parse uri in the form "coaps://[host]:[port]" if (0==strncmp(uri, "coaps://", strlen("coaps://"))) { host = uri+strlen("coaps://"); } else if (0==strncmp(uri, "coap://", strlen("coap://"))) { host = uri+strlen("coap://"); } else { goto syntax_error; } port = strrchr(host, ':'); if (port == NULL) goto syntax_error; // remove brackets if (host[0] == '[') { host++; if (*(port - 1) == ']') { *(port - 1) = 0; } else goto syntax_error; } // split strings *port = 0; port++; fprintf(stderr, "Trying to connect to LWM2M CLient at %s:%s\r\n", host, port); newConnP = connection_create(dataP->connList, dataP->sock, host, port); if (newConnP == NULL) { fprintf(stderr, "Connection creation failed.\r\n"); return; } dataP->connList = newConnP; // simulate a client bootstrap request. if (COAP_204_CHANGED == prv_bootstrap_callback(newConnP, COAP_NO_ERROR, NULL, name, user_data)) { fprintf(stdout, "OK"); } else { fprintf(stdout, "Error"); } return; syntax_error: fprintf(stdout, "Syntax error !"); }