static void qd_core_agent_update_handler(qdr_core_t *core, qd_message_t *msg, qd_router_entity_type_t entity_type, qd_router_operation_type_t operation_type, qd_field_iterator_t *identity_iter, qd_field_iterator_t *name_iter) { qd_composed_field_t *out_body = qd_compose(QD_PERFORMATIVE_BODY_AMQP_VALUE, 0); // Set the callback function. qdr_manage_handler(core, qd_manage_response_handler); qd_management_context_t *ctx = qd_management_context(qd_message(), msg, out_body, 0, core, operation_type, 0); qd_field_iterator_t *iter = qd_message_field_iterator(msg, QD_FIELD_BODY); qd_parsed_field_t *in_body= qd_parse(iter); qd_field_iterator_free(iter); qdr_manage_update(core, ctx, entity_type, name_iter, identity_iter, in_body, out_body); }
qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, char aclass, const char *address, qd_address_treatment_t treatment) { char addr_string[1000]; qdr_address_t *addr = 0; qd_field_iterator_t *iter = 0; snprintf(addr_string, sizeof(addr_string), "%c%s", aclass, address); iter = qd_address_iterator_string(addr_string, ITER_VIEW_ALL); qd_hash_retrieve(core->addr_hash, iter, (void**) &addr); if (!addr) { addr = qdr_address_CT(core, treatment); qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle); DEQ_ITEM_INIT(addr); DEQ_INSERT_TAIL(core->addrs, addr); addr->block_deletion = true; addr->local = (aclass == 'L'); } qd_field_iterator_free(iter); return addr; }
int qd_container_register_node_type(qd_dispatch_t *qd, const qd_node_type_t *nt) { qd_container_t *container = qd->container; int result; qd_field_iterator_t *iter = qd_field_iterator_string(nt->type_name); qdc_node_type_t *nt_item = NEW(qdc_node_type_t); DEQ_ITEM_INIT(nt_item); nt_item->ntype = nt; sys_mutex_lock(container->lock); result = qd_hash_insert_const(container->node_type_map, iter, nt, 0); DEQ_INSERT_TAIL(container->node_type_list, nt_item); sys_mutex_unlock(container->lock); qd_field_iterator_free(iter); if (result < 0) return result; qd_log(container->log_source, QD_LOG_TRACE, "Node Type Registered - %s", nt->type_name); return 0; }