📄 faxagent.cpp
字号:
// FaxAgent.cpp: implementation of the FaxAgent class.
//
//////////////////////////////////////////////////////////////////////
#include "FaxAgent.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
typedef list<string> stringlist;
typedef list<string>::iterator stringIterator;
FaxAgent::FaxAgent()
{
}
FaxAgent::~FaxAgent()
{
}
bool FaxAgent::SendFax(const task &tsk,string serverHost)
{
if(!initialize(serverHost))
return false;
stringlist filelist;
bool bSendSuccess = false;
do
{
if(!login())
break;
if(command(T_TZONE,cmdtab[T_TZONE].cmd,"LOCAL") != Success)
{
break;
}
memset(szBuffer_,0,BUFFER_SIZE);
stringlist attachment = (stringlist) tsk.attachment;
stringIterator sit = attachment.begin();
bool bSuccess = true;
for(; sit != attachment.end();sit ++)
{
if(command(T_MODE,cmdtab[T_MODE].cmd,"S") != Success)
{
bSuccess = false;
break;
}
if(command(T_TYPE,cmdtab[T_TYPE].cmd,"I") != Success)
{
bSuccess = false;
break;
}
if(command(T_PASV,cmdtab[T_PASV].cmd) != Success)
{
bSuccess = false;
break;
}
int pasvPort;
char pasvHost [32] = {0};
if(!GetHostAndPort(szBuffer_,pasvHost,pasvPort))
break;
NetSocket pasvSession;
if(pasvSession.Initialize(PROTOCOL_TCP))
{
if(pasvSession.Connect(pasvHost,pasvPort))
{
if(command(T_STOT,cmdtab[T_STOT].cmd) != Success)
{
bSuccess = false;
break;
}
char SubmitedFileName[64] = {0};
GetSubmitedFileName(szBuffer_,SubmitedFileName);
string subfilename = SubmitedFileName;
filelist.push_back(subfilename);
string& filename = *sit;
if(!SendFile(pasvSession,filename))
{
bSuccess = false;
break;
}
pasvSession.Close();
}
if(!TransferComplete())
{
bSuccess = false;
break;
}
}
}
if(!bSuccess)
{
break;
}
if(command(T_JNEW,cmdtab[T_JNEW].cmd,tsk.taskID) != Success)
{
break;
}
int jobID;
GetJobID(szBuffer_,jobID);
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("FROMUSER %s",tsk.senderName.c_str())) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("LASTTIME 000300")) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("MAXDIALS %d",12)) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("MAXTRIES %d",12)) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("DIALSTRING \"%s\"",tsk.faxNumber.c_str()))!= Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("NOTIFYADDR %s",tsk.senderMail.c_str()))!= Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("VRES %d",98)) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("PAGEWIDTH %d",194)) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("PAGELENGTH %d",281)) != Success)
{
break;
}//NONE
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("NOTIFY \"%s\"","NONE")) != Success)//done+requeue
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("PAGECHOP \"%s\"","default")) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("CHOPTHRESHOLD %d",3)) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("TOCOMPANY \"\"")) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("TOLOCATION \"\"")) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("TOUSER \"%s\"",tsk.receiverName.c_str())) != Success)
{
break;
}
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("TAGLINE \"%s\"",tsk.subject.c_str())) != Success)
{
break;
}
stringIterator fit = filelist.begin();
for(;fit != filelist.end(); fit ++)
{
string filename = *fit;
if(command(T_JPARM,cmdtab[T_JPARM].cmd,cmdParam("DOCUMENT %s",filename.c_str())) != Success)
{
break;
}
}
if(command(T_JSUB,cmdtab[T_JSUB].cmd,jobID) != Success)
{
break;
}
if(command(T_JOB,cmdtab[T_JOB].cmd,"DEFAULT") != Success)
{
break;
}
bSendSuccess = true;
} while(false);
filelist.clear();
Release();
return bSendSuccess;
}
bool FaxAgent::GetSubmitedFileName(const char* const pstr,char* pFileName)
{
char szMark[16] = "FILE: ";
char szEndMark[16] = " (";
char* pMark = strstr(pstr,szMark);
if(pMark != NULL)
{
char *pEndMark = strstr(pMark,szEndMark);
if(pEndMark != NULL)
{
*pEndMark = '\0';
}
pMark += strlen(szMark);
strcpy(pFileName,pMark);
return true;
}
return false;
}
bool FaxAgent::GetJobID(const char* const pstr,int& jobID)
{
const char *JOBID = "jobid: ";
const char *GROUPID = " groupid:";
char *pszID = strstr(pstr,JOBID);
if(pszID != NULL)
{
char *pszEnd = strstr(pszID,GROUPID);
if(pszEnd != NULL)
{
*pszEnd = '\0';
jobID = atoi(pszID + strlen(JOBID));
return true;
}
}
return false;
}
bool FaxAgent::SendFile(NetSocket& SendSocket,string& file)
{
FILE* pFile = fopen(file.c_str(),"rb");
if(pFile != NULL)
{
const long FILE_READ_SIZE = 1024;
char FileData[FILE_READ_SIZE];
fseek(pFile,0,SEEK_END);
long filesize = ftell(pFile);
fseek(pFile,0,SEEK_SET);
int nReadCount = 0;
long nRemainCount = filesize;
while(nRemainCount > 0)
{
int nReaded = fread(FileData,1,FILE_READ_SIZE,pFile);
SendSocket.Send(FileData,nReaded);
nRemainCount -= nReaded;
}
fclose(pFile);
return true;
}
return false;
}
bool FaxAgent::ListStat(string &host, string &status)
{
if(!initialize(host))
return false;
stringlist filelist;
bool bSendSuccess = false;
do
{
if(!login())
break;
if(command(T_PASV,cmdtab[T_PASV].cmd) != Success)
{
break;
}
int pasvPort;
char pasvHost [32] = {0};
if(!GetHostAndPort(szBuffer_,pasvHost,pasvPort))
break;
NetSocket pasvSession;
if(pasvSession.Initialize(PROTOCOL_TCP))
{
if(pasvSession.Connect(pasvHost,pasvPort))
{
if(command(T_LIST,cmdtab[T_LIST].cmd,"status") != Success)
{
break;
}
int nRecvCount = 0;
int nRecvedCount = 0;
char *pState = NULL;
SLEEP(30);
int nStatusBufSize = pasvSession.GetMaxCanReadSize();
char* pStatusBuf = new char[nStatusBufSize + 1];
while (nRecvedCount < nStatusBufSize)
{
nRecvCount = pasvSession.Recv(pStatusBuf + nRecvedCount,
BUFFER_SIZE);
if(nRecvCount == -1)
break;
nRecvedCount += nRecvCount;
}
*(pStatusBuf + nRecvedCount) = '\0';
status = pStatusBuf;
delete[]pStatusBuf;
pasvSession.Close();
if(!TransferComplete())
{
break;
}
}
}
bSendSuccess = true;
}
while(false);
Release();
return bSendSuccess;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -