www.pudn.com > Ftpwork > NetLayer.cpp
#include "NetLayer.h"
#include "NetState.h"
//##ModelId=3DB10CF00087
BOOL NetLayer::Validate(String* user, String* password)
{
sprintf(msgbuf,"cv username=%s password=%s",user->buffer(),password->buffer());
int len = strlen(msgbuf)+1;
if(ftpsocketobj.SendData(msgbuf,len,BLOCK)==FALSE)
{
return FALSE;
}
len = ftpsocketobj.RecvData(msgbuf,MAXBUFFER,BLOCK);
if(msgbuf[0]=='c' && msgbuf[1]=='y')
{
sscanf(msgbuf,"cy info=%s",msgbuf);
netstateobj.SetState(TRUE);
netstateobj.SetErrorInfo(msgbuf+8);
return TRUE;
}
return FALSE;
}
//##ModelId=3DB1135D0209
BOOL NetLayer::SendCommand(char* msg)
{
if(ftpsocketobj.SendData(msg,strlen(msg)+1,BLOCK)==FALSE)
{
printf("Socket send error\n");
return FALSE;
}
int len;
len = ftpsocketobj.RecvData(msgbuf,MAXBUFFER,BLOCK);
if(msgbuf[0]=='c' && msgbuf[1]=='y')
{
// "cy info=[dd][dd][dfd]...[nn]"
netstateobj.SetState(TRUE);
netstateobj.SetErrorInfo(msgbuf+8);
return TRUE;
}
else if(msgbuf[0]=='c' && msgbuf[1]=='n')
{
// "cn info=information string"
netstateobj.SetState(FALSE );
netstateobj.SetErrorInfo(msgbuf+8);
return TRUE;
}
return FALSE;
}
//##ModelId=3DB11C3B02B8
int NetLayer::GetFile(int fd, size_t filesize)
{
size_t recvnum=0;
char *begin="cb";
size_t temprecv=0;
// nitify the server begin to send data
if(ftpsocketobj.SendData(begin,strlen(begin)+1,BLOCK)==FALSE)
return FALSE;
// receive data from the server
while(recvnum < filesize)
{
temprecv = ftpsocketobj.RecvData(msgbuf, MAXBUFFER, BLOCK);
// if error occur
if(temprecv < 0)
return FALSE;
// posite the pointer fo the file operation
lseek(fd, recvnum, SEEK_SET);
// what has received should be written into the opened file
if(temprecv != write( fd, msgbuf, temprecv))
return FALSE;
recvnum += temprecv;
}
if(recvnum == filesize )
return TRUE;
else
return FALSE;
}
//##ModelId=3DB161D6026A
int NetLayer::PutFile(int fd, size_t length)
{
size_t sendnum=0;
size_t readnum =0;
// waiting for the server to send beginning signal
ftpsocketobj.RecvData(msgbuf, MAXBUFFER, BLOCK);
if(msgbuf[0]=='c' && msgbuf[1]=='b')
{
lseek(fd,0,SEEK_SET);
while(sendnum < length )
{
readnum = read(fd,msgbuf, MAXBUFFER);
ftpsocketobj.SendData(msgbuf,readnum,BLOCK);
sendnum += readnum;
}
return TRUE;
}
// the server cancel the transsion for some reason
else if(msgbuf[0]=='c' && msgbuf[1]=='e')
{
return TRUE;
}
// error process
else
return FALSE;
}
//##ModelId=3DB212AA026A
BOOL NetLayer::SetupConnection(LogInfo* ploginfo)
{
return ftpsocketobj.Connect((struct sockaddr*)ploginfo->GetIPStruct());
}
//##ModelId=3DB21951031D
BOOL NetLayer::CloseConnection()
{
ftpsocketobj.SendData((void *)"cq",3,RETURN);
ftpsocketobj.Close();
return TRUE;
}
//##ModelId=3DB2281D03CE
NetLayer::NetLayer()
{
}
//##ModelId=3DB3B1B50207
NetLayer::NetLayer(const NetLayer& right)
{
}
NetState* NetLayer::GetNetState()
{
return & netstateobj;
}