1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
25 #include "caadapterutils.h"
26 #include "cafragmentation.h"
29 * Debugging tag for fragmentation module.
31 #define CA_FRAGMENTATION_TAG "OIC_CA_FRAG"
33 CAResult_t CAGenerateHeader(uint8_t *header,
37 OIC_LOG(DEBUG, CA_FRAGMENTATION_TAG, "IN");
39 VERIFY_NON_NULL(header, CA_FRAGMENTATION_TAG, "header is NULL");
41 if (headerLength < CA_HEADER_LENGTH)
43 return CA_STATUS_FAILED;
46 if (dataLength > MAX_DATA_LENGTH_SUPPORTED)
50 "Given length is more than %d. It will be truncated.",
51 MAX_DATA_LENGTH_SUPPORTED);
54 // Only bother initializing the header section of the buffer. It
55 // is up to the caller to handle the data section.
56 memset(header, 0, CA_HEADER_LENGTH);
58 // If length is more than 4095 then it will be truncated.
59 header[1] = dataLength & 0xFF;
61 header[0] = dataLength & 0x0F;
62 header[0] = header[0] | 0x40; // Adding version 0100.
63 // (Not used. Future use)
65 OIC_LOG(DEBUG, CA_FRAGMENTATION_TAG, "OUT");
70 uint32_t CAParseHeader(const uint8_t *header, size_t length)
72 OIC_LOG(DEBUG, CA_FRAGMENTATION_TAG, "IN");
74 VERIFY_NON_NULL_RET(header, CA_FRAGMENTATION_TAG, "header is NULL", 0);
78 if (length >= CA_HEADER_LENGTH)
80 dataLen = ((header[0] & 0x0F) << 8) | (header[1] & 0xFF);
83 OIC_LOG(DEBUG, CA_FRAGMENTATION_TAG, "OUT");