⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mn80pub3.c

📁 phs 源代码 小灵通协议源代码 phs source code
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -