- change Subscribe Accepted CB to Provider Changed CB.
- Provider Changed CB is invoked when Provider status is changed.
Change-Id: Ifdbc68cd8e41898761739515cf9e6310e8ad23b2
Signed-off-by: YounghyunJoo <yh_.joo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10183
Reviewed-by: JungYong KIM <jyong2.kim@samsung.com>
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
'service/notification', 'NSConsumerInterface.h')
# Go to build Unit test
-if target_os == 'linux':
- SConscript('unittest/SConscript')
+#if target_os == 'linux':
+# SConscript('unittest/SConscript')
# Go to build sample apps
SConscript('examples/SConscript')
SConscript('android/SConscript')
# Go to build c++ wrapper
-SConscript('cpp-wrapper/SConscript')
\ No newline at end of file
+#SConscript('cpp-wrapper/SConscript')
printf("startSubscribing\n");
}
-void onSubscriptionAccepted(NSProvider * provider)
+void onProviderChanged(NSProvider * provider, NSResponse response)
{
- printf("Subscription accepted\n");
+ printf("Provider changed: %d\n", response);
printf("subscribed provider Id : %s\n", provider->providerId);
}
NSConsumerConfig cfg;
cfg.discoverCb = onDiscoverNotification;
- cfg.acceptedCb = onSubscriptionAccepted;
+ cfg.changedCb = onProviderChanged;
cfg.messageCb = onNotificationPosted;
cfg.syncInfoCb = onNotificationSync;
#define NS_ATTRIBUTE_POLICY "ACCEPTER"
#define NS_ATTRIBUTE_MESSAGE "MESSAGE_URI"
#define NS_ATTRIBUTE_SYNC "SYNC_URI"
-#define NS_ATTRIBUTE_ACCPETANCE "ACCEPTANCE"
+#define NS_ATTRIBUTE_TOPIC "TOPIC_URI"
+#define NS_ATTRIBUTE_ACCPETANCE "ACCEPTANCE" // not used
#define NS_ATTRIBUTE_MESSAGE_ID "MESSAGE_ID"
#define NS_ATTRIBUTE_PROVIDER_ID "PROVIDER_ID"
#define NS_ATTRIBUTE_CONSUMER_ID "CONSUMER_ID"
} NSResult;
/**
+ * Response code of notification service
+ */
+typedef enum eResponse
+{
+ NS_ALLOW = 1,
+ NS_DENY = 2,
+ NS_TOPIC = 3,
+
+} NSResponse;
+
+/**
* Access policy exchanged between provider and consumer during subscription process
*/
typedef enum eAccessPolicy
} NSMessageType;
/**
+ * Notification topic
+ */
+typedef enum
+{
+ NS_TOPIC_CREATED = 0,
+ NS_TOPIC_SUBSCRIBED = 1,
+ NS_TOPIC_UNSUBSCRIBED = 2,
+
+} NSTopicState;
+
+typedef struct
+{
+ char * topicName;
+ NSTopicState state;
+
+} NSTopic;
+
+typedef struct
+{
+ char consumerId[37];
+ NSTopic ** topics;
+
+} NSTopicList;
+
+/**
* Consumer information
*/
typedef struct
} NSSyncInfo;
-/**
- * Notification topic
- */
-typedef enum
-{
- NS_TOPIC_CREATED = 0,
- NS_TOPIC_SUBSCRIBED = 1,
- NS_TOPIC_UNSUBSCRIBED = 2,
-
-} NSTopicState;
-
-typedef struct
-{
- char * topicName;
- NSTopicState state;
-
-} NSTopic;
-
-typedef struct
-{
- char consumerId[NS_UUID_STRING_SIZE];
- NSTopic ** topics;
-
-} NSTopicList;
-
#endif /* _NS_COMMON_H_ */
typedef void (* NSProviderDiscoveredCallback)(NSProvider *);
/**
- * Invoked when the response of the subscription is received
+ * Invoked when the provider state is changed
* @param[in] provider Provider which has the notification resource
+ * @param[in] response Response which has the provider state
*/
-typedef void (* NSSubscriptionAcceptedCallback)(NSProvider *);
+typedef void (* NSProviderChangedCallback)(NSProvider *, NSResponse);
/**
* Invoked when the notification message from provider is received
typedef void (* NSMessageReceivedCallback)(NSMessage *);
/**
- * Invoked when the synchronization data which has notification message
+ * Invoked when the synchronization data which has notification message
* read/delete event from provider/consumer is received
* synchronization
* @param[in] syncInfo Synchronization information of the notification message
typedef struct
{
NSProviderDiscoveredCallback discoverCb;
- NSSubscriptionAcceptedCallback acceptedCb;
+ NSProviderChangedCallback changedCb;
NSMessageReceivedCallback messageCb;
NSSyncInfoReceivedCallback syncInfoCb;
TASK_CONSUMER_REQ_SUBSCRIBE = 8002,
TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL = 8003,
TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED = 8004,
+ TASK_CONSUMER_RECV_PROVIDER_CHANGED = 8005,
TASK_CONSUMER_RECV_MESSAGE = 8101,
TASK_CONSUMER_PROVIDER_DISCOVERED = 8201,
NS_RESOURCE_TOPIC = 1002,
} NSResourceType;
-typedef enum eResponse
-{
- NS_ALLOW = 1,
- NS_DENY = 2,
- NS_TOPIC = 3,
-
-} NSResponse;
-
-
#endif /* _NS_CONSTANTS_H_ */
NS_VERIFY_NOT_NULL_V(thread);
}
-NSSubscriptionAcceptedCallback * NSGetSubscriptionAcceptedCb()
+NSProviderChangedCallback * NSGetProviderChangedCb()
{
- static NSSubscriptionAcceptedCallback g_acceptCb = NULL;
+ static NSProviderChangedCallback g_changedCb = NULL;
- return & g_acceptCb;
+ return & g_changedCb;
}
-void NSSetSubscriptionAcceptedCb(NSSubscriptionAcceptedCallback cb)
+void NSSetProviderChangedCb(NSProviderChangedCallback cb)
{
- *(NSGetSubscriptionAcceptedCb()) = cb;
+ *(NSGetProviderChangedCb()) = cb;
}
-void NSSubscriptionAccepted(NSProvider * provider)
+void NSProviderChanged(NSProvider * provider, NSResponse response)
{
- (*(NSGetSubscriptionAcceptedCb()))(provider);
+ (*(NSGetProviderChangedCb()))(provider, response);
}
NSSyncInfoReceivedCallback * NSGetBoneNotificationSyncCb()
return newProv;
}
+
void NSRemoveProvider(NSProvider_internal * prov)
{
NS_VERIFY_NOT_NULL_V(prov);
NSOICFree(prov);
}
+NSSyncInfo_internal * NSCopySyncInfo(NSSyncInfo_internal * syncInfo)
+{
+ NS_VERIFY_NOT_NULL(syncInfo, NULL);
+
+ NSProviderConnectionInfo * connections = NSCopyProviderConnections(syncInfo->connection);
+ NS_VERIFY_NOT_NULL(connections, NULL);
+
+ NSSyncInfo_internal * newSyncInfo = (NSSyncInfo_internal *)OICMalloc(sizeof(NSSyncInfo_internal));
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newSyncInfo, NULL, NSRemoveConnections(connections));
+
+ OICStrcpy(newSyncInfo->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, syncInfo->providerId);
+ newSyncInfo->messageId = syncInfo->messageId;
+ newSyncInfo->state = syncInfo->state;
+ newSyncInfo->connection = connections;
+
+ return newSyncInfo;
+}
+
+void NSRemoveSyncInfo(NSSyncInfo_internal * syncInfo)
+{
+ NS_VERIFY_NOT_NULL_V(syncInfo);
+
+ NSRemoveConnections(syncInfo->connection);
+
+ NSOICFree(syncInfo);
+}
+
OCStackResult NSInvokeRequest(OCDoHandle * handle,
OCMethod method, const OCDevAddr * addr,
const char * queryUrl, OCPayload * payload,
char * messageUri;
char * syncUri;
+ char * topicUri;
NSSelector accessPolicy;
NSProviderConnectionInfo * connection;
+ NSTopicList * topicList;
+ size_t topicListSize;
+
} NSProvider_internal;
typedef struct
void NSSetDiscoverProviderCb(NSProviderDiscoveredCallback cb);
void NSDiscoveredProvider(NSProvider * provider);
-void NSSetSubscriptionAcceptedCb(NSSubscriptionAcceptedCallback cb);
-void NSSubscriptionAccepted(NSProvider * provider);
+void NSSetProviderChangedCb(NSProviderChangedCallback cb);
+void NSProviderChanged(NSProvider * provider, NSResponse response);
void NSSetMessagePostedCb(NSMessageReceivedCallback cb);
void NSMessagePost(NSMessage * obj);
NSProvider_internal * NSCopyProvider(NSProvider_internal *);
void NSRemoveProvider(NSProvider_internal *);
+NSSyncInfo_internal * NSCopySyncInfo(NSSyncInfo_internal *);
+void NSRemoveSyncInfo(NSSyncInfo_internal *);
+
OCStackResult NSInvokeRequest(OCDoHandle * handle,
OCMethod method, const OCDevAddr * addr,
const char * queryUrl, OCPayload * payload,
NSTaskType type = TASK_CONSUMER_RECV_MESSAGE;
- if (newNoti->messageId == NS_MESSAGE_ACCEPTANCE)
+ if (newNoti->messageId == NS_MESSAGE_ACCEPTANCE || newNoti->messageId == NS_DENY)
{
- NS_LOG(DEBUG, "Receive Subscribe confirm");
- type = TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED;
+ NS_LOG(DEBUG, "Receive subscribe result");
+ type = TASK_CONSUMER_RECV_PROVIDER_CHANGED;
}
else if (newNoti->messageId == NS_TOPIC)
{
NS_VERIFY_NOT_NULL(config.discoverCb, NS_ERROR);
NS_VERIFY_NOT_NULL(config.messageCb, NS_ERROR);
NS_VERIFY_NOT_NULL(config.syncInfoCb, NS_ERROR);
- NS_VERIFY_NOT_NULL(config.acceptedCb, NS_ERROR);
+ NS_VERIFY_NOT_NULL(config.changedCb, NS_ERROR);
NSSetDiscoverProviderCb(config.discoverCb);
NSSetMessagePostedCb(config.messageCb);
NSSetNotificationSyncCb(config.syncInfoCb);
- NSSetSubscriptionAcceptedCb(config.acceptedCb);
+ NSSetProviderChangedCb(config.changedCb);
NSSetIsStartedConsumer(true);
NSResult ret = NSConsumerMessageHandlerInit();
NSSetDiscoverProviderCb(NULL);
NSSetMessagePostedCb(NULL);
NSSetNotificationSyncCb(NULL);
- NSSetSubscriptionAcceptedCb(NULL);
+ NSSetProviderChangedCb(NULL);
NSSetIsStartedConsumer(false);
NSConsumerMessageHandlerExit();
NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL);
}
-void NSConsumerHandleRecvSubscriptionConfirmed(NSMessage * msg)
+void NSConsumerHandleRecvProviderChanged(NSMessage * msg)
{
NS_VERIFY_NOT_NULL_V(msg);
if (provider->connection->next == NULL)
{
NS_LOG(DEBUG, "call back to user");
- NSSubscriptionAccepted((NSProvider *) provider);
+ NSProviderChanged((NSProvider *) provider, (NSResponse) msg->messageId);
}
}
NS_LOG_V(DEBUG, "Receive Event : %d", (int)task->taskType);
switch (task->taskType)
{
- case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED:
+ //case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED:
+ case TASK_CONSUMER_RECV_PROVIDER_CHANGED:
{
- NS_LOG(DEBUG, "Receive Subscribe confirm from provider.");
- NSConsumerHandleRecvSubscriptionConfirmed((NSMessage *)task->taskData);
+ //NS_LOG(DEBUG, "Receive Subscribe confirm from provider.");
+ NS_LOG(DEBUG, "Receive Provider Changed");
+ NSConsumerHandleRecvProviderChanged((NSMessage *)task->taskData);
NSRemoveMessage((NSMessage *)task->taskData);
break;
}
case TASK_RECV_SYNCINFO:
case TASK_CONSUMER_RECV_MESSAGE:
case TASK_CONSUMER_PROVIDER_DISCOVERED:
- case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED:
+ //case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED:
+ case TASK_CONSUMER_RECV_PROVIDER_CHANGED:
case TASK_MAKE_SYNCINFO:
case TASK_CONSUMER_REQ_TOPIC_URI:
case TASK_CONSUMER_RECV_TOPIC_LIST: