2 *******************************************************************
4 * Copyright 2015 Intel Corporation.
6 *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
20 *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
23 package org.iotivity.base;
25 import org.iotivity.ca.CaInterface;
26 import org.iotivity.base.BuildConfig;
28 import java.util.EnumSet;
29 import java.util.Iterator;
30 import java.util.List;
33 * This class contains the main entrance/functionality of the product. To set a custom
34 * configuration, the implementer must make a call to OcPlatform.Configure before the first usage
35 * of a method in this class.
37 public final class OcPlatform {
40 System.loadLibrary("oc_logger");
41 System.loadLibrary("octbstack");
42 System.loadLibrary("connectivity_abstraction");
43 System.loadLibrary("oc");
44 if (0 != BuildConfig.SECURED)
46 System.loadLibrary("ocprovision");
48 System.loadLibrary("ocstack-jni");
54 public static final String DEFAULT_INTERFACE = "oic.if.baseline";
57 * Used in discovering (GET) links to other resources of a collection
59 public static final String LINK_INTERFACE = "oic.if.ll";
62 * Used in GET, PUT, POST, DELETE methods on links to other resources of a collection
64 public static final String BATCH_INTERFACE = "oic.if.b";
67 * Used in GET, PUT, POST methods on links to other remote resources of a group
69 public static final String GROUP_INTERFACE = "oic.mi.grp";
71 public static final String WELL_KNOWN_QUERY = "/oic/res";
72 public static final String WELL_KNOWN_DEVICE_QUERY = "/oic/d";
73 public static final String WELL_KNOWN_PLATFORM_QUERY = "/oic/p";
74 public static final int DEFAULT_PRESENCE_TTL = 60;
75 public static final String PRESENCE_URI = "/oic/ad";
77 private static volatile boolean sIsPlatformInitialized = false;
78 private static QualityOfService sPlatformQualityOfService = QualityOfService.NA;
80 private OcPlatform() {
84 * API for setting the configuration of the OcPlatform.
86 * Note: Any calls made to this AFTER the first call to OcPlatform.Configure will have no affect
89 * @param platformConfig platform configuration
91 public synchronized static void Configure(PlatformConfig platformConfig) {
92 if (!sIsPlatformInitialized) {
93 CaInterface.initialize(platformConfig.getActivity(), platformConfig.getContext());
95 sPlatformQualityOfService = platformConfig.getQualityOfService();
98 platformConfig.getServiceType().getValue(),
99 platformConfig.getModeType().getValue(),
100 platformConfig.getIpAddress(),
101 platformConfig.getPort(),
102 platformConfig.getQualityOfService().getValue(),
103 platformConfig.getSvrDbPath()
106 sIsPlatformInitialized = true;
110 private static native void configure(int serviceType,
114 int qualityOfService,
118 * API for notifying base that resource's attributes have changed.
120 * Note: This API is for server side only.
123 * @param ocResourceHandle resource handle of the resource
124 * @throws OcException if failure
126 public static void notifyAllObservers(
127 OcResourceHandle ocResourceHandle) throws OcException {
128 OcPlatform.initCheck();
129 OcPlatform.notifyAllObservers0(ocResourceHandle);
132 private static native void notifyAllObservers0(
133 OcResourceHandle ocResourceHandle) throws OcException;
136 * API for notifying base that resource's attributes have changed.
138 * Note: This API is for server side only.
141 * @param ocResourceHandle resource handle of the resource
142 * @param qualityOfService the quality of communication
143 * @throws OcException if failure
145 public static void notifyAllObservers(
146 OcResourceHandle ocResourceHandle,
147 QualityOfService qualityOfService) throws OcException {
148 OcPlatform.initCheck();
149 OcPlatform.notifyAllObservers1(ocResourceHandle, qualityOfService.getValue());
152 private static native void notifyAllObservers1(
153 OcResourceHandle ocResourceHandle,
154 int qualityOfService) throws OcException;
157 * API for notifying only specific clients that resource's attributes have changed.
159 * Note: This API is for server side only.
162 * @param ocResourceHandle resource handle of the resource
163 * @param ocObservationIdList These set of ids are ones which which will be notified upon
165 * @param ocResourceResponse OcResourceResponse object used by app to fill the response for
166 * this resource change
167 * @throws OcException if failure
169 public static void notifyListOfObservers(
170 OcResourceHandle ocResourceHandle,
171 List<Byte> ocObservationIdList,
172 OcResourceResponse ocResourceResponse) throws OcException {
173 OcPlatform.initCheck();
175 byte[] idArr = new byte[ocObservationIdList.size()];
176 Iterator<Byte> it = ocObservationIdList.iterator();
178 while (it.hasNext()) {
179 idArr[i++] = (byte) it.next();
182 OcPlatform.notifyListOfObservers2(
188 private static native void notifyListOfObservers2(
189 OcResourceHandle ocResourceHandle,
190 byte[] ocObservationIdArray,
191 OcResourceResponse ocResourceResponse) throws OcException;
194 * API for notifying only specific clients that resource's attributes have changed.
196 * Note: This API is for server side only.
199 * @param ocResourceHandle resource handle of the resource
200 * @param ocObservationIdList These set of ids are ones which which will be notified upon
202 * @param ocResourceResponse OcResourceResponse object used by app to fill the response for
203 * this resource change
204 * @param qualityOfService the quality of communication
205 * @throws OcException if failure
207 public static void notifyListOfObservers(
208 OcResourceHandle ocResourceHandle,
209 List<Byte> ocObservationIdList,
210 OcResourceResponse ocResourceResponse,
211 QualityOfService qualityOfService) throws OcException {
212 OcPlatform.initCheck();
214 byte[] idArr = new byte[ocObservationIdList.size()];
215 Iterator<Byte> it = ocObservationIdList.iterator();
217 while (it.hasNext()) {
218 idArr[i++] = (byte) it.next();
221 OcPlatform.notifyListOfObservers3(
225 qualityOfService.getValue()
229 private static native void notifyListOfObservers3(
230 OcResourceHandle ocResourceHandle,
231 byte[] ocObservationIdArray,
232 OcResourceResponse ocResourceResponse,
233 int qualityOfService) throws OcException;
236 * API for Service and Resource Discovery
238 * Note: This API is for client side only.
241 * @param host Host Address of a service to direct resource discovery query.
242 * If empty, performs multicast resource discovery query
243 * @param resourceUri name of the resource. If null or empty, performs search for all
245 * @param connectivityTypeSet Set of types of connectivity. Example: IP
246 * @param onResourceFoundListener Handles events, success states and failure states.
247 * @throws OcException if failure
249 public static void findResource(
252 EnumSet<OcConnectivityType> connectivityTypeSet,
253 OnResourceFoundListener onResourceFoundListener) throws OcException {
254 OcPlatform.initCheck();
258 for (OcConnectivityType connType : OcConnectivityType.values()) {
259 if (connectivityTypeSet.contains(connType))
260 connTypeInt |= connType.getValue();
263 OcPlatform.findResource0(
267 onResourceFoundListener
271 private static native void findResource0(
274 int connectivityType,
275 OnResourceFoundListener onResourceFoundListener) throws OcException;
278 * API for Service and Resource Discovery.
280 * Note: This API is for client side only.
283 * @param host Host IP Address of a service to direct resource discovery query.
284 * If empty, performs multicast resource discovery query
285 * @param resourceUri name of the resource. If null or empty, performs search for all
287 * @param connectivityTypeSet Set of types of connectivity. Example: IP
288 * @param onResourceFoundListener Handles events, success states and failure states.
289 * @param qualityOfService the quality of communication
290 * @throws OcException if failure
292 public static void findResource(
295 EnumSet<OcConnectivityType> connectivityTypeSet,
296 OnResourceFoundListener onResourceFoundListener,
297 QualityOfService qualityOfService) throws OcException {
298 OcPlatform.initCheck();
302 for (OcConnectivityType connType : OcConnectivityType.values()) {
303 if (connectivityTypeSet.contains(connType))
304 connTypeInt |= connType.getValue();
307 OcPlatform.findResource1(host,
310 onResourceFoundListener,
311 qualityOfService.getValue()
315 private static native void findResource1(
318 int connectivityType,
319 OnResourceFoundListener onResourceFoundListener,
320 int qualityOfService) throws OcException;
323 * API for Device Discovery
325 * @param host Host IP Address. If null or empty, Multicast is performed.
326 * @param deviceUri Uri containing address to the virtual device
327 * @param connectivityTypeSet Set of types of connectivity. Example: IP
328 * @param onDeviceFoundListener Handles events, success states and failure states.
329 * @throws OcException if failure
331 public static void getDeviceInfo(
334 EnumSet<OcConnectivityType> connectivityTypeSet,
335 OnDeviceFoundListener onDeviceFoundListener) throws OcException {
336 OcPlatform.initCheck();
339 for (OcConnectivityType connType : OcConnectivityType.values()) {
340 if (connectivityTypeSet.contains(connType))
341 connTypeInt |= connType.getValue();
343 OcPlatform.getDeviceInfo0(
347 onDeviceFoundListener
351 private static native void getDeviceInfo0(
354 int connectivityType,
355 OnDeviceFoundListener onDeviceFoundListener) throws OcException;
358 * API for Device Discovery
360 * @param host Host IP Address. If null or empty, Multicast is performed.
361 * @param deviceUri Uri containing address to the virtual device
362 * @param connectivityTypeSet Set of types of connectivity. Example: IP
363 * @param onDeviceFoundListener Handles events, success states and failure states.
364 * @param qualityOfService the quality of communication
365 * @throws OcException if failure
367 public static void getDeviceInfo(
370 EnumSet<OcConnectivityType> connectivityTypeSet,
371 OnDeviceFoundListener onDeviceFoundListener,
372 QualityOfService qualityOfService) throws OcException {
373 OcPlatform.initCheck();
376 for (OcConnectivityType connType : OcConnectivityType.values()) {
377 if (connectivityTypeSet.contains(connType))
378 connTypeInt |= connType.getValue();
380 OcPlatform.getDeviceInfo1(
384 onDeviceFoundListener,
385 qualityOfService.getValue()
389 private static native void getDeviceInfo1(
392 int connectivityType,
393 OnDeviceFoundListener onDeviceFoundListener,
394 int qualityOfService) throws OcException;
397 * API for Platform Discovery
399 * @param host Host IP Address. If null or empty, Multicast is performed.
400 * @param platformUri Uri containing address to the platform
401 * @param connectivityTypeSet Set of types of connectivity. Example: IP
402 * @param onPlatformFoundListener Handles events, success states and failure states.
403 * @throws OcException if failure
406 public static void getPlatformInfo(
409 EnumSet<OcConnectivityType> connectivityTypeSet,
410 OnPlatformFoundListener onPlatformFoundListener) throws OcException {
411 OcPlatform.initCheck();
414 for (OcConnectivityType connType : OcConnectivityType.values()) {
415 if (connectivityTypeSet.contains(connType))
416 connTypeInt |= connType.getValue();
418 OcPlatform.getPlatformInfo0(
422 onPlatformFoundListener
426 private static native void getPlatformInfo0(
429 int connectivityType,
430 OnPlatformFoundListener onPlatformInfoFoundListener) throws OcException;
433 * API for Platform Discovery
435 * @param host Host IP Address. If null or empty, Multicast is performed.
436 * @param platformUri Uri containing address to the platform
437 * @param connectivityTypeSet Set of types of connectivity. Example: IP
438 * @param onPlatformFoundListener Handles events, success states and failure states.
439 * @param qualityOfService the quality of communication
440 * @throws OcException if failure
443 public static void getPlatformInfo(
446 EnumSet<OcConnectivityType> connectivityTypeSet,
447 OnPlatformFoundListener onPlatformFoundListener,
448 QualityOfService qualityOfService) throws OcException {
449 OcPlatform.initCheck();
452 for (OcConnectivityType connType : OcConnectivityType.values()) {
453 if (connectivityTypeSet.contains(connType))
454 connTypeInt |= connType.getValue();
456 OcPlatform.getPlatformInfo1(
460 onPlatformFoundListener,
461 qualityOfService.getValue()
465 private static native void getPlatformInfo1(
468 int connectivityType,
469 OnPlatformFoundListener onPlatformFoundListener,
470 int qualityOfService) throws OcException;
473 * This API registers a resource with the server
475 * Note: This API applies to server & client side.
478 * @param ocResource The instance of OcResource with all data filled
479 * @return resource handle
480 * @throws OcException if failure
482 public static OcResourceHandle registerResource(
483 OcResource ocResource) throws OcException {
484 OcPlatform.initCheck();
485 return OcPlatform.registerResource0(ocResource);
488 private static native OcResourceHandle registerResource0(
489 OcResource ocResource) throws OcException;
492 * This API registers a resource with the server NOTE: This API applies to server side only.
494 * Note: This API applies to server side only.
497 * @param resourceUri The URI of the resource. Example: "a/light"
498 * @param resourceTypeName The resource type. Example: "light"
499 * @param resourceInterface The resource interface (whether it is collection etc).
500 * @param entityHandler entity handler.
501 * @param resourcePropertySet indicates the property of the resource
502 * @return resource handle
503 * @throws OcException if failure
505 public static OcResourceHandle registerResource(
507 String resourceTypeName,
508 String resourceInterface,
509 EntityHandler entityHandler,
510 EnumSet<ResourceProperty> resourcePropertySet) throws OcException {
511 OcPlatform.initCheck();
515 for (ResourceProperty prop : ResourceProperty.values()) {
516 if (resourcePropertySet.contains(prop))
517 resProperty |= prop.getValue();
520 return OcPlatform.registerResource1(resourceUri,
527 private static native OcResourceHandle registerResource1(
529 String resourceTypeName,
530 String resourceInterface,
531 EntityHandler entityHandler,
532 int resourceProperty) throws OcException;
535 * Register Device Info
537 * @param ocDeviceInfo object containing all the device specific information
538 * @throws OcException if failure
540 public static void registerDeviceInfo(
541 OcDeviceInfo ocDeviceInfo) throws OcException {
542 OcPlatform.initCheck();
543 OcPlatform.registerDeviceInfo0(
544 ocDeviceInfo.getDeviceName(),
545 ocDeviceInfo.getDeviceTypes().toArray(
546 new String[ocDeviceInfo.getDeviceTypes().size()]
551 private static native void registerDeviceInfo0(
554 ) throws OcException;
557 * Register Platform Info
559 * @param ocPlatformInfo object containing all the platform specific information
560 * @throws OcException if failure
562 public static void registerPlatformInfo(
563 OcPlatformInfo ocPlatformInfo) throws OcException {
564 OcPlatform.initCheck();
565 OcPlatform.registerPlatformInfo0(
566 ocPlatformInfo.getPlatformId(),
567 ocPlatformInfo.getManufacturerName(),
568 ocPlatformInfo.getManufacturerUrl(),
569 ocPlatformInfo.getModelNumber(),
570 ocPlatformInfo.getDateOfManufacture(),
571 ocPlatformInfo.getPlatformVersion(),
572 ocPlatformInfo.getOperatingSystemVersion(),
573 ocPlatformInfo.getHardwareVersion(),
574 ocPlatformInfo.getFirmwareVersion(),
575 ocPlatformInfo.getSupportUrl(),
576 ocPlatformInfo.getSystemTime()
580 private static native void registerPlatformInfo0(
581 String platformId, String manufacturerName, String manufacturerUrl,
582 String modelNumber, String dateOfManufacture, String platformVersion,
583 String operatingSystemVersion, String hardwareVersion, String firmwareVersion,
584 String supportUrl, String systemTime
585 ) throws OcException;
588 * This API unregisters a resource with the server NOTE: This API applies to server side only.
590 * @param ocResourceHandle This is the resource handle which we which to unregister from the
592 * @throws OcException if failure
594 public static void unregisterResource(
595 OcResourceHandle ocResourceHandle) throws OcException {
596 OcPlatform.initCheck();
597 OcPlatform.unregisterResource0(ocResourceHandle);
600 private static native void unregisterResource0(
601 OcResourceHandle ocResourceHandle) throws OcException;
605 * Add a resource to a collection resource
607 * @param ocResourceCollectionHandle handle to the collection resource
608 * @param ocResourceHandle handle to resource to be added to the collection resource
609 * @throws OcException if failure
611 public static void bindResource(
612 OcResourceHandle ocResourceCollectionHandle,
613 OcResourceHandle ocResourceHandle) throws OcException {
614 OcPlatform.initCheck();
615 OcPlatform.bindResource0(ocResourceCollectionHandle, ocResourceHandle);
618 private static native void bindResource0(
619 OcResourceHandle ocResourceCollectionHandle,
620 OcResourceHandle ocResourceHandle) throws OcException;
623 * Add multiple resources to a collection resource.
625 * @param ocResourceCollectionHandle handle to the collection resource
626 * @param ocResourceHandleList reference to list of resource handles to be added to the
627 * collection resource
628 * @throws OcException if failure
630 public static void bindResources(
631 OcResourceHandle ocResourceCollectionHandle,
632 List<OcResourceHandle> ocResourceHandleList) throws OcException {
633 OcPlatform.initCheck();
634 OcPlatform.bindResources0(
635 ocResourceCollectionHandle,
636 ocResourceHandleList.toArray(
637 new OcResourceHandle[ocResourceHandleList.size()])
641 private static native void bindResources0(
642 OcResourceHandle ocResourceCollectionHandle,
643 OcResourceHandle[] ocResourceHandleArray) throws OcException;
646 * Unbind a resource from a collection resource.
648 * @param ocResourceCollectionHandle handle to the collection resource
649 * @param ocResourceHandle resource handle to be unbound from the collection resource
650 * @throws OcException if failure
652 public static void unbindResource(
653 OcResourceHandle ocResourceCollectionHandle,
654 OcResourceHandle ocResourceHandle) throws OcException {
655 OcPlatform.initCheck();
656 OcPlatform.unbindResource0(ocResourceCollectionHandle, ocResourceHandle);
659 private static native void unbindResource0(
660 OcResourceHandle ocResourceCollectionHandle,
661 OcResourceHandle ocResourceHandle) throws OcException;
664 * Unbind resources from a collection resource.
666 * @param ocResourceCollectionHandle Handle to the collection resource
667 * @param ocResourceHandleList List of resource handles to be unbound from the collection
669 * @throws OcException if failure
671 public static void unbindResources(
672 OcResourceHandle ocResourceCollectionHandle,
673 List<OcResourceHandle> ocResourceHandleList) throws OcException {
674 OcPlatform.initCheck();
675 OcPlatform.unbindResources0(
676 ocResourceCollectionHandle,
677 ocResourceHandleList.toArray(
678 new OcResourceHandle[ocResourceHandleList.size()])
682 private static native void unbindResources0(
683 OcResourceHandle ocResourceCollectionHandle,
684 OcResourceHandle[] ocResourceHandleArray) throws OcException;
687 * Binds a type to a particular resource
689 * @param ocResourceHandle handle to the resource
690 * @param resourceTypeName new typename to bind to the resource
691 * @throws OcException if failure
693 public static void bindTypeToResource(
694 OcResourceHandle ocResourceHandle,
695 String resourceTypeName) throws OcException {
696 OcPlatform.initCheck();
697 OcPlatform.bindTypeToResource0(ocResourceHandle, resourceTypeName);
700 private static native void bindTypeToResource0(
701 OcResourceHandle ocResourceHandle,
702 String resourceTypeName) throws OcException;
705 * Binds an interface to a particular resource
707 * @param ocResourceHandle handle to the resource
708 * @param resourceInterfaceName new interface to bind to the resource
709 * @throws OcException if failure
711 public static void bindInterfaceToResource(
712 OcResourceHandle ocResourceHandle,
713 String resourceInterfaceName) throws OcException {
714 OcPlatform.initCheck();
715 OcPlatform.bindInterfaceToResource0(ocResourceHandle, resourceInterfaceName);
718 private static native void bindInterfaceToResource0(
719 OcResourceHandle ocResourceHandle,
720 String resourceInterfaceName) throws OcException;
723 * Start Presence announcements.
725 * @param ttl time to live in seconds
726 * @throws OcException if failure
728 public static void startPresence(int ttl) throws OcException {
729 OcPlatform.initCheck();
730 OcPlatform.startPresence0(ttl);
733 private static native void startPresence0(int ttl) throws OcException;
736 * Stop Presence announcements.
738 * @throws OcException if failure
740 public static void stopPresence() throws OcException {
741 OcPlatform.initCheck();
742 OcPlatform.stopPresence0();
745 private static native void stopPresence0() throws OcException;
748 * Subscribes to a server's presence change events. By making this subscription, every time a
749 * server adds/removes/alters a resource, starts or is intentionally stopped
751 * @param host The IP address/addressable name of the server to subscribe to
752 * @param connectivityTypeSet Set of types of connectivity. Example: IP
753 * @param onPresenceListener listener that will receive notifications/subscription events
754 * @return a handle object that can be used to identify this subscription request. It can be
755 * used to unsubscribe from these events in the future
756 * @throws OcException if failure
758 public static OcPresenceHandle subscribePresence(
760 EnumSet<OcConnectivityType> connectivityTypeSet,
761 OnPresenceListener onPresenceListener) throws OcException {
762 OcPlatform.initCheck();
765 for (OcConnectivityType connType : OcConnectivityType.values()) {
766 if (connectivityTypeSet.contains(connType))
767 connTypeInt |= connType.getValue();
769 return OcPlatform.subscribePresence0(
776 private static native OcPresenceHandle subscribePresence0(
778 int connectivityType,
779 OnPresenceListener onPresenceListener) throws OcException;
782 * Subscribes to a server's presence change events. By making this subscription, every time a
783 * server adds/removes/alters a resource, starts or is intentionally stopped
785 * @param host The IP address/addressable name of the server to subscribe to
786 * @param resourceType a resource type specified as a filter for subscription events.
787 * @param connectivityTypeSet Set of types of connectivity. Example: IP
788 * @param onPresenceListener listener that will receive notifications/subscription events
789 * @return a handle object that can be used to identify this subscription request. It can be
790 * used to unsubscribe from these events in the future
791 * @throws OcException if failure
793 public static OcPresenceHandle subscribePresence(
796 EnumSet<OcConnectivityType> connectivityTypeSet,
797 OnPresenceListener onPresenceListener) throws OcException {
798 OcPlatform.initCheck();
801 for (OcConnectivityType connType : OcConnectivityType.values()) {
802 if (connectivityTypeSet.contains(connType))
803 connTypeInt |= connType.getValue();
805 return OcPlatform.subscribePresence1(
812 private static native OcPresenceHandle subscribePresence1(
815 int connectivityType,
816 OnPresenceListener onPresenceListener) throws OcException;
819 * Unsubscribes from a previously subscribed server's presence events. Note that you may for
820 * a short time still receive events from the server since it may take time for the
821 * unsubscribe to take effect.
823 * @param ocPresenceHandle the handle object provided by the subscribePresence call that
824 * identifies this subscription
825 * @throws OcException if failure
827 public static void unsubscribePresence(
828 OcPresenceHandle ocPresenceHandle) throws OcException {
829 OcPlatform.initCheck();
830 OcPlatform.unsubscribePresence0(ocPresenceHandle);
833 private static native void unsubscribePresence0(
834 OcPresenceHandle ocPresenceHandle) throws OcException;
837 * Subscribes to a server's device presence change events.
839 * @param host The IP address/addressable name of the server to subscribe to.
840 * @param di Vector which can have the devices id.
841 * @param connectivityTypeSet Set of connectivity types, e.g. IP.
842 * @param onObserveListener The handler method will be invoked with a map
843 * of attribute name and values.
844 * @return a handle object that can be used to identify this subscription request.
845 * It can be used to unsubscribe from these events in the future.
846 * @throws OcException if failure.
848 public static OcPresenceHandle subscribeDevicePresence(
851 EnumSet<OcConnectivityType> connectivityTypeSet,
852 OcResource.OnObserveListener onObserveListener) throws OcException {
853 OcPlatform.initCheck();
856 for (OcConnectivityType connType : OcConnectivityType.values()) {
857 if (connectivityTypeSet.contains(connType))
858 connTypeInt |= connType.getValue();
860 return OcPlatform.subscribeDevicePresence0(
862 di.toArray(new String[di.size()]),
867 private static native OcPresenceHandle subscribeDevicePresence0(
870 int connectivityType,
871 OcResource.OnObserveListener onObserveListener) throws OcException;
874 * Creates a resource proxy object so that get/put/observe functionality can be used without
875 * discovering the object in advance. Note that the consumer of this method needs to provide
876 * all of the details required to correctly contact and observe the object. If the consumer
877 * lacks any of this information, they should discover the resource object normally.
878 * Additionally, you can only create this object if OcPlatform was initialized to be a Client
881 * @param host a string containing a resolvable host address of the server holding
883 * @param uri the rest of the resource's URI that will permit messages to be
886 * @param connectivityTypeSet Set of types of connectivity. Example: IP
887 * @param isObservable a boolean containing whether the resource supports observation
888 * @param resourceTypeList a collection of resource types implemented by the resource
889 * @param interfaceList a collection of interfaces that the resource supports/implements
890 * @return new resource object
891 * @throws OcException if failure
893 public static OcResource constructResourceObject(
896 EnumSet<OcConnectivityType> connectivityTypeSet,
897 boolean isObservable,
898 List<String> resourceTypeList,
899 List<String> interfaceList) throws OcException {
900 OcPlatform.initCheck();
903 for (OcConnectivityType connType : OcConnectivityType.values()) {
904 if (connectivityTypeSet.contains(connType))
905 connTypeInt |= connType.getValue();
907 return OcPlatform.constructResourceObject0(
912 resourceTypeList.toArray(new String[resourceTypeList.size()]),
913 interfaceList.toArray(new String[interfaceList.size()])
917 private static native OcResource constructResourceObject0(
920 int connectivityType,
921 boolean isObservable,
922 String[] resourceTypes,
923 String[] interfaces) throws OcException;
926 * Allows application entity handler to send response to an incoming request.
928 * @param ocResourceResponse resource response
929 * @throws OcException if failure
931 public static void sendResponse(OcResourceResponse ocResourceResponse)
933 OcPlatform.initCheck();
934 OcPlatform.sendResponse0(ocResourceResponse);
937 private static native void sendResponse0(OcResourceResponse ocResourceResponse)
941 * Method to find all devices which are eligible for direct pairing and return the list.
943 * @param timeout timeout for discovering direct pair devices.
944 * @param FindDirectPairingListener Callback function, which will receive the list of direct
946 * @throws OcException
948 public static native void findDirectPairingDevices(int timeout,
949 FindDirectPairingListener onFindDirectPairingListener) throws OcException;
952 * Method to get list of all paired devices for a given device.
954 * @param GetDirectPairedListener Callback function, which will receive the list of direct
956 * @throws OcException
958 public native void getDirectPairedDevices(GetDirectPairedListener onGetDirectPairedListener)
962 * Method to perform direct pairing between two devices.
964 * @param peer Target peer
965 * @param prmType Pairing Method to be used for Pairing
967 * @param DirectPairingListener Callback function, which will be called after
968 * completion of direct pairing.
969 * @throws OcException
971 public static void doDirectPairing(
972 OcDirectPairDevice peer,
975 DirectPairingListener onDirectPairingListener) throws OcException {
977 OcPlatform.doDirectPairing0(
981 onDirectPairingListener
985 private static native void doDirectPairing0(OcDirectPairDevice peer,
986 int pmSel, String pinNumber, DirectPairingListener onDirectPairingListener)
990 * API to publish resource to remote resource-directory.
992 * @param host Host Address of a service to publish resource.
993 * @param connectivityTypeSet Set of types of connectivity. Example: IP
994 * @param onPublishResourceListener Handles events, success states and failure states.
995 * @throws OcException if failure
997 public static void publishResourceToRD(
999 EnumSet<OcConnectivityType> connectivityTypeSet,
1000 OnPublishResourceListener onPublishResourceListener) throws OcException {
1001 OcPlatform.initCheck();
1003 int connTypeInt = 0;
1005 for (OcConnectivityType connType : OcConnectivityType.values()) {
1006 if (connectivityTypeSet.contains(connType)) {
1007 connTypeInt |= connType.getValue();
1011 OcPlatform.publishResourceToRD0(
1014 onPublishResourceListener,
1015 sPlatformQualityOfService.getValue()
1020 * API to publish resource to remote resource-directory.
1022 * @param host Host Address of a service to publish resource.
1023 * @param connectivityTypeSet Set of types of connectivity. Example: IP
1024 * @param onPublishResourceListener Handles events, success states and failure states.
1025 * @param qualityOfService the quality of communication.
1026 * @throws OcException if failure
1028 public static void publishResourceToRD(
1030 EnumSet<OcConnectivityType> connectivityTypeSet,
1031 OnPublishResourceListener onPublishResourceListener,
1032 QualityOfService qualityOfService) throws OcException {
1033 OcPlatform.initCheck();
1035 int connTypeInt = 0;
1037 for (OcConnectivityType connType : OcConnectivityType.values()) {
1038 if (connectivityTypeSet.contains(connType)) {
1039 connTypeInt |= connType.getValue();
1043 OcPlatform.publishResourceToRD0(
1046 onPublishResourceListener,
1047 qualityOfService.getValue()
1051 private static native void publishResourceToRD0(
1053 int connectivityType,
1054 OnPublishResourceListener onPublishResourceListener,
1055 int qualityOfService) throws OcException;
1058 * API to publish resource to remote resource-directory.
1060 * @param host Host Address of a service to publish resource.
1061 * @param connectivityTypeSet Set of types of connectivity. Example: IP
1062 * @param ocResourceHandleList reference to list of resource handles to be published.
1063 * @param onPublishResourceListener Handles events, success states and failure states.
1064 * @throws OcException if failure
1066 public static void publishResourceToRD(
1068 EnumSet<OcConnectivityType> connectivityTypeSet,
1069 List<OcResourceHandle> ocResourceHandleList,
1070 OnPublishResourceListener onPublishResourceListener) throws OcException {
1071 OcPlatform.initCheck();
1073 int connTypeInt = 0;
1075 for (OcConnectivityType connType : OcConnectivityType.values()) {
1076 if (connectivityTypeSet.contains(connType)) {
1077 connTypeInt |= connType.getValue();
1081 OcPlatform.publishResourceToRD1(
1084 ocResourceHandleList.toArray(
1085 new OcResourceHandle[ocResourceHandleList.size()]),
1086 onPublishResourceListener,
1087 sPlatformQualityOfService.getValue()
1092 * API to publish resource to remote resource-directory.
1094 * @param host Host IP Address of a service to publish resource.
1095 * @param connectivityTypeSet Set of types of connectivity. Example: IP
1096 * @param ocResourceHandleList reference to list of resource handles to be published.
1097 * @param onPublishResourceListener Handles events, success states and failure states.
1098 * @param qualityOfService the quality of communication
1099 * @throws OcException if failure
1101 public static void publishResourceToRD(
1103 EnumSet<OcConnectivityType> connectivityTypeSet,
1104 List<OcResourceHandle> ocResourceHandleList,
1105 OnPublishResourceListener onPublishResourceListener,
1106 QualityOfService qualityOfService) throws OcException {
1107 OcPlatform.initCheck();
1109 int connTypeInt = 0;
1111 for (OcConnectivityType connType : OcConnectivityType.values()) {
1112 if (connectivityTypeSet.contains(connType)) {
1113 connTypeInt |= connType.getValue();
1117 OcPlatform.publishResourceToRD1(
1120 ocResourceHandleList.toArray(
1121 new OcResourceHandle[ocResourceHandleList.size()]),
1122 onPublishResourceListener,
1123 qualityOfService.getValue()
1127 private static native void publishResourceToRD1(
1129 int connectivityType,
1130 OcResourceHandle[] ocResourceHandleArray,
1131 OnPublishResourceListener onPublishResourceListener,
1132 int qualityOfService) throws OcException;
1135 * API to delete resource from remote resource-directory.
1137 * @param host Host Address of a service to publish resource.
1138 * @param connectivityTypeSet Set of types of connectivity. Example: IP
1139 * @param onDeleteResourceListener Handles events, success states and failure states.
1140 * @throws OcException if failure
1142 public static void deleteResourceFromRD(
1144 EnumSet<OcConnectivityType> connectivityTypeSet,
1145 OnDeleteResourceListener onDeleteResourceListener) throws OcException {
1146 OcPlatform.initCheck();
1148 int connTypeInt = 0;
1150 for (OcConnectivityType connType : OcConnectivityType.values()) {
1151 if (connectivityTypeSet.contains(connType)) {
1152 connTypeInt |= connType.getValue();
1156 OcPlatform.deleteResourceFromRD0(
1159 onDeleteResourceListener,
1160 sPlatformQualityOfService.getValue()
1165 * API to delete resource from remote resource-directory.
1167 * @param host Host Address of a service to publish resource.
1168 * @param connectivityTypeSet Set of types of connectivity. Example: IP
1169 * @param onDeleteResourceListener Handles events, success states and failure states.
1170 * @param qualityOfService the quality of communication.
1171 * @throws OcException if failure
1173 public static void deleteResourceFromRD(
1175 EnumSet<OcConnectivityType> connectivityTypeSet,
1176 OnDeleteResourceListener onDeleteResourceListener,
1177 QualityOfService qualityOfService) throws OcException {
1178 OcPlatform.initCheck();
1180 int connTypeInt = 0;
1182 for (OcConnectivityType connType : OcConnectivityType.values()) {
1183 if (connectivityTypeSet.contains(connType)) {
1184 connTypeInt |= connType.getValue();
1188 OcPlatform.deleteResourceFromRD0(
1191 onDeleteResourceListener,
1192 qualityOfService.getValue()
1196 private static native void deleteResourceFromRD0(
1198 int connectivityType,
1199 OnDeleteResourceListener onDeleteResourceListener,
1200 int qualityOfService) throws OcException;
1203 * API to delete resource from remote resource-directory.
1205 * @param host Host Address of a service to publish resource.
1206 * @param connectivityTypeSet Set of types of connectivity. Example: IP
1207 * @param ocResourceHandleList reference to list of resource handles to be published.
1208 * @param onDeleteResourceListener Handles events, success states and failure states.
1209 * @throws OcException if failure
1211 public static void deleteResourceFromRD(
1213 EnumSet<OcConnectivityType> connectivityTypeSet,
1214 List<OcResourceHandle> ocResourceHandleList,
1215 OnDeleteResourceListener onDeleteResourceListener) throws OcException {
1216 OcPlatform.initCheck();
1218 int connTypeInt = 0;
1220 for (OcConnectivityType connType : OcConnectivityType.values()) {
1221 if (connectivityTypeSet.contains(connType)) {
1222 connTypeInt |= connType.getValue();
1226 OcPlatform.deleteResourceFromRD1(
1229 ocResourceHandleList.toArray(
1230 new OcResourceHandle[ocResourceHandleList.size()]),
1231 onDeleteResourceListener,
1232 sPlatformQualityOfService.getValue()
1237 * API to delete resource from remote resource-directory.
1239 * @param host Host IP Address of a service to publish resource.
1240 * @param connectivityTypeSet Set of types of connectivity. Example: IP
1241 * @param ocResourceHandleList reference to list of resource handles to be published.
1242 * @param onDeleteResourceListener Handles events, success states and failure states.
1243 * @param qualityOfService the quality of communication
1244 * @throws OcException if failure
1246 public static void deleteResourceFromRD(
1248 EnumSet<OcConnectivityType> connectivityTypeSet,
1249 List<OcResourceHandle> ocResourceHandleList,
1250 OnDeleteResourceListener onDeleteResourceListener,
1251 QualityOfService qualityOfService) throws OcException {
1252 OcPlatform.initCheck();
1254 int connTypeInt = 0;
1256 for (OcConnectivityType connType : OcConnectivityType.values()) {
1257 if (connectivityTypeSet.contains(connType)) {
1258 connTypeInt |= connType.getValue();
1262 OcPlatform.deleteResourceFromRD1(
1265 ocResourceHandleList.toArray(
1266 new OcResourceHandle[ocResourceHandleList.size()]),
1267 onDeleteResourceListener,
1268 qualityOfService.getValue()
1272 private static native void deleteResourceFromRD1(
1274 int connectivityType,
1275 OcResourceHandle[] ocResourceHandleArray,
1276 OnDeleteResourceListener onDeleteResourceListener,
1277 int qualityOfService) throws OcException;
1280 * An OnPublishResourceListener can be registered via the OcPlatform.publishResourceToRD call.
1281 * Event listeners are notified asynchronously
1283 public interface OnPublishResourceListener {
1284 public void onPublishResourceCompleted(OcRepresentation ocRepresentation);
1285 public void onPublishResourceFailed(Throwable ex);
1289 * An OnDeleteResourceListener can be registered via the OcPlatform.deleteResourceFromRD call.
1290 * Event listeners are notified asynchronously
1292 public interface OnDeleteResourceListener {
1293 public void onDeleteResourceCompleted(int result);
1297 * An FindDirectPairingListener can be registered via the OcPlatform.findDirectPairingDevices call.
1298 * Event listeners are notified asynchronously
1300 public interface FindDirectPairingListener {
1301 public void onFindDirectPairingListener(List<OcDirectPairDevice> ocPairedDeviceList);
1305 * Listerner to Get List of already Direct Paired devices.
1306 * An GetDirectPairedListener can be registered via the OcPlatform.getDirectPairedDevices call.
1307 * Event listeners are notified asynchronously
1309 public interface GetDirectPairedListener {
1310 public void onGetDirectPairedListener(List<OcDirectPairDevice> ocPairedDeviceList);
1314 * Listner to get result of doDirectPairing.
1315 * An DirectPairingListener can be registered via the OcPlatform.doDirectPairing call.
1316 * Event listeners are notified asynchronously
1318 public interface DirectPairingListener {
1319 public void onDirectPairingListener(String devId, int result);
1323 * An OnResourceFoundListener can be registered via the OcPlatform.findResource call.
1324 * Event listeners are notified asynchronously
1326 public interface OnResourceFoundListener {
1327 public void onResourceFound(OcResource resource);
1328 public void onFindResourceFailed(Throwable ex, String uri);
1332 * An OnDeviceFoundListener can be registered via the OcPlatform.getDeviceInfo call.
1333 * Event listeners are notified asynchronously
1335 public interface OnDeviceFoundListener {
1336 public void onDeviceFound(OcRepresentation ocRepresentation);
1340 * An OnPlatformFoundListener can be registered via the OcPlatform.getPlatformInfo call.
1341 * Event listeners are notified asynchronously
1343 public interface OnPlatformFoundListener {
1344 public void onPlatformFound(OcRepresentation ocRepresentation);
1348 * An OnPresenceListener can be registered via the OcPlatform.subscribePresence call.
1349 * Event listeners are notified asynchronously
1351 public interface OnPresenceListener {
1352 public void onPresence(OcPresenceStatus ocPresenceStatus, int nonce, String hostAddress);
1356 * An EntityHandler can be registered via the OcPlatform.registerResource call.
1357 * Event listeners are notified asynchronously
1359 * @note entityhandler callback :
1360 * When you set specific return value like EntityHandlerResult.OK, SLOW
1361 * and etc in entity handler callback,
1362 * ocstack will be not send response automatically to client
1363 * except for error return value like EntityHandlerResult.ERROR
1364 * If you want to send response to client with specific result,
1365 * sendResponse API should be called with the result value.
1367 public interface EntityHandler {
1368 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest);
1371 private static void initCheck() {
1372 if (!sIsPlatformInitialized) {
1373 throw new IllegalStateException("OcPlatform must be configured by making a call to " +
1374 "OcPlatform.Configure before any other API calls are permitted");
1379 * Gets platform quality of service
1381 * @return quality of service
1383 public static QualityOfService getPlatformQualityOfService() {
1384 OcPlatform.initCheck();
1385 return sPlatformQualityOfService;
1389 * Create an account manager object that can be used for doing request to account server.
1390 * You can only create this object if OCPlatform was initialized to be a Client or
1391 * Client/Server. Otherwise, this will return an empty shared ptr.
1393 * @note For now, OCPlatform SHOULD be initialized to be a Client/Server(Both) for the
1394 * methods of this object to work since device id is not generated on Client mode.
1396 * @param host Host IP Address of a account server.
1397 * @param connectivityTypeSet Set of types of connectivity. Example: CT_ADAPTER_IP
1398 * @return new AccountManager object
1399 * @throws OcException if failure
1401 public static OcAccountManager constructAccountManagerObject(
1403 EnumSet<OcConnectivityType> connectivityTypeSet) throws OcException {
1404 OcPlatform.initCheck();
1405 int connTypeInt = 0;
1407 for (OcConnectivityType connType : OcConnectivityType.values()) {
1408 if (connectivityTypeSet.contains(connType))
1410 connTypeInt |= connType.getValue();
1413 return OcPlatform.constructAccountManagerObject0(
1419 private static native OcAccountManager constructAccountManagerObject0(
1421 int connectivityType) throws OcException;