Пример #1
0
/**************************************************************
 * * Entry:
 * *  sockfd - the socket to send the file list to.
 * *
 * * Exit:
 * *  n/a
 * *
 * * Purpose:
 * * 	Sends the requested file to the server
 * *
 * ***************************************************************/
void SendFileToServer(int sockfd, char *transferFileName)
{
	FILE * transferFilePointer;
	transferFilePointer = fopen(transferFileName, "r+");
	
	int fd = fileno(transferFilePointer);
	SendFileToClient(sockfd, fd);
	
	fclose(transferFilePointer);
}
Пример #2
0
DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pecb)
{
	DWORD hseStatus;

	if (pecb->lpszQueryString == NULL || *pecb->lpszQueryString == '\0')
		hseStatus = SendHeaderToClient( pecb, "File Not Specified");
	else
		hseStatus = SendFileToClient( pecb, pecb->lpszQueryString);
	
	return hseStatus;
}
Пример #3
0
/*
Process File Server package header
pFileHeader = Pointer to the package header
*/
bool CFileServer::ProcessFileHeader(FilePackHeader* pFileHeader)
{
	try
	{
		switch (pFileHeader->nType)
		{
		case FILE_REQUEST:
			{
				switch (pFileHeader->nParam)
				{
				case CMD_PARAM_LISTFILE:
					{
						return ListFileInDestinationFolder();
					}

				case CMD_PARAM_TRANSFILE_C2S:
					{
						//RequestUser(true, _T("C:\\"), _T("a.exe"));
						return ReceiveFileFromClient();
					}

				case CMD_PARAM_TRANSFILE_S2C:
					{
						return SendFileToClient();
					}

				case CMD_PARAM_TRANSFILE_C2S_FINISH:
					{
						return true;
					}
				case CMD_PARAM_TRANSFILE_C2S_QUERYSTATUS:
					{
						FilePackHeader fph;
						fph.nType = FILE_RESPONSE;					
						fph.nParam = CMD_PARAM_TRANSFILE_C2S_STATUSOK;
						m_pServerSocket->WriteExact(m_pServerSocket->GetWorkingSocket(), (char*) &fph, sizeof(FilePackHeader));

						bool bContinue = false;
						SendMessage(m_hWnd, WM_GETSTOPSTATE, 0, (LPARAM)&bContinue);
						FilePackHeader fph1;
						fph1.nType = bContinue ? FILE_RESPONSE : FILE_REQUEST;					
						fph1.nParam = CMD_PARAM_TRANSFILE_SSTOPRECEIVE;
						m_pServerSocket->WriteExact(m_pServerSocket->GetWorkingSocket(), (char*) &fph1, sizeof(FilePackHeader));
						if(!bContinue)
						{
							m_bStopMyselft = true;
							State state;
							state = State::StopReceive;
							SendMessage(m_hWnd, WM_SETLISTITEM, 0, (LPARAM)&state);
							SendMessage(this->m_hWnd, WM_FILE_SENDFILETOSERVER_PROGRESS_MESSAGE, 0, 0);
						}
						return true; 
					}
				case CMD_PARAM_TRANSFILE_C2S_STOP:
					{
						return true;
					}
				case CMD_PARAM_DRIVER:
					{
						return SendDrivers();
					}
				case CMD_PARAM_TRANSFILE_C2S_REQUEST:
					{
						return ResponseC2S();
					}
				case CMD_PARAM_TRANSFILE_S2C_REQUEST:
					{
						return ResponseS2C();
					}
				case CMD_PARAM_TESTCONNECTION:
					return true;
				}
			}
		case FILE_RESPONSE:
			{
				switch (pFileHeader->nParam)
				{
				case CMD_REJECTWHENNOTFREE:
					SendMessage(m_hWnd, WM_FREEUI, 0, 0);
					return true;
				case CMD_PARAM_TRANSFILE_S2C_SENDFILEACCEPT:
					{
						//Send ready to send file to client.
						char pathname[MAX_PATH];
						SendMessage(this->m_hWnd, WM_GETSENDFILEPATHNAME, (WPARAM)pathname, 0);
						CString strFilePathName = pathname;
						int nfind = strFilePathName.ReverseFind('\\');
						if(nfind != -1)
						{
							this->m_strReceivePath = strFilePathName.Left(nfind);
							this->m_strRecFileName = strFilePathName.Right(strFilePathName.GetLength() - nfind -1);
						}

						FileTransProgress progress;
						bool bRes = m_pServerSocket->ReadExact(m_pServerSocket->GetWorkingSocket(), (char*)&progress, sizeof(FileTransProgress));
						if (!bRes)
							return false;
						//gl_llSize = progress.uDataRead;
						gl_mapllSize[m_hWnd] = progress.uDataRead;
						return PackAndSendRequest(CMD_PARAM_TRANSFILE_S2C_ACEEPT);
						//if(!bRes)
						//	return false;
						//return SendFileToClient();
					}
				case CMD_PARAM_TRANSFILE_S2C_SENDFILEREJECT:
					{
						SendMessage(this->m_hWnd, WM_SETSENDING, 0, 0);
						State state;
						state = State::CRejectReceive;
						SendMessage(m_hWnd, WM_SETLISTITEM, 0, (LPARAM)&state);
						PostMessage(m_hWnd, WM_REJECT_SENDREQUEST, 0, 0);
						CString strStatus = _T("");
						SendMessage(m_hWnd, WM_SETSTSTUS_TEXT, 0, (LPARAM)&strStatus);
						return true;
					}
				case CMD_PARAM_TESTCONNECTION:
						return true;
				}
			}
		}
	}
	catch(...)
	{
		if (gl_pLogger)
			gl_pLogger->log_info("CFileServer::ProcessFileHeader() unkown exception.");
	}
	return false;
}