📄 mn80pub3.c
字号:
SYS_WORK->tsk_id = TASKRT;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = ERT;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRRTOPT;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr;
MN_OUT_EVT(L3_MN_EVT)->inf_len = MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2];
MN_OUT_EVT(L3_MN_EVT)->inf_adr =(U1*) &MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[3];
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
void Mn_PRTOptDsp(void) //RT->MN
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MRTOPMES;
SYS_WORK->msg_adr->msg[2] = (BYTE)((L3_MN_EVT*)SYS_WORK->in_evt)->inf_len;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[3] ,
MN_IN_EVT(L3_MN_EVT)->inf_adr,
MN_IN_EVT(L3_MN_EVT)->inf_len);
exec_uap(SYS_WORK->msg_adr);
if(MN_IN_EVT(L3_MN_EVT)->buf_adr)
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr);
}
void Mn_PCCOptReq(void) //Seems not to be called by other module
{
if( !MN_IN_EVT(PM_MN_EVT)->msg_adr)
{
ReaVal = PRIERR;
err_dsp( MN_IN_EVT(PM_MN_EVT)->msg_adr);
return;
}
set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKCC;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = ECC;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRCALOPT;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr;
MN_OUT_EVT(L3_MN_EVT)->inf_len = MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2];
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[3];
MN_OUT_EVT(L3_MN_EVT)->dmy3 = (BYTE)MN_IN_EVT(PM_MN_EVT)->add_dat;
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
void Mn_PCCOptDsp(void) //CC->MN
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MCCOPMES;
SYS_WORK->msg_adr->msg[2] = (BYTE)((L3_MN_EVT*)SYS_WORK->in_evt)->inf_len;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[3] ,
MN_IN_EVT(L3_MN_EVT)->inf_adr ,
MN_IN_EVT(L3_MN_EVT)->inf_len);
exec_uap(SYS_WORK->msg_adr);
if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr);
}
void Mn_PThruDsp(void) //CC->MN
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MTHRU;
SYS_WORK->msg_adr->msg[2] = (BYTE)MN_IN_EVT(L3_MN_EVT)->inf_len;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[3] ,
MN_IN_EVT(L3_MN_EVT)->inf_adr ,
MN_IN_EVT(L3_MN_EVT)->inf_len);
exec_uap(SYS_WORK->msg_adr);
if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr);
}
void Mn_RTFncSet(void) //RT - > MN , Indirectly called
{
U1 n, m;
U1 *pInf;
pInf = MN_IN_EVT(L3_MN_EVT)->inf_adr;
for(n=0 ; n<MN_IN_EVT(L3_MN_EVT)->inf_len ; )
{
if(pInf[n] & 0x80) //single octet
{
switch(pInf[n] & 0xF0)
{
case IPSIDCON:
Sys_rtfunc[3] = pInf[n] & 0x01;
break;
case IZNINFIN:
Sys_rtfunc[7] = pInf[n] & 0x01;
break;
default:
break;
}
n++;
}
else
{
m = 0;
switch(pInf[n]) //multiple octet
{
case ICONREPF:
Sys_rtfunc[0] = pInf[n+1] & 0x01;
m = 2;
break;
case IENCKIND:
Sys_rtfunc[1] = pInf[n+1] & 0xFE;
Sys_rtfunc[2] = pInf[n+2] & 0xF0;
m = 3;
break;
case ITCHREA:
Sys_rtfunc[4] = pInf[n+1];
m = 2;
break;
case IYXPWINF:
Sys_rtfunc[5] = pInf[n+1] & 0x01;
m = 2;
break;
case IVOXINF:
Sys_rtfunc[6] = pInf[n+1];
m = 2;
break;
default:
break;
}
n += m;
}
}
}
void Mn_DLDsp(void)
{
if(!(DLEstab & (FACCH | SACCH)) && (RetryCount > 1))
{
return;
}
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MCDLST;
SYS_WORK->msg_adr->msg[2] = 0x02;
SYS_WORK->msg_adr->msg[3] = DL_REL_STAT;
SYS_WORK->msg_adr->msg[4] = DL_REL_STAT;
if (DLEstab & FACCH)
{
SYS_WORK->msg_adr->msg[4] = DL_SET_STAT;
}
if (DLEstab & SACCH)
{
SYS_WORK->msg_adr->msg[4] = DL_SET_STAT;
}
exec_uap(SYS_WORK->msg_adr);
}
void Mn_SCHEstDsp(void)
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MTCHEST;
SYS_WORK->msg_adr->msg[2] = 0x11;
SYS_WORK->msg_adr->msg[3] = IAREAINF;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[4] , SYS_AREA_P , 7);
SYS_WORK->msg_adr->msg[11] = IENCKIND;
SYS_WORK->msg_adr->msg[12] = Sys_rtfunc[1],
SYS_WORK->msg_adr->msg[13] = Sys_rtfunc[2];
SYS_WORK->msg_adr->msg[14] = ITCHREA;
SYS_WORK->msg_adr->msg[15] = Sys_rtfunc[4];
SYS_WORK->msg_adr->msg[16] = IYXPWINF;
SYS_WORK->msg_adr->msg[17] = Sys_rtfunc[5];
SYS_WORK->msg_adr->msg[18] = IVOXINF;
SYS_WORK->msg_adr->msg[19] = Sys_rtfunc[6];
exec_uap(SYS_WORK->msg_adr);
}
void Mn_TCHEndDsp(void)
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MTCHEND;
SYS_WORK->msg_adr->msg[2] = 0x16;
SYS_WORK->msg_adr->msg[3] = DL_REL_STAT;
SYS_WORK->msg_adr->msg[4] = DL_REL_STAT;
if (DLEstab & FACCH)
{
SYS_WORK->msg_adr->msg[3] = DL_SET_STAT;
}
if (DLEstab & SACCH)
{
SYS_WORK->msg_adr->msg[4] = DL_SET_STAT;
}
SYS_WORK->msg_adr->msg[5] = (TCHflg ? 0x00:0x01);
SYS_WORK->msg_adr->msg[7] = 0xFF;
SYS_WORK->msg_adr->msg[6] = 1;
SYS_WORK->msg_adr->msg[8] = IAREAINF;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[9] , SYS_AREA_P , 7);
SYS_WORK->msg_adr->msg[16] = IENCKIND;
SYS_WORK->msg_adr->msg[17] = Sys_rtfunc[1];
SYS_WORK->msg_adr->msg[18] = Sys_rtfunc[2];
SYS_WORK->msg_adr->msg[19] = ITCHREA;
SYS_WORK->msg_adr->msg[20] = Sys_rtfunc[4];
SYS_WORK->msg_adr->msg[21] = IYXPWINF;
SYS_WORK->msg_adr->msg[22] = Sys_rtfunc[5];
SYS_WORK->msg_adr->msg[23] = IVOXINF;
SYS_WORK->msg_adr->msg[24] = Sys_rtfunc[6];
exec_uap(SYS_WORK->msg_adr);
}
void Mn_BearCapaSet(U1 *ptr, U1 len)
{
while ( len )
{
if (*ptr & 0x80)
{
ptr++;
len--;
}
else
{
if (*ptr == IBEARCAP)
{
ptr++;
move_up_b(bear_capa, ptr, (WORD)(*ptr + 1) );
}
break;
}
}
}
void Mn_PMailUUISet(void) //Seems not to be called by other modules
{
M_MSB* pBuf;
if ((phs_mode == PHS_PUBLIC_STS) && (SYS_PARTNER == DDI_PBS))
{
if((p_mail_flg == 1) && (p_mail_cont == 0)
&& (p_mail_state == IUSRUSR) && (pmail_receive_req == 1))
{
MN_OUT_EVT(L3_MN_EVT)->buf_adr = m_hntbuf();
pBuf = (M_MSB*)MN_OUT_EVT(L3_MN_EVT)->buf_adr;
move_up_b((U1*)pBuf->msg , PMAILUUI , (WORD)(PMAILUUI[1] + 2 ));
MN_OUT_EVT(L3_MN_EVT)->inf_len = PMAILUUI[1]+2;
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)pBuf->msg;
}
else if(lap_uui_alert[0] != 0)
{
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (BYTE*)m_hntbuf();
pBuf = (M_MSB*)MN_OUT_EVT(L3_MN_EVT)->buf_adr;
pBuf->msg[0] = 0x7E;
move_up_b((U1*)&pBuf->msg[1] , lap_uui_alert , (WORD)(lap_uui_alert[0]+1));
MN_OUT_EVT(L3_MN_EVT)->inf_len = lap_uui_alert[0]+2;
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)pBuf->msg;
}
}
}
void Mn_PMailUUIUAPSet(void)
{
if ((phs_mode == PHS_PUBLIC_STS) && (SYS_PARTNER == DDI_PBS)
&& (p_mail_flg == 1) && (p_mail_cont == 0)
&& (p_mail_state == IUSRUSR) && (pmail_receive_req == 1))
{
SYS_WORK->msg_adr->msg[2] = PMAILUUI[1]+2;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[3] , PMAILUUI , (WORD)(PMAILUUI[1]+2) );
}
}
void Mn_Tch1RelReq(U1 rsn, U1 flg)
{
M_MSB *pBuf;
set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKCC;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = ECC;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRCALFRE;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = m_hntbuf();
pBuf = (M_MSB*)MN_OUT_EVT(L3_MN_EVT)->buf_adr;
pBuf->msg[0] = IREASON0;
pBuf->msg[1] = 0x03;
pBuf->msg[2] = 0x00;
pBuf->msg[3] = 0x85;
pBuf->msg[4] = (BIT8 | rsn);
MN_OUT_EVT(L3_MN_EVT)->inf_len = 0x05;
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)pBuf->msg;
MN_OUT_EVT(L3_MN_EVT)->add_dat = 1;
MN_OUT_EVT(L3_MN_EVT)->dmy3 = MN_IN_EVT(L3_MN_EVT)->dmy3;
m_excreq((WORD*)&SYS_WORK->tsk_id);
if ( flg == 1 )
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MFADLCOM;
SYS_WORK->msg_adr->msg[2] = 0x05;
SYS_WORK->msg_adr->msg[3] = IREASON0;
SYS_WORK->msg_adr->msg[4] = 0x03;
SYS_WORK->msg_adr->msg[5] = 0x00;
SYS_WORK->msg_adr->msg[6] = 0x85;
SYS_WORK->msg_adr->msg[7] = (BIT8 | rsn);
exec_uap(SYS_WORK->msg_adr);
}
*Mn_GetSpecState(phs_mode) = ST_PP_DISC_COMM;
#ifdef SIMU_ON_PC
if(PHS_PUBLIC_STS == phs_mode)
SendUart2L1( SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif
}
void Mn_LLCInfoSet(U1 *ptr, U1 len)
{
set_up_b(LLCInfo, 0, 17);
while ( len )
{
if (*ptr & 0x80)
{
ptr++;
len--;
}
else
{
if (*ptr == ILOLAYER)
{
ptr++;
move_up_b(LLCInfo, ptr, (WORD)(*ptr + 1) );
}
break;
}
}
}
//add by Qian Aidong for supporting Lucent network FEAL32 algorithm START
void Mm_FEAL32enc(U1 *AuthKey, U1 *Plain, U1 *Cipher) //add for supporting FEAL32 Encryption Algorith 2001-11-26
{
U1 K[FealN + 7 + 1][2],
L[2][4],
R[2][4],
Lblk[4], Rblk[4],
r, n;
Mn_FealExkey(AuthKey, K);
*(U4 *)Lblk = *(U4 *)Plain ^ *(U4 *)K[FealN];
*(U4 *)Rblk = *(U4 *)(Plain + 4) ^ *(U4 *)K[FealN + 2];
*(U4 *)L[0] = *(U4 *)Lblk ^ (U4)0;
*(U4 *)R[0] = *(U4 *)Rblk ^ *(U4 *)Lblk;
for (r = 0; r < FealN; r++) {
n = r % 2;
Mn_FealF(R[n], K[r], Lblk);
*(U4 *)R[n ? 0 : 1] = *(U4 *)L[n] ^ *(U4 *)Lblk;
*(U4 *)L[n ? 0 : 1] = *(U4 *)R[n];
}
*(U4 *)Rblk = *(U4 *)R[0] ^ (U4)0;
*(U4 *)Lblk = *(U4 *)L[0] ^ *(U4 *)R[0];
*(U4 *)Rblk = *(U4 *)Rblk ^ *(U4 *)K[FealN + 4];
*(U4 *)Lblk = *(U4 *)Lblk ^ *(U4 *)K[FealN + 6];
*(U4 *)Cipher = *(U4 *)Rblk;
*(U4 *)(Cipher + 4) = *(U4 *)Lblk;
}
void Mn_FealExkey(U1 *key,
U1 K[][2])
{
U1 A[2][4],
B[2][4],
D[2][4],
beta[4], r, n;
*(U4 *)D[0] = (U4)0;
*(U4 *)A[0] = *(U4 *)key;
*(U4 *)B[0] = *(U4 *)(key + 4);
for (r = 1; r <= (FealN / 2 + 4); r++) {
n = r % 2;
*(U4 *)D[n] = *(U4 *)A[n ? 0 : 1];
*(U4 *)A[n] = *(U4 *)B[n ? 0 : 1];
*(U4 *)beta = *(U4 *)B[n ? 0 : 1] ^ *(U4 *)D[n ? 0 : 1];
Mn_FealFK(A[n ? 0 : 1], beta, B[n]);
*(U4 *)K[2 * (r - 1)] = *(U4 *)B[n];
}
}
void Mn_FealF(U1 *alfa,
U1 *beta,
U1 *f)
{
f[1] = alfa[1] ^ beta[0];
f[2] = alfa[2] ^ beta[1];
f[1] ^= alfa[0];
f[2] ^= alfa[3];
f[1] = Mn_FealS1(f[1], f[2]);
f[2] = Mn_FealS0(f[2], f[1]);
f[0] = Mn_FealS0(alfa[0], f[1]);
f[3] = Mn_FealS1(alfa[3], f[2]);
}
void Mn_FealFK(U1 *alfa,
U1 *beta,
U1 *fk)
{
fk[1] = alfa[1] ^ alfa[0];
fk[2] = alfa[2] ^ alfa[3];
fk[1] = Mn_FealS1(fk[1], (U1)(fk[2] ^ beta[0]));
fk[2] = Mn_FealS0(fk[2], (U1)(fk[1] ^ beta[1]));
fk[0] = Mn_FealS0(alfa[0], (U1)(fk[1] ^ beta[2]));
fk[3] = Mn_FealS1(alfa[3], (U1)(fk[2] ^ beta[3]));
}
U1 Mn_FealS0(U1 X1,
U1 X2)
{
U1 val;
val = (U1)((X1 + X2) % 256);
return ((val << 2) | (val >> 6));
}
U1 Mn_FealS1(U1 X1,
U1 X2)
{
U1 val;
val = (U1)((X1 + X2 + 1) % 256);
return ((val << 2) | (val >> 6));
}
void MnBearerSet(U1 *mes,U2 len,U1 *des)
{
U2 wk_len; /* 警膩E谳皋
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -