www.pudn.com > Ftpwork > FileHdr.cpp
#include "FileHdr.h" #include "Monitor.h" #include "NetLayer.h" #include#include #include #include //##ModelId=3DB11BBA032A BOOL FileHdr::GetFile(String* premotefilename, String* plocalfilename, Monitor* pmonitor) { char msg[255]; char * info; NetState* pstate; //judge whether this file existes if (GetFileSize( plocalfilename->buffer())==0 ) { pmonitor->Display("There is already a file in current path with same name!\n"); return FALSE; } sprintf(msg, "cg file=%s",premotefilename->buffer()); if( pnetlayer->SendCommand(msg)==FALSE) { pmonitor->Display("Netware error!\n"); return FALSE; } pstate = pnetlayer->GetNetState(); info = (char*)pstate->GetErrorInfo()->buffer(); if( pstate->IsOk() == TRUE ) { size_t length; int fd; sscanf(info,"%d",&length); printf("%s\n",plocalfilename->buffer()); fd = open(plocalfilename->buffer(), O_RDWR | O_CREAT, S_IRWXU | S_IRWXO); if( fd ==-1 ) { pmonitor->Display("File Open Error!"); pnetlayer->SendCommand("ce"); return FALSE; } pmonitor->Display("Getting file from server...\n"); if(pnetlayer->GetFile(fd, length)==TRUE) { pmonitor->Display("File Trasmission is completed!"); } else { pmonitor->Display("Sorry: error occured during transsion!"); } close(fd); } else { pmonitor->Display("Get operation is denied by server!\n"); pmonitor->Display(info); } return TRUE; } //##ModelId=3DB162FD030F int FileHdr::PutFile(String* plocalfilename, String* premotefile, Monitor* pmonitor) { char msg[255]; char * info; NetState* pstate; long length; length = GetFileSize(plocalfilename->buffer()); if (length == -1) { pmonitor->Display("There is no file named !\n"); return FALSE; } sprintf(msg, "cp file=%s size=%d",premotefile->buffer(),length); if( pnetlayer->SendCommand(msg)==FALSE) { pmonitor->Display("Netware error!\n"); return FALSE; } pstate = pnetlayer->GetNetState(); info = (char*)pstate->GetErrorInfo()->buffer(); if( pstate->IsOk() == TRUE ) { int fd; fd = open(plocalfilename->buffer(), O_RDONLY, S_IRWXU); if( fd ==-1 ) { pmonitor->Display("File Open Error!"); return FALSE; } pmonitor->Display("Putting file to server...\n"); if(pnetlayer->PutFile(fd, length)==TRUE) { pmonitor->Display("File Trasmission is completed!"); } else { pmonitor->Display("Sorry: error occured during transsion!"); } close(fd); } else { pmonitor->Display("Put operation is denied by server!\n"); pmonitor->Display(info); } return TRUE; return 0; } //##ModelId=3DB229D10294 FileHdr::FileHdr() { } //##ModelId=3DB229D102BC void FileHdr::SetNetLayer(NetLayer* pnet) { pnetlayer = pnet; } long FileHdr::GetFileSize(const char* filename) { struct stat stat_p; if ( -1 == stat (filename, &stat_p)) { return -1; } return stat_p.st_size; }