1 //******************************************************************
3 // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
27 #include "ocresource.h"
30 typedef struct OCPresence
32 // This is the TTL associated with presence
38 typedef struct OCMulticastNode
42 struct OCMulticastNode * next;
45 typedef struct resourcetype_t OCResourceType;
47 typedef struct ClientCB {
48 // callback method defined in application address space
49 OCClientResponseHandler callBack;
50 // callback context data
52 // callback method to delete context data
53 OCClientContextDeleter deleteCallback;
54 // when a response is recvd with this token, above callback will be invoked
56 // a response is recvd with this token length
58 // Invocation handle tied to original call to OCDoResource()
60 // This is used to determine if all responses should be consumed or not.
61 // (For now, only pertains to OC_REST_OBSERVE_ALL Vs. OC_REST_OBSERVE functionality)
63 // This is the sequence identifier the server applies to the invocation tied to 'handle'.
64 uint32_t sequenceNumber;
65 // The canonical form of the request uri associated with the call back
67 // Remote address complete
69 // Struct to hold TTL info for presence
71 OCPresence * presence;
72 OCResourceType * filterResourceType;
74 // The connectivity type on which the request was sent on.
75 OCConnectivityType conType;
76 // The TTL for this callback. Holds the time till when this callback can
77 // still be used. TTL is set to 0 when the callback is for presence and observe.
78 // Presence has ttl mechanism in the "presence" member of this struct and observes
79 // can be explicitly cancelled.
81 // next node in this list
82 struct ClientCB *next;
85 extern struct ClientCB *cbList;
89 * This method is used to add a client callback method in cbList.
91 * @param[out] clientCB
92 * The resulting node from making this call. Null if out of memory.
94 * address to client callback function.
96 * identifier for OTA CoAP comms.
98 * Masked in the public API as an 'invocation handle' - Used for callback management.
100 * OCMethod via which this client callback is expected to operate
101 * @param[in] requestUri
102 * the resource uri of the request.
103 * @param[in] resourceType
104 * the resourceType associated with a presence request.
106 * the connectivity type on which the associated request for this clientCB was sent on.
108 * time to live in coap_ticks for the callback.
109 * @brief If the handle you're looking for does not exist, the stack will reply with a RST message.
111 * @return OC_STACK_OK for Success, otherwise some error value
114 AddClientCB (ClientCB** clientCB, OCCallbackData* cbData,
115 CAToken_t token, uint8_t tokenLength,
116 OCDoHandle *handle, OCMethod method,
117 OCDevAddr *devAddr, char * requestUri,
118 char * resourceTypeName, uint32_t ttl);
122 * This method is used to remove a callback node from cbList.
125 * address to client callback node.
127 void DeleteClientCB(ClientCB *cbNode);
132 * This method is used to search and retrieve a cb node in cbList.
135 * token to search for.
137 * handle to search for.
138 * @param[in] requestUri
141 * @brief You can search by token OR by handle, but not both.
143 * @return address of the node if found, otherwise NULL
145 ClientCB* GetClientCB(const CAToken_t token, uint8_t tokenLength,
146 OCDoHandle handle, const char * requestUri);
149 * Inserts a new resource type filter into this cb node.
152 * the node to add the new resourceType filter to
153 * @param[in] resourceTypeName
154 * the value to create the new resourceType filter from
157 * OC_STACK_OK on success
158 * OC_STACK_ERROR with invalid parameters
159 * OC_STACK_NO_MEMORY when out of memory
162 OCStackResult InsertResourceTypeFilter(ClientCB * cbNode, char * resourceTypeName);
163 #endif // WITH_PRESENCE
167 * This method is used to clear the cbList.
170 void DeleteClientCBList();
174 * This method is used to verify the presence of a cb node in cbList
175 * and then delete it.
178 * address to client callback node.
180 void FindAndDeleteClientCB(ClientCB * cbNode);
184 * This method is used to search a multicast presence node from list.
187 * the uri of the request.
189 * @return OCMulticastNode
190 * The resulting node from making this call. Null if doesn't exist.
192 //------------------------------------------------------------------------
193 OCMulticastNode* GetMCPresenceNode(const char * uri);
197 * This method is used to add a multicast presence node to the list.
199 * @param[out] outnode
200 * The resulting node from making this call. Null if out of memory.
202 * the uri of the server.
204 * current nonce for the server
206 * @return OC_STACK_OK for Success, otherwise some error value
208 //------------------------------------------------------------------------
209 OCStackResult AddMCPresenceNode(OCMulticastNode** outnode, char* uri, uint32_t nonce);
211 #endif //OC_CLIENT_CB