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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
25 #include "ocstackconfig.h"
31 //-----------------------------------------------------------------------------
33 //-----------------------------------------------------------------------------
35 //TODO: May want to refactor this in upcoming sprints.
36 //Don't want to expose to application layer that lower level stack is using CoAP.
38 #define OC_WELL_KNOWN_QUERY "224.0.1.187:5683/oc/core"
39 #define OC_EXPLICIT_DEVICE_DISCOVERY_URI "224.0.1.187:5683/oc/core/d?rt=core.led"
40 #define OC_MULTICAST_PREFIX "224.0.1.187:5683"
41 #define OC_MULTICAST_IP "224.0.1.187"
43 #define USE_RANDOM_PORT (0)
45 #define OC_DEFAULT_PRESENCE_TTL (60)
46 #define OC_PRESENCE_URI "/oc/presence"
47 extern uint8_t PresenceTimeOutSize; // length of PresenceTimeOut - 1
48 extern uint32_t PresenceTimeOut[];
51 //-----------------------------------------------------------------------------
53 //-----------------------------------------------------------------------------
56 * OC Virtual resources supported by every OC device
59 OC_WELL_KNOWN_URI= 0, // "/oc/core"
60 OC_DEVICE_URI, // "/oc/core/d"
61 OC_RESOURCE_TYPES_URI, // "/oc/core/d/type"
63 OC_PRESENCE, // "/oc/presence"
65 OC_MAX_VIRTUAL_RESOURCES // Max items in the list
69 * Standard RESTful HTTP Methods
73 OC_REST_GET = (1 << 0), // Read
74 OC_REST_PUT = (1 << 1), // Write
75 OC_REST_POST = (1 << 2), // Update
76 OC_REST_DELETE = (1 << 3), // Delete
77 // Register observe request for most up date notifications ONLY.
78 OC_REST_OBSERVE = (1 << 4),
79 // Register observe request for all notifications, including stale notifications.
80 OC_REST_OBSERVE_ALL = (1 << 5),
81 // Deregister observation, intended for internal use
82 OC_REST_CANCEL_OBSERVE = (1 << 6),
84 // Subscribe for all presence notifications of a particular resource.
85 OC_REST_PRESENCE = (1 << 7)
90 * Host Mode of Operation
98 extern OCMode myStackMode;
106 OC_NA_QOS // No Quality is defined, let the stack decide
107 } OCQualityOfService;
110 * Resource Properties
112 * OC_ACTIVE - When this bit is set, the resource is initialized, otherwise the resource
113 * is 'inactive'. 'inactive' signifies that the resource has been marked for
114 * deletion or is already deleted.
115 * OC_DISCOVERABLE - When this bit is set, the resource is allowed to be discovered by clients.
116 * OC_OBSERVABLE - When this bit is set, the resource is allowed to be observed by clients.
117 * OC_SLOW - When this bit is set, the resource has been marked as 'slow'. 'slow' signifies
118 * that responses from this resource can expect delays in processing its
119 * requests from clients.
120 * OC_SECURE - When this bit is set, the resource is a secure resource.
123 OC_ACTIVE = (1 << 0),
124 OC_DISCOVERABLE = (1 << 1),
125 OC_OBSERVABLE = (1 << 2),
128 } OCResourceProperty;
131 * Transport Protocol IDs
134 OC_INVALID_ID = (1 << 0),
135 OC_COAP_ID = (1 << 1)
136 } OCTransportProtocolID;
146 OC_ALL //Multicast message: send over all the interfaces.
147 } OCConnectivityType;
150 * Declares Stack Results & Errors
153 /* Success status code - START HERE */
155 OC_STACK_RESOURCE_CREATED,
156 OC_STACK_RESOURCE_DELETED,
158 /* Success status code - END HERE */
159 /* Error status code - START HERE */
160 OC_STACK_INVALID_URI = 20,
161 OC_STACK_INVALID_QUERY,
163 OC_STACK_INVALID_PORT,
164 OC_STACK_INVALID_CALLBACK,
165 OC_STACK_INVALID_METHOD,
166 OC_STACK_INVALID_PARAM,
167 OC_STACK_INVALID_OBSERVE_PARAM,
171 OC_STACK_NO_RESOURCE, /* resource not found */
172 OC_STACK_RESOURCE_ERROR, /* ex: not supported method or interface */
173 OC_STACK_SLOW_RESOURCE,
174 OC_STACK_NO_OBSERVERS, /* resource has no registered observers */
175 OC_STACK_OBSERVER_NOT_FOUND,
176 OC_STACK_VIRTUAL_DO_NOT_HANDLE,
177 OC_STACK_INVALID_OPTION,
178 OC_STACK_MALFORMED_RESPONSE, /* the remote reply contained malformed data */
179 OC_STACK_PERSISTENT_BUFFER_REQUIRED,
180 OC_STACK_INVALID_REQUEST_HANDLE,
181 OC_STACK_INVALID_DEVICE_INFO,
182 OC_STACK_INVALID_JSON,
183 /* NOTE: Insert all new error codes here!*/
185 OC_STACK_PRESENCE_STOPPED = 128,
186 OC_STACK_PRESENCE_TIMEOUT,
187 OC_STACK_PRESENCE_DO_NOT_HANDLE,
190 /* Error status code - END HERE */
194 * Handle to an @ref OCDoResource invocation.
196 typedef void * OCDoHandle;
199 * Handle to an OCResource object owned by the OCStack.
201 typedef void * OCResourceHandle;
203 typedef void * OCRequestHandle;
204 typedef void * OCResponseHandle;
207 * Unique identifier for each observation request. Used when observations are
208 * registered or deregistering. Used by entity handler to signal specific
209 * observers to be notified of resource changes.
210 * There can be maximum of 256 observations per server.
212 typedef uint8_t OCObservationId;
215 * Action associated with observation
218 OC_OBSERVE_REGISTER = 0,
219 OC_OBSERVE_DEREGISTER = 1,
220 OC_OBSERVE_NO_OPTION = 2
224 // Action associated with observation request
225 OCObserveAction action;
226 // Identifier for observation being registered/deregistered
227 OCObservationId obsId;
231 * Possible returned values from entity handler
236 OC_EH_RESOURCE_CREATED,
237 OC_EH_RESOURCE_DELETED,
240 } OCEntityHandlerResult;
242 // following structure will be used to define the vendor specific header options to be included
243 // in communication packets
245 typedef struct OCHeaderOption {
246 // The protocol ID this option applies to
247 OCTransportProtocolID protocolID;
248 // The header option ID which will be added to communication packets
251 uint16_t optionLength;
252 // pointer to its data
253 uint8_t optionData[MAX_HEADER_OPTION_DATA_LENGTH];
257 * Incoming requests handled by the server. Requests are passed in as a parameter to the @ref OCEntityHandler callback API.
258 * @brief The @ref OCEntityHandler callback API must be implemented in the application in order to receive these requests.
261 // Associated resource
262 OCResourceHandle resource;
263 OCRequestHandle requestHandle;
264 // the REST method retrieved from received request PDU
266 // resource query send by client
267 unsigned char * query;
268 // Information associated with observation - valid only when OCEntityHandler
269 // flag includes OC_OBSERVE_FLAG
270 OCObservationInfo obsInfo;
271 // An array of the received vendor specific header options
272 uint8_t numRcvdVendorSpecificHeaderOptions;
273 OCHeaderOption * rcvdVendorSpecificHeaderOptions;
274 // reqJSON is retrieved from the payload of the received request PDU
275 unsigned char * reqJSONPayload;
276 }OCEntityHandlerRequest;
279 * Response from queries to remote servers. Queries are made by calling the @ref OCDoResource API.
282 // Address of remote server
284 // Indicates adaptor type on which the response was received
285 OCConnectivityType connType;
286 // the is the result of our stack, OCStackResult should contain coap/other error codes;
287 OCStackResult result;
288 // If associated with observe, this will represent the sequence of notifications from server.
289 uint32_t sequenceNumber;
290 // resJSONPayload is retrieved from the payload of the received request PDU
291 unsigned const char * resJSONPayload;
292 // An array of the received vendor specific header options
293 uint8_t numRcvdVendorSpecificHeaderOptions;
294 OCHeaderOption rcvdVendorSpecificHeaderOptions[MAX_HEADER_OPTIONS];
298 * Following structure describes the device properties. All non-Null properties will be included
299 * in a device discovery request.
308 char *manufacturerName;
309 char *manufacturerUrl;
311 char *dateOfManufacture;
312 char *platformVersion;
313 char *firmwareVersion;
319 // Request handle is passed to server via the entity handler for each incoming request.
320 // Stack assigns when request is received, server sets to indicate what request response is for
321 OCRequestHandle requestHandle;
322 // New handle for tracking block (or slow) response. Stack assigns, server uses for subsequent calls
323 OCResponseHandle *responseHandle;
325 OCResourceHandle resourceHandle;
326 // Allow the entity handler to pass a result with the response
327 OCEntityHandlerResult ehResult;
328 // this is the pointer to server payload data to be transferred
329 unsigned char *payload;
330 // size of server payload data. I don't think we should rely on null terminated data for size
331 uint16_t payloadSize;
332 // An array of the vendor specific header options the entity handler wishes to use in response
333 uint8_t numSendVendorSpecificHeaderOptions;
334 OCHeaderOption sendVendorSpecificHeaderOptions[MAX_HEADER_OPTIONS];
335 // URI of new resource that entity handler might create
336 unsigned char resourceUri[MAX_URI_LENGTH];
337 // Server sets to true for persistent response buffer, false for non-persistent response buffer
338 uint8_t persistentBufferFlag;
339 } OCEntityHandlerResponse;
342 OC_INIT_FLAG = (1 << 0),
343 OC_REQUEST_FLAG = (1 << 1),
344 OC_OBSERVE_FLAG = (1 << 2)
345 } OCEntityHandlerFlag; //entity_handler_flag_t ;
347 // possible returned values from client application
349 OC_STACK_DELETE_TRANSACTION = 0,
350 OC_STACK_KEEP_TRANSACTION
351 } OCStackApplicationResult;
353 //-----------------------------------------------------------------------------
354 // Callback function definitions
355 //-----------------------------------------------------------------------------
358 * Client applications implement this callback to consume responses received from Servers.
360 typedef OCStackApplicationResult (* OCClientResponseHandler)(void *context, OCDoHandle handle,
361 OCClientResponse * clientResponse);
364 * Client applications using a context pointer implement this callback to delete the
365 * context upon removal of the callback/context pointer from the internal callback-list
367 typedef void (* OCClientContextDeleter)(void *context);
370 * This info is passed from application to OC Stack when initiating a request to Server
374 OCClientResponseHandler cb;
375 OCClientContextDeleter cd;
379 * Application server implementations must implement this callback to consume requests OTA.
380 * Entity handler callback needs to fill the resPayload of the entityHandlerRequest.
382 typedef OCEntityHandlerResult (*OCEntityHandler)
383 (OCEntityHandlerFlag flag, OCEntityHandlerRequest * entityHandlerRequest);
386 * Device Entity handler need to use this call back instead of OCEntityHandler
388 typedef OCEntityHandlerResult (*OCDeviceEntityHandler)
389 (OCEntityHandlerFlag flag, OCEntityHandlerRequest * entityHandlerRequest, char* uri);
391 //-----------------------------------------------------------------------------
392 // Function prototypes
393 //-----------------------------------------------------------------------------
396 * Initialize the OC Stack. Must be called prior to starting the stack.
399 * IP Address of host device
401 * Port of host device
403 * Host device is client, server, or client-server
406 * OC_STACK_OK - no errors
407 * OC_STACK_ERROR - stack init error
409 OCStackResult OCInit(const char *ipAddr, uint16_t port, OCMode mode);
412 * Stop the OC stack. Use for a controlled shutdown.
414 * Note: OCStop() performs operations similar to OCStopPresence(), as well as OCDeleteResource() on
415 * all resources this server is hosting. OCDeleteResource() performs operations similar to
416 * OCNotifyAllObservers() to notify all client observers that the respective resource is being
420 * OC_STACK_OK - no errors
421 * OC_STACK_ERROR - stack not initialized
423 OCStackResult OCStop();
426 * Called in main loop of OC client or server. Allows low-level processing of
430 * OC_STACK_OK - no errors
431 * OC_STACK_ERROR - stack process error
433 OCStackResult OCProcess();
436 * Discover or Perform requests on a specified resource (specified by that Resource's respective
439 * @param handle - @ref OCDoHandle to refer to the request sent out on behalf of
441 * @param method - @ref OCMethod to perform on the resource
442 * @param requiredUri - URI of the resource to interact with
443 * @param referenceUri - URI of the reference resource
444 * @param request - JSON encoded request
445 * @param qos - quality of service. Note that if this API is called on a uri with
446 * the well-known multicast IP address, the qos will be forced to
448 * since it is impractical to send other QOS levels on such addresses.
449 * @param clientApplicationCB- asynchronous callback function that is invoked
450 * by the stack when discovery or resource interaction is complete
451 * @param options - The address of an array containing the vendor specific
452 * header options to be sent with the request
453 * @param numOptions - Number of header options to be included
455 * Note: Presence subscription amendments (ie. adding additional resource type filters by calling
456 * this API again) require the use of the same base URI as the original request to successfully
457 * amend the presence filters.
460 * OC_STACK_OK - no errors
461 * OC_STACK_INVALID_CALLBACK - invalid callback function pointer
462 * OC_STACK_INVALID_METHOD - invalid resource method
463 * OC_STACK_INVALID_URI - invalid required or reference URI
464 * OC_STACK_INVALID_QUERY - number of resource types specified for filtering presence
465 * notifications exceeds @ref MAX_PRESENCE_FILTERS.
467 OCStackResult OCDoResource(OCDoHandle *handle, OCMethod method, const char *requiredUri,
468 const char *referenceUri, const char *request, OCConnectivityType conType,
469 OCQualityOfService qos, OCCallbackData *cbData,
470 OCHeaderOption * options, uint8_t numOptions);
473 * Cancel a request associated with a specific @ref OCDoResource invocation.
475 * @param handle - Used to identify a specific OCDoResource invocation.
476 * @param qos - used to specify Quality of Service (read below for more info)
477 * @param options- used to specify vendor specific header options when sending
478 * explicit observe cancellation
479 * @param numOptions- Number of header options to be included
482 * OC_STACK_OK - No errors; Success
483 * OC_STACK_INVALID_PARAM - The handle provided is invalid.
485 OCStackResult OCCancel(OCDoHandle handle, OCQualityOfService qos, OCHeaderOption * options,
490 * When operating in @ref OCServer or @ref OCClientServer mode, this API will start sending out
491 * presence notifications to clients via multicast. Once this API has been called with a success,
492 * clients may query for this server's presence and this server's stack will respond via multicast.
494 * Server can call this function when it comes online for the first time, or when it comes back
495 * online from offline mode, or when it re enters network.
497 * @param ttl - Time To Live in seconds
498 * Note: If ttl is '0', then the default stack value will be used (60 Seconds).
501 * OC_STACK_OK - No errors; Success
503 OCStackResult OCStartPresence(const uint32_t ttl);
506 * When operating in @ref OCServer or @ref OCClientServer mode, this API will stop sending out
507 * presence notifications to clients via multicast. Once this API has been called with a success,
508 * this server's stack will not respond to clients querying for this server's presence.
510 * Server can call this function when it is terminating, going offline, or when going
514 * OC_STACK_OK - No errors; Success
517 OCStackResult OCStopPresence();
522 * Set default device entity handler
524 * @param entityHandler - entity handler function that is called by ocstack to handle requests for
525 * any undefined resources or default actions.
526 * if NULL is passed it removes the device default entity handler.
529 * OC_STACK_OK - no errors
530 * OC_STACK_ERROR - stack process error
532 OCStackResult OCSetDefaultDeviceEntityHandler(OCDeviceEntityHandler entityHandler);
535 * Set device information.
537 * @param deviceInfo - Structure passed by the server application containing
538 * the device information.
542 * OC_STACK_OK - no errors
543 * OC_STACK_INVALID_PARAM - invalid paramerter
544 * OC_STACK_ERROR - stack process error
546 OCStackResult OCSetDeviceInfo(OCDeviceInfo deviceInfo);
551 * @param handle - pointer to handle to newly created resource. Set by ocstack. Used to refer to resource
552 * @param resourceTypeName - name of resource type. Example: "core.led"
553 * @param resourceInterfaceName - name of resource interface. Example: "core.rw"
554 * @param uri - URI of the resource. Example: "/a/led"
555 * @param entityHandler - entity handler function that is called by ocstack to handle requests, etc
556 * NULL for default entity handler
557 * @param resourceProperties - properties supported by resource. Example: OC_DISCOVERABLE|OC_OBSERVABLE
560 * OC_STACK_OK - no errors
561 * OC_STACK_ERROR - stack process error
563 OCStackResult OCCreateResource(OCResourceHandle *handle,
564 const char *resourceTypeName,
565 const char *resourceInterfaceName,
567 OCEntityHandler entityHandler,
568 uint8_t resourceProperties);
571 * Create a resource. with host ip address for remote resource
573 * @param handle - pointer to handle to newly created resource. Set by ocstack.
574 * Used to refer to resource
575 * @param resourceTypeName - name of resource type. Example: "core.led"
576 * @param resourceInterfaceName - name of resource interface. Example: "core.rw"
577 * @param host - HOST address of the remote resource. Example: "coap://xxx.xxx.xxx.xxx:xxxxx"
578 * @param uri - URI of the resource. Example: "/a/led"
579 * @param entityHandler - entity handler function that is called by ocstack to handle requests, etc
580 * NULL for default entity handler
581 * @param resourceProperties - properties supported by resource.
582 * Example: OC_DISCOVERABLE|OC_OBSERVABLE
585 * OC_STACK_OK - no errors
586 * OC_STACK_ERROR - stack process error
588 OCStackResult OCCreateResourceWithHost(OCResourceHandle *handle,
589 const char *resourceTypeName,
590 const char *resourceInterfaceName,
593 OCEntityHandler entityHandler,
594 uint8_t resourceProperties);
597 * Add a resource to a collection resource.
599 * @param collectionHandle - handle to the collection resource
600 * @param resourceHandle - handle to resource to be added to the collection resource
603 * OC_STACK_OK - no errors
604 * OC_STACK_ERROR - stack process error
605 * OC_STACK_INVALID_PARAM - invalid collectionhandle
607 OCStackResult OCBindResource(OCResourceHandle collectionHandle, OCResourceHandle resourceHandle);
610 * Remove a resource from a collection resource.
612 * @param collectionHandle - handle to the collection resource
613 * @param resourceHandle - handle to resource to be removed from the collection resource
616 * OC_STACK_OK - no errors
617 * OC_STACK_ERROR - stack process error
618 * OC_STACK_INVALID_PARAM - invalid collectionhandle
620 OCStackResult OCUnBindResource(OCResourceHandle collectionHandle, OCResourceHandle resourceHandle);
623 * Bind a resourcetype to a resource.
625 * @param handle - handle to the resource
626 * @param resourceTypeName - name of resource type. Example: "core.led"
629 * OC_STACK_OK - no errors
630 * OC_STACK_ERROR - stack process error
632 OCStackResult OCBindResourceTypeToResource(OCResourceHandle handle,
633 const char *resourceTypeName);
635 * Bind a resource interface to a resource.
637 * @param handle - handle to the resource
638 * @param resourceInterfaceName - name of resource interface. Example: "core.rw"
641 * OC_STACK_OK - no errors
642 * OC_STACK_ERROR - stack process error
644 OCStackResult OCBindResourceInterfaceToResource(OCResourceHandle handle,
645 const char *resourceInterfaceName);
648 * Bind an entity handler to the resource.
650 * @param handle - handle to the resource that the contained resource is to be bound
651 * @param entityHandler - entity handler function that is called by ocstack to handle requests, etc
653 * OC_STACK_OK - no errors
654 * OC_STACK_ERROR - stack process error
656 OCStackResult OCBindResourceHandler(OCResourceHandle handle, OCEntityHandler entityHandler);
659 * Get the number of resources that have been created in the stack.
661 * @param numResources - pointer to count variable
664 * OC_STACK_OK - no errors
665 * OC_STACK_ERROR - stack process error
668 OCStackResult OCGetNumberOfResources(uint8_t *numResources);
671 * Get a resource handle by index.
673 * @param index - index of resource, 0 to Count - 1
676 * Resource handle - if found
677 * NULL - if not found
679 OCResourceHandle OCGetResourceHandle(uint8_t index);
682 * Delete resource specified by handle. Deletes resource and all resourcetype and resourceinterface
685 * Note: OCDeleteResource() performs operations similar to OCNotifyAllObservers() to notify all
686 * client observers that "this" resource is being deleted.
688 * @param handle - handle of resource to be deleted
691 * OC_STACK_OK - no errors
692 * OC_STACK_ERROR - stack process error
694 OCStackResult OCDeleteResource(OCResourceHandle handle);
697 * Get the URI of the resource specified by handle.
699 * @param handle - handle of resource
701 * URI string - if resource found
702 * NULL - resource not found
704 const char *OCGetResourceUri(OCResourceHandle handle);
707 * Get the properties of the resource specified by handle.
708 * NOTE: that after a resource is created, the OC_ACTIVE property is set
709 * for the resource by the stack.
711 * @param handle - handle of resource
713 * property bitmap - if resource found
714 * NULL - resource not found
716 uint8_t OCGetResourceProperties(OCResourceHandle handle);
719 * Get the number of resource types of the resource.
721 * @param handle - handle of resource
722 * @param numResourceTypes - pointer to count variable
725 * OC_STACK_OK - no errors
726 * OC_STACK_ERROR - stack process error
728 OCStackResult OCGetNumberOfResourceTypes(OCResourceHandle handle, uint8_t *numResourceTypes);
731 * Get name of resource type of the resource.
733 * @param handle - handle of resource
734 * @param index - index of resource, 0 to Count - 1
737 * resource type name - if resource found
738 * NULL - resource not found
740 const char *OCGetResourceTypeName(OCResourceHandle handle, uint8_t index);
743 * Get the number of resource interfaces of the resource.
745 * @param handle - handle of resource
746 * @param numResources - pointer to count variable
749 * OC_STACK_OK - no errors
750 * OC_STACK_ERROR - stack process error
753 OCStackResult OCGetNumberOfResourceInterfaces(OCResourceHandle handle, uint8_t *numResourceInterfaces);
756 * Get name of resource interface of the resource.
758 * @param handle - handle of resource
759 * @param index - index of resource, 0 to Count - 1
762 * resource interface name - if resource found
763 * NULL - resource not found
765 const char *OCGetResourceInterfaceName(OCResourceHandle handle, uint8_t index);
768 * Get methods of resource interface of the resource.
770 * @param handle - handle of resource
771 * @param index - index of resource, 0 to Count - 1
774 * allowed methods - if resource found
775 * NULL - resource not found
777 uint8_t OCGetResourceInterfaceAllowedMethods(OCResourceHandle handle, uint8_t index);
780 * Get resource handle from the collection resource by index.
782 * @param collectionHandle - handle of collection resource
783 * @param index - index of contained resource, 0 to Count - 1
786 * handle to contained resource - if resource found
787 * NULL - resource not found
789 OCResourceHandle OCGetResourceHandleFromCollection(OCResourceHandle collectionHandle, uint8_t index);
792 * Get the entity handler for a resource.
794 * @param handle - handle of resource
797 * entity handler - if resource found
798 * NULL - resource not found
800 OCEntityHandler OCGetResourceHandler(OCResourceHandle handle);
803 * Notify all registered observers that the resource representation has
804 * changed. If observation includes a query the client is notified only
805 * if the query is valid after the resource representation has changed.
807 * @param handle - handle of resource
810 * OC_STACK_OK - no errors
811 * OC_STACK_NO_RESOURCE - invalid resource handle
812 * OC_STACK_NO_OBSERVERS - no more observers intrested in resource
814 OCStackResult OCNotifyAllObservers(OCResourceHandle handle, OCQualityOfService qos);
817 * Notify specific observers with updated value of representation.
818 * Before this API is invoked by entity handler it has finished processing
819 * queries for the associated observers.
821 * @param handle - handle of resource
822 * @param obsIdList - list of observation ids that need to be notified
823 * @param numberOfIds - number of observation ids included in obsIdList
824 * @param notificationJSONPayload - JSON encoded payload to send in notification
825 * @param qos - desired quality of service of the observation notifications
826 * NOTE: The memory for obsIdList and notificationJSONPayload is managed by the
827 * entity invoking the API. The maximum size of the notification is 1015 bytes
828 * for non-Arduino platforms. For Arduino the maximum size is 247 bytes.
831 * OC_STACK_OK - no errors
832 * OC_STACK_NO_RESOURCE - invalid resource handle
835 OCNotifyListOfObservers (OCResourceHandle handle,
836 OCObservationId *obsIdList,
838 unsigned char *notificationJSONPayload,
839 OCQualityOfService qos);
843 * Send a response to a request.
844 * The response can be a normal, slow, or block (i.e. a response that
845 * is too large to be sent in a single PDU and must span multiple transmissions)
847 * @param response - pointer to structure that contains response parameters
850 * OC_STACK_OK - no errors
852 OCStackResult OCDoResponse(OCEntityHandlerResponse *response);
855 * Cancel a response. Applies to a block response
857 * @param responseHandle - response handle set by stack in OCServerResponse after
858 * OCDoResponse is called
861 * OC_STACK_OK - No errors; Success
862 * OC_STACK_INVALID_PARAM - The handle provided is invalid.
864 OCStackResult OCCancelResponse(OCResponseHandle responseHandle);
869 #endif // __cplusplus
871 #endif /* OCSTACK_H_ */