亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲精品国产无套在线观| 日韩欧美的一区| 精品一区二区久久| 亚洲成人动漫在线免费观看| 中文字幕在线视频一区| 欧美精品一区二区三区高清aⅴ| 欧美二区乱c少妇| 在线观看网站黄不卡| 91麻豆国产福利在线观看| 成人性生交大合| 色综合色狠狠综合色| 在线免费观看日本欧美| 欧美男人的天堂一二区| 日韩欧美国产麻豆| 久久一日本道色综合| 久久久亚洲午夜电影| 国产精品视频第一区| 亚洲乱码国产乱码精品精的特点| 国产精品视频在线看| 亚洲制服丝袜av| 日韩高清不卡一区| 日韩二区三区在线观看| 韩国欧美国产1区| 成人动漫中文字幕| av一二三不卡影片| 在线观看亚洲精品| 欧美一二三四在线| 久久蜜臀精品av| 亚洲欧美另类小说视频| 亚洲成人av福利| 久久黄色级2电影| gogo大胆日本视频一区| 欧美亚洲高清一区| 精品少妇一区二区三区免费观看| 国产精品美女久久久久久久久久久 | 国产日韩欧美一区二区三区乱码| 国产偷国产偷精品高清尤物 | 成人激情开心网| 色综合夜色一区| 正在播放一区二区| 国产精品色在线观看| 亚洲一二三四区不卡| 国产真实乱对白精彩久久| 成人精品国产一区二区4080| 欧美在线观看视频一区二区| 日韩欧美黄色影院| **欧美大码日韩| 久久狠狠亚洲综合| 欧美日本乱大交xxxxx| 日韩一区欧美一区| 国产主播一区二区| 欧美日韩一区二区三区在线 | 欧美日韩久久一区| 亚洲日本在线视频观看| 精品一区二区影视| 欧美精品乱人伦久久久久久| 日韩理论在线观看| 国产成人免费视频网站高清观看视频| 欧美日韩成人高清| 亚洲一区在线观看视频| 91视频一区二区| 国产精品久久久久一区二区三区| 另类欧美日韩国产在线| 欧美巨大另类极品videosbest| 依依成人精品视频| a级精品国产片在线观看| 国产欧美日韩在线| 国产成人午夜视频| 久久久久久亚洲综合| 激情综合色播五月| 日韩精品中文字幕一区 | 日韩女优电影在线观看| 偷拍亚洲欧洲综合| 欧美美女一区二区| 日本欧美一区二区三区乱码| 欧美日韩电影一区| 偷窥少妇高潮呻吟av久久免费 | 免费人成精品欧美精品| 欧美日韩精品免费| 日韩成人精品在线观看| 欧美日韩国产三级| 久久99精品视频| 亚洲精品在线免费播放| 国产一区亚洲一区| 国产人妖乱国产精品人妖| 成人综合在线网站| 亚洲情趣在线观看| 欧美日韩一级黄| 精品一二线国产| 亚洲国产成人一区二区三区| 91亚洲大成网污www| 亚洲一二三四在线观看| 91精品国产91热久久久做人人| 日本成人在线看| 国产午夜一区二区三区| eeuss影院一区二区三区| 亚洲精品视频一区二区| 欧美精品一二三| 精品一二三四区| 亚洲男同性恋视频| 正在播放一区二区| 成人在线综合网| 亚洲成人激情社区| 久久综合久久鬼色中文字| 99久久久无码国产精品| 亚洲国产综合视频在线观看| 久久嫩草精品久久久精品| 色婷婷国产精品久久包臀| 日本成人在线网站| 亚洲欧洲三级电影| 日韩视频免费观看高清完整版 | 99精品视频一区二区| 亚洲国产精品一区二区尤物区| 欧美一级高清片在线观看| 成人久久视频在线观看| 日韩av成人高清| 亚洲欧美激情插| 久久久久久一二三区| 欧美日韩精品久久久| 99国内精品久久| 九九国产精品视频| 亚洲小说春色综合另类电影| 中文字幕精品综合| 日韩欧美国产午夜精品| 在线观看视频欧美| 成人国产精品免费观看视频| 免费xxxx性欧美18vr| 亚洲图片欧美一区| 亚洲欧美成人一区二区三区| 久久久久99精品一区| 日韩欧美国产精品| 欧美一区二区视频网站| 欧美午夜精品久久久久久孕妇 | 亚洲欧美经典视频| 国产日韩欧美麻豆| 欧美成人aa大片| 欧美剧在线免费观看网站| 欧美在线色视频| 一本一本大道香蕉久在线精品| 国产传媒日韩欧美成人| 免费成人深夜小野草| 日韩国产精品久久| 五月综合激情日本mⅴ| 一区二区高清免费观看影视大全| 国产精品美女久久久久久久久久久| 精品国产网站在线观看| 欧美一级理论片| 日韩丝袜美女视频| 精品国产亚洲在线| 精品国精品国产尤物美女| 日韩一区二区三区视频| 91精品国产黑色紧身裤美女| 69堂国产成人免费视频| 欧美精品丝袜久久久中文字幕| 欧美疯狂性受xxxxx喷水图片| 51午夜精品国产| 日韩一区二区在线看| 精品美女一区二区| 久久久噜噜噜久久中文字幕色伊伊| 精品黑人一区二区三区久久 | 亚洲欧洲中文日韩久久av乱码| 国产精品久久久久婷婷| ●精品国产综合乱码久久久久| 亚洲免费在线观看视频| 亚洲综合999| 日本成人在线网站| 国产另类ts人妖一区二区| 成人一区在线看| 色诱视频网站一区| 欧美人狂配大交3d怪物一区| 欧美一区二区三区四区五区 | 狠狠狠色丁香婷婷综合久久五月| 精品一区二区三区免费| 国产.欧美.日韩| 色综合天天天天做夜夜夜夜做| 欧美调教femdomvk| 日韩女优电影在线观看| 国产精品久久三| 亚洲第一主播视频| 激情图区综合网| 99精品视频一区二区| 欧美一区二区视频在线观看 | 亚洲国产另类av| 国产又粗又猛又爽又黄91精品| 91在线免费播放| 欧美大片日本大片免费观看| 国产精品美女久久久久高潮| 亚洲成a人片在线观看中文| 久久99精品网久久| 欧美在线观看视频一区二区| 精品国产乱码久久久久久老虎| 国产精品免费视频网站| 日韩经典中文字幕一区| 国产69精品久久99不卡| 欧美一三区三区四区免费在线看| 欧美激情一区在线| 亚洲成年人影院| voyeur盗摄精品| 欧美精品一区二| 日韩精品福利网|