FaxConInit

来源:互联网 发布:开淘宝网店怎么发货 编辑:程序博客网 时间:2024/05/16 08:39
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;}elseif(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_file

terminal_init

    io.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);
  
}


0 0
原创粉丝点击