⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processcommand.cpp

📁 Visual Studio.net 2003 基于Socket套接口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		strcpy(pPerHandleData->uHandleInfo.cCtrlInfo.strCurrentWorkPath,strNewPath);
		return ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"250 Directory changed to %s.\r\n",strNewPath);
	}
	else
	{
		ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"550 %s: No such file or Directory.\r\n",strNewPath);
	}
	return false;
}
bool ProcessSizeCommand(DWORD dwBytesTransferred,LPPER_HANDLE_DATA pPerHandleData,LPPER_IO_OPERATION_DATA pPerIOData) 
{
	char strFileName[128];
	strcpy(strFileName,&(pPerIOData->cBuffer.buf[5]));
	FormatString (strFileName);
	char strFilePathName[1024];
	strcpy(strFilePathName,pPerHandleData->uHandleInfo.cCtrlInfo.strCurrentWorkPath);
	FormatString(strFilePathName);
	if(strFilePathName[strlen(strFilePathName)-1]!='\\')
	{
		strcat(strFilePathName,"\\");
	}
	strcat(strFilePathName,strFileName);
	HANDLE hQueryFile=CreateFile(strFilePathName,
			GENERIC_READ,
			FILE_SHARE_READ,
			NULL,
			OPEN_EXISTING,
			FILE_FLAG_SEQUENTIAL_SCAN,
			NULL);
	
	if(hQueryFile==INVALID_HANDLE_VALUE)
	{
		ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"550 %s: No such file or Directory.\r\n",strFilePathName);
	}
	else
	{
		DWORD dwFileSizeHigh;
		return ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"213 %d Bytes\r\n",GetFileSize(hQueryFile,&dwFileSizeHigh));
	}
	return false;
}
bool ProcessRetrCommand(DWORD dwBytesTransferred,LPPER_HANDLE_DATA pPerHandleData,LPPER_IO_OPERATION_DATA pPerIOData) 
{
	char strFileName[128];
	strcpy(strFileName,&(pPerIOData->cBuffer.buf[5]));
	FormatString (strFileName);
	char strFilePathName[1024];
	strcpy(strFilePathName,pPerHandleData->uHandleInfo.cCtrlInfo.strCurrentWorkPath);
	FormatString(strFilePathName);
	if(strFilePathName[strlen(strFilePathName)-1]!='\\')
	{
		strcat(strFilePathName,"\\");
	}
	strcat(strFilePathName,strFileName);
//	printf("DEBUG :FILE Name :%s \r\n",strFilePathName);
	
	
	HANDLE hSendFile=CreateFile(strFilePathName,
			GENERIC_READ,
			FILE_SHARE_READ,
			NULL,
			OPEN_EXISTING,
			FILE_FLAG_SEQUENTIAL_SCAN,
			NULL);
	if(hSendFile==INVALID_HANDLE_VALUE)
	{
		printf("DEBUG :Open File Error %d\r\n",GetLastError ());
		ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"550 %s: No such file or Directory.\r\n",strFilePathName);
		CloseDataSocket(pPerHandleData);
		return false;

	}

	TRANSMIT_PACKETS_ELEMENT cTransmitData;
	DWORD dwFileSizeHigh=0;
	cTransmitData.cLength=GetFileSize(hSendFile,&dwFileSizeHigh)-pPerHandleData->uHandleInfo.cCtrlInfo.dwDataResetPosition;
	cTransmitData.hFile=hSendFile;
	
	if(pPerHandleData->uHandleInfo.cCtrlInfo.dwDataResetPosition!=0)
	{
		
		if(SetFilePointer(hSendFile,pPerHandleData->uHandleInfo.cCtrlInfo.dwDataResetPosition,NULL,FILE_BEGIN)== INVALID_SET_FILE_POINTER)
		{
			printf("DEBUG :SetFilePointer Error %d\r\n",GetLastError ());
			ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"550 Permission denied.\r\n");
			CloseDataSocket(pPerHandleData);
			return false;
		}
	}/**/
	pPerHandleData->uHandleInfo.cCtrlInfo.hCurrentFileHandle=hSendFile;
	cTransmitData.dwElFlags=TP_ELEMENT_FILE;
	memset(pPerIOData,0,sizeof(PER_IO_OPERATION_DATA));
	pPerIOData->cBuffer.buf=pPerIOData->stBuffer;
	pPerIOData->IoType=ControlIoSend;
	pPerIOData->uIoInfo.cControlIoSendInfo.enNextToDo=ToSendData;
	memcpy(pPerIOData->uIoInfo.cControlIoSendInfo.bWhatToDo,&cTransmitData,sizeof(cTransmitData));
	DWORD dwNumberOfDataSended=0;
	if(pPerHandleData->uHandleInfo.cCtrlInfo.bBePasv)
	{
		sprintf(pPerIOData->stBuffer,"150 Opening ASCII mode data connection for /bin/ls.\r\n");
	}
	else
	{
		sprintf(pPerIOData->stBuffer,"125 Data connection already open; Transfer starting.\r\n");
	}
	pPerIOData->cBuffer.len=(DWORD)strlen(pPerIOData->cBuffer.buf);
	pPerIOData->uIoInfo.cControlIoSendInfo.dwSendedDataLength=0;	
	if(WSASend(pPerHandleData->Socket,&(pPerIOData->cBuffer),1,&(dwNumberOfDataSended),0,&(pPerIOData->Overlapped),NULL) ==SOCKET_ERROR ) 
	{ 
		if (WSAGetLastError() != ERROR_IO_PENDING) 
		{ 
			printf("WSASend() fialed with error %d\n",WSAGetLastError()); 
			return false; 
		} 
	} 
	return true;
}
bool ProcessStorCommand(DWORD dwBytesTransferred,LPPER_HANDLE_DATA pPerHandleData,LPPER_IO_OPERATION_DATA pPerIOData) 
{
	char strFileName[128];
	strcpy(strFileName,&(pPerIOData->cBuffer.buf[5]));
	FormatString (strFileName);
	char strFilePathName[1024];
	strcpy(strFilePathName,pPerHandleData->uHandleInfo.cCtrlInfo.strCurrentWorkPath);
	FormatString(strFilePathName);
	if(strFilePathName[strlen(strFilePathName)-1]!='\\')
	{
		strcat(strFilePathName,"\\");
	}
	strcat(strFilePathName,strFileName);
	HANDLE hRecvFile=INVALID_HANDLE_VALUE;
	if(pPerHandleData->uHandleInfo.cCtrlInfo.dwDataResetPosition!=0)
	{
		hRecvFile=CreateFile(strFilePathName,
			GENERIC_WRITE,
			FILE_SHARE_WRITE,
			NULL,
			OPEN_EXISTING,
			FILE_FLAG_SEQUENTIAL_SCAN,
			NULL);
	}
	else
	{
		hRecvFile=CreateFile(strFilePathName,
			GENERIC_WRITE,
			FILE_SHARE_WRITE,
			NULL,
			CREATE_ALWAYS,
			FILE_FLAG_SEQUENTIAL_SCAN,
			NULL);
	}
	
	if(hRecvFile==INVALID_HANDLE_VALUE)
	{
		printf("DEBUG :Open File Error %d\r\n",GetLastError ());
		ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"550 Permission denied.\r\n");
		CloseDataSocket(pPerHandleData);
		return false;

	}
	
	else
	{
		if(pPerHandleData->uHandleInfo.cCtrlInfo.dwDataResetPosition!=0)
		{
			DWORD dwFileSizeHigh=0;
			printf("DEBUG: Reset to %d\r\n",pPerHandleData->uHandleInfo.cCtrlInfo.dwDataResetPosition);
			if(SetFilePointer(hRecvFile,NULL,NULL,FILE_END)== INVALID_SET_FILE_POINTER)
			{
				printf("DEBUG :SetFilePointer Error %d\r\n",GetLastError ());
				ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"550 Permission denied.\r\n");
				CloseDataSocket(pPerHandleData);
				return false;
			}
		}
		pPerHandleData->uHandleInfo.cCtrlInfo.hCurrentFileHandle=hRecvFile;
		TRANSMIT_PACKETS_ELEMENT cTransmitData;
		cTransmitData.dwElFlags=TP_ELEMENT_FILE;
		DWORD dwFileSizeHigh=0;
		cTransmitData.cLength=0;
		cTransmitData.hFile=hRecvFile;
		memset(pPerIOData,0,sizeof(PER_IO_OPERATION_DATA));
		pPerIOData->cBuffer.buf=pPerIOData->stBuffer;
		pPerIOData->IoType=ControlIoSend;
		pPerIOData->uIoInfo.cControlIoSendInfo.enNextToDo=ToReceiveData;
		memcpy(pPerIOData->uIoInfo.cControlIoSendInfo.bWhatToDo,&cTransmitData,sizeof(cTransmitData));
		DWORD dwNumberOfDataSended=0;
		sprintf(pPerIOData->stBuffer,"150 Opening BINARY mode data connection for %s.\r\n",strFileName);
		pPerIOData->cBuffer.len=(DWORD)strlen(pPerIOData->cBuffer.buf);
		pPerIOData->uIoInfo.cControlIoSendInfo.dwSendedDataLength=0;	
		if(WSASend(pPerHandleData->Socket,&(pPerIOData->cBuffer),1,&(dwNumberOfDataSended),0,&(pPerIOData->Overlapped),NULL) ==SOCKET_ERROR ) 
		{ 
			if (WSAGetLastError() != ERROR_IO_PENDING) 
			{ 
				printf("WSASend() fialed with error %d\n",WSAGetLastError()); 
				return false;
			} 
		} 
	}
	return true;
}
bool ProcessAppeCommand(DWORD dwBytesTransferred,LPPER_HANDLE_DATA pPerHandleData,LPPER_IO_OPERATION_DATA pPerIOData) 
{
	char strFileName[128];
	strcpy(strFileName,&(pPerIOData->cBuffer.buf[5]));
	FormatString (strFileName);
	char strFilePathName[1024];
	strcpy(strFilePathName,pPerHandleData->uHandleInfo.cCtrlInfo.strCurrentWorkPath);
	FormatString(strFilePathName);
	if(strFilePathName[strlen(strFilePathName)-1]!='\\')
	{
		strcat(strFilePathName,"\\");
	}
	strcat(strFilePathName,strFileName);
	HANDLE hRecvFile=CreateFile(strFilePathName,
			GENERIC_WRITE,
			FILE_SHARE_WRITE,
			NULL,
			OPEN_EXISTING,
			FILE_FLAG_SEQUENTIAL_SCAN,
			NULL);
	if(hRecvFile==INVALID_HANDLE_VALUE)
	{
		printf("DEBUG :Open File Error %d\r\n",GetLastError ());
		ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"550 Permission denied.\r\n");
		CloseDataSocket(pPerHandleData);
		return false;

	}	
	else
	{
		if(pPerHandleData->uHandleInfo.cCtrlInfo.dwDataResetPosition!=0)
		{
			DWORD dwFileSizeHigh=0;
			printf("DEBUG: Reset to %d\r\n",pPerHandleData->uHandleInfo.cCtrlInfo.dwDataResetPosition);
			if(SetFilePointer(hRecvFile,NULL,NULL,FILE_END)== INVALID_SET_FILE_POINTER)
			{
				printf("DEBUG :SetFilePointer Error %d\r\n",GetLastError ());
				ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"550 Permission denied.\r\n");
				CloseDataSocket(pPerHandleData);
				return false;
			}
		}
		pPerHandleData->uHandleInfo.cCtrlInfo.hCurrentFileHandle=hRecvFile;
		TRANSMIT_PACKETS_ELEMENT cTransmitData;
		cTransmitData.dwElFlags=TP_ELEMENT_FILE;
		DWORD dwFileSizeHigh=0;
		cTransmitData.cLength=0;
		cTransmitData.hFile=hRecvFile;
		memset(pPerIOData,0,sizeof(PER_IO_OPERATION_DATA));
		pPerIOData->cBuffer.buf=pPerIOData->stBuffer;
		pPerIOData->IoType=ControlIoSend;
		pPerIOData->uIoInfo.cControlIoSendInfo.enNextToDo=ToReceiveData;
		memcpy(pPerIOData->uIoInfo.cControlIoSendInfo.bWhatToDo,&cTransmitData,sizeof(cTransmitData));
		DWORD dwNumberOfDataSended=0;
		sprintf(pPerIOData->stBuffer,"150 Opening BINARY mode data connection for %s.\r\n",strFileName);
		pPerIOData->cBuffer.len=(DWORD)strlen(pPerIOData->cBuffer.buf);
		pPerIOData->uIoInfo.cControlIoSendInfo.dwSendedDataLength=0;	
		if(WSASend(pPerHandleData->Socket,&(pPerIOData->cBuffer),1,&(dwNumberOfDataSended),0,&(pPerIOData->Overlapped),NULL) ==SOCKET_ERROR ) 
		{ 
			if (WSAGetLastError() != ERROR_IO_PENDING) 
			{ 
				printf("WSASend() fialed with error %d\n",WSAGetLastError()); 
				return false;
			} 
		} 
	}
	return true;
}
bool ProcessMkdCommand(DWORD dwBytesTransferred,LPPER_HANDLE_DATA pPerHandleData,LPPER_IO_OPERATION_DATA pPerIOData) 
{
	char srtNewFolderName[256];
	FormatString(srtNewFolderName);
	strcpy(srtNewFolderName,&(pPerIOData->cBuffer.buf[4]));
	char strFilePathName[1024];
	strcpy(strFilePathName,pPerHandleData->uHandleInfo.cCtrlInfo.strCurrentWorkPath);
	FormatString(strFilePathName);
	if(strFilePathName[strlen(strFilePathName)-1]!='\\')
	{
		strcat(strFilePathName,"\\");
	}
	strcat(strFilePathName,srtNewFolderName);
	FormatString(strFilePathName);
	if(mkdir(strFilePathName)==0)
	{
		return ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"257 \"%s\" directory created.\r\n",strFilePathName);
	}
	else
	{
		ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"502 Command not implemented.\r\n");
		printf("Mkdir Error %d \r\n",GetLastError());
	}
	return false;
}
bool ProcessRmdCommand(DWORD dwBytesTransferred,LPPER_HANDLE_DATA pPerHandleData,LPPER_IO_OPERATION_DATA pPerIOData) 
{
	char srtNewFolderName[256];
	FormatString(srtNewFolderName);
	strcpy(srtNewFolderName,&(pPerIOData->cBuffer.buf[4]));
	char strFilePathName[1024];
	strcpy(strFilePathName,pPerHandleData->uHandleInfo.cCtrlInfo.strCurrentWorkPath);
	FormatString(strFilePathName);
	if(strFilePathName[strlen(strFilePathName)-1]!='\\')
	{
		strcat(strFilePathName,"\\");
	}
	strcat(strFilePathName,srtNewFolderName);
	FormatString(strFilePathName);
	if(rmdir(strFilePathName)==0)
	{
		return ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"250 RMD command successful.\r\n");
	}
	else
	{
		ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"502 Command not implemented.\r\n");
		printf("rmdir Error %d \r\n",GetLastError());
	}
	return false;
}
bool ProcessDeleCommand(DWORD dwBytesTransferred,LPPER_HANDLE_DATA pPerHandleData,LPPER_IO_OPERATION_DATA pPerIOData) 
{
	char strFileName[128];
	strcpy(strFileName,&(pPerIOData->cBuffer.buf[5]));
	FormatString (strFileName);
	char strFilePathName[1024];
	strcpy(strFilePathName,pPerHandleData->uHandleInfo.cCtrlInfo.strCurrentWorkPath);
	FormatString(strFilePathName);
	if(strFilePathName[strlen(strFilePathName)-1]!='\\')
	{
		strcat(strFilePathName,"\\");
	}
	strcat(strFilePathName,strFileName);
	if(DeleteFile(strFilePathName)!=0)
	{
		return ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"250 DELE command successful.\r\n");
	}
	else
	{
		ControlNormalSendData(pPerHandleData,pPerIOData,ToReceive,"502 Command not implemented.\r\n");
		printf("DeleteFile Error %d \r\n",GetLastError());
	}
	return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -