void NSConsumerHandleRecvMessage(NSMessage * msg)
{
    NS_VERIFY_NOT_NULL_V(msg);

    NSResult ret = NSMessageCacheUpdate(msg, NS_SYNC_UNREAD);
    NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);

    NSMessagePost((NSMessage *) msg);
}
void NSConsumerHandleProviderDeleted(NSProvider_internal * provider)
{
    NS_VERIFY_NOT_NULL_V(provider);

    NSCacheList * providerCache = *(NSGetProviderCacheList());
    NS_VERIFY_NOT_NULL_V(providerCache);

    NSResult ret = NSStorageDelete(providerCache, provider->providerId);
    NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL);
}
void NSConsumerHandleRecvSubscriptionConfirmed(NSMessage * msg)
{
    NS_VERIFY_NOT_NULL_V(msg);

    NS_LOG_V(DEBUG, "confirmed by : %s", msg->providerId);
    NSProvider_internal * provider = NSProviderCacheFind(msg->providerId);
    NS_VERIFY_NOT_NULL_V(provider);

    if (provider->connection->next == NULL)
    {
        NS_LOG(DEBUG, "call back to user");
        NSSubscriptionAccepted((NSProvider *) provider);
    }
}
void NSConsumerHandleRecvSyncInfo(NSSyncInfo * sync)
{
    NS_VERIFY_NOT_NULL_V(sync);

    char msgId[NS_DEVICE_ID_LENGTH] = { 0, };
    snprintf(msgId, NS_DEVICE_ID_LENGTH, "%lld", (long long int)sync->messageId);

    NSMessage * msg = NSMessageCacheFind(msgId);
    NS_VERIFY_NOT_NULL_V(msg);

    NSResult ret = NSMessageCacheUpdate(msg, sync->state);
    NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);
    NSRemoveMessage(msg);

    NSNotificationSync(sync);
}
void NSConsumerInternalTaskProcessing(NSTask * task)
{
    NS_VERIFY_NOT_NULL_V(task);

    NS_LOG_V(DEBUG, "Receive Event : %d", (int)task->taskType);
    switch (task->taskType)
    {
        case TASK_CONSUMER_RECV_SUBSCRIBE_CONFIRMED:
        {
            NS_LOG(DEBUG, "Receive Subscribe confirm from provider.");
            NSConsumerHandleRecvSubscriptionConfirmed((NSMessage *)task->taskData);
            NSRemoveMessage((NSMessage *)task->taskData);
            break;
        }
        case TASK_CONSUMER_RECV_MESSAGE:
        {
            NS_LOG(DEBUG, "Receive New Notification");
            NSConsumerHandleRecvMessage((NSMessage *)task->taskData);
            NSRemoveMessage((NSMessage *)task->taskData);
            break;
        }
        case TASK_CONSUMER_PROVIDER_DISCOVERED:
        {
            NS_LOG(DEBUG, "Receive New Provider is discovered.");
            NSConsumerHandleProviderDiscovered((NSProvider_internal *)task->taskData);
            NSRemoveProvider((NSProvider_internal *)task->taskData);
            break;
        }
        case TASK_RECV_SYNCINFO:
        {
            NS_LOG(DEBUG, "Receive SyncInfo.");
            NSConsumerHandleRecvSyncInfo((NSSyncInfo *)task->taskData);
            NSOICFree(task->taskData);
            break;
        }
        case TASK_MAKE_SYNCINFO:
        {
            NS_LOG(DEBUG, "Make SyncInfo, get Provider's Addr");
            NSConsumerHandleMakeSyncInfo((NSSyncInfo *)task->taskData);
            NSOICFree(task->taskData);
            break;
        }
        case TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL:
        {
            NS_LOG(DEBUG, "Make Subscribe cancel from provider.");
            NSConsumerHandleProviderDeleted((NSProvider_internal *)task->taskData);
            NSRemoveProvider((NSProvider_internal *)task->taskData);
            break;
        }
        default :
        {
            NS_LOG(ERROR, "Unknown TASK Type");
            return ;
        }
    }
    NSOICFree(task);
}
Esempio n. 6
0
void NSDestroyThreadHandle(NSConsumerThread * handle)
{
    NS_VERIFY_NOT_NULL_V(handle);

    pthread_mutex_destroy(&(handle->mutex));
    pthread_mutexattr_destroy(&(handle->mutex_attr));

    pthread_mutex_unlock(&g_create_mutex);
}
Esempio n. 7
0
void NSThreadStop(NSConsumerThread * handle)
{
    NS_VERIFY_NOT_NULL_V(handle);

    handle->isStarted = false;
    NSThreadJoin(handle);

    NSDestroyThreadHandle(handle);
}
Esempio n. 8
0
void NSThreadJoin(NSConsumerThread * handle)
{
    NS_VERIFY_NOT_NULL_V(handle);

    if (handle->thread_id)
    {
        void * retData = NULL;
        pthread_join(handle->thread_id, & retData);
        NSOICFree(retData);
    }
}
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);
}
void NSCancelAllSubscription()
{
    NSCacheList * ProviderCache = *(NSGetProviderCacheList());
    if (!ProviderCache)
    {
        NS_LOG(DEBUG, "Provider Cache Init");
        ProviderCache = NSStorageCreate();
        NS_VERIFY_NOT_NULL_V(ProviderCache);

        ProviderCache->cacheType = NS_CONSUMER_CACHE_PROVIDER;
        NSSetProviderCacheList(ProviderCache);
    }

    NSCacheElement * obj = NULL;
    while ((obj = NSPopProviderCacheList(ProviderCache)))
    {
        NS_LOG(DEBUG, "build NSTask");
        NSTask * task = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, (void *) obj->data);
        NS_VERIFY_NOT_NULL_V(task);

        NSConsumerPushEvent(task);
    }
}
Esempio n. 11
0
void NSDestroyQueue(NSConsumerQueue * queue)
{
    NS_VERIFY_NOT_NULL_V(queue);

    NSConsumerQueueObject * node = NSPopQueue(queue);
    while(node)
    {
        NSConsumerQueueObject * next = (NSConsumerQueueObject *)node->next;
        NSOICFree(node->data);
        NSOICFree(node);

        node = next;
    }

    NSOICFree(queue);
}
void NSConsumerHandleProviderDiscovered(NSProvider_internal * provider)
{
    NS_VERIFY_NOT_NULL_V(provider);

    bool isAdded = true;
    bool isSubscribing = false;
    NSProvider_internal * providerCacheData = NSProviderCacheFind(provider->providerId);

    if (providerCacheData == NULL)
    {
        isAdded = false;
    }
    else
    {
        providerCacheData->accessPolicy = provider->accessPolicy;
        NSProviderConnectionInfo * infos = providerCacheData->connection;
        OCTransportAdapter newAdapter = provider->connection->addr->adapter;
        while (infos)
        {
            isSubscribing |= infos->isSubscribing;
            if (infos->addr->adapter == newAdapter && infos->isSubscribing == true)
            {
                NS_LOG_V(DEBUG, "This provider already discovered : %s:%d",
                         infos->addr->addr, infos->addr->port);
                NS_LOG_V(DEBUG, "Subscription : %d", infos->isSubscribing);
                return;
            }
            infos = infos->next;
        }
    }

    NSResult ret = NSProviderCacheUpdate(provider);
    NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *) 1 : NULL);

    if (isAdded == false)
    {
        NS_LOG(DEBUG, "New provider is discovered");
    }
    else
    {
        provider = providerCacheData;
        NS_LOG(DEBUG, "provider's connection is updated.");
    }

    if (provider->accessPolicy == NS_SELECTION_CONSUMER && isSubscribing == false)
    {
        NS_LOG(DEBUG, "accepter is NS_ACCEPTER_CONSUMER, Callback to user");
        NSDiscoveredProvider((NSProvider *) provider);
    }
    else
    {
        NS_LOG(DEBUG, "accepter is NS_ACCEPTER_PROVIDER, request subscribe");
        NSProvider_internal * subProvider = NSCopyProvider(provider);
        NSTask * task = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, (void *) subProvider);
        NS_VERIFY_NOT_NULL_V(task);

        NSConsumerPushEvent(task);
    }

    NSRemoveProvider(providerCacheData);
}
Esempio n. 13
0
void NSThreadUnlock(NSConsumerThread * handle)
{
    NS_VERIFY_NOT_NULL_V(handle);

    pthread_mutex_unlock(&(handle->mutex));
}