void NSConsumerHandleMakeSyncInfo(NSSyncInfo * sync) { NS_VERIFY_NOT_NULL_V(sync); NSProvider_internal * provider = NSProviderCacheFind(sync->providerId); NS_VERIFY_NOT_NULL_V (provider); NSProviderConnectionInfo * connections = NSCopyProviderConnections(provider->connection); NS_VERIFY_NOT_NULL_V (connections); NSSyncInfo_internal * syncInfo = (NSSyncInfo_internal *)OICMalloc(sizeof(NSSyncInfo_internal)); NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(syncInfo, NSRemoveConnections(connections)); OICStrcpy(syncInfo->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, sync->providerId); syncInfo->messageId = sync->messageId; syncInfo->state = sync->state; syncInfo->connection = connections; NSTask * syncTask = NSMakeTask(TASK_SEND_SYNCINFO, (void *) syncInfo); NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(syncTask, NSOICFree(syncInfo)); NSConsumerPushEvent(syncTask); }
NSResult NSConsumerCacheWriteProvider(NSCacheList * list, NSCacheElement * newObj) { NS_VERIFY_NOT_NULL(list, NS_ERROR); NS_VERIFY_NOT_NULL(newObj, NS_ERROR); pthread_mutex_t * mutex = NSGetCacheMutex(); NSProvider_internal * newProvObj = (NSProvider_internal *) newObj->data; NSCacheElement * it = NSConsumerStorageRead(list, newProvObj->providerId); pthread_mutex_lock(mutex); if (it) { if (newProvObj->connection) { NSProvider_internal * provObj = (NSProvider_internal *) it->data; NSProviderConnectionInfo * infos = provObj->connection; NSProviderConnectionInfo * lastConn = infos->next; while(lastConn) { infos = lastConn; lastConn = lastConn->next; } infos->next = NSCopyProviderConnections(newProvObj->connection); } if (newProvObj->topicLL) { NSProvider_internal * provObj = (NSProvider_internal *) it->data; NSRemoveTopicLL(provObj->topicLL); provObj->topicLL = NSCopyTopicLL(newProvObj->topicLL); } pthread_mutex_unlock(mutex); return NS_OK; } NSCacheElement * obj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(obj, NS_ERROR, pthread_mutex_unlock(mutex)); NS_LOG_V(INFO_PRIVATE, "New Object address : %s:%d", newProvObj->connection->addr->addr, newProvObj->connection->addr->port); obj->data = (void *) NSCopyProvider_internal(newProvObj); if (!obj->data) { NS_LOG (ERROR, "Failed to CopyProvider"); NSOICFree(obj); pthread_mutex_unlock(mutex); return NS_ERROR; } obj->next = NULL; if (!list->head) { list->head = obj; list->tail = obj; pthread_mutex_unlock(mutex); return NS_OK; } (list->tail)->next = obj; list->tail = obj; pthread_mutex_unlock(mutex); return NS_OK; }