/* * Perpares for file transfer and sends a package containing information about the file. * */ BOOL MyIOCP::BuildFilePackageAndSend(ClientContext *pContext,CString sFile) { #ifdef TRANSFERFILEFUNCTIONALITY return PrepareSendFile(pContext->m_Socket,(LPCTSTR)sFile); #else return FALSE; #endif }
void DataSocket::SetTransferType(int nType, BOOL bWaitForAccept) { m_nTransferType = nType; if (bWaitForAccept && !m_bConnected) { m_bInitialized = FALSE; return; } if (m_bConnected && m_nTransferType != -1) m_pConnectSocket->SendResponse("150 Connection accepted"); m_bInitialized = TRUE; switch(m_nTransferType) { case 0: // List Directory m_nStatus = XFERMODE_LIST; OnSend(0); break; case 1: // Send File if (PrepareSendFile(m_strData)) { m_nStatus = XFERMODE_SEND; m_bConnected = TRUE; OnSend(0); } else { Close(); } break; case 2: // Receive File if (PrepareReceiveFile(m_strData)) { m_nStatus = XFERMODE_RECEIVE; m_bConnected = TRUE; OnSend(0); } else { Close(); m_pConnectSocket->SendResponse("450 Can't access file."); // destroy this socket AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0); // upload failed ((ConnectThread *)AfxGetThread())->UpdateStatistic(FTPSTAT_UPLOADFAILED); } break; default: m_bInitialized = FALSE; break; } }
void DataSocket::OnConnect(int nErrorCode) { if (nErrorCode) { m_nStatus = XFERMODE_ERROR; m_pConnectSocket->SendResponse("425 Can't open data connection."); // destroy this socket AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0); } else { switch (m_nTransferType) { case 0: // List Directory m_nStatus = XFERMODE_LIST; m_bConnected = TRUE; OnSend(0); break; case 1: // Send File if (PrepareSendFile(m_strData)) { m_nStatus = XFERMODE_SEND; m_bConnected = TRUE; } else { Close(); } break; case 2: // Receive File if (PrepareReceiveFile(m_strData)) { m_nStatus = XFERMODE_RECEIVE; m_bConnected = TRUE; } else { Close(); m_pConnectSocket->SendResponse("450 can't access file."); // destroy this socket AfxGetThread()->PostThreadMessage(WM_THREADMSG, 0, 0); // upload failed ((ConnectThread *)AfxGetThread())->UpdateStatistic(FTPSTAT_UPLOADFAILED); } break; } } CAsyncSocket::OnConnect(nErrorCode); }