v_result v_deliveryServiceEnable( v_deliveryService _this) { #if 0 v_kernel kernel; v_message builtinMsg; #endif v_subscriber subscriber; v_result result; if (_this) { result = V_RESULT_OK; subscriber = v_subscriber(v_reader(_this)->subscriber); v_subscriberAddReader(subscriber,v_reader(_this)); #if 0 kernel = v_objectKernel(_this); builtinMsg = v_builtinCreateSubscriptionInfo(kernel->builtin, _this); v_writeBuiltinTopic(kernel, V_SUBSCRIPTIONINFO_ID, builtinMsg); c_free(builtinMsg); #endif } else { result = V_RESULT_ILL_PARAM; } return result; }
v_networkReader v_networkReaderNew( v_subscriber subscriber, const c_char *name, v_readerQos qos, c_bool ignoreReliabilityQoS) { /* Note: currently, no qos-es are supported. Everything is redirected * to the defaultQueue */ v_kernel kernel; v_networkReader reader; v_readerQos q; v_statistics s; c_type queueType; c_long i; assert(C_TYPECHECK(subscriber,v_subscriber)); /* Creation */ kernel = v_objectKernel(subscriber); q = v_readerQosNew(kernel,qos); if (q != NULL) { reader = v_networkReader(v_objectNew(kernel,K_NETWORKREADER)); s = v_statistics(v_networkReaderStatisticsNew(kernel)); /* Initialization of parent */ v_readerInit(v_reader(reader), name, subscriber, q, s, TRUE); c_free(q); /* ref now in v_reader(queue)->qos */ /* This function only ever called once per network instance so no * need to store queueType as static variable. Look up as needed (once) */ queueType = c_resolve(c_getBase(subscriber),"kernelModule::v_networkQueue"); /* Initialization of self */ reader->queues = NULL; reader->queues = c_arrayNew(queueType, NW_MAX_NOF_QUEUES); reader->nofQueues = 0; reader->defaultQueue = NULL; reader->remoteActivity = FALSE; reader->ignoreReliabilityQoS = ignoreReliabilityQoS; reader->queueCache = c_arrayNew(queueType, 2*NW_MAX_QUEUE_CACHE_PRIO); for( i= 0; i < 2*NW_MAX_QUEUE_CACHE_PRIO; i++) { reader->queueCache[i] = NULL; } c_free(queueType); /* Add to subscriber */ v_subscriberAddReader(subscriber,v_reader(reader)); } else { OS_REPORT(OS_ERROR, "v_networkReaderNew", 0, "NetworkReader not created: inconsistent qos"); reader = NULL; } return reader; }
void v_groupStreamInit( v_groupStream stream, const c_char *name, v_subscriber subscriber, v_readerQos qos) { v_kernel kernel; assert(C_TYPECHECK(stream, v_groupStream)); assert(C_TYPECHECK(subscriber, v_subscriber)); kernel = v_objectKernel(subscriber); stream->groups = c_setNew(v_kernelType(kernel,K_GROUP)); v_readerInit(v_reader(stream),name,subscriber,qos,NULL,TRUE); v_subscriberAddReader(subscriber,v_reader(stream)); }
void v_groupStreamInit( v_groupStream stream, const c_char *name, v_subscriber subscriber, v_readerQos qos, v_statistics rs, c_iter expr) { v_kernel kernel; assert(C_TYPECHECK(stream, v_groupStream)); assert(C_TYPECHECK(subscriber, v_subscriber)); kernel = v_objectKernel(subscriber); stream->groups = c_setNew(v_kernelType(kernel,K_GROUP)); stream->expr = c_listNew(c_resolve(c_getBase(stream), "::c_string")); c_iterWalk(expr, fillExprList, stream->expr); v_readerInit(v_reader(stream),name,subscriber,qos,rs,TRUE); v_subscriberAddReader(subscriber,v_reader(stream)); }
v_networkReader v_networkReaderNew( v_subscriber subscriber, const c_char *name, v_readerQos qos, c_bool ignoreReliabilityQoS) { /* Note: currently, no qos-es are supported. Everything is redirected * to the defaultQueue */ v_kernel kernel; v_networkReader reader = NULL; v_result r; v_readerQos q; c_type queueType; c_long i; assert(C_TYPECHECK(subscriber,v_subscriber)); /* Creation */ kernel = v_objectKernel(subscriber); if (v_readerQosCheck(qos) == V_RESULT_OK) { q = v_readerQosNew(kernel,qos); if (q != NULL) { reader = v_networkReader(v_objectNew(kernel,K_NETWORKREADER)); reader->statistics = v_networkReaderStatisticsNew(kernel); /* Initialization of parent */ v_readerInit(v_reader(reader), name, subscriber, q); (void)v_entityEnable(v_entity(reader)); c_free(q); /* ref now in v_reader(queue)->qos */ /* This function only ever called once per network instance so no * need to store queueType as static variable. Look up as needed (once) */ queueType = c_resolve(c_getBase(subscriber),"kernelModuleI::v_networkQueue"); /* Initialization of self */ reader->queues = NULL; reader->queues = c_arrayNew_s(queueType, NW_MAX_NOF_QUEUES); if (!reader->queues) { OS_REPORT(OS_ERROR, "v_networkReaderNew", V_RESULT_OUT_OF_MEMORY, "Creation of NetworkReader <%s> failed: cannot create queues", name); goto err_alloc_queues; } reader->nofQueues = 0; reader->defaultQueue = NULL; reader->remoteActivity = FALSE; reader->ignoreReliabilityQoS = ignoreReliabilityQoS; reader->queueCache = c_arrayNew_s(queueType, 2*NW_MAX_QUEUE_CACHE_PRIO); if (!reader->queueCache) { OS_REPORT(OS_ERROR, "v_networkReaderNew", V_RESULT_OUT_OF_MEMORY, "Creation of NetworkReader <%s> failed: cannot create queue cache", name); goto err_alloc_cache; } for( i= 0; i < 2*NW_MAX_QUEUE_CACHE_PRIO; i++) { reader->queueCache[i] = NULL; } c_free(queueType); /* Add to subscriber */ r = v_subscriberAddReader(subscriber,v_reader(reader)); if (r != V_RESULT_OK) { OS_REPORT(OS_ERROR, "v_networkReaderNew", r, "Creation of NetworkReader <%s> failed: cannot add reader to subscriber", name); goto err_add_reader; } } else { OS_REPORT(OS_ERROR, "v_networkReaderNew", V_RESULT_OUT_OF_MEMORY, "Creation of NetworkReader <%s> failed: cannot create reader QoS", name); reader = NULL; } } return reader; err_add_reader: err_alloc_cache: err_alloc_queues: c_free(queueType); c_free(reader); return NULL; }