int InitPostRequest(OCQualityOfService qos) { OCStackResult result; OC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); std::ostringstream query; query << (coapSecureResource ? "coaps://" : "coap://") << coapServerIP << ":" << coapServerPort << coapServerResource; // First POST operation (to create an LED instance) result = InvokeOCDoResource(query, OC_REST_POST, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0); if (OC_STACK_OK != result) { // Error can happen if for example, network connectivity is down OC_LOG(INFO, TAG, "First POST call did not succeed"); } // Second POST operation (to create an LED instance) result = InvokeOCDoResource(query, OC_REST_POST, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0); if (OC_STACK_OK != result) { OC_LOG(INFO, TAG, "Second POST call did not succeed"); } // This POST operation will update the original resourced /a/led return (InvokeOCDoResource(query, OC_REST_POST, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0)); }
int InitPostRequest(OCQualityOfService qos) { OCStackResult result; std::ostringstream query; query << coapServerResource; OIC_LOG_V(INFO, TAG, "\nExecuting %s with query %s", __func__, query.str().c_str()); // First POST operation (to create an Light instance) result = InvokeOCDoResource(query, &serverAddr, OC_REST_POST, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0); if (OC_STACK_OK != result) { // Error can happen if for example, network connectivity is down OIC_LOG(INFO, TAG, "First POST call did not succeed"); } // Second POST operation (to create an Light instance) result = InvokeOCDoResource(query, &serverAddr, OC_REST_POST, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0); if (OC_STACK_OK != result) { OIC_LOG(INFO, TAG, "Second POST call did not succeed"); } // This POST operation will update the original resourced /a/light return (InvokeOCDoResource(query, &serverAddr, OC_REST_POST, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0)); }
int InitPostRequest(OCQualityOfService qos) { OCStackResult result; OIC_LOG_V(INFO, TAG, "Executing %s", __func__); std::ostringstream query; query << coapServerResource; endpoint.flags = (OCTransportFlags)(endpoint.flags|OC_SECURE); // First POST operation (to create an LED instance) result = InvokeOCDoResource(query, OC_REST_POST, &endpoint, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0); if (OC_STACK_OK != result) { // Error can happen if for example, network connectivity is down OIC_LOG(INFO, TAG, "First POST call did not succeed"); } // Second POST operation (to create an LED instance) result = InvokeOCDoResource(query, OC_REST_POST, &endpoint, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0); if (OC_STACK_OK != result) { OIC_LOG(INFO, TAG, "Second POST call did not succeed"); } // This POST operation will update the original resourced /a/led return (InvokeOCDoResource(query, OC_REST_POST, &endpoint, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0)); }
OCStackResult GetProvisioningStatus(OCQualityOfService qos, const char *query, const OCDevAddr *destination) { OCStackResult ret = OC_STACK_ERROR; OCHeaderOption options[MAX_HEADER_OPTIONS]; OIC_LOG_V(INFO, ES_WIFI_PROV_TAG, "\n\nExecuting %s", __func__); uint8_t option0[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; uint8_t option1[] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; memset(options, 0, sizeof(OCHeaderOption) * MAX_HEADER_OPTIONS); options[0].protocolID = OC_COAP_ID; options[0].optionID = 2048; memcpy(options[0].optionData, option0, sizeof(option0)); options[0].optionLength = 10; options[1].protocolID = OC_COAP_ID; options[1].optionID = 3000; memcpy(options[1].optionData, option1, sizeof(option1)); options[1].optionLength = 10; ret = InvokeOCDoResource(query, OC_REST_GET, destination, qos, GetProvisioningStatusResponse, NULL, options, 2); return ret; }
int InitPutRequest() { OC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); std::ostringstream query; query << "coap://" << coapServerIP << ":" << coapServerPort << coapServerResource; return (InvokeOCDoResource(query, OC_REST_PUT, OC_LOW_QOS, putReqCB, NULL, 0)); }
void* RequestDeleteDeathResourceTask(void* myqos) { sleep (30);//long enough to give the server time to finish deleting the resource. std::ostringstream query; query << coapServerResource; OIC_LOG_V(INFO, TAG, "\nExecuting %s with query %s", __func__, query.str().c_str()); // Second DELETE operation to delete the resource that might have been removed already. OCQualityOfService qos; if (myqos == NULL) { qos = OC_LOW_QOS; } else { qos = OC_HIGH_QOS; } OCStackResult result = InvokeOCDoResource(query, &serverAddr, OC_REST_DELETE, qos, deleteReqCB, NULL, 0); if (OC_STACK_OK != result) { OIC_LOG(INFO, TAG, "Second DELETE call did not succeed"); } return NULL; }
int InitDeleteRequest(OCQualityOfService qos) { OCStackResult result; std::ostringstream query; query << coapServerResource; OIC_LOG_V(INFO, TAG, "\nExecuting %s with query %s", __func__, query.str().c_str()); // First DELETE operation result = InvokeOCDoResource(query, &serverAddr, OC_REST_DELETE, qos, deleteReqCB, NULL, 0); if (OC_STACK_OK != result) { // Error can happen if for example, network connectivity is down OIC_LOG(INFO, TAG, "First DELETE call did not succeed"); } else { //Create a thread to delete this resource again pthread_t threadId; pthread_create (&threadId, NULL, RequestDeleteDeathResourceTask, (void*)qos); } OIC_LOG_V(INFO, TAG, "\n\nExit %s", __func__); return result; }
OCStackApplicationResult discoveryReqCB(void* ctx, OCDoHandle handle, OCClientResponse * clientResponse) { uint8_t remoteIpAddr[4]; uint16_t remotePortNu; if (ctx == (void*) DEFAULT_CONTEXT_VALUE) { printf ("Callback Context for DISCOVER query recvd successfully\n"); } if (clientResponse) { printf ("StackResult: %s\n", getResult(clientResponse->result)); OCDevAddrToIPv4Addr((OCDevAddr *) clientResponse->addr, remoteIpAddr, remoteIpAddr + 1, remoteIpAddr + 2, remoteIpAddr + 3); OCDevAddrToPort((OCDevAddr *) clientResponse->addr, &remotePortNu); printf ("Device =============> Discovered %s @ %d.%d.%d.%d:%d\n", clientResponse->resJSONPayload, remoteIpAddr[0], remoteIpAddr[1], remoteIpAddr[2], remoteIpAddr[3], remotePortNu); parseClientResponse(clientResponse); // Init GET request to the server. printf ("\n\nExecuting %s\n", __func__); std::ostringstream query; query << "coap://" << coapServerIP << ":" << coapServerPort << coapServerResource; InvokeOCDoResource(query, OC_REST_GET, OC_LOW_QOS, getReqCB, NULL, 0); } return (UNICAST_DISCOVERY) ? OC_STACK_DELETE_TRANSACTION : OC_STACK_KEEP_TRANSACTION; }
int InitGetRequestToUnavailableResource(OCQualityOfService qos) { OC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); std::ostringstream query; query << "coap://" << coapServerIP << ":" << coapServerPort << "/SomeUnknownResource"; return (InvokeOCDoResource(query, OC_REST_GET, (qos == OC_HIGH_QOS)? OC_HIGH_QOS:OC_LOW_QOS, getReqCB, NULL, 0)); }
int InitGetRequest(OCQualityOfService qos) { OIC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); std::ostringstream query; query << coapServerResource; return (InvokeOCDoResource(query, OC_REST_GET, (qos == OC_HIGH_QOS) ? OC_HIGH_QOS : OC_LOW_QOS, restRequestCB, NULL, 0)); }
int InitGetRequestToUnavailableResource(OCQualityOfService qos) { std::ostringstream query; query << "/SomeUnknownResource"; OIC_LOG_V(INFO, TAG, "\nExecuting %s with query %s", __func__, query.str().c_str()); return (InvokeOCDoResource(query, &serverAddr, OC_REST_GET, (qos == OC_HIGH_QOS)? OC_HIGH_QOS:OC_LOW_QOS, getReqCB, NULL, 0)); }
int InitPutRequest(OCQualityOfService qos) { std::ostringstream query; query << coapServerResource; OIC_LOG_V(INFO, TAG, "\nExecuting %s with query %s", __func__, query.str().c_str()); return (InvokeOCDoResource(query, &serverAddr, OC_REST_PUT, (qos == OC_HIGH_QOS)? OC_HIGH_QOS:OC_LOW_QOS, putReqCB, NULL, 0)); }
int InitObserveRequest(OCQualityOfService qos) { OC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); std::ostringstream query; query << "coap://" << coapServerIP << ":" << coapServerPort << coapServerResource; return (InvokeOCDoResource(query, OC_REST_OBSERVE, (qos == OC_HIGH_QOS)? OC_HIGH_QOS:OC_LOW_QOS, obsReqCB, NULL, 0)); }
int InitPutRequest(OCQualityOfService qos) { OIC_LOG_V(INFO, TAG, "Executing %s", __func__); std::ostringstream query; query << coapServerResource; endpoint.flags = (OCTransportFlags)(endpoint.flags|OC_SECURE); return (InvokeOCDoResource(query, OC_REST_PUT, &endpoint, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), putReqCB, NULL, 0)); }
int InitPutRequest(OCQualityOfService qos) { OIC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); std::ostringstream query; query << coapServerResource; OIC_LOG_V (INFO, TAG, "Performing PUT with query : %s", query.str().c_str()); return (InvokeOCDoResource(query, OC_REST_PUT, &endpoint, (qos == OC_HIGH_QOS)? OC_HIGH_QOS:OC_LOW_QOS, getReqCB, NULL, 0)); }
int InitGetRequest(OCQualityOfService qos) { OC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); std::ostringstream query; query << (coapSecureResource ? "coaps://" : "coap://") << coapServerIP << ":" << coapServerPort << coapServerResource; return (InvokeOCDoResource(query, OC_REST_GET, (qos == OC_HIGH_QOS)? OC_HIGH_QOS:OC_LOW_QOS, getReqCB, NULL, 0)); }
int InitPresence() { OCStackResult result = OC_STACK_OK; OIC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); std::ostringstream query; std::ostringstream querySuffix; query << OC_RSRVD_PRESENCE_URI; if (TestCase == TEST_OBS_PRESENCE) { result = InvokeOCDoResource(query, &serverAddr, OC_REST_PRESENCE, OC_LOW_QOS, presenceCB, NULL, 0); } if (TestCase == TEST_OBS_PRESENCE_WITH_FILTER || TestCase == TEST_OBS_PRESENCE_WITH_FILTERS) { querySuffix.str(""); querySuffix << query.str() << "?rt=core.led"; result = InvokeOCDoResource(querySuffix, &serverAddr, OC_REST_PRESENCE, OC_LOW_QOS, presenceCB, NULL, 0); } if (TestCase == TEST_OBS_PRESENCE_WITH_FILTERS) { if (result == OC_STACK_OK) { querySuffix.str(""); querySuffix << query.str() << "?rt=core.fan"; result = InvokeOCDoResource(querySuffix, &serverAddr, OC_REST_PRESENCE, OC_LOW_QOS, presenceCB, NULL, 0); } } if (TestCase == TEST_OBS_MULTICAST_PRESENCE) { if (result == OC_STACK_OK) { std::ostringstream multicastPresenceQuery; multicastPresenceQuery.str(""); multicastPresenceQuery << "coap://" << OC_MULTICAST_PREFIX << OC_RSRVD_PRESENCE_URI; result = InvokeOCDoResource(multicastPresenceQuery, &serverAddr, OC_REST_PRESENCE, OC_LOW_QOS, presenceCB, NULL, 0); } } return result; }
int InitGetRequest(OCQualityOfService qos, uint8_t withVendorSpecificHeaderOptions, bool getWithQuery) { OCHeaderOption options[MAX_HEADER_OPTIONS]; std::ostringstream query; query << coapServerResource; // ocserver is written to only process "power<X" query. if (getWithQuery) { OIC_LOG(INFO, TAG, "Using query power<50"); query << "?power<50"; } OIC_LOG_V(INFO, TAG, "\nExecuting %s with query %s", __func__, query.str().c_str()); if (withVendorSpecificHeaderOptions) { uint8_t option0[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; uint8_t option1[] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; memset(options, 0, sizeof(OCHeaderOption) * MAX_HEADER_OPTIONS); options[0].protocolID = OC_COAP_ID; options[0].optionID = 2048; memcpy(options[0].optionData, option0, sizeof(option0)); options[0].optionLength = 10; options[1].protocolID = OC_COAP_ID; options[1].optionID = 3000; memcpy(options[1].optionData, option1, sizeof(option1)); options[1].optionLength = 10; } if (withVendorSpecificHeaderOptions) { return (InvokeOCDoResource(query, &serverAddr, OC_REST_GET, (qos == OC_HIGH_QOS) ? OC_HIGH_QOS : OC_LOW_QOS, getReqCB, options, 2)); } else { return (InvokeOCDoResource(query, &serverAddr, OC_REST_GET, (qos == OC_HIGH_QOS) ? OC_HIGH_QOS : OC_LOW_QOS, getReqCB, NULL, 0)); } }
int InitPutRequest( struct cmd *command ) { int queryLen= strlen( command->coapuri)+1; char *query = malloc( queryLen ); int returnVal; OC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); snprintf( query, queryLen, "%s", command->coapuri ); returnVal = InvokeOCDoResource( query, OC_REST_PUT, OC_LOW_QOS, putReqCB, NULL, 0, command); free(query); return returnVal; }
int InitPostRequest(OCQualityOfService qos) { OCStackResult result; std::ostringstream query; //Get most recently inserted resource const ResourceNode *resource = getResource(); if(!resource) { OC_LOG_V(ERROR, TAG, "Resource null, can't do POST request\n"); return -1; } query << resource->uri; OC_LOG_V(INFO, TAG,"Executing InitPostRequest, Query: %s", query.str().c_str()); // First POST operation (to create an LED instance) result = InvokeOCDoResource(query, OC_REST_POST, &resource->endpoint, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0); if (OC_STACK_OK != result) { // Error can happen if for example, network connectivity is down OC_LOG(ERROR, TAG, "First POST call did not succeed"); } // Second POST operation (to create an LED instance) result = InvokeOCDoResource(query, OC_REST_POST, &resource->endpoint, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0); if (OC_STACK_OK != result) { OC_LOG(ERROR, TAG, "Second POST call did not succeed"); } // This POST operation will update the original resourced /a/led return (InvokeOCDoResource(query, OC_REST_POST, &resource->endpoint, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), postReqCB, NULL, 0)); }
int InitGetRequest(OCQualityOfService qos) { OIC_LOG_V(INFO, TAG, "Executing %s", __func__); std::ostringstream query; query << coapServerResource; if(WithTcp) { endpoint.adapter = OC_ADAPTER_TCP; } endpoint.flags = (OCTransportFlags)(endpoint.flags|OC_SECURE); return (InvokeOCDoResource(query, OC_REST_GET, &endpoint, ((qos == OC_HIGH_QOS)? OC_HIGH_QOS:OC_LOW_QOS), getReqCB, NULL, 0)); }
int InitGetRequest(OCQualityOfService qos) { std::ostringstream query; //Get most recently inserted resource const ResourceNode * resource = getResource(); if(!resource) { OC_LOG_V(ERROR, TAG, "Resource null, can't do GET request\n"); return -1; } query << resource->uri; OC_LOG_V(INFO, TAG,"Executing InitGetRequest, Query: %s", query.str().c_str()); return (InvokeOCDoResource(query, OC_REST_GET, &resource->endpoint, (qos == OC_HIGH_QOS)?OC_HIGH_QOS:OC_LOW_QOS, getReqCB, NULL, 0)); }
int InitDeleteRequest(OCQualityOfService qos) { std::ostringstream query; query << coapServerResource; OIC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); // First DELETE operation OCStackResult result = InvokeOCDoResource(query, OC_REST_DELETE, qos, restRequestCB, NULL, 0); if (OC_STACK_OK != result) { // Error can happen if for example, network connectivity is down OIC_LOG(INFO, TAG, "DELETE call did not succeed"); } return result; }
int InitPutRequest(OCQualityOfService qos) { std::ostringstream query; //Get most recently inserted resource const ResourceNode * resource = getResource(); if(!resource) { OC_LOG_V(ERROR, TAG, "Resource null, can't do PUT request\n"); return -1; } query << "coap://" << resource->ip << ":" << resource->port << resource->uri ; OC_LOG_V(INFO, TAG,"Executing InitPutRequest, Query: %s", query.str().c_str()); return (InvokeOCDoResource(query, OC_REST_PUT, resource->connType, ((qos == OC_HIGH_QOS) ? OC_HIGH_QOS: OC_LOW_QOS), putReqCB, NULL, 0)); }
int InitGetRequest( struct cmd *command ) { int queryLen = strlen( command->coapuri )+1; char *query = malloc( queryLen ); OCStackResult result; printf("query len=%d\n", queryLen); OC_LOG_V(INFO, TAG, "\n\nExecuting %s", __func__); snprintf( query, queryLen+1, "%s", command->coapuri ); OC_LOG_V(INFO, TAG, "query in InitGetRequest: %s", command->coapuri); result = InvokeOCDoResource(query, OC_REST_GET, OC_HIGH_QOS, getReqCB, NULL, 0, command); free(query); return result; }
OCStackResult ProvisionEnrollee(OCQualityOfService qos, const char *query, const char *resUri, OCDevAddr *destination, int pauseBeforeStart) { // This sleep is required in case of BLE provisioning due to packet drop issue. OIC_LOG_V(INFO, TAG, "Sleeping for %d seconds", pauseBeforeStart); sleep(pauseBeforeStart); OIC_LOG_V(INFO, TAG, "\n\nExecuting ProvisionEnrollee%s", __func__); OCRepPayload *payload = OCRepPayloadCreate(); OCRepPayloadSetUri(payload, resUri); OCRepPayloadSetPropString(payload, OC_RSRVD_ES_TNN, netProvInfo->netAddressInfo.WIFI.ssid); OCRepPayloadSetPropString(payload, OC_RSRVD_ES_CD, netProvInfo->netAddressInfo.WIFI.pwd); OIC_LOG_V(DEBUG, TAG, "OCPayload ready for ProvisionEnrollee"); OCStackResult ret = InvokeOCDoResource(query, OC_REST_PUT, destination, OC_HIGH_QOS, ProvisionEnrolleeResponse, payload, NULL, 0); return ret; }