+ switch (task->taskType)
+ {
+ case TASK_EVENT_CONNECTED:
+ case TASK_EVENT_CONNECTED_TCP:
+ case TASK_CONSUMER_REQ_DISCOVER:
+ {
+ NSConsumerDiscoveryTaskProcessing(task);
+ break;
+ }
+ case TASK_CONSUMER_REQ_SUBSCRIBE:
+ {
+ NSProvider_internal * prov =
+ NSConsumerFindNSProvider(((NSProvider *)task->taskData)->providerId);
+ NS_VERIFY_NOT_NULL_V(prov);
+ NSTask * subTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE, prov);
+ NS_VERIFY_NOT_NULL_V(subTask);
+ NSConsumerCommunicationTaskProcessing(subTask);
+
+ NSRemoveProvider((NSProvider *)task->taskData);
+ NSOICFree(task);
+ break;
+ }
+ case TASK_SEND_SYNCINFO:
+ case TASK_CONSUMER_REQ_TOPIC_LIST:
+ case TASK_CONSUMER_SELECT_TOPIC_LIST:
+ {
+ NSConsumerCommunicationTaskProcessing(task);
+ break;
+ }
+ case TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL:
+ case TASK_CONSUMER_PROVIDER_DELETED:
+ {
+ NSProvider_internal * data = NULL;
+
+ if (task->taskType == TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL)
+ {
+ data = NSConsumerFindNSProvider(((NSProvider *) task->taskData)->providerId);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(
+ data, NSProviderDeletedPostClean(task, NULL, NULL));
+ }
+ else if (task->taskType == TASK_CONSUMER_PROVIDER_DELETED)
+ {
+ data = NSFindProviderFromAddr((OCDevAddr *) task->taskData);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(
+ data, NSProviderDeletedPostClean(task, NULL, NULL));
+ }
+
+ NSProvider_internal * data2 = NSCopyProvider_internal(data);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(
+ data2, NSProviderDeletedPostClean(task, data, NULL));
+
+ NSTask * conTask = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, data);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(
+ conTask, NSProviderDeletedPostClean(task, data, data2));
+ NSConsumerCommunicationTaskProcessing(conTask);
+
+ NSTask * conTask2 = NSMakeTask(TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL, data2);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(
+ conTask, NSProviderDeletedPostClean(task, NULL, data2));
+ NSConsumerInternalTaskProcessing(conTask2);
+
+ NSProviderDeletedPostClean(task, NULL, NULL);
+ break;
+ }
+ case TASK_RECV_SYNCINFO:
+ case TASK_CONSUMER_RECV_MESSAGE:
+ case TASK_CONSUMER_SENT_REQ_OBSERVE:
+ case TASK_CONSUMER_RECV_PROVIDER_CHANGED:
+ case TASK_MAKE_SYNCINFO:
+ case TASK_CONSUMER_REQ_TOPIC_URI:
+ case TASK_CONSUMER_RECV_TOPIC_LIST:
+ {
+ NSConsumerInternalTaskProcessing(task);
+ break;
+ }
+ case TASK_CONSUMER_PROVIDER_DISCOVERED:
+ {
+ NSTask * getTopicTask = (NSTask *)OICMalloc(sizeof(NSTask));
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(getTopicTask,
+ NSRemoveProvider_internal((void *) task->taskData));
+ getTopicTask->nextTask = NULL;
+ getTopicTask->taskData =
+ (void *) NSCopyProvider_internal((NSProvider_internal *) task->taskData);
+ getTopicTask->taskType = TASK_CONSUMER_REQ_TOPIC_LIST;
+ NSConsumerCommunicationTaskProcessing(getTopicTask);
+ NSConsumerInternalTaskProcessing(task);
+ break;
+ }
+ default:
+ {
+ NS_LOG(ERROR, "Unknown type of task");
+ break;
+ }
+ }