📄 command.cpp
字号:
#include "command.h"
#define FAX_DEFPORT 4559
#if !defined WIN32
#include <stdio.h>
#include <stdlib.h>
#include <pwd.h>
#include <unistd.h>
#include <sys/types.h>
#endif
tab Command::cmdtab[COMMANDCOUNT] =
{
{T_USER, "USER %s\r\n", {{"230",Success},{"331",Needpasswd},{"500",unRecogniz}} },
{T_PASS, "PASS %s\r\n", {{"230",Success},{"530",SessionClose},{"500",unRecogniz}} },
{T_TZONE, "TZONE %s\r\n", {{"200",Success}} },
{T_MODE, "MODE %s\r\n", {{"200",Success},{"504",modeUnSupport}} },
{T_TYPE, "TYPE %s\r\n", {{"200",Success},{"504",typeUnSupport}} },
{T_PASV, "PASV\r\n", {{"227",Success},{"425",pasvErr}} },
{T_STOT, "STOT\r\n", {{"150",Success},{"550",}} },
{T_JNEW, "JNEW %d\r\n", {{"200",Success},{"503",jobUnCreate}} },
{T_JPARM, "JPARM %s\r\n", {{"213",Success},{"200",Success},{"500",unRecogniz},{"502",unImplement}} },
{T_JSUB, "JSUBM %d\r\n", {{"200",Success},{"504",unSubmit},{"460",submitfaild},{"450",Unknow}}},
{T_JOB, "JOB %s\r\n", {{"200",Success},{"500",cantSetJob}}},
{T_LIST, "LIST %s\r\n", {{"150",Success},{"",}}},
{T_QUIT, "QUIT\r\n", {{"221",Success},{"",}}}
};
Command::Command()
{
memset(szBuffer_,0,BUFFER_SIZE);
}
Command::~Command()
{
}
bool Command::initialize(string& szHost)
{
if(SubmitFaxSession_.Initialize(PROTOCOL_TCP))
{
if(SubmitFaxSession_.Connect((char*)szHost.c_str(),FAX_DEFPORT))
{
SubmitFaxSession_.Recv(szBuffer_,BUFFER_SIZE);
char szSuccess[] = "220";
if(strncmp(szBuffer_,szSuccess,strlen(szSuccess)) != 0)
{
return false;
}
// LOG(Log_Info,szBuffer_);
printf(szBuffer_);
printf("\n");
memset(szBuffer_,0,BUFFER_SIZE);
return true;
}
}
return false;
}
void Command::Release()
{
command(T_QUIT,cmdtab[T_QUIT].cmd);
SubmitFaxSession_.Close();
}
bool Command::login()
{
char userName[64] = {0};
#ifdef WIN32
strcpy(userName,"root");
#else
struct passwd* pwd = NULL;
const char* name = getenv("FAXUSER");
if (name)
pwd = getpwnam(name);
else
pwd = getpwuid(getuid());
if (!pwd)
{
return false;
}
strcpy(userName , pwd->pw_name);
#endif
Result nResult = command(T_USER,cmdtab[T_USER].cmd,userName);//
if(nResult != Success)
{
return false;
}
return true;
}
const char* Command::cmdParam(const char *fmt ...)
{
static char szParam[256] = {0};
va_list ap;
va_start(ap, fmt);
VSNPRINTF(szParam,256,fmt,ap);
va_end(ap);
return (const char*) szParam;
}
Result Command::command(Token cmd,const char* fmt ...)
{
va_list ap;
va_start(ap, fmt);
Result r = vcommand(cmd,fmt, ap);
va_end(ap);
return (r);
}
Result Command::vcommand(Token cmd,const char* fmt, va_list ap)
{
VSNPRINTF(szBuffer_,BUFFER_SIZE,fmt,ap);
// LOG(Log_Info,szBuffer_);
printf(szBuffer_);
printf("\n");
if(SubmitFaxSession_.Send(szBuffer_,strlen(szBuffer_)) > 0)
{
memset(szBuffer_,0,BUFFER_SIZE);
int nRecvCount = SubmitFaxSession_.Recv(szBuffer_,BUFFER_SIZE);
// LOG(Log_Info,szBuffer_);
printf(szBuffer_);
printf("\n");
switch(cmd)
{
case T_USER:
{
for(int i = 0; i < 3; i ++)
{
if(strncmp(szBuffer_,cmdtab[cmd].ResultList[i].szResult,strlen(cmdtab[cmd].ResultList[i].szResult)) == 0)
return cmdtab[cmd].ResultList[i].Meaning;
}
}
break;
case T_JNEW:
case T_PASV:
case T_PASS:
case T_JOB:
case T_TYPE:
case T_MODE:
case T_STOT:
case T_LIST:
case T_QUIT:
{
for(int i = 0; i < 2; i ++)
{
if(strncmp(szBuffer_,cmdtab[cmd].ResultList[i].szResult,strlen(cmdtab[cmd].ResultList[i].szResult)) == 0)
{
return cmdtab[cmd].ResultList[i].Meaning;
}
}
}
break;
case T_TZONE:
{
if(strncmp(szBuffer_,cmdtab[cmd].ResultList[0].szResult,strlen(cmdtab[cmd].ResultList[0].szResult)) == 0)
return cmdtab[cmd].ResultList[0].Meaning;
return Unknow;
}
break;
case T_JPARM:
case T_JSUB:
{
for(int i = 0; i < 4; i ++)
{
if(strncmp(szBuffer_,cmdtab[cmd].ResultList[i].szResult,strlen(cmdtab[cmd].ResultList[i].szResult)) == 0)
return cmdtab[cmd].ResultList[i].Meaning;
}
}
break;
}
}
return Unknow;
}
bool Command::GetHostAndPort(const char* const pstr,char* szIP,int& nPort)
{
char *pIP = strstr(pstr,"(");
if(pIP != NULL)
{
pIP ++;
for(int i =0; i < 4 ;i ++)
{
char * szsearch = strstr(pIP,",");
if(szsearch != NULL)
{
*szsearch = '\0';
strcat(szIP,pIP);
if(i != 3)
strcat(szIP,".");
pIP = szsearch;
pIP ++;
}
else
{
return false;
}
}
char *Head = pIP;
char *szsearch = strstr(pIP,",");
if(szsearch != NULL)
{
*szsearch = '\0';
char *end = szsearch + 1;
szsearch = strstr(szsearch + 1,")");
if(szsearch != NULL)
{
*szsearch = '\0';
nPort = (atoi(Head) << 8) + atoi(end);
}
else
{
return false;
}
}
else
{
return false;
}
return true;
}
else
{
return false;
}
}
bool Command::TransferComplete()
{
memset(szBuffer_,0,BUFFER_SIZE);
SubmitFaxSession_.Recv(szBuffer_,BUFFER_SIZE);
// LOG(Log_Info,szBuffer_);
printf(szBuffer_);
printf("\n");
const char cSuccess[] = "226";
return strncmp(szBuffer_,cSuccess,strlen(cSuccess)) == 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -