mbed client on ethernet with LWIP
Dependencies: mbed Socket lwip-eth lwip-sys lwip
Fork of mbed-client-classic-example-lwip by
Diff: mbed-client/source/include/m2mtlvdeserializer.h
- Revision:
- 11:cada08fc8a70
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-client/source/include/m2mtlvdeserializer.h Thu Jun 09 17:08:36 2016 +0000 @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "mbed-client/m2mvector.h" +#include "mbed-client/m2mobject.h" +#include "mbed-client/m2mobjectinstance.h" +#include "mbed-client/m2mresource.h" + +/** + * @brief M2MTLVDeserializer + * TLV Deserialiser get the object instances and resources as binary data and + * builds the <code>lwm2m</code> representation from it. See OMA-LWM2M + * specification, chapter 6.1 for the resource model and chapter 6.3.3 for + * the OMA-TLV specification. + */ +class M2MTLVDeserializer { + +public : + + typedef enum { + None, + NotFound, + NotAllowed, + NotValid + } Error; + + typedef enum { + Put, + Post + } Operation; + + + /** + * Constructor. + */ + M2MTLVDeserializer(); + + /** + * Destructor. + */ + virtual ~M2MTLVDeserializer(); + + /** + * This method checks whether the given binary encodes an object instance + * or something else. It returns <code>true</code> if bits 7-6 of the first + * byte is "00". + * @param tlv Binary to be checked as LWM2M object instance + * @return <code>true</code> or <code>false</code>. + */ + bool is_object_instance(uint8_t *tlv); + + + /** + * This method checks whether the given binary encodes a resource or + * something else. It returns <code>true</code> if bits 7-6 of the first + * byte is "11". + * @param tlv Binary to be checked as LWM2M resource. + * @return <code>true</code> or <code>false</code>. + */ + bool is_resource(uint8_t *tlv); + + /** + * This method checks whether the given binary encodes a multiple resource + * or something else. It returns <code>true</code> if bits 7-6 of the first + * byte is "10". + * @param tlv Binary to be checked as LWM2M multiple resource. + * @return <code>true</code> or <code>false</code>. + */ + bool is_multiple_resource(uint8_t *tlv); + + /** + * This method checks whether the given binary encodes a resource instance + * or something else. It returns <code>true</code> if bits 7-6 of the first + * byte is "01". + * @param tlv Binary to be checked as LWM2M resource instance. + * @return <code>true</code> or <code>false</code>. + */ + bool is_resource_instance(uint8_t *tlv); + + /** + * Deserialises the given binary that must encode object instances. Binary + * array can be checked before invoking this method with + */ + M2MTLVDeserializer::Error deserialise_object_instances(uint8_t* tlv, + uint32_t tlv_size, + M2MObject &object, + M2MTLVDeserializer::Operation operation); + + /** + * Deserialises the given binary that must encode resources. Binary array + * can be checked before invoking this method. + */ + M2MTLVDeserializer::Error deserialize_resources(uint8_t *tlv, + uint32_t tlv_size, + M2MObjectInstance &object_instance, + M2MTLVDeserializer::Operation operation); + + /** + * Deserialises the given binary that must encode resource instances. Binary array + * can be checked before invoking this method. + */ + M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv, + uint32_t tlv_size, + M2MResource &resource, + M2MTLVDeserializer::Operation operation); + /** + * This method return object instance id or resource id. + * @param tlv Binary to be checked + * @return Object instance id or resource id. + */ + uint16_t instance_id(uint8_t *tlv); + +private: + + M2MTLVDeserializer::Error deserialize_object_instances(uint8_t *tlv, + uint32_t tlv_size, + uint32_t offset, + M2MObject &object, + M2MTLVDeserializer::Operation operation, + bool update_value); + + M2MTLVDeserializer::Error deserialize_resources(uint8_t *tlv, + uint32_t tlv_size, + uint32_t offset, + M2MObjectInstance &object_instance, + M2MTLVDeserializer::Operation operation, + bool update_value); + + M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv, + uint32_t tlv_size, + uint32_t offset, + M2MResource &resource, + M2MObjectInstance &object_instance, + M2MTLVDeserializer::Operation operation, + bool update_value); + + M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv, + uint32_t tlv_size, + uint32_t offset, + M2MResource &resource, + M2MTLVDeserializer::Operation operation, + bool update_value); + + bool is_object_instance(uint8_t *tlv, uint32_t offset); + + bool is_resource(uint8_t *tlv, uint32_t offset); + + bool is_multiple_resource(uint8_t *tlv, uint32_t offset); + + bool is_resource_instance(uint8_t *tlv, uint32_t offset); +}; + +class TypeIdLength { + +public: + + static TypeIdLength* createTypeIdLength(uint8_t *tlv, uint32_t offset); + + TypeIdLength* deserialize(); + + void deserialiseID (uint32_t idLength); + + void deserialiseLength (uint32_t lengthType); + + uint8_t *_tlv; + uint32_t _offset; + uint32_t _type; + uint16_t _id; + uint32_t _length; + + friend class Test_M2MTLVDeserializer; +};