PRIVATE void rpc__dg_binding_init ( rpc_binding_rep_p_t h_, unsigned32 *st ) { *st = rpc_s_ok; if (RPC_BINDING_IS_SERVER(h_)) { rpc_dg_binding_server_p_t h = (rpc_dg_binding_server_p_t) h_; h->chand = NULL; h->scall = NULL; } else { rpc_dg_binding_client_p_t h = (rpc_dg_binding_client_p_t) h_; h->ccall = NULL; h->server_boot = 0; h->shand = NULL; h->maint_binding = NULL; h->is_WAY_binding = 0; } }
PRIVATE void rpc__cn_binding_init ( rpc_binding_rep_p_t binding_r, unsigned32 *st ) { unsigned32 type; rpc_cn_local_id_t grp_id; CODING_ERROR (st); /* * Determine the type of association group we are looking for. */ if (RPC_BINDING_IS_SERVER (binding_r)) { type = RPC_C_CN_ASSOC_GRP_SERVER; } else { type = RPC_C_CN_ASSOC_GRP_CLIENT; /* * Use the RPC address contained in the binding rep to find an * association group. */ RPC_CN_LOCK (); grp_id = rpc__cn_assoc_grp_lkup_by_addr (binding_r->rpc_addr, binding_r->transport_info, type, st); /* * Record its the association group id returned into the * binding rep. Note that the group id returned may be invalid. */ ((rpc_cn_binding_rep_t *)binding_r)->grp_id = grp_id; RPC_CN_UNLOCK (); } /* * Return a good status code no matter what happened. */ *st = rpc_s_ok; }
PRIVATE void rpc__cn_binding_inq_addr ( rpc_binding_rep_p_t binding_r, rpc_addr_p_t *rpc_addr, unsigned32 *st ) { unsigned32 type; rpc_cn_local_id_t grp_id; rpc_cn_assoc_grp_t *assoc_grp; rpc_protseq_id_t protseq_id; CODING_ERROR (st); /* * Determine the type of association group we are looking for. */ if (RPC_BINDING_IS_SERVER (binding_r)) { type = RPC_C_CN_ASSOC_GRP_SERVER; } else { type = RPC_C_CN_ASSOC_GRP_CLIENT; } /* * Use the group id contained in the binding rep to find an * association group. */ RPC_CN_LOCK (); grp_id = rpc__cn_assoc_grp_lkup_by_id ( ((rpc_cn_binding_rep_t *)binding_r)->grp_id, type, binding_r->transport_info, st); /* * Check whether an association group was found or not. */ if (RPC_CN_LOCAL_ID_VALID (grp_id)) { /* * An association group was found. Check whether it * contains an RPC address. */ assoc_grp = RPC_CN_ASSOC_GRP (grp_id); if (assoc_grp->grp_address != NULL) { /* * The association group contains an RPC address. * Copy it into the binding. */ rpc__naf_addr_copy (assoc_grp->grp_address, rpc_addr, st); } else { /* * The association doesn't have an RPC address. Find * it out using one of the connections attached to the * association group. */ rpc__naf_desc_inq_protseq_id (((rpc_cn_assoc_t *)assoc_grp->grp_assoc_list.next)->cn_ctlblk.cn_sock, RPC_C_PROTOCOL_ID_NCACN, &protseq_id, st); if (*st == rpc_s_ok) { rpc__naf_desc_inq_peer_addr (((rpc_cn_assoc_t *)assoc_grp->grp_assoc_list.next)->cn_ctlblk.cn_sock, protseq_id, rpc_addr, st); if (*st == rpc_s_ok) { rpc__naf_addr_copy (*rpc_addr, &assoc_grp->grp_address, st); } } } binding_r->rpc_addr = *rpc_addr; } else { *st = rpc_s_connection_closed; } RPC_CN_UNLOCK (); }