static void qdr_auto_link_activate_CT(qdr_core_t *core, qdr_auto_link_t *al, qdr_connection_t *conn) { const char *key; qdr_route_log_CT(core, "Auto Link Activated", al->name, al->identity, conn); if (al->addr) { qdr_terminus_t *source = 0; qdr_terminus_t *target = 0; qdr_terminus_t *term = qdr_terminus(0); if (al->dir == QD_INCOMING) source = term; else target = term; key = (const char*) qd_hash_key_by_handle(al->addr->hash_handle); if (key || al->external_addr) { if (al->external_addr) qdr_terminus_set_address(term, al->external_addr); else qdr_terminus_set_address(term, &key[2]); // truncate the "Mp" annotation (where p = phase) al->link = qdr_create_link_CT(core, conn, QD_LINK_ENDPOINT, al->dir, source, target); al->link->auto_link = al; al->state = QDR_AUTO_LINK_STATE_ATTACHING; } } }
static void qdr_auto_link_deactivate_CT(qdr_core_t *core, qdr_auto_link_t *al, qdr_connection_t *conn) { qdr_route_log_CT(core, "Auto Link Deactivated", al->name, al->identity, conn); if (al->link) { qdr_link_outbound_detach_CT(core, al->link, 0, QDR_CONDITION_ROUTED_LINK_LOST, true); al->link->auto_link = 0; al->link = 0; } al->state = QDR_AUTO_LINK_STATE_INACTIVE; }
static void qdr_link_route_deactivate_CT(qdr_core_t *core, qdr_link_route_t *lr, qdr_connection_t *conn) { const char *key; qdr_route_log_CT(core, "Link Route Deactivated", lr->name, lr->identity, conn); // // Deactivate the address(es) for link-routed destinations. // if (lr->addr) { qdr_del_connection_ref(&lr->addr->conns, conn); if (DEQ_IS_EMPTY(lr->addr->conns)) { key = (const char*) qd_hash_key_by_handle(lr->addr->hash_handle); if (key) qdr_post_mobile_removed_CT(core, key); } } }
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); } } }