unsigned long __stdcall PasvThread(void* pVoid) { CSession *session = (CSession*)pVoid; sockaddr_in remoteAddr_in; int nLen; session->m_PasvThreadRunning = true; log(LOG_DEBUG, "DEBUG - passive thread was started, waiting for incoming connection - PasvThread()\r\n"); nLen = sizeof(sockaddr_in); // Accept incoming connections on passive port SOCKET s = accept(session->getPasvSock(), (sockaddr *)&remoteAddr_in, &nLen); if (s != INVALID_SOCKET) { log(LOG_DEBUG, "DEBUG - passive thread received a connection (socket %d) - PasvThread()\r\n", s); if (session->getPasvSock2()!=0) { session->closePasvSock2(); } session->setPasvSock2(s); // session->m_PasvPort = -1; // log(LOG_DEBUG, "Passive port free.\r\n"); } session->closePasvSock(); session->getCFtpd()->freePasvPort(session->getPasvPort()); log(LOG_DEBUG, "DEBUG - passive thread was stopped - PasvThread()\r\n"); session->m_PasvThreadRunning = false; return 0; }
unsigned long __stdcall ClientThread(void* pVoid) { CSession *session = (CSession*)pVoid; log(LOG_DEBUG, "DEBUG - client thread started for session S%d - ClientThread()\r\n", session->m_SessionIndex); // Send Welcome Message send(session->getMainSock(), MSG_CONNECTED_1, lstrlen(MSG_CONNECTED_1), 0); send(session->getMainSock(), VERSION, lstrlen(VERSION), 0); send(session->getMainSock(), MSG_CONNECTED_2, lstrlen(MSG_CONNECTED_2), 0); // Dialog with FTP client session->dialog(); // Object is deleted by Ftpd object // wait for session to be closed while (!session->m_IsClosed) { Sleep(200); } // unregister session (session->getCFtpd())->removeSession(session->m_SessionIndex); return 0; }