X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fstack%2Finclude%2Finternal%2Focstackinternal.h;h=93b04275b4cc06a2cf53010b463ddb0960b29505;hb=7f00f942c39b7bc27c7eeecf213a239c3fe4173c;hp=83989a50f635069938fbe5ef536f3f7037c4028a;hpb=7333523f607188718755d2ff4b4a36c2e497ebec;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/stack/include/internal/ocstackinternal.h b/resource/csdk/stack/include/internal/ocstackinternal.h index 83989a5..93b0427 100644 --- a/resource/csdk/stack/include/internal/ocstackinternal.h +++ b/resource/csdk/stack/include/internal/ocstackinternal.h @@ -19,9 +19,15 @@ //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // -//----------------------------------------------------------------------------- -// Internal include file used by lower layers of the OC stack -//----------------------------------------------------------------------------- + + +/** + * @file + * + * This file contains the Internal include file used by lower layers of the OC stack + * + */ + #ifndef OCSTACKINTERNAL_H_ #define OCSTACKINTERNAL_H_ @@ -32,11 +38,11 @@ #include "ocstack.h" #include "ocstackconfig.h" #include "occlientcb.h" -#include #include #include "cacommon.h" #include "cainterface.h" +#include "securevirtualresourcetypes.h" #ifdef __cplusplus extern "C" { @@ -46,82 +52,90 @@ extern "C" { //----------------------------------------------------------------------------- // Global variables //----------------------------------------------------------------------------- + +/** Default device entity Handler.*/ extern OCDeviceEntityHandler defaultDeviceHandler; +/** Default Callback parameter.*/ +extern void* defaultDeviceHandlerCallbackParameter; + //----------------------------------------------------------------------------- // Defines //----------------------------------------------------------------------------- + +/** The coap scheme */ #define OC_COAP_SCHEME "coap://" -#define OC_OFFSET_SEQUENCE_NUMBER (4) // the first outgoing sequence number will be 5 + +/** the first outgoing sequence number will be 1*/ +#define OC_OFFSET_SEQUENCE_NUMBER (0) /** * This structure will be created in occoap and passed up the stack on the server side. */ typedef struct { - // Observe option field + /** Observe option field.*/ uint32_t observationOption; - // the REST method retrieved from received request PDU + + /** The REST method retrieved from received request PDU.*/ OCMethod method; - // resourceUrl will be filled in occoap using the path options in received request PDU + + /** the requested payload format. */ + OCPayloadFormat acceptFormat; + + /** resourceUrl will be filled in occoap using the path options in received request PDU.*/ char resourceUrl[MAX_URI_LENGTH]; - // resource query send by client + + /** resource query send by client.*/ char query[MAX_QUERY_LENGTH]; - // reqJSON is retrieved from the payload of the received request PDU - char reqJSONPayload[MAX_REQUEST_LENGTH]; - // qos is indicating if the request is CON or NON + + /** reqJSON is retrieved from the payload of the received request PDU.*/ + uint8_t *payload; + + /** qos is indicating if the request is CON or NON.*/ OCQualityOfService qos; - // An array of the received vendor specific header options + + /** Number of the received vendor specific header options.*/ uint8_t numRcvdVendorSpecificHeaderOptions; + + /** Array of received vendor specific header option .*/ OCHeaderOption rcvdVendorSpecificHeaderOptions[MAX_HEADER_OPTIONS]; - /** Remote Endpoint address **/ - ////////////////////////////////////////////////////////// - // TODO: bundle this up as endpoint - CAAddress_t addressInfo; - /** Connectivity of the endpoint**/ - CATransportType_t connectivityType; + /** Remote end-point address **/ + OCDevAddr devAddr; - //token for the observe request + /** Token for the observe request.*/ CAToken_t requestToken; - uint8_t tokenLength; //token length - // The ID of CoAP pdu + + /** token length.*/ + uint8_t tokenLength; + + /** The ID of CoAP PDU.*/ uint16_t coapID; + + /** For delayed Response.*/ uint8_t delayedResNeeded; - uint8_t secured; - ////////////////////////////////////////////////////////// + + /** For More packet.*/ uint8_t reqMorePacket; + + /** The number of requested packet.*/ uint32_t reqPacketNum; + + /** The size of requested packet.*/ uint16_t reqPacketSize; + + /** The number of responded packet.*/ uint32_t resPacketNum; + + /** Responded packet size.*/ uint16_t resPacketSize; + + /** The total size of requested packet.*/ size_t reqTotalSize; } OCServerProtocolRequest; /** - * This structure will be created in occoap and passed up the stack on the client side. - */ -typedef struct -{ - // handle is retrieved by comparing the token-handle pair in the PDU. - ClientCB * cbNode; - // This is how long this response is valid for (in seconds). - uint32_t maxAge; - // This is the Uri of the resource. (ex. "coap://192.168.1.1/a/led") - char * fullUri; - // This is the relative Uri of the resource. (ex. "/a/led") - char * rcvdUri; - // This is the received payload. - char * bufRes; - - // This is the token received OTA. - CAToken_t rcvdToken; - - // this structure will be passed to client - OCClientResponse * clientResponse; -} OCResponse; - -/** * This typedef is to represent our Server Instance identification. */ typedef uint8_t ServerID[16]; @@ -131,25 +145,51 @@ typedef uint8_t ServerID[16]; //----------------------------------------------------------------------------- +/** + * Handler function for sending a response from multiple resources, such as a collection. + * Aggregates responses from multiple resource until all responses are received then sends the + * concatenated response + * + * TODO: Need to add a timeout in case a (remote?) resource does not respond + * + * @param token Token to search for. + * @param tokenLength Length of token. + * @param status Feedback status. + * @return + * ::OCStackResult + */ + OCStackResult OCStackFeedBack(CAToken_t token, uint8_t tokenLength, uint8_t status); + +/** + * Handler function to execute stack requests + * + * @param protocolRequest Pointer to the protocol requests from server. + * + * @return + * ::OCStackResult + */ OCStackResult HandleStackRequests(OCServerProtocolRequest * protocolRequest); -OCStackResult SendDirectStackResponse(const CARemoteEndpoint_t* endPoint, const uint16_t coapID, +OCStackResult SendDirectStackResponse(const CAEndpoint_t* endPoint, const uint16_t coapID, const CAResponseResult_t responseResult, const CAMessageType_t type, const uint8_t numOptions, const CAHeaderOption_t *options, - CAToken_t token, uint8_t tokenLength); - + CAToken_t token, uint8_t tokenLength, const char *resourceUri, + CADataType_t dataType); #ifdef WITH_PRESENCE + /** * Notify Presence subscribers that a resource has been modified. * - * @param resourceType Handle to the resourceType linked list of resource - * that was modified. + * @param resourceType Handle to the resourceType linked list of resource that was modified. + * @param trigger The simplified reason this API was invoked. + * * @return ::OC_STACK_OK on success, some other value upon failure. */ -OCStackResult SendPresenceNotification(OCResourceType *resourceType); +OCStackResult SendPresenceNotification(OCResourceType *resourceType, + OCPresenceTrigger trigger); /** * Send Stop Notification to Presence subscribers. @@ -158,6 +198,16 @@ OCStackResult SendPresenceNotification(OCResourceType *resourceType); */ OCStackResult SendStopNotification(); #endif // WITH_PRESENCE + +/** + * Function to parse the IPv4 address. + * + * @param ipAddrStr Pointer to a string of IPv4 address. + * @param ipAddr pointer to IPv4 adress. + * @param port Port number. + * + * @return true on success, false upon failure. + */ bool ParseIPv4Address(char * ipAddrStr, uint8_t * ipAddr, uint16_t * port); /** @@ -165,12 +215,13 @@ bool ParseIPv4Address(char * ipAddrStr, uint8_t * ipAddr, uint16_t * port); * * @param resource Target resource. * @param resourceInterfaceName Resource interface. + * * @return ::OC_STACK_OK on success, some other value upon failure. */ OCStackResult BindResourceInterfaceToResource(OCResource* resource, const char *resourceInterfaceName); /** - * Bind a resourcetype to a resource. + * Bind a resource type to a resource. * * @param resource Target resource. * @param resourceTypeName Name of resource type. @@ -179,44 +230,36 @@ OCStackResult BindResourceInterfaceToResource(OCResource* resource, OCStackResult BindResourceTypeToResource(OCResource* resource, const char *resourceTypeName); -// Converts a CAResult_t type to a OCStackResult type. /** - * Converts a CAResult_t type to a OCStackResult type. + * Convert OCStackResult to CAResponseResult_t. * - * @param caResult CAResult_t value to convert - * @return OCStackResult that was converted from the input CAResult_t value. + * @param ocCode OCStackResult code. + * @param method OCMethod method the return code replies to. + * @return ::CA_CONTENT on OK, some other value upon failure. */ -OCStackResult CAResultToOCResult(CAResult_t caResult); +CAResponseResult_t OCToCAStackResult(OCStackResult ocCode, OCMethod method); /** - * Get a byte representation of the server instance ID. - * The memory is managed internal to this function, so freeing it externally will - * result in a runtime error - * - * Note: This will NOT seed the RNG, so it must be called after the RNG is seeded. - * This is done automatically during the OCInit process, - * so ensure that this call is done after that. + * Converts a CAResult_t type to a OCStackResult type. * - * @return A uint8_t representation the server instance ID. + * @param caResult CAResult_t value to convert. + * @return OCStackResult that was converted from the input CAResult_t value. */ -const uint8_t* OCGetServerInstanceID(void); +OCStackResult CAResultToOCResult(CAResult_t caResult); /** - * Get a string representation the server instance ID. - * The memory is managed internal to this function, so freeing externally will result - * in a runtime error - * Note: This will NOT seed the RNG, so it must be called after the RNG is seeded. - * This is done automatically during the OCInit process, - * so ensure that this call is done after that. + * Converts a OCStackResult type to a bool type. * - * @return A string representation the server instance ID. + * @param ocResult OCStackResult value to convert. + * @return true on success, false upon failure. */ -const char* OCGetServerInstanceIDString(void); +bool OCResultToSuccess(OCStackResult ocResult); /** * Map OCQualityOfService to CAMessageType. * * @param qos Input qos. + * * @return CA message type for a given qos. */ CAMessageType_t qualityOfServiceToMessageType(OCQualityOfService qos); @@ -225,20 +268,107 @@ CAMessageType_t qualityOfServiceToMessageType(OCQualityOfService qos); /** * Enable/disable a resource property. * - * @param inputProperty Pointer to resource property. - * @param resourceProperties Property to be enabled/disabled. - * @param enable 0:disable, 1:enable. + * @param inputProperty Pointer to resource property. + * @param resourceProperties Property to be enabled/disabled. + * @param enable 0:disable, 1:enable. * * @return OCStackResult that was converted from the input CAResult_t value. */ //TODO: should the following function be public? OCStackResult OCChangeResourceProperty(OCResourceProperty * inputProperty, OCResourceProperty resourceProperties, uint8_t enable); + +const char *convertTriggerEnumToString(OCPresenceTrigger trigger); + +OCPresenceTrigger convertTriggerStringToEnum(const char * triggerStr); +#endif // WITH_PRESENCE + +void CopyEndpointToDevAddr(const CAEndpoint_t *in, OCDevAddr *out); + +void CopyDevAddrToEndpoint(const OCDevAddr *in, CAEndpoint_t *out); + +/** + * Get the CoAP ticks after the specified number of milli-seconds. + * + * @param milliSeconds Milli-seconds. + * @return CoAP ticks + */ +uint32_t GetTicks(uint32_t milliSeconds); + +/** + * Extract interface and resource type from the query. + * + * @param query is the request received from the client + * @param filterOne will include result if the interface is included in the query. + * @param filterTwo will include result if the resource type is included in the query. + * + * @return ::OC_STACK_OK on success, some other value upon failure + */ +OCStackResult ExtractFiltersFromQuery(const char *query, char **filterOne, char **filterTwo); + +#if defined(RD_CLIENT) || defined(RD_SERVER) +/** + * This function binds an resource unique ins value to the resource. This can be only called + * when stack is received response from resource-directory. + * + * @param requestUri URI of the resource. + * @param response Response from queries to remote servers. + * + * @return ::OC_STACK_OK on success, some other value upon failure. + */ +OCStackResult OCUpdateResourceInsWithResponse(const char *requestUri, + const OCClientResponse *response); #endif +/** + * Get the CoAP ticks after the specified number of milli-seconds. + * + * @param milliSeconds Milli-seconds. + * @return CoAP ticks + */ +uint32_t GetTicks(uint32_t milliSeconds); + +/** + * Delete all of the dynamically allocated elements that were created for the resource attributes. + * + * @param resourceAttr Specified resource attribute. + */ +void OCDeleteResourceAttributes(OCAttribute *rsrcAttributes); + +/** + * A request uri consists of the following components in order: + * example + * optionally one of + * CoAP over UDP prefix "coap://" + * CoAP over TCP prefix "coap+tcp://" + * CoAP over DTLS prefix "coaps://" + * CoAP over TLS prefix "coaps+tcp://" + * optionally one of + * IPv6 address "[1234::5678]" + * IPv4 address "192.168.1.1" + * optional port ":5683" + * resource uri "/oc/core..." + * + * for PRESENCE requests, extract resource type. + * + * @return ::OC_STACK_OK on success, some other value upon failure. + */ +OCStackResult ParseRequestUri(const char *fullUri, + OCTransportAdapter adapter, + OCTransportFlags flags, + OCDevAddr **devAddr, + char **resourceUri, + char **resourceType); + +/** + * Fix up client response data. + * + * @param cr Response from queries to remote servers. + */ +void FixUpClientResponse(OCClientResponse *cr); + #ifdef __cplusplus } #endif // __cplusplus #endif /* OCSTACKINTERNAL_H_ */ -