亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? emm.c

?? 有線電視系統前端設備復用器原代碼。 用語接受衛星信號
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*-------------------------------------------------------------------------------------*/
/*emm.c                                                                                */
/*-------------------------------------------------------------------------------------*/
#include "psos.h"
#include "pna.h"
#include "repid.h"
#include "caproc.h"

#define MAX_EMMG_BUFFER_LENGTH  (1024*4)

#define MAX_EMMG_CONNECTED  3


/*char   emmgdatagrambuf[MAX_EMMG_BUFFER_LENGTH];*/
int    g_emm_datagram_length;

extern CA_CONFIG g_ca_config;

CA_EMMG_CHANNEL_INFO		g_emmg_channel_info[3];

CA_EMMG_STREAM_INFO			g_emmg_stream_info[3];
/*CA_EMMG_STREAM_BW_REQUEST	g_emmg_stram_bw_request[3];*/
/*CA_EMMG_DATA_PROVISION		g_emmg_data_provision;*/

/*對于EMM發起的連接列表*/
CA_EMM_TCPMEMBER    g_Emm_TcpMember[MAX_EMMG_CONNECTED];

int                   g_Emmg_connected[3];
unsigned long    ulTidEmmTcp[3];

int		g_socket_emmg=0;
int		g_socket_emmg1=0; /*added by xu*/
int		g_socket_emmg2=0; /*added by xu*/

/*-------------------------------------------------------*/
/* added by johnnyling 2004-08-24                        */
/*-------------------------------------------------------*/
#define EMM_MAX_PAYLOD (188 - 1 - sizeof(TS_TAG))
char     g_emm_ts_buf[3][188];
int     g_emm_buf_off[3] = {0,0,0};

/*fd_set   g_read_mask;*/
/*-------------------------------------------------------*/
/* added by johnnyling 2004-08-24                        */
/*-------------------------------------------------------*/

/*將EMM數據送到FIFO中*/
void send_emm(char *buf,int buflen,unsigned short pid,char datatype,unsigned char ucCACount)
{
	int             i;
	int             tsnum;
	TS_TAG          *pTsHead;
	char            *pSection;
	short           offset;
	char            *pts;
	char            tspkt[188];
	short           rst;
	int             first;

	static int      continue_counter[3]={0,0,0};
	
	if(datatype)
	{/* ts packet */
		tsnum= buflen / 188;
		for(i=0;i<tsnum;i++)
		{
			pts= buf + i*188;
			/*獲取PTS信息及PID*/
			pTsHead=(TS_TAG *)pts;
			pTsHead->PID=pid;
			pTsHead->Continuity_counter=continue_counter[ucCACount];
			ts_send(pts);

			/*-------------------------------------------------*/
			/* added by johnnyling 2004-02-16                                            */
			/*---------------------------------------------------*/
			if(continue_counter[ucCACount]==15)
				continue_counter[ucCACount]=0;
			else
				continue_counter[ucCACount]++;
		}
	}
	else
	{/*將段打包成TS包寫到FIFO中*/
		pSection = buf;
		offset = 0;

		rst=buflen;
		first=1;
		while(rst>0)
		{
			pTsHead=(TS_TAG *)tspkt;
			MemSet(tspkt,188,0xFF);

			pTsHead->Sync_byte             = 0x47;
			pTsHead->Transport_err_indicator     = 0;

			if(first)			
				pTsHead->Payload_unit_start_indicator=1;
			else
				pTsHead->Payload_unit_start_indicator=0;

			pTsHead->Transport_priority          =0;
			pTsHead->PID                         =pid;
			pTsHead->Transport_scambling_control =0;
			pTsHead->Adaption_field_control      =1;
			pTsHead->Continuity_counter          =continue_counter[ucCACount];

			if(continue_counter[ucCACount]==15)
				continue_counter[ucCACount]=0;
			else
				continue_counter[ucCACount]++;

			if(first)
			{/*第一個包*/
				*(char *)((char *)pTsHead + sizeof(TS_TAG))=0; /* pointer field */
				if(rst<=(188 - 1 - sizeof(TS_TAG)))
				{/*長度小于183字節*/
					MemCopy((char *)pTsHead + sizeof(TS_TAG) + 1,buf + offset,rst);
					offset+=rst;
					ts_send(tspkt);
					break;
				}
				else
				{/*大于183字節,要多次發送*/
					MemCopy((char *)pTsHead + sizeof(TS_TAG) + 1,buf + offset,188-1-sizeof(TS_TAG));
					offset+=188-1-sizeof(TS_TAG);
					ts_send(tspkt);
					rst-=188 - 1 - sizeof(TS_TAG);
				}
				first=0;
			}
			else
			{
				if(rst<=(188 - sizeof(TS_TAG)))
				{
					MemCopy((char *)pTsHead + sizeof(TS_TAG),buf + offset,rst);
					offset+=rst;
					ts_send(tspkt);
					break;
				}
				else
				{
					MemCopy((char *)pTsHead + sizeof(TS_TAG),buf + offset,188 - sizeof(TS_TAG));
					offset+=188 - sizeof(TS_TAG);
					ts_send(tspkt);
					rst-=188 - sizeof(TS_TAG);
				}
			}
		}
	}
}
/*
void send_emm_datagram(char *buf,int buflen,unsigned short pid,char datatype)
{
	SECTION_TAG *pSection;
	char        *pbuf;
	int         rst=buflen;

	static      cnt=0;
		
	pSection=(SECTION_TAG *)buf;
	while(rst>0)
	{
		while((pSection->TableID<0x80)||(pSection->TableID>0x89))
		{
			pSection=(SECTION_TAG *)((char *)pSection + 1);
			rst--;

			if(rst<=0)
				return;
		}

		send_emm((char *)pSection,pSection->SectionLength + 3,pid,datatype);
		rst-=pSection->SectionLength + 3;
		pSection=(SECTION_TAG *)((char *)pSection + pSection->SectionLength + 3);
	}
}
*/
/*---------------------------------------------------------------------------*/
/* updated by johnnyling 2004-02-16                                          */
/* support ts packet emm                                                     */
/*---------------------------------------------------------------------------*/
#if 0
void send_emm_datagram(char *buf,int buflen,unsigned short pid,char datatype)
{
	SECTION_TAG *pSection;
	char        *pbuf;
	int         rst=buflen;

	static      cnt=0;
		
	if(datatype)
	{
		send_emm(buf,buflen,pid,datatype);
	}
	else
	{
		pSection=(SECTION_TAG *)buf;
		/*-----------------------------------------------------------------------------*/
		/*去掉中視聯section前面的垃圾   updated by johnnyling 2004-02-17               */
		/*-----------------------------------------------------------------------------*/
		if((g_ca_config.Para_Config.CA_system_id>=0x4900)&&( g_ca_config.Para_Config.CA_system_id<=0x49ff))
		{
			while(rst>0)
			{
				while((pSection->TableID<0x80)||(pSection->TableID>0x89))
				{
					pSection=(SECTION_TAG *)((char *)pSection + 1);
					rst--;

					if(rst<=0)
						return;
				}

				send_emm((char *)pSection,pSection->SectionLength + 3,pid,datatype);
				rst-=pSection->SectionLength + 3;
				pSection=(SECTION_TAG *)((char *)pSection + pSection->SectionLength + 3);
			}
		}
		else
			send_emm((char *)pSection,pSection->SectionLength + 3,pid,datatype);
	}
}
#else
/*發送EMM數據*/
void send_emm_datagram(char *buf,int buflen,unsigned short pid,unsigned char ucCACount)
{
	SECTION_TAG *pSection;
	char        *pbuf;
	int         rst=buflen;
	char   *pTemp;

	static      cnt=0;

	if(g_emmg_channel_info[ucCACount].section_TSpket_flag)
	{/*表示為TS流,直接發送*/
		send_emm(buf,buflen,pid,g_emmg_channel_info[ucCACount].section_TSpket_flag,ucCACount);
	}
	else
	{/*接收的為段,需打包成TS包*/
		pSection=(SECTION_TAG *)buf;
		/*-----------------------------------------------------------------------------*/
		/*去掉中視聯section前面的垃圾   updated by johnnyling 2004-02-17               */
		/*-----------------------------------------------------------------------------*/
		if((g_ca_config.Para_Config[ucCACount].CA_system_id>=0x4900)&&( g_ca_config.Para_Config[ucCACount].CA_system_id<=0x49ff))
		{
			while(rst>0)
			{
				while((pSection->TableID<0x80)||(pSection->TableID>0x89))
				{/*如PID不正確,逐個往后查找*/
					pSection=(SECTION_TAG *)((char *)pSection + 1);
					rst--;

					if(rst<=0)
						return;
				}

				if(pSection->SectionLength + 3>=EMM_MAX_PAYLOD)
				{
					/*------------------------------------------------------------------*/
					/* 先發送緩沖的SECTION                                              */
					/*------------------------------------------------------------------*/
					if(g_emm_buf_off[ucCACount])
						send_emm((char *)g_emm_ts_buf[ucCACount],g_emm_buf_off[ucCACount],pid,g_emmg_channel_info[ucCACount].section_TSpket_flag,ucCACount);
					g_emm_buf_off[ucCACount]=0;
					/*------------------------------------------------------------------*/
					/* 先發送緩沖的SECTION                                              */
					/*------------------------------------------------------------------*/
					send_emm((char *)pSection,pSection->SectionLength + 3,pid,g_emmg_channel_info[ucCACount].section_TSpket_flag,ucCACount);
				}
				else if(pSection->SectionLength + 3 + g_emm_buf_off[ucCACount] >= EMM_MAX_PAYLOD)
				{
					/*------------------------------------------------------------------*/
					/* 先發送緩沖的SECTION                                              */
					/*------------------------------------------------------------------*/
					if(g_emm_buf_off[ucCACount])
						send_emm((char *)g_emm_ts_buf[ucCACount],g_emm_buf_off[ucCACount],pid,g_emmg_channel_info[ucCACount].section_TSpket_flag,ucCACount);
					g_emm_buf_off[ucCACount]=0;
					/*------------------------------------------------------------------*/
					/*緩沖本次的SECTION                                                 */
					/*------------------------------------------------------------------*/
					memcpy(g_emm_ts_buf[ucCACount],pSection,pSection->SectionLength + 3);
					g_emm_buf_off[ucCACount]=pSection->SectionLength + 3;
				}
				else
				{
					/*------------------------------------------------------------------*/
					/*緩沖本次的SECTION                                                 */
					/*------------------------------------------------------------------*/
					memcpy(g_emm_ts_buf[ucCACount] + g_emm_buf_off[ucCACount],pSection,pSection->SectionLength + 3);
					g_emm_buf_off[ucCACount]+=buflen;
				}

				rst-=pSection->SectionLength + 3;
				pSection=(SECTION_TAG *)((char *)pSection + pSection->SectionLength + 3);
			}
		}
		else
		{/*當數據小于183字節時,緩存下來,做為下次發送*/
			if(buflen>=EMM_MAX_PAYLOD)
			{
				/*------------------------------------------------------------------*/
				/* 先發送緩沖的SECTION                                              */
				/*------------------------------------------------------------------*/
				if(g_emm_buf_off[ucCACount])
				{
					send_emm((char *)g_emm_ts_buf[ucCACount],g_emm_buf_off[ucCACount],pid,g_emmg_channel_info[ucCACount].section_TSpket_flag,ucCACount);
	 			}
				g_emm_buf_off[ucCACount]=0;	
				/*------------------------------------------------------------------*/
				/* 先發送緩沖的SECTION                                              */
				/*------------------------------------------------------------------*/
				send_emm((char *)pSection,pSection->SectionLength + 3,pid,g_emmg_channel_info[ucCACount].section_TSpket_flag,ucCACount);
	 		}
			else if(buflen+g_emm_buf_off[ucCACount]>=EMM_MAX_PAYLOD)
			{
				/*------------------------------------------------------------------*/
				/* 先發送緩沖的SECTION                                              */
				/*------------------------------------------------------------------*/
				if(g_emm_buf_off[ucCACount])
				{
					send_emm((char *)g_emm_ts_buf[ucCACount],g_emm_buf_off[ucCACount],pid,g_emmg_channel_info[ucCACount].section_TSpket_flag,ucCACount);
	 			}
				g_emm_buf_off[ucCACount]=0;
				/*------------------------------------------------------------------*/
				/*緩沖本次的SECTION                                                 */
				/*------------------------------------------------------------------*/
				memcpy(g_emm_ts_buf[ucCACount],buf,buflen);
				g_emm_buf_off[ucCACount]=buflen;

	 		}
			else
			{
	 				send_emm(buf,buflen,pid,g_emmg_channel_info[ucCACount].section_TSpket_flag,ucCACount);
					g_emm_buf_off[ucCACount] = 0;
				
			}			
		}
	}
}

