13,75 → 13,16 |
edit_box pass_box= {PANEL_W-6,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0,sizeof(pass_text)+2,#pass_text,#mouse_dd,0b1}; |
|
|
|
|
void LoginBoxLoop() |
void LoginNetworkProcess() |
{ |
int key, id; |
char socket_char; |
|
SetLoginStatus(NULL); |
|
goto _LB_DRAW; |
loop() |
if (aim) switch(aim) |
{ |
WaitEventTimeout(2); |
switch(EAX & 0xFF) |
{ |
case evMouse: |
if (!CheckActiveProcess(Form.ID)) break; |
edit_box_mouse stdcall (#login_box); |
edit_box_mouse stdcall (#pass_box); |
break; |
|
case evButton: |
id = GetButtonID(); |
if (id==1) SaveAndExit(); |
if (id==11) SettingsDialog(); |
if (id==12) |
{ |
if (!aim) aim=RESOLVE; else aim=NULL; |
GetSettings(); |
DrawLoginScreen(); |
} |
break; |
|
case evKey: |
key = GetKey(); |
if (key==9) |
{ |
if (login_box.flags & 0b10) |
{ pass_box.flags = 0b11; login_box.flags = 0; } |
else |
{ pass_box.flags = 0b1; login_box.flags = 0b10; } |
edit_box_draw stdcall(#login_box); |
edit_box_draw stdcall(#pass_box); |
break; |
} |
if (key==13) && (!aim) |
{ |
aim=RESOLVE; |
GetSettings(); |
DrawLoginScreen(); |
} |
EAX=key<<8; |
edit_box_key stdcall(#login_box); |
edit_box_key stdcall(#pass_box); |
break; |
|
case evReDraw: _LB_DRAW: |
if !(DefineWindow(LOGIN_HEADER)) break; |
DrawLoginScreen(); |
break; |
|
default: |
if (!aim) break; |
case RESOLVE: |
if (!email_text) StopConnect("Enter email!"); |
if (!pass_text) StopConnect("Enter password!"); |
if ((!login) || (!POP_server_path)) StopConnect("Email should be such as username@somesite.com"); |
if (!aim) return; |
|
if (aim == RESOLVE) |
{ |
sockaddr.sin_family = AF_INET4; |
AX = POP_server_port; |
$xchg al, ah |
88,26 → 29,18 |
sockaddr.sin_port = AX; |
sockaddr.sin_addr = GetIPfromAdress(#POP_server_path); |
if (!sockaddr.sin_addr) { StopConnect("Can't obtain server IP."); break;} |
aim = OPEN_CONNECTION; |
else aim = OPEN_CONNECTION; |
break; |
} |
|
if (aim == OPEN_CONNECTION) |
{ |
case OPEN_CONNECTION: |
socketnum = Socket(AF_INET4, SOCK_STREAM, 0); |
if (socketnum == 0xffffffff) { StopConnect("Cannot open socket."); break;} |
Connect(socketnum, #sockaddr, 16); |
aim = GET_ANSWER_CONNECT; |
break; |
} |
|
|
if (aim == GET_ANSWER_CONNECT) |
{ |
case GET_ANSWER_CONNECT: |
ticks = Receive(socketnum, #immbuffer, BUFFERSIZE, 0); |
if ((ticks == 0xffffff) || (ticks < 2)) { StopConnect("Connection failed"); break;} |
immbuffer[ticks]='\0'; |
|
if (immbuffer[ticks-2]=='\n') |
{ |
if (strstr(#immbuffer,"+OK")) |
115,10 → 48,8 |
else |
StopConnect("Failed to connect to server. Retry..."); |
} |
} |
|
if (aim == SEND_USER) |
{ |
break; |
case SEND_USER: |
request_len = GetRequest("USER", #login); |
if (Send(socketnum, #request, request_len, 0) == 0xffffffff) |
{ |
125,15 → 56,12 |
SetLoginStatus("Failed to send USER. Retry..."); |
break; |
} |
aim = GET_ANSWER_USER; |
} |
|
if (aim == GET_ANSWER_USER) |
{ |
else aim = GET_ANSWER_USER; |
break; |
case GET_ANSWER_USER: |
ticks = Receive(socketnum, #immbuffer, BUFFERSIZE, 0); |
if ((ticks == 0xffffffff) || (ticks < 2)) { SetLoginStatus("Connection failed"); break;} |
immbuffer[ticks]='\0'; |
|
if (immbuffer[ticks-2]=='\n') |
{ |
if (strstr(#immbuffer,"+OK")) |
148,10 → 76,8 |
{ |
StopConnect("Connection failed"); |
} |
} |
|
if (aim == SEND_PASS) |
{ |
break; |
case SEND_PASS: |
request_len = GetRequest("PASS", #pass_text); |
if (Send(socketnum, #request, request_len, 0) == 0xffffffff) |
{ |
158,11 → 84,9 |
SetLoginStatus("Failed to send PASS. Retry..."); |
break; |
} |
aim = GET_ANSWER_PASS; |
} |
|
if (aim == GET_ANSWER_PASS) |
{ |
else aim = GET_ANSWER_PASS; |
break; |
case GET_ANSWER_PASS: |
ticks = Receive(socketnum, #immbuffer, BUFFERSIZE, 0); |
if ((ticks == 0xffffff) || (ticks < 2)) { SetLoginStatus("Server disconnected"); break;} |
immbuffer[ticks]='\0'; |
180,12 → 104,72 |
{ |
StopConnect("Connection failed"); |
} |
} |
} |
|
|
void LoginBoxLoop() |
{ |
int key, id; |
|
SetLoginStatus(NULL); |
goto _LB_DRAW; |
loop() |
{ |
WaitEventTimeout(2); |
switch(EAX & 0xFF) |
{ |
case evMouse: |
if (!CheckActiveProcess(Form.ID)) break; |
edit_box_mouse stdcall (#login_box); |
edit_box_mouse stdcall (#pass_box); |
break; |
|
case evButton: |
id = GetButtonID(); |
if (id==1) SaveAndExit(); |
if (id==11) SettingsDialog(); |
if (id==12) |
{ |
if (!aim) aim=RESOLVE; else aim=NULL; |
GetSettings(); |
DrawLoginScreen(); |
} |
break; |
|
case evKey: |
key = GetKey(); |
if (key==9) |
{ |
if (login_box.flags & 0b10) |
{ pass_box.flags = 0b11; login_box.flags = 0; } |
else |
{ pass_box.flags = 0b1; login_box.flags = 0b10; } |
edit_box_draw stdcall(#login_box); |
edit_box_draw stdcall(#pass_box); |
break; |
} |
if (key==13) && (!aim) |
{ |
aim=RESOLVE; |
GetSettings(); |
DrawLoginScreen(); |
} |
EAX=key<<8; |
edit_box_key stdcall(#login_box); |
edit_box_key stdcall(#pass_box); |
break; |
|
case evReDraw: _LB_DRAW: |
if !(DefineWindow(LOGIN_HEADER)) break; |
DrawLoginScreen(); |
break; |
|
default: |
LoginNetworkProcess(); |
} |
} |
} |
|
|
|
223,27 → 207,15 |
} |
|
|
void GetServerPathAndLogin() |
void GetSettings() |
{ |
int i=strchr(#email_text,'@'); |
int at_pos = strchr(#email_text,'@'); |
strlcpy(#login, #email_text, at_pos-1); |
|
POP_server_path=login=NULL; |
|
if (i) |
if (checked[CUSTOM]) |
{ |
strcpy(#POP_server_path, "pop."); |
strcat(#POP_server_path, #email_text+i); |
} |
strcpy(#login, #email_text); |
login[i-1]=NULL; |
} |
|
|
void GetSettings() |
{ |
GetServerPathAndLogin(); |
if (checked[CUSTOM]) |
{ |
strcat(#POP_server_path, #email_text+at_pos); |
POP_server_port = DEFAULT_POP_PORT; |
} |
if (checked[MANUAL]) |