⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hmp_test_cpp-c++.cpp

📁 列出了通过语音卡打电话和发传真的源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
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 + -