#endif

/*發送通道測試信息*/
int  emmgsendchannelstatus(int socket,unsigned char ucCACount)
{
	volatile CA_MESSAGE_HEAD      *pHead;
	volatile CA_MESSAGE_ITEM_HEAD *pItemHead;
	int                  MsgLen=0;
	int i;
	int                  rc;

	char   EmmgSendBuf[2048];

	pHead=(CA_MESSAGE_HEAD *)EmmgSendBuf;
	pHead->protocol_version=0x02;
	pHead->message_type    =EMMG2MUX_CHANNEL_STATUS;
	pHead->message_length  =0;

	pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pHead + sizeof(CA_MESSAGE_HEAD));

	pItemHead->parameter_type=EMMG2MUX_client_ID;
	pItemHead->parameter_length=4;
	*(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_channel_info[ucCACount].client_ID;
	pHead->message_length  +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
	pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);

	pItemHead->parameter_type=EMMG2MUX_data_channel_ID;
	pItemHead->parameter_length=2;
	*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_channel_info[ucCACount].data_channel_ID;
	pHead->message_length  +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
	pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);

	pItemHead->parameter_type=EMMG2MUX_section_TSpkt_flag;
	pItemHead->parameter_length=1;
	*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_channel_info[ucCACount].section_TSpket_flag;
	pHead->message_length  +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
	pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);

	MsgLen=pHead->message_length + sizeof(CA_MESSAGE_HEAD);
	/*將數據發送到EMMG*/
