📄 ivfxboardunit.cpp
字号:
return SEND_FAX_ERROR_OFFHOOK;
}
#ifndef CTI_VC_VERSION
ITools::WriteLog(CTI,"摘机挂机成功","通道号"+IntToStr(channelnumber));
ITools::WriteLog(CTI,"开始拨号...",
"通道号"+IntToStr(channelnumber)+
" 传真号码"+AnsiString(dialstring)+
" 文件名"+AnsiString(filename));
#endif
// 分析拨打号码
// fullname ==> 58752522-13 prefix: 58752522 suffix: 13
// fullname ==> 58752522 prefix: 58752522 suffix: "";
GetPhoneInfo(dialstring);
// 拨号未成功
if (RouteVoice(channelnumber) == FALSE) {
ITools::WriteLog(CTI,"拨号路由时语音失败","通道号"+IntToStr(channelnumber));
}
if ((term = dx_dial(m_hVox[channelnumber],prefix.c_str(),&capp,DX_CALLP|EV_SYNC)) == -1) {
#ifndef CTI_VC_VERSION
ITools::WriteLog(CTI,"拨号函数调用失败","通道号"+IntToStr(channelnumber)+
" 传真号码"+AnsiString(dialstring)+
" 文件名"+AnsiString(filename));
#endif
dx_sethook(m_hVox[channelnumber],DX_ONHOOK,EV_SYNC);
dx_fileclose(tifd1);
return SEND_FAX_ERROR_DIALFUN;
}
ITools::WriteLog(CTI,"拨号函数返回:",IntToStr(term));
switch (term) {
case CR_CNCT: // 连接成功
case CR_FAXTONE: // Fax提示音
#ifndef CTI_VC_VERSION
ITools::WriteLog(CTI,"拨号成功连接","通道号"+IntToStr(channelnumber)+
" 传真号码"+prefix+
" 文件名"+AnsiString(filename));
#endif
// 有分机
if (suffix != "") {
::Sleep(500);
ITools::WriteLog(CTI,"开始拨分机...","通道号"+IntToStr(channelnumber)+
" 分机号码"+suffix);
if ((sufterm = dx_dial(m_hVox[channelnumber],suffix.c_str(),&capp,DX_CALLP|EV_SYNC)) == -1) {
ITools::WriteLog(CTI,"分机拨号函数失败","通道号"+IntToStr(channelnumber)+
" 分机号码"+suffix);
dx_fileclose(tifd1);
dx_sethook(m_hVox[channelnumber],DX_ONHOOK,EV_SYNC);
return sufterm;
}
else {
switch (sufterm) {
case CR_CNCT:
case CR_FAXTONE: // Fax提示音
case CR_NORB:
ITools::WriteLog(CTI,"分机连接成功","通道号"+IntToStr(channelnumber)+
" 分机号码"+suffix);
if (extension != "") {
::Sleep(500);
dx_dial(m_hVox[channelnumber],extension.c_str(),&capp,DX_CALLP|EV_SYNC);
::Sleep(2000);
dx_dial(m_hVox[channelnumber],extension.c_str(),&capp,DX_CALLP|EV_SYNC);
}
break;
default:
ITools::WriteLog(CTI,"分机连接失败","通道号"+IntToStr(channelnumber)+
" 传真号码"+suffix);
dx_fileclose(tifd1);
dx_sethook(m_hVox[channelnumber],DX_ONHOOK,EV_SYNC);
return sufterm;
} // End of switch (sufterm);
}
} // End of (有分机)
else {
if (extension != "") { // 说明是传真对接,不需要播放提示音
::Sleep(500);
dx_dial(m_hVox[channelnumber],extension.c_str(),&capp,DX_CALLP|EV_SYNC);
::Sleep(2000);
dx_dial(m_hVox[channelnumber],extension.c_str(),&capp,DX_CALLP|EV_SYNC);
}
else {
// 不管是不是传真机,先提示,因为有可能是人接
AnsiString HintWav = ITools::GetExePath()+"\\"+DEFAULT_RESDIR+"\\"+SEND_FAX_HINT_MSG;
PlayVoxFile(channelnumber,HintWav.c_str());
ITools::WriteLog(CTI,"播放提示音结束","");
::Sleep(SEND_FAX_HINT_SILENCE);
}
}
#ifndef CTI_VC_VERSION
ITools::WriteLog(CTI,"开始发送传真...","通道号"+IntToStr(channelnumber)+
" 传真号码"+AnsiString(dialstring)+
" 文件名"+AnsiString(filename));
#endif
// 开始发送传真
if (RouteFax(channelnumber) == FALSE) {
ITools::WriteLog(CTI,"路由传真通道失败","通道号"+IntToStr(channelnumber));
}
if (fx_sendfax(m_hFax[channelnumber],&iott,EV_SYNC)== -1) {
#ifndef CTI_VC_VERSION
ITools::WriteLog(CTI,"发送传真失败","通道号"+IntToStr(channelnumber)+
" 传真号码"+AnsiString(dialstring)+
" 文件名"+AnsiString(filename));
#endif
// 发送传真失败
if (dx_fileclose(tifd1) == -1) {
RouteVoice(channelnumber);
return SEND_FAX_ERROR_FILECLOSE;
}
if (dx_sethook(m_hVox[channelnumber],DX_ONHOOK,EV_SYNC) == -1) {
RouteVoice(channelnumber);
return SEND_FAX_ERROR_ONHOOK;
}
RouteVoice(channelnumber);
return SEND_FAX_ERROR_SENDFAX;
}
RouteVoice(channelnumber);
break;
default:
#ifndef CTI_VC_VERSION
ITools::WriteLog(CTI,"拨号失败","通道号"+IntToStr(channelnumber)+
" 传真号码"+AnsiString(dialstring)+
" 文件名:"+AnsiString(filename)+"失败代码:"+IntToStr(term));
#endif
dx_fileclose(tifd1);
dx_sethook(m_hVox[channelnumber],DX_ONHOOK,EV_SYNC);
return term;
} // End of switch (term);
if (dx_fileclose(tifd1) == -1) {
return SEND_FAX_ERROR_FILECLOSE;
}
dx_sethook(m_hVox[channelnumber],DX_ONHOOK,EV_SYNC);
return 0;
}
//---------------------------------------------------------------------------
/****************************************************************************
* 函数名称: RecFax
*
* 描述: 接受传真文件,返回接受结果
*
* 参数: In:
* channelnumber: 接受占用的传真通道号 0.1.2..
* filename: 要接受的传真文件(tiff/txt)
* return:
* 发送结果: 0:成功
*
* 历史: Created by xr on 03/09/25
*****************************************************************************/
int IVFXBoard::RecFax(int channelnumber, char* filename)
{
static DX_CAP capp;
dx_clrcap(&capp);
capp.ca_nbrdna = 4;
if (fx_initstat(m_hFax[channelnumber],DF_RX) == -1) {
ILogWriter::WriteLog(CTI,"InitFax失败","");
return -1;
}
ILogWriter::WriteLog(CTI,"InitFax成功","");
if (RouteFax(channelnumber) == FALSE) {
ITools::WriteLog(CTI,"路由传真通道失败","通道号"+IntToStr(channelnumber)+"文件名:"+AnsiString(filename));
}
ILogWriter::WriteLog(CTI,"RouteFax成功","");
if (fx_rcvfax(m_hFax[channelnumber],filename,DF_NOPOLL|DF_TIFF|DF_RXRESLO|EV_SYNC) == -1) {
ILogWriter::WriteLog(CTI,"RecFax失败","");
RouteVoice(channelnumber);
return -1;
}
ILogWriter::WriteLog(CTI,"RecFax成功","");
RouteVoice(channelnumber);
return 0;
}
//---------------------------------------------------------------------------
void IVFXBoard::PlayWavFile(int channelnumber,char * filename)
{
// universal DV_TPT used for playing files
DV_TPT tptplay[] = {{IO_CONT, DX_MAXDTMF, 1, TF_MAXDTMF},
{IO_EOT, DX_LCOFF, 1, TF_LCOFF}};
int ret = dx_playwav(m_hVox[channelnumber],filename,&tptplay[0],EV_SYNC);
ret++;
}
//---------------------------------------------------------------------------
void IVFXBoard::PlayVoxFile(int channelnumber,char * filename)
{
// universal DV_TPT used for playing files
DV_TPT tptplay[] = {{IO_CONT, DX_MAXDTMF, 1, TF_MAXDTMF},
{IO_EOT, DX_LCOFF, 1, TF_LCOFF}};
int ret = dx_playvox(m_hVox[channelnumber],filename,&tptplay[0],NULL,EV_SYNC);
ret++;
}
//---------------------------------------------------------------------------
void IVFXBoard::SetFaxTitle(char *title, int len)
{
if (!bSetTitle) {
bSetTitle = true;
memset(faxtitle,0,FAXTITLE_MAX_LEN);
memcpy(faxtitle,title,len);
}
}
//---------------------------------------------------------------------------
// 没用到
void IVFXBoard::DongJIn()
{
char sName[100];
memset(sName,0,100);
int faxcunt;
char g_sTmp[100];
memset(g_sTmp,0,100);
int iDevH = 0;
int iSubDevNum = 0;
char ** CHNamesP;
int nRet = sr_getboardcnt("FAX", &faxcunt);//faxcunt为取得的逻辑板卡数(4路为一逻辑板卡)
if(nRet != -1)
{
for(int n=1; n <= faxcunt; n++)
{
sprintf(sName, "dxxxB%d", n);
if ((iDevH = fx_open(sName, 0)) == -1)
{
sprintf(g_sTmp,"传真:%s 打开错误!",sName);
}
// get channel device names
iSubDevNum = ATDV_SUBDEVS(iDevH);//iSubDevNum 为逻辑板卡通道数=4
CHNamesP = ATDX_CHNAMES(iDevH);
for (int cnt=0; cnt < iSubDevNum; cnt++)
{
memset(g_sTmp,0,100);
strcpy(g_sTmp, *(CHNamesP + cnt));//取得通道名称
/*
g_iTotalFax++; //传真通道数
*/
}
fx_close(iDevH);
}
}
}
//---------------------------------------------------------------------------
BOOL IVFXBoard::RouteVoice(int channelnumber)
{
#ifdef DONGJIN_VER
if(nr_scunroute(m_hVox[channelnumber],
SC_LSI,
m_hFax[channelnumber],
SC_FAX,
SC_FULLDUP ) == -1)
{
int i = 10;
i++;
//return FALSE;
}
if(nr_scroute(m_hVox[channelnumber],
SC_LSI,
m_hVox[channelnumber],
SC_VOX,
SC_FULLDUP ) == -1)
{
int i = 10;
i++;
return FALSE;
}
return TRUE;
#else
return TRUE;
#endif
}
//---------------------------------------------------------------------------
BOOL IVFXBoard::RouteFax(int channelnumber)
{
#ifdef DONGJIN_VER
if(nr_scunroute(m_hVox[channelnumber],
SC_LSI,
m_hVox[channelnumber],
SC_VOX,
SC_FULLDUP ) == -1)
{
//return FALSE;
int i = 10;
i++;
}
if(nr_scroute(m_hVox[channelnumber],
SC_LSI,
m_hFax[channelnumber],
SC_FAX,
SC_FULLDUP ) == -1)
{
int i = 10;
i++;
return FALSE;
}
return TRUE;
#else
return TRUE;
#endif
}
//---------------------------------------------------------------------------
void IVFXBoard::GetPhoneInfo(AnsiString phone)
{
AnsiString fullname = AnsiString(phone);
prefix = "";
suffix = "";
extension = "";
if (fullname.Pos("-") !=0 ){
int pos = fullname.Pos("-");
prefix = fullname.SubString(1,pos-1);
suffix = fullname.SubString(pos+1,fullname.Length()-pos);
if (suffix.Pos("*") != 0) {
int expos = suffix.Pos("*");
extension = suffix.SubString(expos+1,suffix.Length()-expos);
suffix = suffix.SubString(1,expos-1);
}
}
else {
prefix = fullname;
suffix = "";
if (prefix.Pos("*") != 0) {
int pos = prefix.Pos("*");
extension = prefix.SubString(pos+1,prefix.Length()-pos);
prefix = prefix.SubString(1,pos-1);
} // End of if
}
}
//---------------------------------------------------------------------------
int IVFXBoard::FodFax(int channelnumber, char * dialnumber)
{
int tifd1 = 0;
// 先挂机再摘机
if (dx_sethook(m_hVox[channelnumber],DX_ONHOOK,EV_SYNC) == -1) {
dx_fileclose(tifd1);
return SEND_FAX_ERROR_ONHOOK;
}
if (dx_sethook(m_hVox[channelnumber],DX_OFFHOOK,EV_SYNC) == -1) {
dx_fileclose(tifd1);
return SEND_FAX_ERROR_OFFHOOK;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -