Added API about create message and memory allocate, deallocate
authorjaesick.shin <jaesick.shin@samsung.com>
Thu, 16 Jun 2016 23:37:01 +0000 (08:37 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 17 Jun 2016 05:06:03 +0000 (05:06 +0000)
1. Our service is support to createMessage interface,
This Function does initialize, set the providerid, generate messageid.
2. modifiy related struct(resource) memory allocation, deallocation.

Change-Id: Iacaf9f97fa6ec2e26d6392f448b918a13202289e
Signed-off-by: jaesick.shin <jaesick.shin@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/8727
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/notification/examples/linux/notificationprovider.c
service/notification/include/NSProviderInterface.h
service/notification/src/common/NSStructs.h
service/notification/src/common/NSUtil.c
service/notification/src/common/NSUtil.h
service/notification/src/provider/NSProviderDiscovery.c
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderListener.h
service/notification/src/provider/NSProviderNotification.c
service/notification/src/provider/NSProviderSubscription.c
service/notification/src/provider/NSProviderSystem.h

index abb3fc8..baa9ada 100644 (file)
@@ -131,7 +131,7 @@ int main()
                 printf("app - mTitle : %s \n", title);\r
                 printf("app - mContentText : %s \n", body);\r
 \r
-                NSMessage * msg = (NSMessage *)OICMalloc(sizeof(NSMessage));\r
+                NSMessage * msg = NSCreateMessage();\r
 \r
                 msg->title = OICStrdup(title);\r
                 msg->contentText = OICStrdup(body);\r
index db2835a..33c0aff 100644 (file)
@@ -96,6 +96,13 @@ NSResult NSAccept(NSConsumer *consumer, bool accepted);
  */\r
 NSResult NSProviderSendSyncInfo(uint64_t messageId, NSSyncType type);\r
 \r
+\r
+/**\r
+ * Initialize NSMessage struct, our service set message id and provider(device) id\r
+ * @return ::NSMessage *\r
+ */\r
+NSMessage * NSCreateMessage();\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif // __cplusplus\r
index 2cab5f5..adc7467 100644 (file)
@@ -56,14 +56,14 @@ typedef struct
     int syncObId;\r
     int messageObId;\r
     bool isWhite;\r
-}NSCacheSubData;\r
+} NSCacheSubData;\r
 \r
 typedef struct\r
 {\r
     char * id; // ip ? ? ?\r
     int messageType; // noti = 1, read = 2, dismiss = 3\r
     NSMessage * nsMessage;\r
-}NSCacheMsgData;\r
+} NSCacheMsgData;\r
 \r
 typedef struct\r
 {\r
@@ -88,7 +88,6 @@ typedef struct
     char * contentText;\r
     char * sourceName;\r
     NSMediaContents * mediaContents;\r
-\r
 } NSMessageResource;\r
 \r
 typedef struct\r
index 6cc3bc9..41f7feb 100755 (executable)
@@ -64,7 +64,6 @@ OCEntityHandlerRequest *NSCopyOCEntityHandlerRequest(OCEntityHandlerRequest *ent
     }
 
     NS_LOG(DEBUG, "NSCopyOCEntityHandlerRequest - OUT");
-
     return copyOfRequest;
 }
 
@@ -88,28 +87,15 @@ NSResult NSFreeMessage(NSMessage * obj)
         return NS_ERROR;
     }
 
-    if (obj->messageId)
-    {
-        obj->messageId = 0;
-    }
-
-    if (obj->title)
-    {
-        OICFree(obj->title);
-        obj->title = NULL;
-    }
-
-    if (obj->contentText)
-    {
-        OICFree(obj->contentText);
-        obj->contentText = NULL;
-    }
+    obj->messageId = 0;
+    (obj->providerId)[0] = '\0';
 
-    if (obj->sourceName)
-    {
-        OICFree(obj->sourceName);
-        obj->sourceName = NULL;
-    }
+    NSFreeMalloc(&(obj->dateTime));
+    obj->ttl = 0;
+    NSFreeMalloc(&(obj->title));
+    NSFreeMalloc(&(obj->contentText));
+    NSFreeMalloc(&(obj->sourceName));
+    NSFreeMediaContents(obj->mediaContents);
 
     OICFree(obj);
 
@@ -126,17 +112,18 @@ NSMessage * NSDuplicateMessage(NSMessage * copyMsg)
         return NULL;
     }
 
-    newMsg = (NSMessage *)OICMalloc(sizeof(NSMessage));
-    newMsg->contentText = NULL;
-    newMsg->messageId = 0;
-    newMsg->sourceName = NULL;
-    newMsg->title = NULL;
+    newMsg = NSInitializeMessage();
+
+    newMsg->messageId = copyMsg->messageId;
+    OICStrcpy(newMsg->providerId, UUID_STRING_SIZE, copyMsg->providerId);
 
-    if (copyMsg->messageId)
+    if(copyMsg->dateTime)
     {
-        newMsg->messageId = copyMsg->messageId;
+        newMsg->dateTime = OICStrdup(copyMsg->dateTime);
     }
 
+    newMsg->ttl = copyMsg->ttl;
+
     if (copyMsg->title)
     {
         newMsg->title = OICStrdup(copyMsg->title);
@@ -152,6 +139,11 @@ NSMessage * NSDuplicateMessage(NSMessage * copyMsg)
        newMsg->sourceName = OICStrdup(copyMsg->sourceName);
     }
 
+    if (copyMsg->mediaContents)
+    {
+       newMsg->mediaContents = NSDuplicateMediaContents(copyMsg->mediaContents);
+    }
+
     return newMsg;
 }
 
@@ -228,6 +220,14 @@ void NSDuplicateSetPropertyString(OCRepPayload** msgPayload, const char * name,
     }
 }
 
+void NSDuplicateSetPropertyInt(OCRepPayload** msgPayload, const char * name,
+        int64_t value)
+{
+    if(value)
+    {
+        OCRepPayloadSetPropInt(*msgPayload, name, value);
+    }
+}
 
 NSSyncInfo * NSGetSyncInfo(OCPayload * payload)
 {
@@ -302,6 +302,12 @@ char * NSGetValueFromQuery(char *query, char * compareKey)
     char *restOfQuery = NULL;
     int numKeyValuePairsParsed = 0;
 
+    if(!query || query[0] != '\0' || !strlen(query))
+    {
+        NS_LOG(ERROR, "query is null or \\0 or size is 0");
+        return NULL;
+    }
+
     NS_LOG_V(INFO, "NS Query Params = %s", query);
 
     char *keyValuePair = strtok_r (query, NS_QUERY_SEPARATOR, &restOfQuery);
@@ -324,6 +330,7 @@ char * NSGetValueFromQuery(char *query, char * compareKey)
 
         if (strcmp(key, compareKey) == 0)
         {
+            NS_LOG_V(DEBUG, "found Key : [%s] - Value : [%s] = ", key, value);
             return value;
         }
 
@@ -334,3 +341,61 @@ char * NSGetValueFromQuery(char *query, char * compareKey)
 
     return NULL;
 }
+
+NSResult NSFreeMalloc(char ** obj)
+{
+    if(*obj)
+    {
+        OICFree(*obj);
+        *obj = NULL;
+        return NS_OK;
+    }
+
+    return NS_FAIL;
+}
+
+NSMediaContents * NSDuplicateMediaContents(NSMediaContents * copyObj)
+{
+    if(!copyObj)
+    {
+        return NULL;
+    }
+
+    NSMediaContents * newObj = (NSMediaContents *)OICMalloc(sizeof(NSMediaContents));
+
+    if(copyObj->iconImage)
+    {
+        newObj->iconImage = OICStrdup(copyObj->iconImage);
+    }
+
+    return newObj;
+}
+
+NSResult NSFreeMediaContents(NSMediaContents * obj)
+{
+    if(!obj)
+    {
+        return NS_OK;
+    }
+
+    NSFreeMalloc(&(obj->iconImage));
+    OICFree(obj);
+
+    return NS_OK;
+}
+
+NSMessage * NSInitializeMessage()
+{
+    NSMessage * msg = (NSMessage *)OICMalloc(sizeof(NSMessage));
+    msg->messageId = OICGetCurrentTime(TIME_IN_MS);
+    (msg->providerId)[0] = '\0';
+    msg->type = 0;
+    msg->dateTime = NULL;
+    msg->ttl = 0;
+    msg->title = NULL;
+    msg->contentText = NULL;
+    msg->sourceName = NULL;
+    msg->mediaContents = NULL;
+
+    return msg;
+}
index 4b51b85..06f0cd7 100755 (executable)
 #include "oic_malloc.h"\r
 #include "oic_string.h"\r
 #include "ocrandom.h"\r
+#include "oic_time.h"\r
+#include "NSProviderSystem.h"\r
 \r
 OCEntityHandlerRequest *NSCopyOCEntityHandlerRequest(OCEntityHandlerRequest *);\r
 NSResult NSFreeOCEntityHandlerRequest(OCEntityHandlerRequest *);\r
 \r
+NSMessage * NSInitializeMessage();\r
 NSResult NSFreeMessage(NSMessage *);\r
 NSMessage * NSDuplicateMessage(NSMessage *);\r
 \r
@@ -47,9 +50,13 @@ NSResult NSFreeConsumer(NSConsumer *);
 NSConsumer * NSDuplicateConsumer(NSConsumer *);\r
 \r
 void NSDuplicateSetPropertyString(OCRepPayload **, const char *, const char *);\r
+void NSDuplicateSetPropertyInt(OCRepPayload ** msgPayload, const char * name, int64_t value);\r
 NSResult NSGenerateUUIDStr(char uuidStr[UUID_STRING_SIZE]);\r
 \r
 char * NSGetValueFromQuery(char *query, char * compareKey);\r
+NSResult NSFreeMalloc(char ** obj);\r
 \r
+NSResult NSFreeMediaContents(NSMediaContents * obj);\r
+NSMediaContents * NSDuplicateMediaContents(NSMediaContents * copyObj);\r
 \r
 #endif /* _NS_UTIL__H_ */\r
index 9c0cd3f..ce10822 100644 (file)
@@ -87,7 +87,6 @@ void * NSDiscoverySchedule(void * ptr)
         }\r
 \r
         pthread_mutex_unlock(&NSMutex[DISCOVERY_SCHEDULER]);\r
-\r
     }\r
 \r
     NS_LOG(DEBUG, "Destroy NSDiscoverySchedule");\r
index 4b3deda..272cbed 100644 (file)
@@ -105,7 +105,6 @@ NSResult NSStartProvider(NSAccessPolicy policy, NSSubscribeRequestCallback subsc
     pthread_mutex_unlock(&nsInitMutex);\r
 \r
     NS_LOG(DEBUG, "NSStartProvider - OUT");\r
-\r
     return NS_OK;\r
 }\r
 \r
@@ -121,7 +120,6 @@ void NSSetList()
 NSResult NSStopProvider()\r
 {\r
     NS_LOG(DEBUG, "NSStopProvider - IN");\r
-\r
     pthread_mutex_lock(&nsInitMutex);\r
 \r
     if(initProvider)\r
@@ -156,9 +154,6 @@ NSResult NSSendMessage(NSMessage *msg)
     }\r
 \r
     NSMessage * newMsg = NSDuplicateMessage(msg);\r
-\r
-    OICStrcpy(newMsg->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);\r
-\r
     NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_NOTIFICATION, newMsg);\r
 \r
     pthread_mutex_unlock(&nsInitMutex);\r
@@ -170,16 +165,15 @@ NSResult NSSendMessage(NSMessage *msg)
 NSResult NSProviderSendSyncInfo(uint64_t messageId, NSSyncType type)\r
 {\r
     NS_LOG(DEBUG, "NSProviderReadCheck - IN");\r
-\r
     pthread_mutex_lock(&nsInitMutex);\r
+\r
     NSSyncInfo * syncInfo = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo));\r
     OICStrcpy(syncInfo->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);\r
     syncInfo->messageId = messageId;\r
     syncInfo->state = type;\r
-\r
     NSPushQueue(NOTIFICATION_SCHEDULER, TASK_SEND_READ, syncInfo);\r
-    pthread_mutex_unlock(&nsInitMutex);\r
 \r
+    pthread_mutex_unlock(&nsInitMutex);\r
     NS_LOG(DEBUG, "NSProviderReadCheck - OUT");\r
     return NS_OK;\r
 }\r
@@ -208,6 +202,20 @@ NSResult NSAccept(NSConsumer *consumer, bool accepted)
     return NS_OK;\r
 }\r
 \r
+NSMessage * NSCreateMessage()\r
+{\r
+    NS_LOG(DEBUG, "NSCreateMessage - IN");\r
+\r
+    pthread_mutex_lock(&nsInitMutex);\r
+    NSMessage * msg = NSInitializeMessage();\r
+    msg->messageId = OICGetCurrentTime(TIME_IN_MS);\r
+    OICStrcpy(msg->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);\r
+    pthread_mutex_unlock(&nsInitMutex);\r
+\r
+    NS_LOG(DEBUG, "NSCreateMessage - OUT");\r
+    return msg;\r
+}\r
+\r
 void * NSInterfaceSchedule(void * ptr)\r
 {\r
     if (ptr == NULL)\r
@@ -267,7 +275,6 @@ void * NSInterfaceSchedule(void * ptr)
         }\r
 \r
         pthread_mutex_unlock(&NSMutex[INTERFACE_SCHEDULER]);\r
-\r
     }\r
 \r
     NS_LOG(DEBUG, "Destroy NSResponseSchedule");\r
index 77f9b22..a4a0c45 100644 (file)
@@ -49,6 +49,4 @@ void NSProviderConnectionStateListener(CATransportAdapter_t adapter, const char
 \r
 void NSProviderAdapterStateListener(CATransportAdapter_t adapter, bool enabled);\r
 \r
-NSResult NSMakeTask(NSTaskType type, OCEntityHandlerRequest *request, NSTask * task);\r
-\r
 #endif /* _NS_PROVIDER_LISTENER__H_ */\r
index 553e376..0c003b7 100644 (file)
@@ -44,8 +44,12 @@ NSResult NSSetMessagePayload(NSMessage *msg, OCRepPayload** msgPayload)
     }
 
     OCRepPayloadSetUri(*msgPayload, NS_COLLECTION_MESSAGE_URI);
+    OCRepPayloadSetPropInt(*msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->messageId);
+    OCRepPayloadSetPropString(*msgPayload, NS_ATTRIBUTE_TITLE, msg->providerId);
 
-    OCRepPayloadSetPropInt(msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->messageId);
+    NSDuplicateSetPropertyInt(msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->type);
+    NSDuplicateSetPropertyInt(msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->ttl);
+    NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_DATETIME, msg->dateTime);
     NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_TITLE, msg->title);
     NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_TEXT, msg->contentText);
     NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_SOURCE, msg->sourceName);
@@ -68,8 +72,8 @@ NSResult NSSetSyncPayload(NSSyncInfo *sync, OCRepPayload** syncPayload)
 
     OCRepPayloadSetUri(*syncPayload, NS_COLLECTION_SYNC_URI);
 
-    NSDuplicateSetPropertyString(syncPayload, NS_ATTRIBUTE_PROVIDER_ID, sync->providerId);
-    OCRepPayloadSetPropInt(syncPayload, NS_ATTRIBUTE_MESSAGE_ID, sync->messageId);
+    OCRepPayloadSetPropString(*syncPayload, NS_ATTRIBUTE_PROVIDER_ID, sync->providerId);
+    OCRepPayloadSetPropInt(*syncPayload, NS_ATTRIBUTE_MESSAGE_ID, sync->messageId);
     OCRepPayloadSetPropInt(*syncPayload, NS_ATTRIBUTE_STATE, sync->state);
 
     NS_LOG(DEBUG, "NSSetSyncPayload - OUT");
@@ -121,8 +125,6 @@ NSResult NSSendNotification(NSMessage *msg)
         it = it->next;
     }
 
-    NS_LOG_V(DEBUG, "observer Count = %d", obCount);
-
     for (i = 0; i < obCount; ++i)
     {
         NS_LOG(DEBUG, "-------------------------------------------------------message\n");
@@ -130,6 +132,12 @@ NSResult NSSendNotification(NSMessage *msg)
         NS_LOG(DEBUG, "-------------------------------------------------------message\n");
     }
 
+    if(!obCount)
+    {
+        NS_LOG(ERROR, "observer count is zero");
+        return NS_ERROR;
+    }
+
     OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray, obCount, payload,
             OC_LOW_QOS);
 
@@ -200,7 +208,6 @@ NSResult NSSendSync(NSSyncInfo *sync)
         NS_LOG(ERROR, "fail to send Sync");
         OCRepPayloadDestroy(payload);
         return NS_ERROR;
-
     }
 
     OCRepPayloadDestroy(payload);
index c9aeb60..d2f7f9b 100644 (file)
@@ -83,6 +83,7 @@ NSResult NSSendAccessPolicyResponse(OCEntityHandlerRequest *entityHandlerRequest
     }\r
 \r
     OCRepPayloadSetUri(payload, NS_ROOT_URI);\r
+    OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId);\r
     OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_POLICY, NSGetSubscriptionAccepter());\r
     OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_MESSAGE, NS_COLLECTION_MESSAGE_URI);\r
     OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_SYNC, NS_COLLECTION_SYNC_URI);\r
@@ -110,15 +111,24 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
 {\r
     NS_LOG(DEBUG, "NSHandleSubscription - IN");\r
 \r
+    char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
+\r
+    if(!id)\r
+    {\r
+        NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
+        NS_LOG(ERROR, "Invalid ConsumerID");\r
+        return;\r
+    }\r
+\r
     if (resourceType == NS_RESOURCE_MESSAGE)\r
     {\r
         NS_LOG(DEBUG, "resourceType == NS_RESOURCE_MESSAGE");\r
         NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
         NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
 \r
-        char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
         OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
         OICFree(id);\r
+\r
         subData->isWhite = false;\r
         subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
         subData->syncObId = 0;\r
@@ -149,10 +159,8 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
     {\r
         NS_LOG(DEBUG, "resourceType == NS_RESOURCE_SYNC");\r
         NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
-\r
         NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
 \r
-        char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
         OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
         OICFree(id);\r
 \r
@@ -170,6 +178,8 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
         {\r
             NS_LOG(ERROR, "Fail to write cache");\r
         }\r
+\r
+        NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
     }\r
 \r
     NS_LOG(DEBUG, "NSHandleSubscription - OUT");\r
@@ -179,13 +189,18 @@ void NSHandleUnsubscription(OCEntityHandlerRequest *entityHandlerRequest)
 {\r
     NS_LOG(DEBUG, "NSHandleUnsubscription - IN");\r
 \r
+    char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
+\r
+    if(!id)\r
+    {\r
+        NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
+        NS_LOG(ERROR, "Invalid ConsumerID");\r
+        return;\r
+    }\r
+\r
     NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
     NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
-\r
-    char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
     OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
-    OICFree(id);\r
-\r
     subData->isWhite = false;\r
     subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
 \r
@@ -201,6 +216,8 @@ void NSHandleUnsubscription(OCEntityHandlerRequest *entityHandlerRequest)
     }\r
 \r
     NS_LOG(DEBUG, "NSHandleUnsubscription - IN");\r
+\r
+    OICFree(id);\r
     NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
 }\r
 \r
@@ -268,13 +285,21 @@ NSResult NSSendSubscriptionResponse(OCEntityHandlerRequest *entityHandlerRequest
         return OC_EH_ERROR;\r
     }\r
 \r
+    char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
+\r
+    if(!id)\r
+    {\r
+        NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
+        NS_LOG(ERROR, "Invalid ConsumerID");\r
+        return NS_ERROR;\r
+    }\r
+\r
     if (accepted)\r
     {\r
         NS_LOG(DEBUG, "accepted is true");\r
         NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
-\r
         NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
-        char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
+\r
         OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
         OICFree(id);\r
         subData->isWhite = true;\r
@@ -289,7 +314,6 @@ NSResult NSSendSubscriptionResponse(OCEntityHandlerRequest *entityHandlerRequest
         }\r
     }\r
 \r
-    char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
     NSSendResponse(id, accepted);\r
 \r
     OICFree(id);\r
index 86b07a4..ab00e8e 100644 (file)
@@ -27,6 +27,7 @@
 #include "NSConstants.h"\r
 #include "oic_malloc.h"\r
 #include "NSStructs.h"\r
+#include "NSUtil.h"\r
 \r
 void NSSetProviderConnectionState(NSConnectionState state);\r
 NSConnectionState NSGetProviderConnectionState();\r