qdr_core_t *qdr_core(qd_dispatch_t *qd, qd_router_mode_t mode, const char *area, const char *id) { qdr_core_t *core = NEW(qdr_core_t); ZERO(core); core->qd = qd; core->router_mode = mode; core->router_area = area; core->router_id = id; // // Set up the logging sources for the router core // core->log = qd_log_source("ROUTER_CORE"); core->agent_log = qd_log_source("AGENT"); // // Report on the configuration for unsettled multicasts // qd_log(core->log, QD_LOG_INFO, "Allow Unsettled Multicast: %s", qd->allow_unsettled_multicast ? "yes" : "no"); // // Set up the threading support // core->action_cond = sys_cond(); core->action_lock = sys_mutex(); core->running = true; DEQ_INIT(core->action_list); core->work_lock = sys_mutex(); DEQ_INIT(core->work_list); core->work_timer = qd_timer(core->qd, qdr_general_handler, core); // // Set up the unique identifier generator // core->next_identifier = 1; core->id_lock = sys_mutex(); // // Launch the core thread // core->thread = sys_thread(router_core_thread, core); // // Perform outside-of-thread setup for the management agent // core->agent_subscription_mobile = qdr_core_subscribe(core, "$management", 'M', '0', QD_TREATMENT_ANYCAST_CLOSEST, qdr_management_agent_on_message, core); core->agent_subscription_local = qdr_core_subscribe(core, "$management", 'L', '0', QD_TREATMENT_ANYCAST_CLOSEST, qdr_management_agent_on_message, core); return core; }
static void dx_alloc_init(dx_alloc_type_desc_t *desc) { sys_mutex_lock(init_lock); desc->total_size = desc->type_size; if (desc->additional_size) desc->total_size += *desc->additional_size; //dx_log("ALLOC", LOG_TRACE, "Initialized Allocator - type=%s type-size=%d total-size=%d", // desc->type_name, desc->type_size, desc->total_size); if (!desc->global_pool) { if (desc->config == 0) desc->config = desc->total_size > 256 ? &dx_alloc_default_config_big : &dx_alloc_default_config_small; assert (desc->config->local_free_list_max >= desc->config->transfer_batch_size); desc->global_pool = NEW(dx_alloc_pool_t); DEQ_INIT(desc->global_pool->free_list); desc->lock = sys_mutex(); desc->stats = NEW(dx_alloc_stats_t); memset(desc->stats, 0, sizeof(dx_alloc_stats_t)); } item_t *type_item = NEW(item_t); DEQ_ITEM_INIT(type_item); type_item->desc = desc; DEQ_INSERT_TAIL(type_list, type_item); sys_mutex_unlock(init_lock); }
dx_router_t *dx_router(dx_dispatch_t *dx) { if (!type_registered) { type_registered = 1; dx_container_register_node_type(dx, &router_node); } dx_router_t *router = NEW(dx_router_t); dx_container_set_default_node_type(dx, &router_node, (void*) router, DX_DIST_BOTH); DEQ_INIT(router->in_links); DEQ_INIT(router->out_links); DEQ_INIT(router->in_fifo); router->dx = dx; router->lock = sys_mutex(); router->timer = dx_timer(dx, dx_router_timer_handler, (void*) router); dx_timer_schedule(router->timer, 0); // Immediate router->out_hash = hash(10, 32, 0); router->dtag = 1; return router; }
qd_message_t *qd_message() { qd_message_pvt_t *msg = (qd_message_pvt_t*) new_qd_message_t(); if (!msg) return 0; DEQ_ITEM_INIT(msg); DEQ_INIT(msg->ma_to_override); DEQ_INIT(msg->ma_trace); DEQ_INIT(msg->ma_ingress); msg->content = new_qd_message_content_t(); if (msg->content == 0) { free_qd_message_t((qd_message_t*) msg); return 0; } memset(msg->content, 0, sizeof(qd_message_content_t)); msg->content->lock = sys_mutex(); msg->content->ref_count = 1; msg->content->parse_depth = QD_DEPTH_NONE; msg->content->parsed_message_annotations = 0; return (qd_message_t*) msg; }
int server_tests(qd_dispatch_t *_qd) { int result = 0; test_lock = sys_mutex(); qd = _qd; TEST_CASE(test_user_fd, 0); sys_mutex_free(test_lock); return result; }
void qd_python_initialize(qd_dispatch_t *qd, const char *python_pkgdir) { log_source = qd_log_source("PYTHON"); dispatch = qd; ilock = sys_mutex(); if (python_pkgdir) dispatch_python_pkgdir = PyString_FromString(python_pkgdir); qd_python_lock_state_t ls = qd_python_lock(); Py_Initialize(); qd_python_setup(); qd_python_unlock(ls); }
qd_router_t *qd_router(qd_dispatch_t *qd, qd_router_mode_t mode, const char *area, const char *id) { if (!type_registered) { type_registered = 1; qd_container_register_node_type(qd, &router_node); } size_t dplen = 9 + strlen(area) + strlen(id); node_id = (char*) malloc(dplen); strcpy(node_id, area); strcat(node_id, "/"); strcat(node_id, id); qd_router_t *router = NEW(qd_router_t); ZERO(router); router_node.type_context = router; qd->router = router; router->qd = qd; router->router_core = 0; router->log_source = qd_log_source("ROUTER"); router->router_mode = mode; router->router_area = area; router->router_id = id; router->node = qd_container_set_default_node_type(qd, &router_node, (void*) router, QD_DIST_BOTH); router->lock = sys_mutex(); router->timer = qd_timer(qd, qd_router_timer_handler, (void*) router); // // Inform the field iterator module of this router's id and area. The field iterator // uses this to offload some of the address-processing load from the router. // qd_iterator_set_address(area, id); // // Seed the random number generator // unsigned int seed = (unsigned int) time(0); srandom(seed); switch (router->router_mode) { case QD_ROUTER_MODE_STANDALONE: qd_log(router->log_source, QD_LOG_INFO, "Router started in Standalone mode"); break; case QD_ROUTER_MODE_INTERIOR: qd_log(router->log_source, QD_LOG_INFO, "Router started in Interior mode, area=%s id=%s", area, id); break; case QD_ROUTER_MODE_EDGE: qd_log(router->log_source, QD_LOG_INFO, "Router started in Edge mode"); break; case QD_ROUTER_MODE_ENDPOINT: qd_log(router->log_source, QD_LOG_INFO, "Router started in Endpoint mode"); break; } return router; }
void qd_log_initialize(void) { DEQ_INIT(entries); DEQ_INIT(source_list); DEQ_INIT(sink_list); // Set up level_names for use in error messages. ZERO((char*)level_names); char *begin = (char*)level_names, *end = (char*)level_names+sizeof(level_names); aprintf(&begin, end, "%s", levels[NONE].name); for (level_index_t i = NONE + 1; i < N_LEVELS; ++i) aprintf(&begin, end, ", %s", levels[i].name); log_lock = sys_mutex(); log_source_lock = sys_mutex(); default_log_source = qd_log_source(SOURCE_DEFAULT); default_log_source->mask = levels[INFO].mask; default_log_source->timestamp = true; default_log_source->source = 0; default_log_source->sink = log_sink_lh(SINK_STDERR); logging_log_source = qd_log_source(SOURCE_LOGGING); }
qd_connection_manager_t *qd_connection_manager(qd_dispatch_t *qd) { qd_connection_manager_t *cm = NEW(qd_connection_manager_t); if (!cm) return 0; cm->log_source = qd_log_source("CONN_MGR"); cm->ssl_profile_lock = sys_mutex(); cm->server = qd->server; DEQ_INIT(cm->config_listeners); DEQ_INIT(cm->config_connectors); DEQ_INIT(cm->config_ssl_profiles); return cm; }
int timer_tests(void) { int result = 0; fire_mask = 0; DEQ_INIT(pending_timers); lock = sys_mutex(); nx_timer_initialize(lock); time = 1; timers[0] = nx_timer(0, (void*) 0x00000001); timers[1] = nx_timer(0, (void*) 0x00000002); timers[2] = nx_timer(0, (void*) 0x00000004); timers[3] = nx_timer(0, (void*) 0x00000008); timers[4] = nx_timer(0, (void*) 0x00000010); timers[5] = nx_timer(0, (void*) 0x00000020); timers[6] = nx_timer(0, (void*) 0x00000040); timers[7] = nx_timer(0, (void*) 0x00000080); timers[8] = nx_timer(0, (void*) 0x00000100); timers[9] = nx_timer(0, (void*) 0x00000200); timers[10] = nx_timer(0, (void*) 0x00000400); timers[11] = nx_timer(0, (void*) 0x00000800); timers[12] = nx_timer(0, (void*) 0x00001000); timers[13] = nx_timer(0, (void*) 0x00002000); timers[14] = nx_timer(0, (void*) 0x00004000); timers[15] = nx_timer(0, (void*) 0x00008000); TEST_CASE(test_quiet, 0); TEST_CASE(test_immediate, 0); TEST_CASE(test_immediate_plus_delayed, 0); TEST_CASE(test_single, 0); TEST_CASE(test_two_inorder, 0); TEST_CASE(test_two_reverse, 0); TEST_CASE(test_two_duplicate, 0); TEST_CASE(test_separated, 0); TEST_CASE(test_big, 0); int i; for (i = 0; i < 16; i++) nx_timer_free(timers[i]); nx_timer_finalize(); return result; }
qd_container_t *qd_container(qd_dispatch_t *qd) { qd_container_t *container = NEW(qd_container_t); container->qd = qd; container->log_source = qd_log_source("CONTAINER"); container->server = qd->server; container->node_type_map = qd_hash(6, 4, 1); // 64 buckets, item batches of 4 container->node_map = qd_hash(10, 32, 0); // 1K buckets, item batches of 32 container->lock = sys_mutex(); container->default_node = 0; DEQ_INIT(container->nodes); DEQ_INIT(container->node_type_list); qd_server_set_conn_handler(qd, handler, pn_event_handler, container); qd_log(container->log_source, QD_LOG_TRACE, "Container Initialized"); return container; }
void qdr_agent_setup_CT(qdr_core_t *core) { DEQ_INIT(core->outgoing_query_list); core->query_lock = sys_mutex(); core->agent_timer = qd_timer(core->qd, qdr_agent_response_handler, core); }
void dx_alloc_initialize(void) { init_lock = sys_mutex(); DEQ_INIT(type_list); }
void qd_entity_cache_initialize(void) { event_lock = sys_mutex(); DEQ_INIT(event_list); }