?? emm.c
字號:
pItemHead->parameter_type=EMMG2MUX_client_ID;
pItemHead->parameter_length=4;
*(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_stream_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_stream_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_data_stream_ID;
pItemHead->parameter_length=2;
/*---------------------------------------------------------------------------------------------------------*/
/**(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_stream_info.data_channel_ID;*/
/* updated 2004-02-16 by johnnyling */
/*---------------------------------------------------------------------------------------------------------*/
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_stream_info[ucCACount].data_stream_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_id;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_stream_info[ucCACount].data_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_type;
pItemHead->parameter_length=1;
*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_stream_info[ucCACount].data_type;
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);
/* 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 stream status message,streamid=%d.",g_emmg_stream_info[ucCACount].data_stream_ID);
return rc;
}
}
/*發送帶寬分配信息*/
int emmgsendstreambwallocation(int socket,unsigned char ucCACount,unsigned short bandWidth)
{
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_BW_ALLOCATION;
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_stream_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_stream_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_data_stream_ID;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_emmg_stream_info[ucCACount].data_stream_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_Bandwidth;
pItemHead->parameter_length=2;
if(bandWidth<g_ca_config.Para_Config[ucCACount].EMM_BandWidth)
{
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=bandWidth;
}
else
{
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=g_ca_config.Para_Config[ucCACount].EMM_BandWidth;
}
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);
/*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 stream bandwidth allocation message,streamid=%d.",g_emmg_stream_info[ucCACount].data_stream_ID);
return rc;
}
}
/*發送通道關閉應答*/
int emmgsendchannelcloseresponse(int socket,unsigned long clientid,unsigned short channelid)
{
}
/*發送流關閉應答*/
int emmgsendstreamcloseresponse(int socket,unsigned long clientid,unsigned short channelid,unsigned short streamid,unsigned char unCACount)
{
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_CLOSE_RESPONSE;
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))=clientid;
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);
pHead->message_length +=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))=channelid;
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);
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
pItemHead->parameter_type=EMMG2MUX_data_stream_ID;
pItemHead->parameter_length=2;
*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD))=streamid;
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);
pHead->message_length +=sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length;
MsgLen=pHead->message_length + sizeof(CA_MESSAGE_HEAD);
/* rc=ca_send(socket,EmmgSendBuf,MsgLen,g_ca_config.Para_Config[unCACount].Network_Delay);*/
rc=send(socket,EmmgSendBuf,MsgLen,0);
if(rc!=MsgLen)
return -1;
else
{
caSendLog(LOGTYPE_NORMAL,"emmg: Send stream close response message,streamid=%d.",streamid);
return rc;
}
}
/*接收到EMMG后根據消息類型進入相應的處理流程*/
int emmg_cmd_proc(char* RcvBuf,int socket,int pktlen,unsigned char ucIndex)
{
int i,j=0;
int rc;
unsigned short cmd;
CA_MESSAGE_HEAD *pHead;
CA_MESSAGE_ITEM_HEAD *pItemHead;
unsigned long clientid;
unsigned short channelid;
unsigned short streamid;
unsigned char tspkt_flag;
unsigned char data_type;
unsigned short data_id;
unsigned short bandwidth;
int orgcmdlen,cmdlen;
int msglen;
char *pbuf;
int ucCACount =0;
/*char EmmgDatagramBuf[MAX_EMMG_BUFFER_LENGTH];*/
msglen=pktlen;
pbuf=RcvBuf;
pHead=(CA_MESSAGE_HEAD *)pbuf;
/*獲得消息類型*/
cmd=ca_get_message_type(pbuf);
/*獲得消息長度*/
orgcmdlen=cmdlen=ca_get_message_length(pbuf);
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pHead + sizeof(CA_MESSAGE_HEAD));
while(msglen>0)
{
switch(cmd)
{
/*建立通道請求*/
case EMMG2MUX_CHANNEL_SET_UP:
while(cmdlen>0)
{
switch(pItemHead->parameter_type)
{
case EMMG2MUX_client_ID:
clientid = *(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_channel_ID:
channelid = *(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_section_TSpkt_flag:
tspkt_flag =*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
}
cmdlen-=pItemHead->parameter_length + sizeof(CA_MESSAGE_ITEM_HEAD);
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
}
for(i=0;i<3;i++)
{
j = (g_ca_config.Para_Config[i].CA_system_id << 16) | g_ca_config.Para_Config[i].EMM_client_id;
if(j== clientid)
{
g_emmg_channel_info[i].client_ID = clientid;
g_emmg_channel_info[i].data_channel_ID = channelid;
g_emmg_channel_info[i].section_TSpket_flag = tspkt_flag;
break;
}
}
Display("emmg:receive channel setup:ClientId:%d",clientid);
/*未找到相應的clientId,不進行相應處理*/
if(i==3)
{
g_Emmg_connected[ucIndex]=0;
break;
}
caSendLog(LOGTYPE_NORMAL,"emmg: Receive channel setup message,channelid=%d",g_emmg_channel_info[i].data_channel_ID);
/*發送通道狀態信息,表示響應通道連接請求*/
emmgsendchannelstatus(socket,i);
break;
/*通道測試*/
case EMMG2MUX_CHANNEL_TEST:
while(cmdlen>0)
{
switch(pItemHead->parameter_type)
{
case EMMG2MUX_client_ID:
clientid=*(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_channel_ID:
channelid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
}
cmdlen-=pItemHead->parameter_length + sizeof(CA_MESSAGE_ITEM_HEAD);
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
}
for(i=0;i<3;i++)
{
if(g_emmg_channel_info[i].client_ID == clientid)
break;
}
/*未搜索到的clientid,不進行測試應答*/
if(i==3)
break;
caSendLog(LOGTYPE_NORMAL,"emmg: Receive channel test essage,channelid=%d.",channelid);
Display("emmg: Receive channel test essage,clientid=%d.",clientid);
/* 通道測試住息,發送狀態信息表示測試響應*/
emmgsendchannelstatus(socket,i);
break;
case EMMG2MUX_CHANNEL_CLOSE:
g_Emmg_connected[ucIndex]=0;
break;
case EMMG2MUX_CHANNEL_ERROR:
g_Emmg_connected[ucIndex]=0;
break;
/*建立流請求*/
case EMMG2MUX_STREAM_SET_UP:
while(cmdlen>0)
{
switch(pItemHead->parameter_type)
{
case EMMG2MUX_client_ID:
clientid=*(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_channel_ID:
channelid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_stream_ID:
streamid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_Data_type:
data_type=*(unsigned char *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_Data_id:
data_id =*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
}
cmdlen-=pItemHead->parameter_length + sizeof(CA_MESSAGE_ITEM_HEAD);
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
}
for(ucCACount = 0;ucCACount<3;ucCACount++)
{
if(g_emmg_channel_info[ucCACount].client_ID == clientid)
{
g_emmg_stream_info[ucCACount].client_ID = clientid;
g_emmg_stream_info[ucCACount].data_channel_ID = channelid;
g_emmg_stream_info[ucCACount].data_stream_ID = streamid;
g_emmg_stream_info[ucCACount].data_type = data_type;
g_emmg_stream_info[ucCACount].data_id = data_id;
break;
}
}
if(ucCACount >=3)
break;
caSendLog(LOGTYPE_NORMAL,"emmg: Receive stream setup message,streamid=%d.",g_emmg_stream_info[ucCACount].data_stream_ID);
Display("emmg: Receive stream setup message,clientid=%d.",g_emmg_stream_info[ucCACount].client_ID);
/*發送流狀態信息,表示響應流建立請求*/
emmgsendstreamstatus(socket,ucCACount);
break;
/*流測試請求*/
case EMMG2MUX_STREAM_TEST:
while(cmdlen>0)
{
switch(pItemHead->parameter_type)
{
case EMMG2MUX_client_ID:
clientid=*(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_channel_ID:
channelid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_stream_ID:
streamid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
}
cmdlen-=pItemHead->parameter_length + sizeof(CA_MESSAGE_ITEM_HEAD);
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
}
caSendLog(LOGTYPE_NORMAL,"emmg: Receive stream test message,streamid=%d.",streamid);
for(ucCACount = 0;ucCACount<3;ucCACount++)
{
if(g_emmg_stream_info[ucCACount].client_ID == clientid)
{
break;
}
}
if(ucCACount >=3)
break;
/*響應測試信息,發送流狀態信息*/
emmgsendstreamstatus(socket,ucCACount);
break;
/*流關閉請求*/
case EMMG2MUX_STREAM_CLOSE_REQUEST:
while(cmdlen>0)
{
switch(pItemHead->parameter_type)
{
case EMMG2MUX_client_ID:
clientid=*(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_channel_ID:
channelid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_stream_ID:
streamid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
}
cmdlen-=pItemHead->parameter_length + sizeof(CA_MESSAGE_ITEM_HEAD);
pItemHead=(CA_MESSAGE_ITEM_HEAD *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD) + pItemHead->parameter_length);
}
caSendLog(LOGTYPE_NORMAL,"emmg: Receive stream close request message,streamid=%d.",streamid);
for(ucCACount = 0;ucCACount<3;ucCACount++)
{
if(g_emmg_stream_info[ucCACount].client_ID == clientid)
{
break;
}
}
if(ucCACount >=3)
break;
/*響應流關閉應答*/
emmgsendstreamcloseresponse(socket,clientid,channelid,streamid,ucCACount);
break;
/*收到帶寬請求*/
case EMMG2MUX_STREAM_BW_REQUEST:
/* MemSet(g_emmg_stram_bw_request,3*sizeof(CA_EMMG_STREAM_BW_REQUEST),0);*/
while(cmdlen>0)
{
switch(pItemHead->parameter_type)
{
case EMMG2MUX_client_ID:
clientid=*(unsigned long *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_channel_ID:
channelid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
break;
case EMMG2MUX_data_stream_ID:
streamid=*(unsigned short *)((char *)pItemHead + sizeof(CA_MESSAGE_ITEM_HEAD));
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -