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;
	
}