//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include "NSProviderResource.h"
+#include <string.h>
+#include "rd_client.h"
-char* NSType = "oic.r.notification";
-char* NSMessageType = "oic.r.notification.message";
-char* NSSyncType = "oic.r.notification.sync";
-
-char* NSInterface = "oic.if.baseline";
-char* NSMessgeInterface = "oic.if.baseline.message";
-char* NSSyncInterface = "oic.if.baseline.sync";
+NSNotificationResource NotificationResource;
+NSMessageResource NotificationMessageResource;
+NSSyncResource NotificationSyncResource;
+NSTopicResource NotificationTopicResource;
-char* NSUri = "/notification";
-char* NSMessageUri = "/notification/message";
-char* NSSyncUri = "/notification/sync";
+#if (defined WITH_CLOUD)
+#define DEFAULT_CONTEXT_VALUE 0x99
-/* Structure to represent notification resources */
-typedef struct
+OCStackApplicationResult NSHandlePublishCb(void *ctx, OCDoHandle handle,
+ OCClientResponse *clientResponse)
{
- OCResourceHandle handle;
- int accepter;
- char* message_uri;
- char* sync_uri;
-} NSNotificationResource;
+ (void) handle;
+ if (ctx != (void *)DEFAULT_CONTEXT_VALUE)
+ {
+ NS_LOG(DEBUG, "Invalid Publish callback received");
+ }
-typedef struct
-{
- OCResourceHandle handle;
- char* id;
- char* title;
- char* body;
-} NSMessageResource;
+ NS_LOG_V(DEBUG, "Publish resource response received code: %d", clientResponse->result);
-typedef struct
+ return OC_STACK_KEEP_TRANSACTION;
+}
+
+NSResult NSPublishResourceToCloud(char *serverAddress)
{
- OCResourceHandle handle;
- char* id;
- char* state;
-} NSSyncResource;
+ NS_LOG(DEBUG, "NSPublishResourceToCloud - IN");
+ NS_LOG_V(INFO_PRIVATE, "Remote Server Address: %s", serverAddress);
-NSNotificationResource NotificationResource;
-NSMessageResource NotificationMessageResource;
-NSSyncResource NotificationSyncResource;
+ OCCallbackData cbData;
+ cbData.cb = NSHandlePublishCb;
+ cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
+ cbData.cd = NULL;
+
+ OCResourceHandle resourceHandles[1] = { NotificationResource.handle };
+ OCStackResult res = OCRDPublish(NULL, serverAddress, CT_ADAPTER_TCP, resourceHandles, 1,
+ &cbData, OC_LOW_QOS);
+
+ if (res != OC_STACK_OK)
+ {
+ NS_LOG_V(DEBUG, "Unable to publish resources to cloud: %d", res);
+ }
+
+ NS_LOG(DEBUG, "NSPublishResourceToCloud - OUT");
+ return NS_OK;
+}
+#endif
NSResult NSCreateResource(char *uri)
{
NS_LOG(DEBUG, "NSCreateResource - IN");
+
if (!uri)
{
- NS_LOG(NS_ERROR, "Resource URI cannot be NULL");
+ NS_LOG(ERROR, "Resource URI cannot be NULL");
return NS_ERROR;
}
- if (strcmp(uri, NSUri) == 0)
- {
+ uint8_t resourceProperties;
- NotificationResource.accepter = 0;
- NotificationResource.message_uri = NSMessageUri;
- NotificationResource.sync_uri = NSSyncUri;
+ if (strcmp(uri, NS_ROOT_URI) == 0)
+ {
+ NotificationResource.policy = true;
+ (NotificationResource.providerId)[0] = '\0';
+ NotificationResource.message_uri = NS_COLLECTION_MESSAGE_URI;
+ NotificationResource.sync_uri = NS_COLLECTION_SYNC_URI;
+ NotificationResource.topic_uri = NS_COLLECTION_TOPIC_URI;
+ NotificationResource.version = VERSION;
NotificationResource.handle = NULL;
- if (OCCreateResource(&NotificationResource.handle, NSType, NSInterface, NSUri,
- NSEntityHandlerNotificationCb, NULL, OC_DISCOVERABLE) != OC_STACK_OK)
+ if (NSGetResourceSecurity())
+ {
+ NS_LOG(DEBUG, "Create secured resource");
+ resourceProperties = OC_DISCOVERABLE | OC_SECURE;
+ }
+ else
{
- NS_LOG(NS_ERROR, "Fail to Create Notification Resource");
+ resourceProperties = OC_DISCOVERABLE;
+ }
+
+ if (OCCreateResource(&NotificationResource.handle, NS_ROOT_TYPE, NS_INTERFACE_BASELINE,
+ NS_ROOT_URI, NSEntityHandlerNotificationCb, NULL,
+ resourceProperties) != OC_STACK_OK)
+ {
+ NS_LOG(ERROR, "Fail to Create Notification Resource");
+ return NS_ERROR;
+ }
+
+ if (OCBindResourceInterfaceToResource(NotificationResource.handle, NS_INTERFACE_READ)
+ != OC_STACK_OK)
+ {
+ NS_LOG(ERROR, "Fail to bind Notification Resource Type");
return NS_ERROR;
}
}
- else if (strcmp(uri, NSMessageUri) == 0)
+ else if (strcmp(uri, NS_COLLECTION_MESSAGE_URI) == 0)
{
- NotificationMessageResource.id = NULL;
+ NotificationMessageResource.messageId = 0;
+
+ (NotificationMessageResource.providerId)[0] = '\0';
+ NotificationMessageResource.type = 0;
+ NotificationMessageResource.dateTime = NULL;
+ NotificationMessageResource.ttl = 0;
NotificationMessageResource.title = NULL;
- NotificationMessageResource.body = NULL;
- NotificationMessageResource.handle = NULL;
+ NotificationMessageResource.contentText = NULL;
+ NotificationMessageResource.sourceName = NULL;
+ NotificationMessageResource.topicName = NULL;
+ NotificationMessageResource.mediaContents = NULL;
- if (OCCreateResource(&NotificationMessageResource.handle, NSMessageType, NSInterface,
- NSMessageUri, NSEntityHandlerMessageCb, NULL, OC_OBSERVABLE) != OC_STACK_OK)
+ if (NSGetResourceSecurity())
{
- NS_LOG(NS_ERROR, "Fail to Create Notification Message Resource");
+ NS_LOG(DEBUG, "Create secured resource");
+ resourceProperties = OC_OBSERVABLE | OC_SECURE;
+ }
+ else
+ {
+ resourceProperties = OC_OBSERVABLE;
+ }
+
+ if (OCCreateResource(&NotificationMessageResource.handle, NS_COLLECTION_MESSAGE_TYPE,
+ NS_INTERFACE_BASELINE, NS_COLLECTION_MESSAGE_URI, NSEntityHandlerMessageCb, NULL,
+ resourceProperties) != OC_STACK_OK)
+ {
+ NS_LOG(ERROR, "Fail to Create Notification Message Resource");
+ return NS_ERROR;
+ }
+
+ if (OCBindResourceInterfaceToResource(NotificationMessageResource.handle, NS_INTERFACE_READ)
+ != OC_STACK_OK)
+ {
+ NS_LOG(ERROR, "Fail to bind Notification Message Resource Type");
return NS_ERROR;
}
}
- else if (strcmp(uri, NSSyncUri) == 0)
+ else if (strcmp(uri, NS_COLLECTION_SYNC_URI) == 0)
{
- NotificationSyncResource.id = NULL;
+ NotificationSyncResource.messageId = 0;
+ (NotificationSyncResource.providerId)[0] = '\0';
NotificationSyncResource.state = NULL;
NotificationSyncResource.handle = NULL;
- if (OCCreateResource(&(NotificationSyncResource.handle), NSSyncType, NSInterface, NSSyncUri,
- NSEntityHandlerSyncCb, NULL, OC_OBSERVABLE) != OC_STACK_OK)
+ if (NSGetResourceSecurity())
+ {
+ NS_LOG(DEBUG, "Create secured resource");
+ resourceProperties = OC_OBSERVABLE | OC_SECURE;
+ }
+ else
+ {
+ resourceProperties = OC_OBSERVABLE;
+ }
+
+ if (OCCreateResource(&(NotificationSyncResource.handle), NS_COLLECTION_SYNC_TYPE,
+ NS_INTERFACE_BASELINE, NS_COLLECTION_SYNC_URI, NSEntityHandlerSyncCb, NULL,
+ resourceProperties) != OC_STACK_OK)
+ {
+ NS_LOG(ERROR, "Fail to Create Notification Sync Resource");
+ return NS_ERROR;
+ }
+
+ if (OCBindResourceInterfaceToResource(NotificationSyncResource.handle,
+ NS_INTERFACE_READWRITE)
+ != OC_STACK_OK)
{
- NS_LOG(NS_ERROR, "Fail to Create Notification Sync Resource");
+ NS_LOG(ERROR, "Fail to bind Notification Sync Resource Type");
+ return NS_ERROR;
+ }
+ }
+ else if (strcmp(uri, NS_COLLECTION_TOPIC_URI) == 0)
+ {
+ (NotificationTopicResource.providerId)[0] = '\0';
+ (NotificationTopicResource.consumerId)[0] = '\0';
+ NotificationTopicResource.TopicList = NULL;
+ NotificationTopicResource.handle = NULL;
+
+ if (NSGetResourceSecurity())
+ {
+ NS_LOG(DEBUG, "Create secured resource");
+ resourceProperties = OC_RES_PROP_NONE | OC_SECURE;
+ }
+ else
+ {
+ resourceProperties = OC_RES_PROP_NONE;
+ }
+
+ if (OCCreateResource(&(NotificationTopicResource.handle), NS_COLLECTION_TOPIC_TYPE,
+ NS_INTERFACE_BASELINE, NS_COLLECTION_TOPIC_URI, NSEntityHandlerTopicCb, NULL,
+ resourceProperties) != OC_STACK_OK)
+ {
+ NS_LOG(ERROR, "Fail to Create Notification Sync Resource");
+ return NS_ERROR;
+ }
+
+ if (OCBindResourceInterfaceToResource(NotificationTopicResource.handle,
+ NS_INTERFACE_READWRITE)
+ != OC_STACK_OK)
+ {
+ NS_LOG(ERROR, "Fail to bind Notification Topic Resource Type");
return NS_ERROR;
}
}
{
NS_LOG(DEBUG, "NSRegisterResource - IN");
- if (NSCreateResource(NSSyncUri) != NS_OK)
- {
- NS_LOG(ERROR, "Fail to register Sync Resource");
- return NS_ERROR;
- }
-
- if (NSCreateResource(NSMessageUri) != NS_OK)
- {
- NS_LOG(ERROR, "Fail to register Message Resource");
- return NS_ERROR;
- }
-
- if (NSCreateResource(NSUri) != NS_OK)
- {
- NS_LOG(ERROR, "Fail to register Notification Resource");
- return NS_ERROR;
- }
+ NS_CREATE_RESOURCE(
+ NSCreateResource(NS_COLLECTION_TOPIC_URI), "Fail to register Topic Resource");
+ NS_CREATE_RESOURCE(
+ NSCreateResource(NS_COLLECTION_SYNC_URI), "Fail to register Sync Resource");
+ NS_CREATE_RESOURCE(
+ NSCreateResource(NS_COLLECTION_MESSAGE_URI), "Fail to register Message Resource");
+ NS_CREATE_RESOURCE(
+ NSCreateResource(NS_ROOT_URI), "Fail to register Notification Resource");
NS_LOG(DEBUG, "NSRegisterResource - OUT");
return NS_OK;
{
NS_LOG(DEBUG, "NSUnRegisterResource - IN");
- if (OCDeleteResource(NotificationResource.handle) != OC_STACK_OK)
- {
- NS_LOG(ERROR, "Fail to Delete Notification Resource");
- return NS_ERROR;
- }
+ NS_DELETE_RESOURCE(
+ OCDeleteResource(NotificationResource.handle), "Fail to Delete Notification Resource");
+ NS_DELETE_RESOURCE(OCDeleteResource(NotificationMessageResource.handle),
+ "Fail to Delete Notification Message Resource");
+ NS_DELETE_RESOURCE(OCDeleteResource(NotificationSyncResource.handle),
+ "Fail to Delete Notification Sync Resource");
+ NS_DELETE_RESOURCE(OCDeleteResource(NotificationTopicResource.handle),
+ "Fail to Delete Notification Topic Resource");
- if (OCDeleteResource(NotificationMessageResource.handle) != OC_STACK_OK)
- {
- NS_LOG(ERROR, "Fail to Delete Notification Message Resource");
- return NS_ERROR;
- }
-
- if (OCDeleteResource(NotificationSyncResource.handle) != OC_STACK_OK)
- {
- NS_LOG(ERROR, "Fail to Delete Notification Sync Resource");
- return NS_ERROR;
- }
+ NotificationResource.handle = NULL;
+ NotificationMessageResource.handle = NULL;
+ NotificationSyncResource.handle = NULL;
+ NotificationTopicResource.handle = NULL;
NS_LOG(DEBUG, "NSUnRegisterResource - OUT");
return NS_OK;
}
-NSResult NSPutNotificationResource(int accepter, OCResourceHandle * handle)
+NSResult NSPutNotificationResource(bool policy, OCResourceHandle * handle)
{
NS_LOG(DEBUG, "NSPutNotificationResource - IN");
- NotificationResource.accepter = accepter;
- NotificationResource.message_uri = NSMessageUri;
- NotificationResource.sync_uri = NSSyncUri;
+ NotificationResource.policy = policy;
+ OICStrcpy(NotificationResource.providerId, UUID_STRING_SIZE,
+ NSGetProviderInfo()->providerId);
+ NotificationResource.message_uri = NS_COLLECTION_MESSAGE_URI;
+ NotificationResource.sync_uri = NS_COLLECTION_SYNC_URI;
+ NotificationResource.topic_uri = NS_COLLECTION_TOPIC_URI;
+ NotificationResource.version = VERSION;
*handle = NotificationResource.handle;
{
NS_LOG(DEBUG, "NSMessage is valid");
- NotificationMessageResource.id = OICStrdup(msg->mId);
- NotificationMessageResource.title = OICStrdup(msg->mTitle);
- NotificationMessageResource.body = OICStrdup(msg->mContentText);
+ NotificationMessageResource.messageId = msg->messageId;
+ OICStrcpy(NotificationMessageResource.providerId, UUID_STRING_SIZE, msg->providerId);
+ NotificationMessageResource.type = msg->type;
+ NotificationMessageResource.dateTime = msg->dateTime;
+ NotificationMessageResource.ttl = msg->ttl;
+ NotificationMessageResource.title = msg->title;
+ NotificationMessageResource.contentText = msg->contentText;
+ NotificationMessageResource.sourceName = msg->sourceName;
+ NotificationMessageResource.topicName = msg->topic;
+ NotificationMessageResource.mediaContents = msg->mediaContents;
}
else
{
}
*handle = NotificationMessageResource.handle;
- NS_LOG(DEBUG, "NSPutMessageResource - OUT");
+ NS_LOG(DEBUG, "NSPutMessageResource - OUT");
return NS_OK;
}
-NSResult NSPutSyncResource(NSSync *sync, OCResourceHandle * handle)
+NSResult NSPutSyncResource(NSSyncInfo *sync, OCResourceHandle * handle)
{
NS_LOG(DEBUG, "NSPutSyncResource - IN");
return NS_OK;
}
-const char* NSGetNotificationUri()
+NSResult NSPutTopicResource(NSTopicList *topicList, OCResourceHandle * handle)
{
- return NSUri;
-}
+ NS_LOG(DEBUG, "NSPutTopicResource - IN");
-const char* NSGetNotificationMessageUri()
-{
- return NSMessageUri;
-}
-
-const char* NSGetNotificationSyncUri()
-{
- return NSSyncUri;
-}
-
-NSResult NSCopyString(char** targetString, const char* sourceString)
-{
- if (sourceString)
- {
- *targetString = (char *) malloc(strlen(sourceString) + 1);
+ (void) topicList;
- if (*targetString)
- {
- strncpy(*targetString, sourceString, (strlen(sourceString) + 1));
- return NS_SUCCESS;
- }
- }
+ *handle = NotificationTopicResource.handle;
- return NS_FAIL;
+ NS_LOG(DEBUG, "NSPutTopicResource - OUT");
+ return NS_OK;
}