/*	rc=ca_send(socket,EmmgSendBuf,MsgLen,g_ca_config.Para_Config[ucCACount].Network_Delay);*/
       rc=send(socket,EmmgSendBuf,MsgLen,0);
	if(rc!=MsgLen)
		return -1;
	else 
	{
		caSendLog(LOGTYPE_NORMAL,"emmg: Send channel status message,channelid=%d.",g_emmg_channel_info[ucCACount].data_channel_ID);
		Display("emmg: Send channel status message,clientId=%d.",g_emmg_channel_info[ucCACount].client_ID);
		return rc;		
	}
}

/*發送流狀態信息*/
int emmgsendstreamstatus(int  socket,unsigned char ucCACount)
{
	CA_MESSAGE_HEAD      *pHead;
	CA_MESSAGE_ITEM_HEAD *pItemHead;
	int                  MsgLen=0;
	int i;
	int                  rc;

	char          EmmgSendBuf[2048];

	pHead=(CA_MESSAGE_HEAD *)EmmgSendBuf;
	pHead->protocol_version=0x02;
	pHead->message_type    =EMMG2MUX_STREAM_STATUS;
	pHead->message_length  =0;

	pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pHead + sizeof(CA_MESSAGE_HEAD));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品综合久久久久久8888| 在线欧美日韩精品| 日本高清不卡aⅴ免费网站| 欧美一区永久视频免费观看| 1000精品久久久久久久久| 蜜桃久久久久久久| 欧美日韩亚洲国产综合| 中文字幕中文字幕在线一区 | 亚洲国产精品人人做人人爽| 国产精品资源网站| 日韩你懂的电影在线观看| 亚洲最大的成人av| 99re亚洲国产精品| 久久免费的精品国产v∧| 麻豆成人91精品二区三区| 欧美日韩在线一区二区| 亚洲靠逼com| 91女神在线视频| 亚洲天堂久久久久久久| 成人18视频在线播放| 国产日本一区二区| 精品一区二区三区视频在线观看| 欧美精品18+| 亚洲777理论| 欧美日韩中字一区| 亚洲午夜久久久久久久久久久| 成人精品视频网站| 国产精品视频一二| 成人av电影在线| 国产精品国产三级国产普通话99| 九一久久久久久| 精品国产一二三区| 九九**精品视频免费播放| 欧美不卡一区二区三区四区| 久久精品国产亚洲高清剧情介绍 | 久久久精品中文字幕麻豆发布| 另类中文字幕网| 久久综合视频网| 国内精品免费**视频| 久久九九国产精品| 成人av在线资源网站| 国产精品国产馆在线真实露脸| 成人av先锋影音| 亚洲色图视频网| 欧美午夜精品理论片a级按摩| 亚洲午夜久久久久| 日韩一区二区三区电影在线观看| 免费观看在线色综合| 国产亚洲人成网站| 色综合天天综合网天天看片| 亚洲一区二区不卡免费| 日韩视频一区二区在线观看| 精品一区二区三区香蕉蜜桃 | 理论片日本一区| 国产亚洲成aⅴ人片在线观看| thepron国产精品| 亚洲一区免费视频| 欧美电视剧免费全集观看| 国产精品一线二线三线精华| 国产精品成人在线观看| 欧美日韩aaaaa| 国产成人无遮挡在线视频| 一区二区三区在线观看网站| 欧美不卡激情三级在线观看| 成人精品小蝌蚪| 美女在线一区二区| 国产精品动漫网站| 欧美一区二区三区在线观看视频| 成人免费视频网站在线观看| 偷拍亚洲欧洲综合| 中文字幕的久久| 欧美欧美欧美欧美首页| 高清beeg欧美| 美女免费视频一区二区| 日韩理论片在线| 久久精品欧美一区二区三区不卡 | 国产一区二区调教| 亚洲在线观看免费视频| 国产亚洲精品超碰| 欧美精品777| 色婷婷久久久久swag精品| 狠狠色2019综合网| 午夜不卡在线视频| 成人免费小视频| 久久夜色精品国产噜噜av| 欧美日韩一二三区| 91香蕉视频在线| 国产成人免费网站| 久久97超碰色| 免费观看日韩电影| 爽好多水快深点欧美视频| 亚洲品质自拍视频网站| 中文字幕二三区不卡| 日韩欧美国产1| 欧美精品在欧美一区二区少妇| 97精品视频在线观看自产线路二| 激情伊人五月天久久综合| 日韩极品在线观看| 亚洲午夜视频在线观看| 亚洲日本在线a| 亚洲四区在线观看| 国产精品麻豆视频| 亚洲国产精品高清| 国产欧美在线观看一区| 久久午夜羞羞影院免费观看| 日韩欧美一级二级三级| 欧美一区二区精品| 69p69国产精品| 3751色影院一区二区三区| 欧美日韩国产另类一区| 欧美日韩一区三区四区| 欧美三级中文字幕在线观看| 欧美日韩一区二区三区在线看| 99v久久综合狠狠综合久久| 91在线视频观看| 色综合久久综合网97色综合| 色综合天天综合在线视频| 色综合天天性综合| 91黄视频在线观看| 欧美日韩国产综合视频在线观看| 欧美日韩午夜在线视频| 69堂精品视频| 精品久久久网站| 国产婷婷色一区二区三区四区 | 中文字幕av一区二区三区| 欧美激情一区二区在线| 国产精品久久一级| 伊人色综合久久天天| 亚洲成人一区在线| 麻豆91精品视频| 粉嫩av一区二区三区| 色屁屁一区二区| 欧美精品日韩综合在线| 欧美大片在线观看| 国产精品福利av| 午夜精品久久久久久久久久| 欧美aⅴ一区二区三区视频| 国产99精品国产| 日本久久电影网| 日韩欧美国产高清| 国产精品毛片高清在线完整版| 亚洲影院在线观看| 国内精品自线一区二区三区视频| 成人午夜碰碰视频| 欧美日韩国产精品自在自线| 26uuu亚洲综合色欧美| 亚洲人成影院在线观看| 日韩在线观看一区二区| 高清不卡一二三区| 69久久夜色精品国产69蝌蚪网| 欧美国产日韩亚洲一区| 亚洲国产欧美在线| 国产传媒日韩欧美成人| 欧美在线免费视屏| 日韩无一区二区| 久久麻豆一区二区| 亚洲精品国产a| 国内精品久久久久影院一蜜桃| 色婷婷久久久亚洲一区二区三区| 日韩你懂的在线观看| 一级特黄大欧美久久久| 国产精品亚洲一区二区三区妖精| 91网上在线视频| 久久综合久色欧美综合狠狠| 一区二区三区鲁丝不卡| 成人在线视频一区| 精品国产乱码久久久久久免费| 亚洲视频免费在线观看| 国产一区欧美二区| 欧美高清视频不卡网| 亚洲婷婷综合久久一本伊一区| 久久不见久久见免费视频1| 欧洲av一区二区嗯嗯嗯啊| 中文字幕 久热精品 视频在线| 日本中文字幕不卡| 欧美性猛片xxxx免费看久爱| 国产欧美日韩亚州综合 | 69精品人人人人| 夜夜爽夜夜爽精品视频| 不卡影院免费观看| 国产香蕉久久精品综合网| 久久精品99国产精品日本| 欧美精品色综合| 亚洲一区二区精品视频| 97精品久久久午夜一区二区三区 | 欧美经典一区二区三区| 狠狠色伊人亚洲综合成人| 日韩一区二区免费在线观看| 亚洲在线视频一区| 欧美色倩网站大全免费| 一区二区视频免费在线观看| 99re热这里只有精品免费视频| 国产精品久久久久久久久搜平片| 国产麻豆日韩欧美久久| 久久久久国产精品人| 久久国产精品色婷婷| 久久综合av免费| 久久国产麻豆精品| 久久久99精品免费观看| 国产高清在线精品|