示例#1
0
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;
    

}
示例#2
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;
}