void qdr_route_connection_opened_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_field_t *container_field, qdr_field_t *connection_field) { if (conn->role != QDR_ROLE_ROUTE_CONTAINER) return; qdr_conn_identifier_t *cid = qdr_route_declare_id_CT(core, container_field?container_field->iterator:0, connection_field?connection_field->iterator:0); qdr_add_connection_ref(&cid->connection_refs, conn); conn->conn_id = cid; // // Activate all link-routes associated with this remote container. // qdr_link_route_t *lr = DEQ_HEAD(cid->link_route_refs); while (lr) { qdr_link_route_activate_CT(core, lr, conn); lr = DEQ_NEXT_N(REF, lr); } // // Activate all auto-links associated with this remote container. // qdr_auto_link_t *al = DEQ_HEAD(cid->auto_link_refs); while (al) { qdr_auto_link_activate_CT(core, al, conn); al = DEQ_NEXT_N(REF, al); } }
void qdr_core_bind_address_conn_CT(qdr_core_t *core, qdr_address_t *addr, qdr_connection_t *conn) { qdr_add_connection_ref(&addr->conns, conn); if (DEQ_SIZE(addr->conns) == 1) { const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); qdr_post_mobile_added_CT(core, key, addr->treatment); qdrc_event_addr_raise(core, QDRC_EVENT_ADDR_BECAME_LOCAL_DEST, addr); } }
static void qdr_link_route_activate_CT(qdr_core_t *core, qdr_link_route_t *lr, qdr_connection_t *conn) { const char *key; qdr_route_log_CT(core, "Link Route Activated", lr->name, lr->identity, conn); // // Activate the address for link-routed destinations. If this is the first // activation for this address, notify the router module of the added address. // if (lr->addr) { qdr_add_connection_ref(&lr->addr->conns, conn); if (DEQ_SIZE(lr->addr->conns) == 1) { key = (const char*) qd_hash_key_by_handle(lr->addr->hash_handle); if (key) qdr_post_mobile_added_CT(core, key); } } }