home *** CD-ROM | disk | FTP | other *** search
/ ftp.sberbank.sumy.ua / 2014.11.ftp.sberbank.sumy.ua.tar / ftp.sberbank.sumy.ua / incoming / 1 / FTC06124.c < prev    next >
C/C++ Source or Header  |  2014-02-08  |  6KB  |  212 lines

  1. #include <windows.h>
  2. #include <winsock2.h>
  3. #include <ws2tcpip.h>
  4.  
  5.  
  6.  
  7. #define MAIN_WINDOW_WIDTH  320
  8. #define MAIN_WINDOW_HEIGHT 240
  9.  
  10. #define IDM_RUN            100
  11.  
  12. #define IDE_EDIT_OUTPUT    101
  13.  
  14.  
  15. LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
  16. DWORD WINAPI ServerThread( LPVOID);
  17. int CommandHandler( SOCKET, char*);
  18.  
  19.  
  20. HANDLE hEditOut;
  21. int iKeepAlive;
  22.  
  23. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
  24.  {
  25.   WNDCLASSEX wc;
  26.   HWND hwnd;
  27.   MSG uMsg;
  28.   
  29.  
  30.      wc.cbSize = sizeof( WNDCLASSEX);
  31.      wc.lpszClassName = "Evgeney-Victorovich-Kupin-27-April-1982-ftp";
  32.      wc.lpfnWndProc = MainWndProc;
  33.      wc.style = CS_VREDRAW | CS_HREDRAW;
  34.      wc.hInstance = hInstance;
  35.      wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION);
  36.      wc.hIconSm = wc.hIcon;
  37.      wc.hCursor = LoadCursor( NULL, IDC_ARROW);
  38.      wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  39.      wc.lpszMenuName = 0;
  40.      wc.cbClsExtra = 0;
  41.      wc.cbWndExtra = 0;
  42.  
  43.     if(!RegisterClassEx( &wc))
  44.        return 1;
  45.  
  46.  
  47.      hwnd = CreateWindowEx( 0, "Evgeney-Victorovich-Kupin-27-April-1982-ftp", "server bones",
  48.                         WS_OVERLAPPEDWINDOW, 0, 0,
  49.                         MAIN_WINDOW_WIDTH, MAIN_WINDOW_HEIGHT, NULL, NULL,
  50.                         hInstance, NULL);
  51.     if(!hwnd)
  52.         return 1;
  53.  
  54.      ShowWindow( hwnd, SW_SHOWNORMAL);
  55.      UpdateWindow( hwnd);
  56.  
  57.     while (GetMessage( &uMsg, NULL, 0, 0))
  58.       {
  59.         TranslateMessage( &uMsg);
  60.         DispatchMessage( &uMsg);
  61.        }
  62.  
  63.     return uMsg.wParam;
  64.  }
  65.  
  66. LRESULT CALLBACK MainWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  67.  {
  68.   HANDLE hThread;
  69.   static DWORD dwThreadID;
  70.   WORD wVersionRequested;
  71.   WSADATA wsaData;
  72.   LPCREATESTRUCT lpCs;
  73.   
  74.    switch(uMsg) 
  75.      { 
  76.       case WM_CREATE:
  77.        wVersionRequested = MAKEWORD( 2, 2); 
  78.        WSAStartup( wVersionRequested, &wsaData); 
  79.  
  80.        lpCs = (LPCREATESTRUCT)lParam;
  81.  
  82.        iKeepAlive = 1;
  83.  
  84.        hEditOut = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", "",
  85.                      WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_HSCROLL |
  86.                      ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE,
  87.                      0, 0, 320, 240, hwnd, (HMENU)IDE_EDIT_OUTPUT,
  88.                      lpCs->hInstance, NULL);
  89.                       
  90.        hThread = CreateThread( 0, 0, ServerThread, 0, 0, &dwThreadID);         
  91.        CloseHandle( hThread);    
  92.       return 0;
  93.  
  94.       case WM_COMMAND:
  95.          if(HIWORD(wParam) == 0)                                            
  96.           {
  97.            switch(LOWORD(wParam))
  98.             {
  99.              case IDM_RUN:
  100.               {
  101.  
  102.                 } 
  103.               break; 
  104.                }
  105.               }  
  106.           return 0;
  107.  
  108.  
  109.       case WM_DESTROY:                                                             
  110.           iKeepAlive = 0;
  111.           WSACleanup();
  112.           PostQuitMessage( 0);
  113.       return 0; 
  114.       } 
  115.  
  116.   return DefWindowProc( hwnd, uMsg, wParam, lParam); 
  117.  }
  118.  
  119. DWORD WINAPI ServerThread( LPVOID lpParam)
  120.  {  
  121.   SOCKET slisten;
  122.   SOCKET AcceptSocket;
  123.   struct sockaddr_in service;
  124.   int rc;
  125.   char dcBuffer[2048];
  126.  
  127.  
  128.      service.sin_family = AF_INET;
  129.      //service.sin_addr.s_addr = inet_addr("127.0.0.1");
  130.      service.sin_addr.s_addr = htonl(INADDR_ANY); 
  131.      service.sin_port = htons(21);
  132.  
  133.      slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
  134.      if(slisten==INVALID_SOCKET)MessageBox(0,"ER","ER",0);
  135.      
  136.      rc = bind(slisten, (SOCKADDR*) &service, sizeof (service));
  137.      if(rc==SOCKET_ERROR)MessageBox(0,"ER","ER",0);
  138.      
  139.      rc = listen(slisten, 1);
  140.      if(rc==SOCKET_ERROR)MessageBox(0,"ER","ER",0);
  141.  
  142.    //  for(;;)
  143.    //   {          
  144.        AcceptSocket = accept(slisten, NULL, NULL);
  145.        if(AcceptSocket == INVALID_SOCKET)MessageBox(0,"ER","ER",0);
  146.  
  147.        sprintf( dcBuffer,"220 \r\n");                      //A reply is defined to contain the 3-digit code, followed by Space <SP>
  148.        send( AcceptSocket, dcBuffer, strlen(dcBuffer), 0 );
  149.        
  150.        for(;;)
  151.         {
  152.          int iRet;
  153.  
  154.           recv( AcceptSocket, dcBuffer, 2048, 0);                     
  155.  
  156.           iRet = CommandHandler( AcceptSocket, &dcBuffer);            
  157.  
  158.           if( iRet == 0)
  159.            break; 
  160.  
  161.           if( iKeepAlive == 0)
  162.            return 0;   
  163.          }
  164.  
  165.    //       if( iKeepAlive == 0)
  166.    //        break;   
  167.    //      }
  168.   
  169.      closesocket(slisten);
  170.      
  171.      MessageBox(0,"END","END",0);
  172.      return 0;
  173.   }
  174.  
  175. int CommandHandler( SOCKET hSock, char* lpBuffer)
  176. {
  177.  int cm;
  178.  
  179.    cm = memcmp( lpBuffer, "QUIT ", 4);
  180.    if( cm == 0) return 0; 
  181.  
  182.    cm = memcmp( lpBuffer, "USER ", 4);
  183.    if( cm == 0)
  184.     { 
  185.       sprintf( lpBuffer,"331 \r\n");                     // USER OK
  186.       send( hSock, lpBuffer, strlen(lpBuffer), 0);  
  187.       return 1;
  188.       }
  189.  
  190.    cm = memcmp( lpBuffer, "PASS ", 4);
  191.    if( cm == 0)
  192.     { 
  193.       sprintf( lpBuffer,"230 \r\n");                      // PASSWORD OK 
  194.       send( hSock, lpBuffer, strlen(lpBuffer), 0);  
  195.       return 1;
  196.       }
  197.  
  198.    cm = memcmp( lpBuffer, "PWD ", 3);
  199.    if( cm == 0)
  200.     { 
  201.       sprintf( lpBuffer,"257 \"/\" is cwd.\r\n");           // PRINT WORKING DIRECTORY  
  202.       send( hSock, lpBuffer, strlen(lpBuffer), 0);  
  203.       return 1;
  204.       }
  205.  
  206.  
  207.   sprintf( lpBuffer,"502 \r\n");                          // 502 Command not implemented
  208.   send( hSock, lpBuffer, strlen(lpBuffer), 0);  
  209.   return 1;  
  210.  }
  211.  
  212.