#include "./include/inc.h" #include "./include/var_ext.h" BiccMsg_union msg_union[BICC_MAX_PORT]; //static up_message_2 up_msg; extern void apm_decode(ApmUser_struct *ptr, const u8 *flw_ptr, u8 length); extern u32 apm_encode(u8 *flw_ptr, const ApmUser_struct *ptr); extern void bicc_prm2msg(BiccMsg_union *msg_ptr, BiccWritePrim_union *prm_ptr, u8 msg_type); void bicc_decode_app(AppTrans_struct *ptr, const u8 *flw_ptr, u8 length) { int i = 0; ptr->pres = 1; ptr->aci[0] = flw_ptr[i]; if((flw_ptr[i++] >> 7) == 0) ptr->aci[1] = flw_ptr[i++]; ptr->sni = (flw_ptr[i] >> 1) & 0x01; ptr->rci = flw_ptr[i++] & 0x01; ptr->si = (flw_ptr[i] >> 6) & 0x01; ptr->segment = flw_ptr[i] & 0x3f; if((flw_ptr[i++] >> 7) == 0) ptr->slr = flw_ptr[i++] & 0x7f; if(length > i) apm_decode(&ptr->apm_info, flw_ptr+i, length-i); } u32 bicc_encode_app(u8 *flw_ptr, const AppTrans_struct *ptr) { int i = 0; flw_ptr[i++] = ptr->aci[0] | 0x80; // if((ptr->aci[0] >> 7) == 0) // flw_ptr[i++] = ptr->aci[1]; flw_ptr[i++] = (ptr->sni << 1) + ptr->rci; flw_ptr[i++] = ((ptr->si << 6) + ptr->segment) | 0x80; return i + apm_encode(flw_ptr+i, &ptr->apm_info); } void bicc_decode_backcall(BackCallInd_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val[0] = flw_ptr[0]; ptr->val[1] = flw_ptr[1]; } u32 bicc_encode_backcall(u8 *flw_ptr, const BackCallInd_struct *ptr) { flw_ptr[0] = ptr->val[0]; flw_ptr[1] = ptr->val[1]; return 2; } void bicc_decode_calledptynum(CalledPtyNum_struct *ptr, const u8 *flw_ptr, u8 length) { u32 i, j; u8 num_len; const u8 *num_ptr; if(length <= 2) return; ptr->pres = 1; ptr->nai = flw_ptr[0] & 0x7f; ptr->inn = flw_ptr[1] >> 7; ptr->npi = (flw_ptr[1] >> 4) & 0x07; num_len = length - 2; num_ptr = flw_ptr + 2; for(i = 0, j = 0; i < num_len; i++) { ptr->digit[j++] = num_ptr[i] & 0x0f; ptr->digit[j++] = num_ptr[i] >> 4; } if((flw_ptr[0] >> 7) && (j > 0)) j--; ptr->numOfDigit = j; } u32 bicc_encode_calledptynum(u8 *flw_ptr, const CalledPtyNum_struct *ptr) { u32 i, j; u8 num_len; u8 *num_ptr; num_len = ptr->numOfDigit/2 + (ptr->numOfDigit & 0x01); num_ptr = flw_ptr + 2; flw_ptr[0] = (ptr->numOfDigit << 7) + ptr->nai; flw_ptr[1] = ((ptr->inn << 7) + (ptr->npi << 4)) & 0xf0; for(i = 0, j = 0; i < num_len; i++) { num_ptr[i] = ptr->digit[j++] & 0x0f; num_ptr[i] += ptr->digit[j++] << 4; } if(ptr->numOfDigit & 0x01) num_ptr[i] &= 0x0f; return num_len + 2; } void bicc_decode_callingptynum(CallingPtyNum_struct *ptr, const u8 *flw_ptr, u8 length) { u32 i, j; u8 num_len; const u8 *num_ptr; if(length <= 2) return; ptr->pres = 1; ptr->nai = flw_ptr[0] & 0x7f; ptr->ni = flw_ptr[1] >> 7; ptr->npi = (flw_ptr[1] >> 4) & 0x07; ptr->apri = (flw_ptr[1] >> 2) & 0x03; ptr->si = flw_ptr[1] & 0x03; num_len = length - 2; num_ptr = flw_ptr + 2; for(i = 0, j = 0; i < num_len; i++) { ptr->digit[j++] = num_ptr[i] & 0x0f; ptr->digit[j++] = num_ptr[i] >> 4; } if((flw_ptr[0] >> 7) && (j > 0)) j--; ptr->numOfDigit = j; } u32 bicc_encode_callingptynum(u8 *flw_ptr, const CallingPtyNum_struct *ptr) { u32 i, j; u8 num_len; u8 *num_ptr; num_len = ptr->numOfDigit/2 + (ptr->numOfDigit & 0x01); num_ptr = flw_ptr + 2; flw_ptr[0] = (ptr->numOfDigit << 7) + ptr->nai; flw_ptr[1] = (ptr->ni << 7) + (ptr->npi << 4) + (ptr->apri << 2) + ptr->si; for(i = 0, j = 0; i < num_len; i++) { num_ptr[i] = ptr->digit[j++] & 0x0f; num_ptr[i] += ptr->digit[j++] << 4; } if(ptr->numOfDigit & 0x01) num_ptr[i] &= 0x0f; return num_len + 2; } void bicc_decode_callingptycat(CallingPtyCat_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_callingptycat(u8 *flw_ptr, const CallingPtyCat_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } u32 bicc_encode_cause(u8 *flw_ptr, const CauseInd_struct *ptr) { flw_ptr[0] = ((ptr->codingStd << 5) + ptr->location) & 0x7f; flw_ptr[1] = 0x80 | ptr->causeVal; return 2; } void bicc_decode_cause(CauseInd_struct *ptr, const u8 *flw_ptr, u8 length) { ptr->pres = 1; ptr->codingStd = (flw_ptr[0] >> 5) & 0x03; ptr->location = flw_ptr[0] & 0x0f; ptr->causeVal = flw_ptr[1] & 0x7f; } void bicc_decode_cicgrpspv(CicGrpSpv_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_cicgrpspv(u8 *flw_ptr, const CicGrpSpv_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } void bicc_decode_collectcallreq(CollectCallReq_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_collectcallreq(u8 *flw_ptr, const CollectCallReq_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } void bicc_decode_conftreat(ConfTreatInd_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_conftreat(u8 *flw_ptr, const ConfTreatInd_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } void bicc_decode_connnum(ConnNum_struct *ptr, const u8 *flw_ptr, u8 length) { u32 i, j; u8 num_len; const u8 *num_ptr; if(length <= 2) return; ptr->pres = 1; ptr->nai = flw_ptr[0] & 0x7f; ptr->npi = (flw_ptr[1] >> 4) & 0x07; ptr->apri = (flw_ptr[1] >> 2) & 0x03; ptr->si = flw_ptr[1] & 0x03; num_len = length - 2; num_ptr = flw_ptr + 2; for(i = 0, j = 0; i < num_len; i++) { ptr->digit[j++] = num_ptr[i] & 0x0f; ptr->digit[j++] = num_ptr[i] >> 4; } if((flw_ptr[0] >> 7) && (j > 0)) j--; ptr->numOfDigit = j; } u32 bicc_encode_connnum(u8 *flw_ptr, const ConnNum_struct *ptr) { u32 i, j; u8 num_len; u8 *num_ptr; num_len = ptr->numOfDigit/2 + (ptr->numOfDigit & 0x01); num_ptr = flw_ptr + 2; flw_ptr[0] = (ptr->numOfDigit << 7) + ptr->nai; flw_ptr[1] = ((ptr->npi << 4) + (ptr->apri << 2) + ptr->si) & 0x7f; for(i = 0, j = 0; i < num_len; i++) { num_ptr[i] = ptr->digit[j++] & 0x0f; num_ptr[i] += ptr->digit[j++] << 4; } if(ptr->numOfDigit & 0x01) num_ptr[i] &= 0x0f; return num_len + 2; } void bicc_decode_genericnumber(GenericNumber_struct *ptr, const u8 *flw_ptr, u8 length) { u32 i, j; u8 num_len; const u8 *num_ptr; if(length <= 3) return; ptr->pres = 1; ptr->nqi = flw_ptr[0]; ptr->nai = flw_ptr[1] & 0x7f; ptr->ni = flw_ptr[2] >> 7; ptr->npi = (flw_ptr[2] >> 4) & 0x07; ptr->apri = (flw_ptr[2] >> 2) & 0x03; ptr->si = flw_ptr[2] & 0x03; num_len = length - 3; num_ptr = flw_ptr + 3; for(i = 0, j = 0; i < num_len; i++) { ptr->digit[j++] = num_ptr[i] & 0x0f; ptr->digit[j++] = num_ptr[i] >> 4; } if((flw_ptr[1] >> 7) && (j > 0)) j--; ptr->numOfDigit = j; } void bicc_decode_genericDigits(GenericDigits_struct *ptr, const u8 *flw_ptr, u8 length) { u8 num_len; int i, j; const u8 *num_ptr; if(length < 3) return; ptr->pres = 1; ptr->typeOfDigits = flw_ptr[0] & 0x1f; ptr->encodeScheme = flw_ptr[0] & 0xE0; num_len = length - 2; num_ptr = flw_ptr + 2; for(i = 0, j = 0; i < num_len; i++) { ptr->digits[j++] = num_ptr[i] & 0x0f; ptr->digits[j++] = num_ptr[i] >> 4; } if((flw_ptr[0] >> 5) && (j > 0)) j--; ptr->numOfDigit = j; } void bicc_decode_correlationid(CorrelationId_struct *ptr, const u8 *flw_ptr, u8 length) { bicc_decode_genericDigits(ptr, flw_ptr, length); } u32 bicc_encode_genericnumber(u8 *flw_ptr, const GenericNumber_struct *ptr) { u32 i, j; u8 num_len; u8 *num_ptr; num_len = ptr->numOfDigit/2 + (ptr->numOfDigit & 0x01); num_ptr = flw_ptr + 3; flw_ptr[0] = ptr->nqi; flw_ptr[1] = (ptr->numOfDigit << 7) + ptr->nai; flw_ptr[2] = (ptr->ni << 7) + (ptr->npi << 4) + (ptr->apri << 2) + ptr->si; for(i = 0, j = 0; i < num_len; i++) { num_ptr[i] = ptr->digit[j++] & 0x0f; num_ptr[i] += ptr->digit[j++] << 4; } if(ptr->numOfDigit & 0x01) num_ptr[i] &= 0x0f; return num_len + 3; } u32 bicc_encode_genericDigits(u8 *flw_ptr, const GenericDigits_struct *ptr) { u32 i, j; u8 num_len; u8 *num_ptr; num_ptr = flw_ptr + 1; flw_ptr[0] = (ptr->encodeScheme << 5) + ptr->typeOfDigits; flw_ptr[1] = ptr->numOfDigit & 0xff; num_len = ptr->numOfDigit/2 + (ptr->numOfDigit & 0x01); for(i = 0, j = 0; i < num_len; i++) { num_ptr[i] = ptr->digits[j++] & 0x0f; num_ptr[i] += ptr->digits[j++] << 4; } if(ptr->numOfDigit & 0x01) num_ptr[i] &= 0x0f; return num_len + 2; } u32 bicc_encode_correlationid(u8 *flw_ptr, const CorrelationId_struct *ptr) { return bicc_encode_genericDigits(flw_ptr, ptr); } void bicc_decode_eventinfo(EventInfo_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_eventinfo(u8 *flw_ptr, const EventInfo_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } void bicc_decode_fwdcall(FwdCallInd_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val[0] = flw_ptr[0]; ptr->val[1] = flw_ptr[1]; } u32 bicc_encode_fwdcall(u8 *flw_ptr, const FwdCallInd_struct *ptr) { flw_ptr[0] = ptr->val[0]; flw_ptr[1] = ptr->val[1]; return 2; } void bicc_decode_natconn(NatConnInd_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_natconn(u8 *flw_ptr, const NatConnInd_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } void bicc_decode_origcallednum(OrigCalledNum_struct *ptr, const u8 *flw_ptr, u8 length) { u32 i, j; u8 num_len; const u8 *num_ptr; if(length <= 2) return; ptr->pres = 1; ptr->nai = flw_ptr[0] & 0x7f; ptr->npi = (flw_ptr[1] >> 4) & 0x07; ptr->apri = (flw_ptr[1] >> 2) & 0x03; num_len = length - 2; num_ptr = flw_ptr + 2; for(i = 0, j = 0; i < num_len; i++) { ptr->digit[j++] = num_ptr[i] & 0x0f; ptr->digit[j++] = num_ptr[i] >> 4; } if((flw_ptr[0] >> 7) && (j > 0)) j--; ptr->numOfDigit = j; } u32 bicc_encode_origcallednum(u8 *flw_ptr, const OrigCalledNum_struct *ptr) { u32 i, j; u8 num_len; u8 *num_ptr; num_len = ptr->numOfDigit/2 + (ptr->numOfDigit & 0x01); num_ptr = flw_ptr + 2; flw_ptr[0] = (ptr->numOfDigit << 7) + ptr->nai; flw_ptr[1] = ((ptr->npi << 4) + (ptr->apri << 2)) & 0x7c; for(i = 0, j = 0; i < num_len; i++) { num_ptr[i] = ptr->digit[j++] & 0x0f; num_ptr[i] += ptr->digit[j++] << 4; } if(ptr->numOfDigit & 0x01) num_ptr[i] &= 0x0f; return num_len + 2; } void bicc_decode_rangestatus(RangeStatus_struct *ptr, const u8 *flw_ptr, u8 length, u8 need_status) { u8 status_len; ptr->pres = 1; ptr->range = flw_ptr[0]; if(need_status == 1) { status_len = (((flw_ptr[0]+1)&0x07) == 0)? ((flw_ptr[0]+1)>>3) : (((flw_ptr[0]+1)>>3) + 1); memcpy(ptr->status, flw_ptr+1, status_len); } } u32 bicc_encode_rangestatus(u8 *flw_ptr, const RangeStatus_struct *ptr, u8 need_status) { u8 status_len; flw_ptr[0] = ptr->range; if(need_status == 1) { status_len = (((ptr->range+1)&0x07) == 0)? ((ptr->range+1)>>3) : (((ptr->range+1)>>3) + 1); memcpy(flw_ptr+1, ptr->status, status_len); } else status_len = 0; return status_len + 1; } void bicc_decode_redirgnum(RedirgNum_struct *ptr, const u8 *flw_ptr, u8 length) { u32 i, j; u8 num_len; const u8 *num_ptr; if(length <= 2) return; ptr->pres = 1; ptr->nai = flw_ptr[0] & 0x7f; ptr->npi = (flw_ptr[1] >> 4) & 0x07; ptr->apri = (flw_ptr[1] >> 2) & 0x03; num_len = length - 2; num_ptr = flw_ptr + 2; for(i = 0, j = 0; i < num_len; i++) { ptr->digit[j++] = num_ptr[i] & 0x0f; ptr->digit[j++] = num_ptr[i] >> 4; } if((flw_ptr[0] >> 7) && (j > 0)) j--; ptr->numOfDigit = j; } void bicc_decode_redirinfo(RedirInfo_struct *ptr, u8 *flw_ptr, u8 length) { if(length <= 2) return; ptr->redInd = flw_ptr[0] & 0x07; ptr->origRedirReason = (flw_ptr[0] >> 4) & 0x0f; ptr->redirCounter = flw_ptr[1] & 0x07; ptr->redirReason = (flw_ptr[1] >> 4) & 0x0f; } u32 bicc_encode_redirgnum(u8 *flw_ptr, const RedirgNum_struct *ptr) { u32 i, j; u8 num_len; u8 *num_ptr; num_len = ptr->numOfDigit/2 + (ptr->numOfDigit & 0x01); num_ptr = flw_ptr + 2; flw_ptr[0] = (ptr->numOfDigit << 7) + ptr->nai; flw_ptr[1] = ((ptr->npi << 4) + (ptr->apri << 2)) & 0x7c; for(i = 0, j = 0; i < num_len; i++) { num_ptr[i] = ptr->digit[j++] & 0x0f; num_ptr[i] += ptr->digit[j++] << 4; } if(ptr->numOfDigit & 0x01) num_ptr[i] &= 0x0f; return num_len + 2; } u32 bicc_encode_redirinfo(u8 *flw_ptr, const RedirInfo_struct *ptr) { flw_ptr[0] = (ptr->origRedirReason << 4) + ptr->redInd; flw_ptr[1] = (ptr->redirReason << 4) + ptr->redirCounter; return 2; } void bicc_decode_scfid(ScfId_struct *ptr, const u8 *flw_ptr, u8 length) { bicc_decode_genericDigits(ptr, flw_ptr, length); } u32 bicc_encode_scfid(u8 *flw_ptr, const ScfId_struct *ptr) { return bicc_encode_genericDigits(flw_ptr, ptr); } void bicc_decode_subseqnum(SubseqNum_struct *ptr, const u8 *flw_ptr, u8 length) { u32 i, j; u8 num_len; const u8 *num_ptr; if(length <= 1) return; ptr->pres = 1; num_len = length - 1; num_ptr = flw_ptr + 1; for(i = 0, j = 0; i < num_len; i++) { ptr->digit[j++] = num_ptr[i] & 0x0f; ptr->digit[j++] = num_ptr[i] >> 4; } if((flw_ptr[0] >> 7) && (j > 0)) j--; ptr->numOfDigit = j; } u32 bicc_encode_subseqnum(u8 *flw_ptr, const SubseqNum_struct *ptr) { u32 i, j; u8 num_len; u8 *num_ptr; num_len = ptr->numOfDigit/2 + (ptr->numOfDigit & 0x01); num_ptr = flw_ptr + 1; flw_ptr[0] = (ptr->numOfDigit & 0x01) << 7; for(i = 0, j = 0; i < num_len; i++) { num_ptr[i] = ptr->digit[j++] & 0x0f; num_ptr[i] += ptr->digit[j++] << 4; } if(ptr->numOfDigit & 0x01) num_ptr[i] &= 0x0f; return num_len + 2; } void bicc_decode_susres(SusResInd_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_susres(u8 *flw_ptr, const SusResInd_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } void bicc_decode_transmedreq(TransMedReq_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_transmedreq(u8 *flw_ptr, const TransMedReq_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } void bicc_decode_utuind(UserToUserInd_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->val = *flw_ptr; } u32 bicc_encode_utuind(u8 *flw_ptr, const UserToUserInd_struct *ptr) { flw_ptr[0] = ptr->val; return 1; } void bicc_decode_utuinfo(UserToUserInfo_struct *ptr, const u8 *flw_ptr, u8 length) { if((length == 0) || (length > 129)) return; ptr->pres = 1; ptr->len = length; memcpy(ptr->val, flw_ptr, length); } u32 bicc_encode_utuinfo(u8 *flw_ptr, const UserToUserInfo_struct *ptr) { memcpy(flw_ptr, ptr->val, ptr->len); return ptr->len; } void bicc_decode_calldiverinfo(CallDiverInfo_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->notifSubsOption = flw_ptr[0]&0x07; ptr->redirReason = (flw_ptr[0]>>3)&0x0f; } u32 bicc_encode_calldiverinfo(u8 *flw_ptr, const CallDiverInfo_struct *ptr) { flw_ptr[0] = ((ptr->redirReason)<<3) + (ptr->notifSubsOption); return 1; } void bicc_decode_optBackCallInd(OptBackCallInd_struct *ptr, const u8 *flw_ptr) { ptr->pres = 1; ptr->inbandInfoInd = flw_ptr[0]&0x01; ptr->callDiverOccurInd = flw_ptr[0]&0x02; ptr->simpSegmInd = flw_ptr[0]&0x04; ptr->mlppUserInd = flw_ptr[0]&0x08; } u32 bicc_encode_optBackCallInd(u8 *flw_ptr, const OptBackCallInd_struct *ptr) { flw_ptr[0] = (((ptr->mlppUserInd)<<3)+((ptr->simpSegmInd)<<2)+((ptr->callDiverOccurInd<<1))+(ptr->inbandInfoInd))&0x0f; return 1; } void bicc_send_acm(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccAcm_struct *acm_ptr = &msg_union[pid].acm; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_ACM); *(flw_ptr++) = M_ACM; flw_ptr += bicc_encode_backcall(flw_ptr, &acm_ptr->backCall); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 0; if(acm_ptr->app.pres == 1) { flw_ptr[0] = P_APPTRANS; flw_ptr[1] = bicc_encode_app(flw_ptr+2, &acm_ptr->app); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(acm_ptr->cause.pres == 1) { flw_ptr[0] = P_CAUSEIND; flw_ptr[1] = bicc_encode_cause(flw_ptr+2, &acm_ptr->cause); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(acm_ptr->confTreat.pres == 1) { flw_ptr[0] = P_CONFTREATIND; flw_ptr[1] = bicc_encode_conftreat(flw_ptr+2, &acm_ptr->confTreat); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(acm_ptr->optBackCall.pres == 1) { flw_ptr[0] = P_OPTBACKCALLIND; flw_ptr[1] = bicc_encode_optBackCallInd(flw_ptr+2, &acm_ptr->optBackCall); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(acm_ptr->utuInd.pres == 1) { flw_ptr[0] = P_UTUIND; flw_ptr[1] = bicc_encode_utuind(flw_ptr+2, &acm_ptr->utuInd); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(acm_ptr->utuInfo.pres == 1) { flw_ptr[0] = P_UTUINFO; flw_ptr[1] = bicc_encode_utuinfo(flw_ptr+2, &acm_ptr->utuInfo); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_anm(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccAnm_struct *anm_ptr = &msg_union[pid].anm; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_ANM); *(flw_ptr++) = M_ANM; pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 0; if(anm_ptr->app.pres == 1) { flw_ptr[0] = P_APPTRANS; flw_ptr[1] = bicc_encode_app(flw_ptr+2, &anm_ptr->app); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(anm_ptr->backCall.pres == 1) { flw_ptr[0] = P_BACKCALLIND; flw_ptr[1] = bicc_encode_backcall(flw_ptr+2, &anm_ptr->backCall); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(anm_ptr->confTreat.pres == 1) { flw_ptr[0] = P_CONFTREATIND; flw_ptr[1] = bicc_encode_conftreat(flw_ptr+2, &anm_ptr->confTreat); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(anm_ptr->connNum.pres == 1) { flw_ptr[0] = P_CONNNUM; flw_ptr[1] = bicc_encode_connnum(flw_ptr+2, &anm_ptr->connNum); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(anm_ptr->utuInd.pres == 1) { flw_ptr[0] = P_UTUIND; flw_ptr[1] = bicc_encode_utuind(flw_ptr+2, &anm_ptr->utuInd); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(anm_ptr->utuInfo.pres == 1) { flw_ptr[0] = P_UTUINFO; flw_ptr[1] = bicc_encode_utuinfo(flw_ptr+2, &anm_ptr->utuInfo); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_apm(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccApm_struct *apm_ptr = &msg_union[pid].apm; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_APM); *(flw_ptr++) = M_APM; pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 0; if(apm_ptr->app.pres == 1) { flw_ptr[0] = P_APPTRANS; flw_ptr[1] = bicc_encode_app(flw_ptr+2, &apm_ptr->app); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_cpg(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccCpg_struct *cpg_ptr = &msg_union[pid].cpg; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_CPG); *(flw_ptr++) = M_CPG; flw_ptr += bicc_encode_eventinfo(flw_ptr, &cpg_ptr->eventInfo); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 0; if(cpg_ptr->app.pres == 1) { flw_ptr[0] = P_APPTRANS; flw_ptr[1] = bicc_encode_app(flw_ptr+2, &cpg_ptr->app); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(cpg_ptr->backCall.pres == 1) { flw_ptr[0] = P_BACKCALLIND; flw_ptr[1] = bicc_encode_backcall(flw_ptr+2, &cpg_ptr->backCall); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(cpg_ptr->calldiver.pres == 1) { flw_ptr[0] = P_CALLDIVERINFO; flw_ptr[1] = bicc_encode_calldiverinfo(flw_ptr+2, &cpg_ptr->calldiver); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(cpg_ptr->cause.pres == 1) { flw_ptr[0] = P_CAUSEIND; flw_ptr[1] = bicc_encode_cause(flw_ptr+2, &cpg_ptr->cause); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(cpg_ptr->confTreat.pres == 1) { flw_ptr[0] = P_CONFTREATIND; flw_ptr[1] = bicc_encode_conftreat(flw_ptr+2, &cpg_ptr->confTreat); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(cpg_ptr->connNum.pres == 1) { flw_ptr[0] = P_CONNNUM; flw_ptr[1] = bicc_encode_connnum(flw_ptr+2, &cpg_ptr->connNum); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(cpg_ptr->utuInd.pres == 1) { flw_ptr[0] = P_UTUIND; flw_ptr[1] = bicc_encode_utuind(flw_ptr+2, &cpg_ptr->utuInd); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(cpg_ptr->utuInfo.pres == 1) { flw_ptr[0] = P_UTUINFO; flw_ptr[1] = bicc_encode_utuinfo(flw_ptr+2, &cpg_ptr->utuInfo); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_cgb(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccCgb_struct *cgb_ptr = &msg_union[pid].cgb; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_CGB); *(flw_ptr++) = M_CGB; flw_ptr += bicc_encode_cicgrpspv(flw_ptr, &cgb_ptr->cicGrpSpv); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 1; flw_ptr[0] = bicc_encode_rangestatus(flw_ptr+1, &cgb_ptr->rangeStatus, 1); flw_ptr += flw_ptr[0] + 1; port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_cgba(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccCgba_struct *cgba_ptr = &msg_union[pid].cgba; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_CGBA); *(flw_ptr++) = M_CGBA; flw_ptr += bicc_encode_cicgrpspv(flw_ptr, &cgba_ptr->cicGrpSpv); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 1; flw_ptr[0] = bicc_encode_rangestatus(flw_ptr+1, &cgba_ptr->rangeStatus, 1); flw_ptr += flw_ptr[0] + 1; port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_cgu(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccCgu_struct *cgu_ptr = &msg_union[pid].cgu; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_CGU); *(flw_ptr++) = M_CGU; flw_ptr += bicc_encode_cicgrpspv(flw_ptr, &cgu_ptr->cicGrpSpv); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 1; flw_ptr[0] = bicc_encode_rangestatus(flw_ptr+1, &cgu_ptr->rangeStatus, 1); flw_ptr += flw_ptr[0] + 1; port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_cgua(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccCgua_struct *cgua_ptr = &msg_union[pid].cgua; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_CGUA); *(flw_ptr++) = M_CGUA; flw_ptr += bicc_encode_cicgrpspv(flw_ptr, &cgua_ptr->cicGrpSpv); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 1; flw_ptr[0] = bicc_encode_rangestatus(flw_ptr+1, &cgua_ptr->rangeStatus, 1); flw_ptr += flw_ptr[0] + 1; port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_grs(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccGrs_struct *grs_ptr = &msg_union[pid].grs; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_GRS); *(flw_ptr++) = M_GRS; pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 1; flw_ptr[0] = bicc_encode_rangestatus(flw_ptr+1, &grs_ptr->rangeStatus, 0); flw_ptr += flw_ptr[0] + 1; port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_gra(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccGra_struct *gra_ptr = &msg_union[pid].gra; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_GRA); *(flw_ptr++) = M_GRA; pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 1; flw_ptr[0] = bicc_encode_rangestatus(flw_ptr+1, &gra_ptr->rangeStatus, 1); flw_ptr += flw_ptr[0] + 1; port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_con(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccCon_struct *con_ptr = &msg_union[pid].con; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_CON); *(flw_ptr++) = M_CON; flw_ptr += bicc_encode_backcall(flw_ptr, &con_ptr->backCall); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 0; if(con_ptr->app.pres == 1) { flw_ptr[0] = P_APPTRANS; flw_ptr[1] = bicc_encode_app(flw_ptr+2, &con_ptr->app); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(con_ptr->confTreat.pres == 1) { flw_ptr[0] = P_CONFTREATIND; flw_ptr[1] = bicc_encode_conftreat(flw_ptr+2, &con_ptr->confTreat); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(con_ptr->connNum.pres == 1) { flw_ptr[0] = P_CONNNUM; flw_ptr[1] = bicc_encode_connnum(flw_ptr+2, &con_ptr->connNum); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(con_ptr->utuInd.pres == 1) { flw_ptr[0] = P_UTUIND; flw_ptr[1] = bicc_encode_utuind(flw_ptr+2, &con_ptr->utuInd); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(con_ptr->utuInfo.pres == 1) { flw_ptr[0] = P_UTUINFO; flw_ptr[1] = bicc_encode_utuinfo(flw_ptr+2, &con_ptr->utuInfo); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_iam(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccIam_struct *iam_ptr = &msg_union[pid].iam; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; u8 opt_pointer; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_IAM); *(flw_ptr++) = M_IAM; flw_ptr += bicc_encode_natconn(flw_ptr, &iam_ptr->natConn); flw_ptr += bicc_encode_fwdcall(flw_ptr, &iam_ptr->fwdCall); flw_ptr += bicc_encode_callingptycat(flw_ptr, &iam_ptr->callingPtyCat); flw_ptr += bicc_encode_transmedreq(flw_ptr, &iam_ptr->transMedReq); pointer_ptr = flw_ptr; flw_ptr += 2; *(pointer_ptr++) = 2; *pointer_ptr = 0; flw_ptr[0] = bicc_encode_calledptynum(flw_ptr+1, &iam_ptr->calledPtyNum); opt_pointer = flw_ptr[0] + 2; flw_ptr += flw_ptr[0] + 1; if(iam_ptr->app.pres == 1) { flw_ptr[0] = P_APPTRANS; flw_ptr[1] = bicc_encode_app(flw_ptr+2, &iam_ptr->app); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->callingPtyNum.pres == 1) { flw_ptr[0] = P_CALLINGPTYNUM; flw_ptr[1] = bicc_encode_callingptynum(flw_ptr+2, &iam_ptr->callingPtyNum); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->collectCallReq.pres == 1) { flw_ptr[0] = P_COLLECTCALLREQ; flw_ptr[1] = bicc_encode_collectcallreq(flw_ptr+2, &iam_ptr->collectCallReq); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->confTreat.pres == 1) { flw_ptr[0] = P_CONFTREATIND; flw_ptr[1] = bicc_encode_conftreat(flw_ptr+2, &iam_ptr->confTreat); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->correlationId.pres == 1) { flw_ptr[0] = P_CORRELATIONID; flw_ptr[1] = bicc_encode_correlationid(flw_ptr+2, &iam_ptr->correlationId); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->origCalledNum.pres == 1) { flw_ptr[0] = P_ORIGCALLEDNUM; flw_ptr[1] = bicc_encode_origcallednum(flw_ptr+2, &iam_ptr->origCalledNum); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->redirgNum.pres == 1) { flw_ptr[0] = P_REDIRGNUM; flw_ptr[1] = bicc_encode_redirgnum(flw_ptr+2, &iam_ptr->redirgNum); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->redirInfo.pres == 1) { flw_ptr[0] = P_REDIRINFO; flw_ptr[1] = bicc_encode_redirinfo(flw_ptr+2, &iam_ptr->redirInfo); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->scfId.pres == 1) { flw_ptr[0] = P_SCFID; flw_ptr[1] = bicc_encode_scfid(flw_ptr+2, &iam_ptr->scfId); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->utuInd.pres == 1) { flw_ptr[0] = P_UTUIND; flw_ptr[1] = bicc_encode_utuind(flw_ptr+2, &iam_ptr->utuInd); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(iam_ptr->utuInfo.pres == 1) { flw_ptr[0] = P_UTUINFO; flw_ptr[1] = bicc_encode_utuinfo(flw_ptr+2, &iam_ptr->utuInfo); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_rel(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccRel_struct *rel_ptr = &msg_union[pid].rel; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; u8 opt_pointer; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_REL); *(flw_ptr++) = M_REL; pointer_ptr = flw_ptr; flw_ptr += 2; *(pointer_ptr++) = 2; *pointer_ptr = 0; flw_ptr[0] = bicc_encode_cause(flw_ptr+1, &rel_ptr->cause); opt_pointer = flw_ptr[0] + 2; flw_ptr += flw_ptr[0] + 1; if(rel_ptr->utuInd.pres == 1) { flw_ptr[0] = P_UTUIND; flw_ptr[1] = bicc_encode_utuind(flw_ptr+2, &rel_ptr->utuInd); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(rel_ptr->utuInfo.pres == 1) { flw_ptr[0] = P_UTUINFO; flw_ptr[1] = bicc_encode_utuinfo(flw_ptr+2, &rel_ptr->utuInfo); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = opt_pointer; } if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_rlc(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccRlc_struct *rlc_ptr = &msg_union[pid].rlc; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_RLC); *(flw_ptr++) = M_RLC; pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 0; if(rlc_ptr->cause.pres == 1) { flw_ptr[0] = P_CAUSEIND; flw_ptr[1] = bicc_encode_cause(flw_ptr+2, &rlc_ptr->cause); flw_ptr += flw_ptr[1] + 2; *pointer_ptr = 1; } if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_rsc(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer *(flw_ptr++) = M_RSC; port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_res(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccRes_struct *res_ptr = &msg_union[pid].res; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_RES); *(flw_ptr++) = M_RES; flw_ptr += bicc_encode_susres(flw_ptr, &res_ptr->susRes); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 0; if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_sus(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccSus_struct *sus_ptr = &msg_union[pid].sus; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_SUS); *(flw_ptr++) = M_SUS; flw_ptr += bicc_encode_susres(flw_ptr, &sus_ptr->susRes); pointer_ptr = flw_ptr; flw_ptr++; *pointer_ptr = 0; if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); } void bicc_send_sam(u32 pid) { BICC_Port_struct *port_ptr = &Bicc_Data.port_data[pid]; BiccSam_struct *sam_ptr = &msg_union[pid].sam; u8 *flw_ptr = port_ptr->s_mtp_msg.msgList; //message flow pointer u8 *pointer_ptr; bicc_prm2msg(&msg_union[pid], &writePrim_union[pid], M_SAM); *(flw_ptr++) = M_SAM; pointer_ptr = flw_ptr; flw_ptr += 2; *(pointer_ptr++) = 2; *pointer_ptr = 0; flw_ptr[0] = bicc_encode_subseqnum(flw_ptr+1, &sam_ptr->subseqNum); flw_ptr += flw_ptr[0] + 1; if(*pointer_ptr != 0) *(flw_ptr++) = 0; //End of optional parameters port_ptr->s_mtp_msg.len = flw_ptr - port_ptr->s_mtp_msg.msgList; BICC_msdc_proc(pid, &(port_ptr->s_mtp_msg)); }