您的位置:首页 > 其它

FaxConInit

2015-08-21 19:01 302 查看
int FaxControlProcess::FaxConSend()
{
terminal_state_t t = NULL;
struct timeval now, state, start, last;
struct udptl_io io;

uint8_t buf[2048];
int len, last_state = 0;

fd_set rdList;
struct timeval selTv;
int ret = 0;
flog("FaxControlProcess::FaxConSend enter");

if((t = FaxConInit()) == NULL)
{
printf("FaxConInit is fail!\n");
SetFaxLastErr(FAX_ERR_FAXINIT);
ReleaseSock();
return -1;
}
io.send = terminal_send;
udptl_register(t->t38_fe.t38->hudptl, &io, (void*)fd);

gettimeofday(&now, NULL);
state = now;
start = now;
while(1){
if(stop)
{
printf("is initiative stop!\n");
SetFaxLastErr(FAX_ERR_INITI_DISCON);
flog("is initiative stop!");
break;
}
FD_ZERO(&rdList);
FD_SET(fd, &rdList);
selTv.tv_sec = 0;
selTv.tv_usec = 10000;
ret = select(fd+1, &rdList, NULL, NULL, &selTv);
if(ret < 0)
{
printf("select is fail!\n");
SetFaxLastErr(FAX_ERR_SELECT_TIMEOUT);
flog("select is fail!");
break;
}
flog("step1");
if(ret > 0 && FD_ISSET(fd, &rdList))
{
len = recv(fd, (char *)buf, sizeof(buf), 0);
if(len > 0){
printf("is recv file:%d\n",len);
flog("is recv file:%d",len);
fdata(buf,len);

udptl_recv_proc(t->t38_fe.t38->hudptl,buf, len);
flog("step1.1");
}
}//else
//printf("select is timeout!\n");
flog("step2");

last = now;
gettimeofday(&now, NULL);
if(tvdiff_sec(now, start) > WATCHDOG_TOTAL_TIMEOUT || tvdiff_sec(now, state) > WATCHDOG_STATE_TIMEOUT){
printf("time out \n");
SetFaxLastErr(FAX_ERR_SEND_TIMEOUT);
flog("time out");
break;
}
flog("step3");
terminal_send_timeout(t, tvdiff_us(now, last) * 8 / 1000);
if(last_state != t30_get_status(t->t30)){
flog("last_state  last %x",last_state);
last_state = t30_get_status(t->t30);
flog("last_state  now %x",last_state);
state = now;
}
if(last_state == 12)//T30_PHASE_CALL_FINISHED
{
SetFaxLastErr(GetFaxt30LastErr(t));
flog("last_state == 12");
break;
}
flog("step4");
}
printf("Send faxTransSuc:%d,lastErr:%d\n", faxTransSuc, GetFaxLastErr());
flog("Send faxTransSuc:%d,lastErr:%d", faxTransSuc, GetFaxLastErr());
if(GetFaxLastErr() == T30_ERR_OK)
faxTransSuc = true;
udptl_unregister(t->t38_fe.t38->hudptl);
terminal_free(t);
ReleaseSock();

flog("FaxControlProcess::FaxConSend out");

return 0;
}
terminal_state_t FaxControlProcess::FaxConInit()
{
terminal_state_t t;
struct terminal_arg arg;

memset(&arg, 0, sizeof(arg));
if(faxConArg.t38FillBitRemoval)
arg.fill_bit_removal = 1;
arg.jbig = 1;
arg.mmr = 1;
if(faxConArg.isCaller)
arg.caller = 1;
arg.max_ifp = faxConArg.t38FaxMaxDatagram;
if(strcmp(faxConArg.T38FaxUdpEC,"t38UDPFEC") == 0)
{
arg.ecm = 1;//UDPTL_ERROR_CORRECTION_FEC;
}else
if(strcmp(faxConArg.T38FaxUdpEC,"t38UDPRedundancy") == 0)
{
arg.ecm = 2;//UDPTL_ERROR_CORRECTION_REDUNDANCY;
}else
{
printf("is not find udpEC!\n");
return NULL;
}
if(arg.ecm == 1)
{
arg.rd_cnt = faxConArg.numIFPs;
}else
{
arg.rd_cnt = faxConArg.data_redundancy;
}

t = terminal_init(&arg);
if(NULL == t){
printf("Failed to init terminal_init\n");
return NULL;
}

t30_set_ecm_capability(t->t30, 1);
t30_set_supported_compressions(t->t30, T30_SUPPORT_T4_1D_COMPRESSION | T30_SUPPORT_T4_2D_COMPRESSION | T30_SUPPORT_T6_COMPRESSION);
if(isSend)
{
t30_set_tx_file(t->t30, (const unsigned char *)(tiffFile.c_str()), -1, -1);
}else
{
t30_set_rx_file(t->t30, (const unsigned char *)(tiffFile.c_str()), -1);
}
return t;
}
t30_set_tx_fileterminal_initio.send = terminal_send;udptl_register(t->t38_fe.t38->hudptl, &io, (void*)fd);int MsgRecvInterface::RsqCallFax(char* data, int len, int seqID,int comID){ret = t_packet.faxprol->SetNetIpPort(t_packet.port,t_req->faxMedia.ip,t_req->faxMedia.port);ret = t_packet.faxprol->StartFax(arg,fileName,NULL);}int FaxControlProcess::StartFax(struct FaxConArg &setFaxPar,const char *sendFile,const char *recvFile){CreateTiffName(cFile, temp)memcpy(&faxConArg, &setFaxPar, sizeof(faxConArg));noTiffFile = cFile;tiffFile = temp;Start() ;}void * FaxControlProcess::Thread(){while (stop == false){if(isSend){FileConvert(noTiffFile, tiffFile);FaxConSend();}else{FaxConRecv();FileConvert(tiffFile,noTiffFile);}break;}return NULL;}int FaxControlProcess::FaxConSend(){struct udptl_io io;fd_set rdList;FaxConInit());io.send = terminal_send;udptl_register(t->t38_fe.t38->hudptl, &io, (void*)fd);while(1){ret = select(fd+1, &rdList, NULL, NULL, &selTv);if(ret > 0 && FD_ISSET(fd, &rdList)){len = recv(fd, (char *)buf, sizeof(buf), 0);udptl_recv_proc(t->t38_fe.t38->hudptl,buf, len);}}terminal_send_timeout(t, tvdiff_us(now, last) * 8 / 1000);}udptl_unregister(t->t38_fe.t38->hudptl);}
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: