void FtpClient_OnCmdQuit(FtpClient *pClient) { assert(pClient); FtpClient_Send(pClient, 221, pClient->m_pMessages[FTPMSG_GOODBYE]); FtpServer_OnClientDisconnect(pClient->m_pServer, pClient); }
void FtpClient_OnCmdPass( FtpClient* pClient, const char* pPass ) { if( (AUTHSTATE_PASSWORD == pClient->m_eAuthState) && !strcmp(pPass,pClient->m_pServer->m_Password) ) { // password matches, allow login FtpClient_Send(pClient,230,"User logged in."); pClient->m_eAuthState = AUTHSTATE_VALID; } else { // password didn't match, or we had no valid login if( AUTHSTATE_INVALID != pClient->m_eAuthState ) { FtpClient_Send(pClient,530, pClient->m_pMessages[FTPMSG_LOGIN_INCORRECT] ); // disconnect client if more than 3 attempts to login has been made pClient->m_iAuthAttempt++; if( pClient->m_iAuthAttempt > 3 ) FtpServer_OnClientDisconnect( pClient->m_pServer, pClient ); pClient->m_eAuthState = AUTHSTATE_INVALID; } else FtpClient_Send( pClient, 503, pClient->m_pMessages[FTPMSG_LOGIN_WITH_USER_FIRST] ); } }
void FtpServer_Stop( FtpServer* pServer ) { // disconnect all clients while( pServer->m_kClients.m_pNext != &(pServer->m_kClients) ) FtpServer_OnClientDisconnect( pServer, pServer->m_kClients.m_pNext->m_pClient ); // close server socket if( -1 != pServer->m_iSocket ) { disconnect( pServer->m_iSocket ); pServer->m_iSocket = -1; } }