void block_break(AnyPtr& target){ if(target){ const VMachinePtr& vm = setup_call(0); target->rawsend(vm, XTAL_DEFINED_ID(block_break), undefined, true, true); if(!vm->is_executed()){ vm->return_result(); } vm->cleanup_call(); } }
bool block_next(BlockValueHolder3& holder, bool first){ const VMachinePtr& vm = setup_call(4); holder.target->rawsend(vm, first ? XTAL_DEFINED_ID(block_first) : XTAL_DEFINED_ID(block_next)); holder.target = vm->result(0); holder.values[0] = vm->result(1); holder.values[1] = vm->result(2); holder.values[2] = vm->result(3); vm->cleanup_call(); return holder.target; }
bool block_next(BlockValueHolder1& holder, bool first){ if(holder.it){ if(!holder.it->block_next_direct(holder.values[0])){ holder.target = null; } } else{ const VMachinePtr& vm = setup_call(2); holder.target->rawsend(vm, first ? XTAL_DEFINED_ID(block_first) : XTAL_DEFINED_ID(block_next)); holder.target = vm->result(0); holder.values[0] = vm->result(1); vm->cleanup_call(); } return holder.target; }
static void process_uni(SIG_ENTITY *sig,void *msg) { SOCKET *curr; unsigned long call_ref; unsigned char mid; call_ref = q_fetch(&in_dsc,QF_call_ref)^0x800000; mid = q_fetch(&in_dsc,QF_msg_type); if (mid == ATM_MSG_REST_ACK) return; if (mid == ATM_MSG_RESTART) { /* 5.5.5.2 */ int rst_class; rst_class = q_fetch(&in_dsc,QF_rst_class); switch (rst_class) { case ATM_RST_IND_VC: { int vpi,vci; if (!q_present(&in_dsc,QG_conn_id)) { send_status(sig,NULL,call_ref,ATM_CV_MAND_IE_MISSING, ATM_IE_CONN_ID); return; } vpi = q_fetch(&in_dsc,QF_vpi); vci = q_fetch(&in_dsc,QF_vci); for (curr = sockets; curr; curr = curr->next) if (curr->sig == sig && curr->pvc.sap_addr.vpi == vpi && curr->pvc.sap_addr.vci == vci) break; if (!curr) { send_status(sig,NULL,call_ref,ATM_CV_INVALID_IE, ATM_IE_CONN_ID); return; } uni_call(curr,mid); send_restart_ack(sig,call_ref,vpi,vci); } break; case ATM_RST_ALL_VC: clear_all_calls(sig); send_restart_ack(sig,call_ref,0,0); break; default: send_status(sig,NULL,call_ref,ATM_CV_INVALID_IE,ATM_IE_RESTART); } return; } if (!(call_ref & 0x7fffff)) { diag(COMPONENT,DIAG_ERROR,"unrecognized global call ref"); return; } for (curr = sockets; curr; curr = curr->next) if (curr->sig == sig && curr->call_ref == call_ref) break; diag(COMPONENT,DIAG_DEBUG,"FROM SAAL %d.%d.%d: %s (0x%02X) CR 0x%06lx for " "%s",S_PVC(sig),mid2name(((unsigned char *) msg)[5]), ((unsigned char *) msg)[5],call_ref,curr ? kptr_print(&curr->id) : "?"); if (mid == ATM_MSG_SETUP) { if (!curr) setup_call(sig,call_ref); return; } if (mid == ATM_MSG_STATUS_ENQ) { send_status(sig,curr,call_ref,ATM_CV_RESP_STAT_ENQ); return; } if (curr && q_present(&in_dsc,QF_ep_ref) && mid != ATM_MSG_ADD_PARTY && mid != ATM_MSG_DROP_PARTY_ACK) { unsigned short ep_ref; ep_ref = cvt_ep_ref(sig,q_fetch(&in_dsc,QF_ep_ref)); if (curr->ep_ref != ep_ref) { send_drop_party_ack(sig,call_ref,ep_ref,ATM_CV_INV_EPR); return; } } if (!curr || curr->call_state == cs_null) { if (mid == ATM_MSG_REL_COMP) return; if (mid != ATM_MSG_STATUS) send_release_complete(sig,call_ref,ATM_CV_INV_CR); else if (q_fetch(&in_dsc,QF_call_state) != (int) cs_null) send_release_complete(sig,call_ref,ATM_CV_INCOMP_MSG); return; } uni_call(curr,mid); }