/************************************************************** * * 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); }
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; }
/* 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; }