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 >
Wrap
C/C++ Source or Header
|
2014-02-08
|
6KB
|
212 lines
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#define MAIN_WINDOW_WIDTH 320
#define MAIN_WINDOW_HEIGHT 240
#define IDM_RUN 100
#define IDE_EDIT_OUTPUT 101
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
DWORD WINAPI ServerThread( LPVOID);
int CommandHandler( SOCKET, char*);
HANDLE hEditOut;
int iKeepAlive;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG uMsg;
wc.cbSize = sizeof( WNDCLASSEX);
wc.lpszClassName = "Evgeney-Victorovich-Kupin-27-April-1982-ftp";
wc.lpfnWndProc = MainWndProc;
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION);
wc.hIconSm = wc.hIcon;
wc.hCursor = LoadCursor( NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = 0;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
if(!RegisterClassEx( &wc))
return 1;
hwnd = CreateWindowEx( 0, "Evgeney-Victorovich-Kupin-27-April-1982-ftp", "server bones",
WS_OVERLAPPEDWINDOW, 0, 0,
MAIN_WINDOW_WIDTH, MAIN_WINDOW_HEIGHT, NULL, NULL,
hInstance, NULL);
if(!hwnd)
return 1;
ShowWindow( hwnd, SW_SHOWNORMAL);
UpdateWindow( hwnd);
while (GetMessage( &uMsg, NULL, 0, 0))
{
TranslateMessage( &uMsg);
DispatchMessage( &uMsg);
}
return uMsg.wParam;
}
LRESULT CALLBACK MainWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HANDLE hThread;
static DWORD dwThreadID;
WORD wVersionRequested;
WSADATA wsaData;
LPCREATESTRUCT lpCs;
switch(uMsg)
{
case WM_CREATE:
wVersionRequested = MAKEWORD( 2, 2);
WSAStartup( wVersionRequested, &wsaData);
lpCs = (LPCREATESTRUCT)lParam;
iKeepAlive = 1;
hEditOut = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", "",
WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_HSCROLL |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE,
0, 0, 320, 240, hwnd, (HMENU)IDE_EDIT_OUTPUT,
lpCs->hInstance, NULL);
hThread = CreateThread( 0, 0, ServerThread, 0, 0, &dwThreadID);
CloseHandle( hThread);
return 0;
case WM_COMMAND:
if(HIWORD(wParam) == 0)
{
switch(LOWORD(wParam))
{
case IDM_RUN:
{
}
break;
}
}
return 0;
case WM_DESTROY:
iKeepAlive = 0;
WSACleanup();
PostQuitMessage( 0);
return 0;
}
return DefWindowProc( hwnd, uMsg, wParam, lParam);
}
DWORD WINAPI ServerThread( LPVOID lpParam)
{
SOCKET slisten;
SOCKET AcceptSocket;
struct sockaddr_in service;
int rc;
char dcBuffer[2048];
service.sin_family = AF_INET;
//service.sin_addr.s_addr = inet_addr("127.0.0.1");
service.sin_addr.s_addr = htonl(INADDR_ANY);
service.sin_port = htons(21);
slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(slisten==INVALID_SOCKET)MessageBox(0,"ER","ER",0);
rc = bind(slisten, (SOCKADDR*) &service, sizeof (service));
if(rc==SOCKET_ERROR)MessageBox(0,"ER","ER",0);
rc = listen(slisten, 1);
if(rc==SOCKET_ERROR)MessageBox(0,"ER","ER",0);
// for(;;)
// {
AcceptSocket = accept(slisten, NULL, NULL);
if(AcceptSocket == INVALID_SOCKET)MessageBox(0,"ER","ER",0);
sprintf( dcBuffer,"220 \r\n"); //A reply is defined to contain the 3-digit code, followed by Space <SP>
send( AcceptSocket, dcBuffer, strlen(dcBuffer), 0 );
for(;;)
{
int iRet;
recv( AcceptSocket, dcBuffer, 2048, 0);
iRet = CommandHandler( AcceptSocket, &dcBuffer);
if( iRet == 0)
break;
if( iKeepAlive == 0)
return 0;
}
// if( iKeepAlive == 0)
// break;
// }
closesocket(slisten);
MessageBox(0,"END","END",0);
return 0;
}
int CommandHandler( SOCKET hSock, char* lpBuffer)
{
int cm;
cm = memcmp( lpBuffer, "QUIT ", 4);
if( cm == 0) return 0;
cm = memcmp( lpBuffer, "USER ", 4);
if( cm == 0)
{
sprintf( lpBuffer,"331 \r\n"); // USER OK
send( hSock, lpBuffer, strlen(lpBuffer), 0);
return 1;
}
cm = memcmp( lpBuffer, "PASS ", 4);
if( cm == 0)
{
sprintf( lpBuffer,"230 \r\n"); // PASSWORD OK
send( hSock, lpBuffer, strlen(lpBuffer), 0);
return 1;
}
cm = memcmp( lpBuffer, "PWD ", 3);
if( cm == 0)
{
sprintf( lpBuffer,"257 \"/\" is cwd.\r\n"); // PRINT WORKING DIRECTORY
send( hSock, lpBuffer, strlen(lpBuffer), 0);
return 1;
}
sprintf( lpBuffer,"502 \r\n"); // 502 Command not implemented
send( hSock, lpBuffer, strlen(lpBuffer), 0);
return 1;
}