Added logic for remove NSProvider.
[platform/upstream/iotivity.git] / service / notification / src / consumer / NSConsumerInterface.c
1 //******************************************************************
2 //
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
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
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
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.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 #include "NSConsumerInterface.h"
22
23 #include <stdlib.h>
24 #include <stdbool.h>
25
26 #include "NSCommon.h"
27 #include "NSConsumerCommon.h"
28 #include "NSConstants.h"
29 #include "NSConsumerScheduler.h"
30 #include "oic_malloc.h"
31 #include "oic_string.h"
32
33 // Public APIs
34 NSResult NSStartConsumer(NSConsumerConfig config)
35 {
36     bool isStartedConsumer = NSIsStartedConsumer();
37     NS_VERIFY_NOT_NULL(isStartedConsumer == false ? (void *) 1 : NULL, NS_OK);
38
39     NS_VERIFY_NOT_NULL(config.discoverCb, NS_ERROR);
40     NS_VERIFY_NOT_NULL(config.messageCb, NS_ERROR);
41     NS_VERIFY_NOT_NULL(config.syncInfoCb, NS_ERROR);
42     NS_VERIFY_NOT_NULL(config.acceptedCb, NS_ERROR);
43
44     NSSetDiscoverProviderCb(config.discoverCb);
45     NSSetMessagePostedCb(config.messageCb);
46     NSSetNotificationSyncCb(config.syncInfoCb);
47     NSSetSubscriptionAcceptedCb(config.acceptedCb);
48     NSSetIsStartedConsumer(true);
49
50     NSResult ret = NSConsumerMessageHandlerInit();
51     NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(ret == NS_OK ? (void *) 1 : NULL,
52             NS_ERROR, NSStopConsumer());
53
54     return NS_OK;
55 }
56
57 NSResult NSStopConsumer()
58 {
59     NSSetDiscoverProviderCb(NULL);
60     NSSetMessagePostedCb(NULL);
61     NSSetNotificationSyncCb(NULL);
62     NSSetSubscriptionAcceptedCb(NULL);
63     NSSetIsStartedConsumer(false);
64
65     NSConsumerMessageHandlerExit();
66
67     return NS_OK;
68 }
69
70 NSResult NSConsumerEnableRemoteService(char *serverAddress)
71 {
72     NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, (void *)serverAddress);
73     NS_VERIFY_NOT_NULL(discoverTask, NS_ERROR);
74
75     return NSConsumerPushEvent(discoverTask);
76 }
77
78 NSResult NSSubscribe(NSProvider * provider)
79 {
80     NSTask * subscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, (void *) provider);
81     NS_VERIFY_NOT_NULL(subscribeTask, NS_ERROR);
82
83     return NSConsumerPushEvent(subscribeTask);
84 }
85
86 NSResult NSUnsubscribe(NSProvider * provider)
87 {
88     NSTask * unsubscribeTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, (void *) provider);
89     NS_VERIFY_NOT_NULL(unsubscribeTask, NS_ERROR);
90
91     return NSConsumerPushEvent(unsubscribeTask);
92 }
93
94 NSResult NSConsumerSendSyncInfo(const char * providerId, uint64_t messageId, NSSyncType type)
95 {
96     NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo));
97     NS_VERIFY_NOT_NULL(syncInfo, NS_ERROR);
98
99     OICStrcpy(syncInfo->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, providerId);
100     syncInfo->messageId = messageId;
101     syncInfo->state = type;
102
103     NSTask * syncTask = NSMakeTask(TASK_MAKE_SYNCINFO, (void *) syncInfo);
104     NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(syncTask, NS_ERROR, NSOICFree(syncInfo));
105
106     return NSConsumerPushEvent(syncTask);
107 }
108
109 NSResult NSRescanProvider()
110 {
111     NSTask * discoverTask = NSMakeTask(TASK_CONSUMER_REQ_DISCOVER, NULL);
112     NS_VERIFY_NOT_NULL(discoverTask, NS_ERROR);
113
114     return NSConsumerPushEvent(discoverTask);
115 }
116
117 NSProvider * NSConsumerGetProvider(const char * providerId)
118 {
119     NS_VERIFY_NOT_NULL(providerId, NULL);
120
121     return (NSProvider *) NSConsumerFindNSProvider(providerId);
122 }
123
124 NSMessage * NSConsumerGetMessage(uint64_t messageId)
125 {
126     char msgId[NS_DEVICE_ID_LENGTH] = { 0, };
127     snprintf(msgId, NS_DEVICE_ID_LENGTH, "%lld", (long long int)messageId);
128
129     return (NSMessage *) NSConsumerFindNSMessage(msgId);
130 }
131
132 NSResult NSDropNSMessage(NSMessage * obj)
133 {
134     NS_VERIFY_NOT_NULL(obj, NS_ERROR);
135
136     obj->messageId = 0;
137     NSOICFree(obj->title);
138     NSOICFree(obj->contentText);
139     NSOICFree(obj->sourceName);
140     NSOICFree(obj);
141
142     return NS_OK;
143 }