TEST_F(CborByteStringTest, ByteStringArrayConvertParseTest ) { OCRepPayloadSetUri(payload_in, "/a/quake_sensor"); OCRepPayloadSetPropInt(payload_in, "scale", 4); size_t dimensions_in[MAX_REP_ARRAY_DEPTH] = { 3, 0, 0}; uint8_t binval1[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19}; uint8_t binval2[] = {0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29}; uint8_t binval3[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39}; OCByteString quakedata_in[3] = {{binval1, sizeof(binval1)}, {binval2, sizeof(binval2)}, {binval3, sizeof(binval3)}}; EXPECT_EQ(true, OCRepPayloadSetByteStringArray(payload_in, "quakedata", quakedata_in, dimensions_in)); // Convert OCPayload to CBOR uint8_t *payload_cbor = NULL; size_t payload_cbor_size = 0; EXPECT_EQ(OC_STACK_OK, OCConvertPayload((OCPayload*) payload_in, &payload_cbor, &payload_cbor_size)); #ifdef CBOR_BIN_STRING_DEBUG FILE *fp = fopen("binstringarr.cbor", "wb+"); if (fp) { fwrite(payload_cbor, 1, payload_cbor_size, fp); fclose(fp); } #endif //CBOR_BIN_STRING_DEBUG // Parse CBOR back to OCPayload OCPayload* payload_out = NULL; EXPECT_EQ(OC_STACK_OK, OCParsePayload(&payload_out, PAYLOAD_TYPE_REPRESENTATION, payload_cbor, payload_cbor_size)); OCByteString* quakedata_out = NULL; size_t dimensions_out[MAX_REP_ARRAY_DEPTH] = {0}; ASSERT_EQ(true, OCRepPayloadGetByteStringArray((OCRepPayload*)payload_out, "quakedata", &quakedata_out, dimensions_out)); for(size_t i = 0; i < dimensions_in[0]; i++) { EXPECT_EQ(quakedata_in[i].len, quakedata_out[i].len); EXPECT_EQ(0, memcmp(quakedata_in[i].bytes, quakedata_out[i].bytes, quakedata_in[i].len)); } // Cleanup OICFree(payload_cbor); for(size_t i = 0; i < dimensions_out[0]; i++) { OICFree(quakedata_out[i].bytes); } OICFree(quakedata_out); OCPayloadDestroy((OCPayload*)payload_out); }
TEST_F(CborByteStringTest, ByteStringConvertParseTest) { OCRepPayloadSetUri(payload_in, "/a/quake_sensor"); OCRepPayloadSetPropInt(payload_in, "scale", 4); uint8_t binval[] = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x0, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}; OCByteString quakedata_in = { binval, sizeof(binval)}; // Set ByteString in Payload EXPECT_EQ(true, OCRepPayloadSetPropByteString(payload_in, "quakedata", quakedata_in)); // Convert OCPayload to CBOR uint8_t *payload_cbor = NULL; size_t payload_cbor_size = 0; EXPECT_EQ(OC_STACK_OK, OCConvertPayload((OCPayload*) payload_in, &payload_cbor, &payload_cbor_size)); #ifdef CBOR_BIN_STRING_DEBUG FILE *fp = fopen("binstring.cbor", "wb+"); if (fp) { fwrite(payload_cbor, 1, payload_cbor_size, fp); fclose(fp); } #endif //CBOR_BIN_STRING_DEBUG // Parse CBOR back to OCPayload OCPayload* payload_out = NULL; EXPECT_EQ(OC_STACK_OK, OCParsePayload(&payload_out, PAYLOAD_TYPE_REPRESENTATION, payload_cbor, payload_cbor_size)); OCByteString quakedata_out = {NULL, 0}; ASSERT_EQ(true, OCRepPayloadGetPropByteString((OCRepPayload*)payload_out, "quakedata", &quakedata_out)); // Compare input and output data EXPECT_EQ(quakedata_in.len, quakedata_out.len); EXPECT_EQ(0, memcmp(quakedata_in.bytes, quakedata_out.bytes, quakedata_in.len)); // Cleanup OICFree(payload_cbor); OICFree(quakedata_out.bytes); OCPayloadDestroy((OCPayload*)payload_out); }
OCStackResult HandleKeepAlivePUTRequest(const CAEndpoint_t* endPoint, const CARequestInfo_t* requestInfo) { VERIFY_NON_NULL(endPoint, FATAL, OC_STACK_INVALID_PARAM); VERIFY_NON_NULL(requestInfo, FATAL, OC_STACK_INVALID_PARAM); // Get entry from KeepAlive table. uint32_t index = 0; KeepAliveEntry_t *entry = GetEntryFromEndpoint(endPoint, &index); if (!entry) { OIC_LOG(ERROR, TAG, "Received the first keepalive message from client"); entry = AddKeepAliveEntry(endPoint, OC_SERVER, NULL); if (!entry) { OIC_LOG(ERROR, TAG, "Failed to add new keepalive entry"); return OC_STACK_ERROR; } } OCPayload *ocPayload = NULL; OCParsePayload(&ocPayload, PAYLOAD_TYPE_REPRESENTATION, requestInfo->info.payload, requestInfo->info.payloadSize); OCRepPayload *repPayload = (OCRepPayload *)ocPayload; int64_t interval = 0; OCRepPayloadGetPropInt(repPayload, INTERVAL, &interval); entry->interval = interval; OIC_LOG_V(DEBUG, TAG, "Received interval is [%d]", entry->interval); entry->timeStamp = OICGetCurrentTime(TIME_IN_US); // Send response message. SendDirectStackResponse(endPoint, requestInfo->info.messageId, CA_CHANGED, requestInfo->info.type, requestInfo->info.numOptions, requestInfo->info.options, requestInfo->info.token, requestInfo->info.tokenLength, requestInfo->info.resourceUri); return OC_STACK_OK; }