586 lines
15 KiB
C
586 lines
15 KiB
C
#include "./include/mgcp_pub.h"
|
|
#include "./include/mgcp.h"
|
|
#include "./include/mgcp_const.h"
|
|
#include "./include/mgcp_struct.h"
|
|
#include "./include/mgcp_ext.h"
|
|
#include "../../debug/src/include/debug.h"
|
|
|
|
#define MGCP_DEBUG_ID 19
|
|
#define MGCP_VER_DEBUG "R9V0_02"
|
|
|
|
extern char *mgcp_clrncpy(char *dst, char *src, WORD len);
|
|
|
|
static char ascii[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
|
|
0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46};
|
|
|
|
static BYTE log_help[] = {
|
|
"MGCP Debug Monitor Help:\n\r\
|
|
\n\r\
|
|
1.[help] display help menu\n\r\
|
|
2.[log all/none] display all/none logs\n\r\
|
|
3.[log error on/off] display error logs\n\r\
|
|
4.[log mg-mg_name on/off] display MGCP specific mg msg logs\n\r\
|
|
5.[list] display all mg which have been log\n\r"
|
|
};
|
|
|
|
static WORD disp_page[10];
|
|
static BYTE *disp_ptr = (BYTE *) disp_page;
|
|
|
|
static DWORD debug_status_id[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,MGCP_DEBUG_ID + 2,1
|
|
};
|
|
|
|
static BYTE debug_status = 1;
|
|
|
|
static DWORD debug_name_id[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,MGCP_DEBUG_ID + 2,2
|
|
};
|
|
|
|
static DWORD debug_ascin_id[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,MGCP_DEBUG_ID + 2,3
|
|
};
|
|
|
|
static DWORD debug_ascout_id[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,MGCP_DEBUG_ID + 2,4
|
|
};
|
|
|
|
static DWORD debug_page_title[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,MGCP_DEBUG_ID + 2,1,1
|
|
};
|
|
|
|
static DWORD debug_page_line[20] =
|
|
{
|
|
1,3,6,1,4,1,1373,1,1,2,3,1,2,MGCP_DEBUG_ID + 2,1,2,1
|
|
};
|
|
|
|
const static BYTE PAGE_POINT = 14;
|
|
const static BYTE LINE_POINT = 15;
|
|
const static BYTE BASE_ID_LEN = 15;
|
|
|
|
static BYTE title1_p[] =
|
|
{
|
|
" MGCP Page 01 mgcpPort Status\n\r\
|
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15\n\r\
|
|
Subpage\n\r\
|
|
Trans_Status\n\r"
|
|
};
|
|
|
|
BYTE mgcp_disp_line(BYTE page, BYTE line)
|
|
{
|
|
BYTE disp_length;
|
|
|
|
disp_length = 16;
|
|
disp_ptr = (BYTE *) disp_page;
|
|
|
|
switch (page)
|
|
{
|
|
case 1: // Page 1: SG Para
|
|
if (line == 0)
|
|
{
|
|
disp_ptr = (BYTE *) &disp_page[page];
|
|
disp_length = 2;
|
|
}
|
|
else
|
|
disp_ptr = (BYTE *) &mgcpPort[disp_page[page]];
|
|
break;
|
|
default:
|
|
disp_length = 0;
|
|
break;
|
|
}
|
|
|
|
return disp_length;
|
|
}
|
|
|
|
void mgcp_disp_page(BYTE page)
|
|
{
|
|
BYTE disp_line;
|
|
BYTE disp_length;
|
|
|
|
debug_page_line[PAGE_POINT] = page + 5;
|
|
|
|
for (disp_line = 0; disp_line < 22; disp_line++)
|
|
{
|
|
disp_length = mgcp_disp_line(page, disp_line);
|
|
debug_page_line[LINE_POINT] = disp_line + 2;
|
|
debug_page_line[LINE_POINT + 1] = 2; // Data Pointer
|
|
debug_set_response(BASE_ID_LEN + 2, debug_page_line, disp_ptr, disp_length);
|
|
}
|
|
}
|
|
|
|
int mgcp_debug_set(void)
|
|
{
|
|
BYTE page;
|
|
BYTE data[10];
|
|
BYTE *ptr;
|
|
|
|
bzero(disp_page, 20);
|
|
|
|
ptr = data;
|
|
|
|
debug_set_response(BASE_ID_LEN, debug_status_id, &debug_status, 1);
|
|
debug_set_response(BASE_ID_LEN, debug_name_id, MGCP_VER_DEBUG, 10);
|
|
debug_set_response(BASE_ID_LEN, debug_ascin_id, mgcpAsciInBuf, 4096);
|
|
debug_set_response(BASE_ID_LEN, debug_ascout_id, mgcpAsciOutBuf, 4096);
|
|
|
|
for (page = 1; page < 2; page++)
|
|
{
|
|
switch (page)
|
|
{
|
|
case 1: //page 1
|
|
ptr = title1_p;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
debug_page_title[PAGE_POINT] = 5 + page;
|
|
debug_set_response(BASE_ID_LEN + 1, debug_page_title, ptr, strlen(ptr));
|
|
mgcp_disp_page(page);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
int mgcp_asciout_proc(BYTE *outStr)
|
|
{
|
|
int outLen;
|
|
|
|
outLen = strlen(outStr);
|
|
|
|
if (outLen + strlen(mgcpAsciOutBuf) > MGCP_MAX_ASCIIOUT_LEN - 2)
|
|
{
|
|
strcpy(mgcpAsciOutBuf, outStr);
|
|
}
|
|
else
|
|
strcat(mgcpAsciOutBuf, outStr);
|
|
|
|
return 1;
|
|
}
|
|
|
|
void mgcp_mon(void)
|
|
{
|
|
BYTE inPage, errFg = 0;
|
|
BYTE *asciiInPtr = NULL;
|
|
BYTE *mgNM = NULL;
|
|
// BYTE *trkNM = NULL;
|
|
// BYTE *chlNM = NULL;
|
|
BYTE *poo = NULL;
|
|
BYTE *strStart = NULL;
|
|
BYTE tmp[128];
|
|
// BYTE tmptrkNum;
|
|
// WORD tmpchlNum;
|
|
WORD strLen, num;
|
|
|
|
if ((strLen = strlen(mgcpAsciInBuf)) > 0)
|
|
{
|
|
inPage = mgcpAsciInBuf[0] - 1;
|
|
asciiInPtr = mgcpAsciInBuf + 1;
|
|
|
|
if (inPage > 7)
|
|
errFg = 1;
|
|
else if (strcmp(asciiInPtr,"c") == 0)
|
|
{
|
|
}
|
|
else if (strcmp(asciiInPtr,"log error on") == 0)
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg | MONITOR_ERROR;
|
|
}
|
|
else if (strcmp(asciiInPtr,"log error off") == 0)
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg & (~MONITOR_ERROR);
|
|
}
|
|
else if (strncmp(asciiInPtr,"log mg-", 7) == 0)
|
|
{
|
|
if (NULL == (poo = strrchr(asciiInPtr, 'o')))
|
|
{
|
|
errFg = 1;
|
|
}
|
|
else
|
|
{
|
|
mgNM = strchr(asciiInPtr, '-');
|
|
|
|
if (poo <= mgNM)
|
|
{
|
|
errFg = 1;
|
|
}
|
|
else
|
|
{
|
|
mgcp_clrncpy(tmp, mgNM+1, poo-mgNM-1);
|
|
|
|
if (0 == strcmp(poo, "on"))
|
|
{
|
|
if(mgcpMonitorFg == MONITOR_ALL)
|
|
{
|
|
mgcp_asciout_proc("Status is log all\n\r");
|
|
}
|
|
else if (((mgcpMonitorFg & MONITOR_MG0_MSG) == MONITOR_MG0_MSG)
|
|
&& ((mgcpMonitorFg & MONITOR_MG1_MSG) == MONITOR_MG1_MSG)
|
|
&& ((mgcpMonitorFg & MONITOR_MG2_MSG) == MONITOR_MG2_MSG)
|
|
&&(mgcpMonitorFg != MONITOR_ALL))
|
|
|
|
{
|
|
mgcp_asciout_proc("Can not log more MG\n\r");
|
|
}
|
|
else
|
|
{
|
|
if ((((mgcpMonitorFg & MONITOR_MG0_MSG) == MONITOR_MG0_MSG) && (0 == strcmp(dbgmgNamemg[0], tmp)))
|
|
|| (((mgcpMonitorFg & MONITOR_MG1_MSG) == MONITOR_MG1_MSG) && (0 == strcmp(dbgmgNamemg[1], tmp)))
|
|
|| (((mgcpMonitorFg & MONITOR_MG2_MSG) == MONITOR_MG2_MSG) && (0 == strcmp(dbgmgNamemg[2], tmp))))
|
|
{
|
|
mgcp_asciout_proc("MG already be on\n\r");
|
|
}
|
|
else
|
|
{
|
|
if (((mgcpMonitorFg & MONITOR_MG0_MSG) == 0) && (0 == strcmp(dbgmgNamemg[0], tmp)))
|
|
{
|
|
mgcpMonitorFg |= MONITOR_MG0_MSG;
|
|
}
|
|
else if (((mgcpMonitorFg & MONITOR_MG1_MSG) == 0) && (0 == strcmp(dbgmgNamemg[1], tmp)))
|
|
{
|
|
mgcpMonitorFg |= MONITOR_MG1_MSG;
|
|
}
|
|
else if (((mgcpMonitorFg & MONITOR_MG2_MSG) == 0) && (0 == strcmp(dbgmgNamemg[2], tmp)))
|
|
{
|
|
mgcpMonitorFg |= MONITOR_MG2_MSG;
|
|
}
|
|
else if ((mgcpMonitorFg & MONITOR_MG0_MSG) == 0)
|
|
{
|
|
strcpy(dbgmgNamemg[0], tmp);
|
|
|
|
mgcpMonitorFg |= MONITOR_MG0_MSG;
|
|
}
|
|
else if ((mgcpMonitorFg & MONITOR_MG1_MSG) == 0)
|
|
{
|
|
strcpy(dbgmgNamemg[1], tmp);
|
|
|
|
mgcpMonitorFg |= MONITOR_MG1_MSG;
|
|
}
|
|
else
|
|
{
|
|
strcpy(dbgmgNamemg[2], tmp);
|
|
|
|
mgcpMonitorFg |= MONITOR_MG2_MSG;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (0 == strcmp(poo, "off"))
|
|
{
|
|
if (mgcpMonitorFg == MONITOR_NONE)
|
|
{
|
|
mgcp_asciout_proc("Status is log none\n\r");
|
|
}
|
|
else if((mgcpMonitorFg == MONITOR_ALL)
|
|
||((mgcpMonitorFg | MONITOR_MG0_MSG | MONITOR_MG1_MSG | MONITOR_MG2_MSG | MONITOR_ERROR) == MONITOR_ALL))
|
|
{
|
|
if (mgcpMonitorFg == MONITOR_ALL)
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg & (~MONITOR_MG0_MSG);
|
|
strcpy(dbgmgNamemg[0], tmp);
|
|
}
|
|
else if (((mgcpMonitorFg & MONITOR_MG0_MSG) == MONITOR_MG0_MSG)
|
|
||((mgcpMonitorFg & MONITOR_MG1_MSG) == MONITOR_MG1_MSG)
|
|
||((mgcpMonitorFg & MONITOR_MG2_MSG) == MONITOR_MG2_MSG))
|
|
{
|
|
if(((0 == strcmp(dbgmgNamemg[0], tmp)) && ((mgcpMonitorFg & MONITOR_MG0_MSG) == 0))
|
|
||((0 == strcmp(dbgmgNamemg[1], tmp)) && ((mgcpMonitorFg & MONITOR_MG1_MSG) == 0))
|
|
||((0 == strcmp(dbgmgNamemg[2], tmp)) && ((mgcpMonitorFg & MONITOR_MG2_MSG) == 0)))
|
|
{
|
|
mgcp_asciout_proc("MG already be off\n\r");
|
|
}
|
|
else if ((mgcpMonitorFg & MONITOR_MG0_MSG) == MONITOR_MG0_MSG)
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg & (~MONITOR_MG0_MSG);
|
|
strcpy(dbgmgNamemg[0], tmp);
|
|
}
|
|
else if ((mgcpMonitorFg & MONITOR_MG1_MSG) == MONITOR_MG1_MSG)
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg & (~MONITOR_MG1_MSG);
|
|
strcpy(dbgmgNamemg[1], tmp);
|
|
}
|
|
else
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg & (~MONITOR_MG2_MSG);
|
|
strcpy(dbgmgNamemg[2], tmp);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mgcp_asciout_proc("Can not off more MG\n\r");
|
|
}
|
|
}
|
|
else if (0 == strcmp(dbgmgNamemg[0], tmp))
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg & (~MONITOR_MG0_MSG);
|
|
}
|
|
else if (0 == strcmp(dbgmgNamemg[1], tmp))
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg & (~MONITOR_MG1_MSG);
|
|
}
|
|
else if (0 == strcmp(dbgmgNamemg[2], tmp))
|
|
{
|
|
mgcpMonitorFg = mgcpMonitorFg & (~MONITOR_MG2_MSG);
|
|
}
|
|
else
|
|
{
|
|
mgcp_asciout_proc("MG has not been on\n\r");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
errFg = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/* else if (strncmp(asciiInPtr,"log trk-", 8) == 0)
|
|
{
|
|
if (NULL == (poo = strrchr(asciiInPtr, 'o')))
|
|
{
|
|
errFg = 1;
|
|
}
|
|
else
|
|
{
|
|
|
|
mgNM = strchr(asciiInPtr, '-');
|
|
|
|
if (NULL == (trkNM = strchr(mgNM+1, '-')))
|
|
{
|
|
errFg = 1;
|
|
}
|
|
else
|
|
{
|
|
mgcp_clrncpy(tmp, mgNM+1, trkNM-mgNM-1);
|
|
|
|
tmptrkNum = strtoul(trkNM+1, NULL, 10);
|
|
|
|
if (0 == strcmp(poo, "on"))
|
|
{
|
|
strcpy(dbgmgNametrk, tmp);
|
|
|
|
dbgtrkNumtrk = tmptrkNum;
|
|
|
|
mgcpMonitorFg |= MONITOR_TRK_MSG;
|
|
}
|
|
else if (0 == strcmp(poo, "off"))
|
|
{
|
|
if ((0 == strcmp(dbgmgNamemg, tmp))||((0 == strcmp(dbgmgNametrk, tmp))&&(dbgtrkNumtrk == tmptrkNum)))
|
|
{
|
|
strcpy(dbgmgNametrk, tmp);
|
|
|
|
dbgtrkNumtrk = tmptrkNum;
|
|
|
|
mgcpMonitorFg &= (~MONITOR_TRK_MSG);
|
|
}
|
|
else
|
|
{
|
|
mgcp_asciout_proc("trk already be off!\n\r");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
errFg = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (strncmp(asciiInPtr,"log chl-", 8) == 0)
|
|
{
|
|
if (NULL == (poo = strrchr(asciiInPtr, 'o')))
|
|
{
|
|
errFg = 1;
|
|
}
|
|
else
|
|
{
|
|
|
|
mgNM = strchr(asciiInPtr, '-');
|
|
|
|
if (NULL == (trkNM = strchr(mgNM+1, '-')))
|
|
{
|
|
errFg = 1;
|
|
}
|
|
else
|
|
{
|
|
if (NULL == (chlNM = strchr(trkNM, '-')))
|
|
{
|
|
errFg = 1;
|
|
}
|
|
else
|
|
{
|
|
|
|
mgcp_clrncpy(tmp, mgNM+1, trkNM-mgNM-1);
|
|
|
|
tmptrkNum = strtoul(trkNM+1, NULL, 10);
|
|
|
|
tmpchlNum = strtoul(chlNM+1, NULL, 10);
|
|
|
|
if (0 == strcmp(poo, "on"))
|
|
{
|
|
strcpy(dbgmgNamechl, tmp);
|
|
|
|
dbgtrkNumchl = tmptrkNum;
|
|
|
|
dbgchlNumchl = tmpchlNum;
|
|
|
|
mgcpMonitorFg |= MONITOR_TRK_MSG;
|
|
}
|
|
else if (0 == strcmp(poo, "off"))
|
|
{
|
|
if ((0 == strcmp(dbgmgNamemg, tmp))||((0 == strcmp(dbgmgNametrk, tmp))&&(dbgtrkNumtrk == tmptrkNum))
|
|
||((0 == strcmp(dbgmgNamechl, tmp))&&(dbgtrkNumchl == tmptrkNum)&&(dbgchlNumchl == tmpchlNum)))
|
|
{
|
|
strcpy(dbgmgNamechl, tmp);
|
|
|
|
dbgtrkNumchl = tmptrkNum;
|
|
|
|
dbgchlNumchl = tmpchlNum;
|
|
|
|
mgcpMonitorFg &= (~MONITOR_TRK_MSG);
|
|
}
|
|
else
|
|
{
|
|
mgcp_asciout_proc("chl already be off!\n\r");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
errFg = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
|
|
else if (strcmp(asciiInPtr, "list") == 0)
|
|
{
|
|
if ((mgcpMonitorFg & MONITOR_MG0_MSG) == MONITOR_MG0_MSG)
|
|
{
|
|
sprintf(mgcpAsciTempBuf, "MG :%s on\r\n", dbgmgNamemg[0]);
|
|
|
|
mgcp_asciout_proc(mgcpAsciTempBuf);
|
|
}
|
|
else
|
|
{
|
|
sprintf(mgcpAsciTempBuf, "MG :%s off\r\n", dbgmgNamemg[0]);
|
|
|
|
mgcp_asciout_proc(mgcpAsciTempBuf);
|
|
}
|
|
|
|
if ((mgcpMonitorFg & MONITOR_MG1_MSG) == MONITOR_MG1_MSG)
|
|
{
|
|
sprintf(mgcpAsciTempBuf, "MG :%s on\r\n", dbgmgNamemg[1]);
|
|
|
|
mgcp_asciout_proc(mgcpAsciTempBuf);
|
|
}
|
|
else
|
|
{
|
|
sprintf(mgcpAsciTempBuf, "MG :%s off\r\n", dbgmgNamemg[1]);
|
|
|
|
mgcp_asciout_proc(mgcpAsciTempBuf);
|
|
}
|
|
|
|
if ((mgcpMonitorFg & MONITOR_MG2_MSG) == MONITOR_MG2_MSG)
|
|
{
|
|
sprintf(mgcpAsciTempBuf, "MG :%s on\r\n", dbgmgNamemg[2]);
|
|
|
|
mgcp_asciout_proc(mgcpAsciTempBuf);
|
|
}
|
|
else
|
|
{
|
|
sprintf(mgcpAsciTempBuf, "MG :%s off\r\n", dbgmgNamemg[2]);
|
|
|
|
mgcp_asciout_proc(mgcpAsciTempBuf);
|
|
}
|
|
}
|
|
|
|
else if (strcmp(asciiInPtr,"log all") == 0)
|
|
{
|
|
strcpy(dbgmgNamemg[0], "");
|
|
strcpy(dbgmgNamemg[1], "");
|
|
strcpy(dbgmgNamemg[2], "");
|
|
mgcpMonitorFg = MONITOR_ALL;
|
|
}
|
|
else if (strcmp(asciiInPtr,"log none") == 0)
|
|
{
|
|
strcpy(dbgmgNamemg[0], "");
|
|
strcpy(dbgmgNamemg[1], "");
|
|
strcpy(dbgmgNamemg[2], "");
|
|
mgcpMonitorFg = MONITOR_NONE;
|
|
}
|
|
else if (strcmp(asciiInPtr,"help") == 0)
|
|
{
|
|
mgcp_asciout_proc(log_help);
|
|
}
|
|
else if (isdigit(asciiInPtr[0]))
|
|
{
|
|
num = strtoul(asciiInPtr, NULL, 10);
|
|
disp_page[inPage] = num;
|
|
mgcp_disp_page(inPage);
|
|
}
|
|
else if ((strStart = strstr(asciiInPtr, ">")) != NULL)
|
|
{
|
|
num = strtoul(strStart + 1, NULL, 10);
|
|
disp_page[inPage] += num;
|
|
mgcp_disp_page(inPage);
|
|
}
|
|
else if ((strStart = strstr(asciiInPtr, "<"))!= NULL)
|
|
{
|
|
num = strtoul(strStart + 1, NULL, 10);
|
|
disp_page[inPage] -= num;
|
|
mgcp_disp_page(inPage);
|
|
}
|
|
else
|
|
errFg = 1;
|
|
|
|
if (errFg == 0)
|
|
mgcp_asciout_proc("Command OK!\n\r");
|
|
else
|
|
mgcp_asciout_proc("Command Error!\n\r");
|
|
|
|
strcpy(mgcpAsciInBuf, "\0");
|
|
}
|
|
}
|
|
|
|
int mgcp_hex_to_ascii(BYTE *fromHex, BYTE fromLen, BYTE *toAsc)
|
|
{
|
|
int i, j;
|
|
|
|
j = 0;
|
|
|
|
for (i = 0; i< fromLen; i++)
|
|
{
|
|
toAsc[j] = ascii[fromHex[i] >> 4];
|
|
j++;
|
|
toAsc[j] = ascii[fromHex[i] & 0x0F];
|
|
j++;
|
|
toAsc[j] = ' ';
|
|
j++;
|
|
}
|
|
|
|
toAsc[j] = '\0';
|
|
|
|
return 1;
|
|
}
|
|
|
|
int mgcp_log_err(BYTE *errMsg)
|
|
{
|
|
if ((mgcpMonitorFg & MONITOR_ERROR) == MONITOR_ERROR)
|
|
{
|
|
mgcp_asciout_proc("\33[31m");
|
|
if (strlen(errMsg) >= MGCP_MAX_ASCITMP_LEN)
|
|
sprintf(mgcpAsciTempBuf, "log msg is too long: %d\n\r", strlen(errMsg));
|
|
else
|
|
sprintf(mgcpAsciTempBuf, "%s\n\r", errMsg);
|
|
strcat(mgcpAsciTempBuf, "\33[37m");
|
|
mgcp_asciout_proc(mgcpAsciTempBuf);
|
|
}
|
|
|
|
return 1;
|
|
}
|