📄 hmp_test_cpp-c++.cpp
字号:
BOOL analyse_cli()
{
char input[GC_ADDRSIZE] = "";
unsigned index = 0;
unsigned index_2nd = 0;
char ani[GC_ADDRSIZE] = "";
char dnis[GC_ADDRSIZE] = "";
char dnis_alias[GC_ADDRSIZE] = "";
char file[MAX_PATH] = "";
char confirm[2] = "";
if (kbhit()) {
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == strnicmp(input, CLI_QUIT, strlen(CLI_QUIT)))
{
printf("%s", CLI_QUIT_MSG);
return FALSE;
}
else if (0 == strnicmp(input, CLI_HELP, strlen(CLI_HELP)))
{
PRINT_CLI_HELP_MSG;
}
else if (0 == strnicmp(input, CLI_MAKECALL, strlen(CLI_MAKECALL)))
{
if (registered) {
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
printf(CLI_REQ_DNIS_ALIAS, CLI_REQ_DNIS_ALIAS_DEFAULT);
if (gets_quit_if_esc(dnis_alias, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == dnis_alias[0])
sprintf(dnis_alias, "%s", CLI_REQ_DNIS_ALIAS_DEFAULT);
channls[index]->make_call(dnis_alias);
} else {
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
printf(CLI_REQ_ANI, CLI_REQ_ANI_DEFAULT);
if (gets_quit_if_esc(ani, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == ani[0])
sprintf(ani, "%s", CLI_REQ_ANI_DEFAULT);
printf(CLI_REQ_DNIS, CLI_REQ_DNIS_DEFAULT);
if (gets_quit_if_esc(dnis, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == dnis[0])
sprintf(dnis, "%s", CLI_REQ_DNIS_DEFAULT);
channls[index]->make_call(ani, dnis);
}
}
else if (0 == strnicmp(input, CLI_DROPCALL, strlen(CLI_DROPCALL)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
channls[index]->drop_call();
}
else if (0 == strnicmp(input, CLI_BLIND_XFER, strlen(CLI_BLIND_XFER)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
printf(CLI_REQ_DNIS, CLI_REQ_DNIS_DEFAULT);
if (gets_quit_if_esc(dnis, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == dnis[0])
sprintf(dnis, "%s", CLI_REQ_DNIS_DEFAULT);
channls[index]->blind_xfer(dnis);
}
else if (0 == strnicmp(input, CLI_SUPER_XFER, strlen(CLI_SUPER_XFER)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
printf(CLI_REQ_INDEX_2ND, MAX_CHANNELS-1, CLI_REQ_INDEX_2ND_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index_2nd = atoi(input);
if (index_2nd>=MAX_CHANNELS || index_2nd<0)
index_2nd = CLI_REQ_INDEX_2ND_DEFAULT;
channls[index]->init_super_xfer(index_2nd);
}
else if (0 == strnicmp(input, CLI_PLAYFILE, strlen(CLI_PLAYFILE)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
printf(CLI_REQ_WAVE_FILE, CLI_REQ_WAVE_FILE_DEFAULT);
if (gets_quit_if_esc(file, MAX_PATH-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == file[0])
sprintf(file, "%s", CLI_REQ_WAVE_FILE_DEFAULT);
channls[index]->play_wave_file(file);
}
else if (0 == strnicmp(input, CLI_RECORDFILE, strlen(CLI_RECORDFILE)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
channls[index]->record_wave_file();
}
else if (0 == strnicmp(input, CLI_SENDFAX, strlen(CLI_SENDFAX)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
printf(CLI_REQ_FAX_FILE, CLI_REQ_FAX_FILE_DEFAULT);
if (gets_quit_if_esc(file, MAX_PATH-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == file[0])
sprintf(file, "%s", CLI_REQ_FAX_FILE_DEFAULT);
channls[index]->do_fax(DF_TX, file);
}
else if (0 == strnicmp(input, CLI_RECEIVEFAX, strlen(CLI_RECEIVEFAX)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
channls[index]->do_fax(DF_RX, NULL);
}
else if (0 == strnicmp(input, CLI_GLAREFAX, strlen(CLI_GLAREFAX)))
{
printf("%s", CLI_GLAREFAX_MSG);
printf(CLI_REQ_CONFIRM, CLI_REQ_CONFIRM_DEFAULT);
if (gets_quit_if_esc(confirm, 1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 != confirm[0] && 'Y' != confirm[0] && 'y' != confirm[0])
return TRUE;
printf(CLI_REQ_FAX_FILE, CLI_REQ_FAX_FILE_DEFAULT);
if (gets_quit_if_esc(file, MAX_PATH-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == file[0])
sprintf(file, "%s", CLI_REQ_FAX_FILE_DEFAULT);
channls[0]->do_fax(DF_TX, file);
channls[1]->do_fax(DF_RX, NULL);
}
else if (0 == strnicmp(input, CLI_STOP, strlen(CLI_STOP)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
channls[index]->stop();
}
else if (0 == strnicmp(input, CLI_MODIFYCALL, strlen(CLI_MODIFYCALL)))
{
printf(CLI_REQ_INDEX, MAX_CHANNELS-1, CLI_REQ_INDEX_DEFAULT);
if (gets_quit_if_esc(input, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
index = atoi(input);
if (index>=MAX_CHANNELS || index<0)
index = CLI_REQ_INDEX_DEFAULT;
channls[index]->req_modify_call();
}
else if (0 == strnicmp(input, CLI_REGISTER, strlen(CLI_REGISTER)))
{
printf(CLI_REQ_PROXY_IP, CLI_REQ_PROXY_IP_DEFAULT);
if (gets_quit_if_esc(proxy_ip, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == proxy_ip[0])
sprintf(proxy_ip, "%s", CLI_REQ_PROXY_IP_DEFAULT);
printf(CLI_REQ_LOCAL_IP, CLI_REQ_LOCAL_IP_DEFAULT);
if (gets_quit_if_esc(local_ip, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == local_ip[0])
sprintf(local_ip, "%s", CLI_REQ_LOCAL_IP_DEFAULT);
printf(CLI_REQ_ALIAS, CLI_REQ_ALIAS_DEFAULT);
if (gets_quit_if_esc(alias, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == alias[0])
sprintf(alias, "%s", CLI_REQ_ALIAS_DEFAULT);
printf(CLI_REQ_PASSWORD, CLI_REQ_PASSWORD_DEFAULT);
if (gets_quit_if_esc(password, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == password[0])
sprintf(password, "%s", CLI_REQ_PASSWORD_DEFAULT);
printf(CLI_REQ_REALM, CLI_REQ_REALM_DEFAULT);
if (gets_quit_if_esc(realm, GC_ADDRSIZE-1)) { PRINT_CLI_HELP_MSG; return TRUE; }
if (0 == realm[0])
sprintf(realm, "%s", CLI_REQ_REALM_DEFAULT);
registration(proxy_ip, local_ip, alias, password, realm);
}
else if (0 == strnicmp(input, CLI_UNREGISTER, strlen(CLI_UNREGISTER)))
{
unregistration();
} else if (0 == strnicmp(input, CLI_ENUM, strlen(CLI_ENUM)))
{
enum_dev_information();
}
else if (0 == strnicmp(input, CLI_CAPS, strlen(CLI_CAPS)))
{
enum_support_capabilities();
}
else if (0 == strnicmp(input, CLI_STAT, strlen(CLI_STAT)))
{
print_sys_status();
}
}
return TRUE;
}
void loop()
{
int timeout = 0;
long event_handle = 0;
int evt_dev = 0;
int evt_code = 0;
int evt_len = 0;
void* evt_datap = NULL;
METAEVENT meta_evt;
CHANNEL* pch = NULL;
GC_PARM_BLKP gc_parm_blkp = NULL;
GC_PARM_DATAP gc_parm_datap = NULL;
int value = 0;
PRINT_CLI_HELP_MSG;
while (TRUE) {
do {
timeout = sr_waitevt( 50 );
if (FALSE == analyse_cli()) {
return;
}
} while(timeout == SR_TMOUT);
evt_dev = (int)sr_getevtdev(event_handle);
evt_code = (int)sr_getevttype(event_handle);
evt_len = (int)sr_getevtlen(event_handle);
evt_datap = (void*)sr_getevtdatap(event_handle);
gc_GetMetaEventEx(&meta_evt, event_handle);
if (meta_evt.flags & GCME_GC_EVENT) {
if (evt_dev == board_dev) {
printf("board got GC event : %s\n", GCEV_MSG(evt_code));
if (GCEV_ALARM == meta_evt.evttype) {//for alarm
print_alarm_info(meta_evt);
} else if (GCEV_SERVICERESP == meta_evt.evttype) {//for proxy register
gc_parm_blkp = (GC_PARM_BLKP)(meta_evt.extevtdatap);
while(gc_parm_datap = gc_util_next_parm(gc_parm_blkp, gc_parm_datap)) {
if (IPSET_REG_INFO == gc_parm_datap->set_ID) {
if (IPPARM_REG_STATUS == gc_parm_datap->parm_ID) {
value = (int)(gc_parm_datap->value_buf[0]);
switch(value) {
case IP_REG_CONFIRMED:
printf(" IPSET_REG_INFO/IPPARM_REG_STATUS: IP_REG_CONFIRMED\n");
break;
case IP_REG_REJECTED:
printf(" IPSET_REG_INFO/IPPARM_REG_STATUS: IP_REG_REJECTED\n");
break;
default:
break;
}
} else if (IPPARM_REG_SERVICEID == gc_parm_datap->parm_ID) {
value = (int)(gc_parm_datap->value_buf[0]);
printf(" IPSET_REG_INFO/IPPARM_REG_SERVICEID: 0x%x\n", value);
}
}
}
}
continue;
}
gc_GetUsrAttr(meta_evt.linedev, (void**)&pch);
if (NULL == pch)
continue;
pch->print("got GC event : %s", GCEV_MSG(evt_code));
gc_GetCRN(&pch->crn, &meta_evt);
switch(evt_code)
{
case GCEV_OPENEX:
pch->set_dtmf();
pch->connect_voice();
pch->set_alarm();
break;
case GCEV_UNBLOCKED:
pch->wait_call();
break;
case GCEV_OFFERED:
pch->print_offer_info(meta_evt);
pch->ack_call();
break;
case GCEV_CALLPROC:
pch->accept_call();
break;
case GCEV_ACCEPT:
pch->answer_call();
break;
case GCEV_ANSWERED:
//pch->do_fax(DF_TX);
break;
case GCEV_CALLSTATUS:
pch->print_call_status(meta_evt);
break;
case GCEV_CONNECTED:
//pch->do_fax(DF_RX);
break;
case GCEV_DROPCALL:
pch->release_call();
break;
case GCEV_DISCONNECTED:
pch->print_call_status(meta_evt);
if (TRUE == pch->fax_proceeding)
pch->restore_voice();
pch->drop_call();
break;
case GCEV_EXTENSIONCMPLT:
case GCEV_EXTENSION:
pch->process_extension(meta_evt);
break;
case GCEV_REQ_MODIFY_CALL:
pch->process_extension(meta_evt);
pch->accept_modify_call();
break;
case GCEV_RELEASECALL:
pch->already_connect_fax = FALSE;
pch->fax_proceeding = FALSE;
pch->crn = 0;
break;
case GCEV_TASKFAIL:
pch->print_call_status(meta_evt);
if (TRUE == pch->fax_proceeding)
pch->restore_voice();
break;
case GCEV_REQ_XFER:
pch->accept_xfer(meta_evt);
break;
case GCEV_ACCEPT_XFER:
pch->make_xfer_call();
break;
case GCEV_INIT_XFER:
pch->super_xfer();
break;
case GCEV_ALARM:
pch->print_alarm_info(meta_evt);
break;
default:
pch->print_call_status(meta_evt);
break;
}
} else {
for(int i=0; i<MAX_CHANNELS; i++) {
if (channls[i]->vox_dev == evt_dev || channls[i]->fax_dev == evt_dev)
pch = channls[i];
}
if (NULL == pch)
continue;
switch(evt_code)
{
case TDX_PLAY:
pch->print("got voice event : TDX_PLAY");
pch->process_voice_done();
break;
case TDX_RECORD:
pch->print("got voice event : TDX_RECORD");
pch->process_voice_done();
break;
case TDX_CST:
pch->print("got voice event : TDX_CST");
if (DE_DIGITS == ((DX_CST*)evt_datap)->cst_event) {
pch->print("DE_DIGITS: [%c]", (char)((DX_CST*)evt_datap)->cst_data);
}
break;
case TFX_PHASEB:
pch->print("got fax event : TFX_PHASEB");
pch->print_fax_phase_b_info();
break;
case TFX_PHASED:
pch->print("got fax event : TFX_PHASED");
pch->print_fax_phase_b_info();
break;
case TFX_FAXSEND:
pch->print("got fax event : TFX_FAXSEND");
pch->process_fax_sent();
break;
case TFX_FAXRECV:
pch->print("got fax event : TFX_FAXRECV");
pch->process_fax_received();
break;
case TFX_FAXERROR:
pch->print("got fax event : TFX_FAXERROR");
pch->process_fax_error();
break;
default:
pch->print("unexcepted R4 event(0x%x)", evt_code);
break;
}
}
}
}
int main(int argc, char* argv[])
{
pre_test();
loop();
post_test();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -