Consumer service has two type of callback within parameter as provider object.
One of callback is called when the provider discovered,
and others is called the provider changed.
But, discovered callback is imprecise called owing to provider policy.
So, discovered event is added in provider changed callback.
Two of callback is united as changed name of ProviderStateCallback
and removed discovered callback.
Change-Id: I60eebaf78aaae78a61b3772138b582df3748910c
Signed-off-by: KIM JungYong <jyong2.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10973
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: Uze Choi <uzchoi@samsung.com>
#include <stdio.h>
#include <unistd.h>
+#include <string.h>
#include "pthread.h"
#include "ocstack.h"
}
NSConsumerConfig cfg;
- cfg.discoverCb = onDiscoverNotification;
cfg.changedCb = onProviderChanged;
cfg.messageCb = onNotificationPosted;
cfg.syncInfoCb = onNotificationSync;
*/
typedef enum eResponse
{
+ NS_DISCOVERED = 0,
NS_ALLOW = 1,
NS_DENY = 2,
NS_TOPIC = 3,
#include "NSCommon.h"
/**
- * Invoked when the discovered provider is received
- * @param[in] provider Provider who has the notification resource
- */
-typedef void (* NSProviderDiscoveredCallback)(NSProvider *);
-
-/**
* 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 (* NSProviderChangedCallback)(NSProvider *, NSResponse);
+typedef void (* NSProviderStateCallback)(NSProvider *, NSResponse);
/**
* Invoked when the notification message from provider is received
typedef struct
{
- NSProviderDiscoveredCallback discoverCb;
- NSProviderChangedCallback changedCb;
+ NSProviderStateCallback changedCb;
NSMessageReceivedCallback messageCb;
NSSyncInfoReceivedCallback syncInfoCb;
return * NSGetBoneIsStartedConsumer();
}
-NSProviderDiscoveredCallback * NSGetBoneDiscoverCb()
+NSProviderStateCallback * NSGetProviderChangedCb()
{
- static NSProviderDiscoveredCallback g_discoverCb = NULL;
-
- return & g_discoverCb;
-}
-
-void NSSetDiscoverProviderCb(NSProviderDiscoveredCallback cb)
-{
- * NSGetBoneDiscoverCb() = cb;
-}
-
-NSProviderDiscoveredCallback NSGetDiscoverCb()
-{
- return * NSGetBoneDiscoverCb();
-}
-
-void * NSDiscoveredProviderFunc(void * provider)
-{
- NSGetDiscoverCb()((NSProvider *) provider);
-
- return NULL;
-}
-
-void NSDiscoveredProvider(NSProvider * provider)
-{
- NS_VERIFY_NOT_NULL_V(provider);
-
- NSConsumerThread * thread = NSThreadInit(NSDiscoveredProviderFunc, (void *) provider);
- NS_VERIFY_NOT_NULL_V(thread);
-}
-
-NSProviderChangedCallback * NSGetProviderChangedCb()
-{
- static NSProviderChangedCallback g_changedCb = NULL;
+ static NSProviderStateCallback g_changedCb = NULL;
return & g_changedCb;
}
-void NSSetProviderChangedCb(NSProviderChangedCallback cb)
+void NSSetProviderChangedCb(NSProviderStateCallback cb)
{
*(NSGetProviderChangedCb()) = cb;
}
while (iter)
{
- following = (NSTopicLL *) iter->next;
+ following = iter->next;
NSRemoveTopicNode(iter);
bool NSIsStartedConsumer();
void NSSetIsStartedConsumer(bool setValue);
-void NSSetDiscoverProviderCb(NSProviderDiscoveredCallback cb);
-void NSDiscoveredProvider(NSProvider * provider);
-
-void NSSetProviderChangedCb(NSProviderChangedCallback cb);
+void NSSetProviderChangedCb(NSProviderStateCallback cb);
void NSProviderChanged(NSProvider * provider, NSResponse response);
void NSSetMessagePostedCb(NSMessageReceivedCallback cb);
#define NS_SYNC_URI "/notification/sync"
-static unsigned long NS_MESSAGE_ACCEPTANCE = 1;
-
NSMessage * NSCreateMessage_internal(uint64_t msgId, const char * providerId);
NSSyncInfo * NSCreateSyncInfo_consumer(uint64_t msgId, const char * providerId, NSSyncType state);
NSTaskType type = TASK_CONSUMER_RECV_MESSAGE;
- if (newNoti->messageId == NS_MESSAGE_ACCEPTANCE || newNoti->messageId == NS_DENY)
+ if (newNoti->messageId == NS_ALLOW || newNoti->messageId == NS_DENY)
{
NS_LOG(DEBUG, "Receive subscribe result");
type = TASK_CONSUMER_RECV_PROVIDER_CHANGED;
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == false ? (void *) 1 : NULL, NS_OK);
- 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.changedCb, NS_ERROR);
- NSSetDiscoverProviderCb(config.discoverCb);
NSSetMessagePostedCb(config.messageCb);
NSSetNotificationSyncCb(config.syncInfoCb);
NSSetProviderChangedCb(config.changedCb);
bool isStartedConsumer = NSIsStartedConsumer();
NS_VERIFY_NOT_NULL(isStartedConsumer == true ? (void *) 1 : NULL, NS_ERROR);
- NSSetDiscoverProviderCb(NULL);
NSSetMessagePostedCb(NULL);
NSSetNotificationSyncCb(NULL);
NSSetProviderChangedCb(NULL);
while ((obj = NSPopProviderCacheList(ProviderCache)))
{
NS_LOG(DEBUG, "build NSTask");
- NSTask * task = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, (void *) obj->data);
+ NSProvider * prov = NSCopyProvider((NSProvider_internal *) obj->data);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(prov,
+ NSRemoveProvider_internal((NSProvider_internal *) obj->data));
+
+ NSTask * task = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, prov);
NS_VERIFY_NOT_NULL_V(task);
NSConsumerPushEvent(task);
{
NS_LOG(DEBUG, "accepter is NS_ACCEPTER_CONSUMER, Callback to user");
NSProvider * providerForCb = NSCopyProvider(provider);
- NSDiscoveredProvider(providerForCb);
+ NSProviderChanged(providerForCb, NS_DISCOVERED);
}
else
{
NS_SELECTION_PROVIDER = 1
};
+ NSConsumerConfig cfg;
}
class TestWithMock: public testing::Test
NotificationConsumerTest() = default;
~NotificationConsumerTest() = default;
- static void NSProviderDiscoveredCallbackEmpty(NSProvider *)
- {
- std::cout << __func__ << std::endl;
- }
-
static void NSNotificationReceivedCallbackEmpty(NSMessage *)
{
std::cout << __func__ << std::endl;
if (g_isStartedStack == false)
{
- OC::PlatformConfig cfg
+ OC::PlatformConfig occfg
{
OC::ServiceType::InProc,
OC::ModeType::Both,
0,
OC::QualityOfService::LowQos
};
- OC::OCPlatform::Configure(cfg);
+ OC::OCPlatform::Configure(occfg);
try
{
}
g_isStartedStack = true;
+
+ cfg.changedCb = NSProviderChangedCallback;
+ cfg.messageCb = NSNotificationReceivedCallbackEmpty;
+ cfg.syncInfoCb = NSSyncCallbackEmpty;
}
}
TEST_F(NotificationConsumerTest, StartConsumerPositive)
{
- NSConsumerConfig cfg;
- cfg.discoverCb = NSProviderDiscoveredCallbackEmpty;
- cfg.changedCb = NSProviderChangedCallback;
- cfg.messageCb = NSNotificationReceivedCallbackEmpty;
- cfg.syncInfoCb = NSSyncCallbackEmpty;
EXPECT_EQ(NS_OK, NSStartConsumer(cfg));
}
TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenStartedConsumerFirst)
{
- mocks.ExpectCallFunc(NSProviderDiscoveredCallbackEmpty).Do(
- [this](NSProvider *)
+ mocks.ExpectCallFunc(NSProviderChangedCallback).Do(
+ [this](NSProvider *, NSResponse)
{
std::cout << "Call Discovered" << std::endl;
responseCon.notify_all();
});
- NSConsumerConfig cfg;
- cfg.discoverCb = NSProviderDiscoveredCallbackEmpty;
- cfg.changedCb = NSProviderChangedCallback;
- cfg.messageCb = NSNotificationReceivedCallbackEmpty;
- cfg.syncInfoCb = NSSyncCallbackEmpty;
NSStartConsumer(cfg);
g_providerSimul.setAccepter((int)NSSelector::NS_SELECTION_CONSUMER);
responseCon.wait_for(lock, g_waitForResponse);
}
- mocks.ExpectCallFunc(NSProviderDiscoveredCallbackEmpty).Do(
- [this](NSProvider * provider)
+ mocks.ExpectCallFunc(NSProviderChangedCallback).Do(
+ [this](NSProvider * provider, NSResponse)
{
std::cout << "Call Discovered" << std::endl;
g_provider = provider;
responseCon.notify_all();
});
- NSConsumerConfig cfg;
- cfg.discoverCb = NSProviderDiscoveredCallbackEmpty;
- cfg.changedCb = NSProviderChangedCallback;
- cfg.messageCb = NSNotificationReceivedCallbackEmpty;
- cfg.syncInfoCb = NSSyncCallbackEmpty;
NSStartConsumer(cfg);
std::unique_lock< std::mutex > lock{ mutexForCondition };
TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenRescan)
{
g_providerSimul.setAccepter((int)NSSelector::NS_SELECTION_CONSUMER);
- mocks.ExpectCallFunc(NSProviderDiscoveredCallbackEmpty).Do(
- [this](NSProvider * provider)
+ mocks.ExpectCallFunc(NSProviderChangedCallback).Do(
+ [this](NSProvider * provider, NSResponse)
{
std::cout << "Call Discovered" << std::endl;
g_provider = provider;
g_providerSimul.setAccepter((int)NSSelector::NS_SELECTION_PROVIDER);
- NSConsumerConfig cfg;
- cfg.discoverCb = NSProviderDiscoveredCallbackEmpty;
- cfg.changedCb = NSProviderChangedCallback;
- cfg.messageCb = NSNotificationReceivedCallbackEmpty;
- cfg.syncInfoCb = NSSyncCallbackEmpty;
NSStartConsumer(cfg);
{
std::unique_lock< std::mutex > lock{ mutexForCondition };