Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5719 → Rev 5720

/programs/network/vncc/gui.inc
26,7 → 26,7
mcall
 
cmp [status], STATUS_CONNECTING
ja @f
ja .login?
 
mov ebx, 25 shl 16 + 24
xor ecx, ecx
36,7 → 36,24
 
invoke edit_box_draw, URLbox ; Server textbox
 
cmp [status], STATUS_INITIAL
cmp [status], STATUS_CONNECTING
jne @f
 
mov ebx, 220 shl 16 + 85
mov ecx, 47 shl 16 + 16
mov edx, 4
mov esi, 0xCCCCCC
mcall 8 ; Cancel button
 
mov ebx, 240 shl 16 + 52
mov edx, cancelstr
mov esi, okstr-cancelstr
mcall 4 ; Cancel button text
 
jmp .redraw_done
 
@@:
cmp [status], STATUS_CONNECT
jne .redraw_done
 
mov ebx, 220 shl 16 + 85
52,7 → 69,7
 
jmp .redraw_done
 
@@:
.login?:
cmp [status], STATUS_LOGIN
ja @f
 
81,9 → 98,20
 
mov ebx, 240 shl 16 + 52
mov edx, loginstr
mov esi, loginstr_e-loginstr
mov esi, cancelstr-loginstr
mcall 4 ; Login button text
 
mov ebx, 120 shl 16 + 85
mov ecx, 47 shl 16 + 16
mov edx, 4
mov esi, 0xCCCCCC
mcall 8 ; Cancel button
 
mov ebx, 140 shl 16 + 52
mov edx, cancelstr
mov esi, okstr-cancelstr
mcall 4 ; Cancel button text
 
jmp .redraw_done
 
@@:
90,13 → 118,40
cmp [status], STATUS_DISCONNECTED
jb .redraw_done
 
mov ebx, 25 shl 16 + 15
mov ecx, 0x80ca0000 ; red ASCIIZ string
mov ebx, 15 shl 16 + 10
mov ecx, 0x00ca0000 ; red ASCIIZ string
mov edx, [status]
sub edx, 10
mov edx, [err_msg+4*edx]
.restart:
xor esi, esi
.pr_loop:
cmp byte[edx+esi], 0
je .last
cmp byte[edx+esi], 0x0a
je .print
inc esi
jmp .pr_loop
.print:
mcall 4
add edx, esi
inc edx
add ebx, 10
jmp .restart
.last:
mcall 4 ; print error message to window
 
mov ebx, 220 shl 16 + 85
mov ecx, 47 shl 16 + 16
mov edx, 5
mov esi, 0xCCCCCC
mcall 8 ; OK button
 
mov ebx, 256 shl 16 + 52
mov edx, okstr
mov esi, okstr_e-okstr
mcall 4 ; OK button text
 
.redraw_done:
mov [update_gui], 0
mcall 12, 2
124,7 → 179,7
.key: ; key event handler
mcall 2 ; read key
 
cmp [status], STATUS_INITIAL
cmp [status], STATUS_CONNECT
jne @f
test [URLbox.flags], ed_focus
jz mainloop
131,14 → 186,21
cmp ah, 13 ; enter (return) key
je .connect
invoke edit_box_key, URLbox
jmp .loop
@@:
cmp [status], STATUS_REQ_LOGIN
jne .loop
jne @f
cmp ah, 13 ; enter (return) key
je .login
invoke edit_box_key, USERbox
invoke edit_box_key, PASSbox
jmp .loop
@@:
cmp [status], STATUS_DISCONNECTED
jb @f
cmp ah, 13
je .ok
@@:
jmp .loop
 
.btn:
150,6 → 212,10
je .connect
cmp ah, 3 ; login ?
je .login
cmp ah, 4
je .cancel
cmp ah, 5
je .ok
 
jmp .loop
 
156,17 → 222,7
.connect:
mov eax, [URLbox.pos]
mov byte[serveraddr+eax], 0
 
mov [status], STATUS_CONNECTING
inc [update_gui]
 
; Create network thread
mcall 51, 1, thread_start, thread_stack
cmp eax, -1
jne @f
mov [status], STATUS_THREAD_ERR
; inc [update_gui]
@@:
call open_connection
jmp .loop
 
.login:
174,8 → 230,16
inc [update_gui]
jmp .loop
 
.cancel:
mcall 18, 18, [thread_id] ; kill thread
.ok:
and [URLbox.flags], not ed_disabled
mov [status], STATUS_CONNECT
inc [update_gui]
jmp .loop
 
.mouse:
cmp [status], STATUS_INITIAL
cmp [status], STATUS_CONNECT
jne @f
invoke edit_box_mouse, URLbox
@@:
188,4 → 252,21
 
.close:
mov [status], STATUS_CLOSED
mcall -1
mcall -1
 
 
open_connection:
 
or [URLbox.flags], ed_disabled
mov [status], STATUS_CONNECTING
 
; Create network thread
mcall 51, 1, thread_start, thread_stack
cmp eax, -1
jne @f
mov [status], STATUS_THREAD_ERR
@@:
mov [thread_id], eax
inc [update_gui]
 
ret
/programs/network/vncc/network.inc
70,26 → 70,39
cmp eax, -1
je err_connect
 
; Wait for handshake from server
; TODO: implement timeout
; Verify handshake from server
call wait_for_data
cmp dword[receive_buffer], "RFB "
jne err_proto
add esi, 12
 
; Did we get an error message already?
cmp eax, 16
jb @f
lodsd
test eax, eax
je err_handshake
@@:
 
; Reply to handshake
DEBUGF 1, "Sending handshake\n"
mcall send, [socketnum], HandShake, 12, 0
 
; VNC 3.3 protocol: server decides security type
call wait_for_data
 
cmp dword[receive_buffer], 0x01000000 ; no security
lodsd
cmp eax, 0x00000000
je err_handshake
cmp eax, 0x01000000 ; no security
je initialize
cmp dword[receive_buffer], 0x02000000 ; VNC security
cmp eax, 0x02000000 ; VNC security
je vnc_security
jmp err_proto
 
jmp err_security
 
vnc_security:
 
push esi ; pointer to message
 
mov dword[password], 0
mov dword[password+4], 0
 
110,7 → 123,6
DEBUGF 1, "VNC authentication\n"
 
; Bit reverse the password and create DES keys
 
mov ebx, dword[password]
mov edx, ebx
and ebx, 0xf0f0f0f0
157,21 → 169,22
call DES_create_keys
 
; Encrypt message with DES
 
mov ebx, dword[receive_buffer+4]
mov edx, dword[receive_buffer+8]
mov esi, [esp]
mov ebx, dword[esi+0]
mov edx, dword[esi+4]
call encrypt_DES
mov dword[receive_buffer+4], ebx
mov dword[receive_buffer+8], edx
mov esi, [esp]
mov dword[esi+0], ebx
mov dword[esi+4], edx
 
mov ebx, dword[receive_buffer+12]
mov edx, dword[receive_buffer+16]
mov ebx, dword[esi+8]
mov edx, dword[esi+12]
call encrypt_DES
mov dword[receive_buffer+12], ebx
mov dword[receive_buffer+16], edx
mov esi, [esp]
mov dword[esi+8], ebx
mov dword[esi+12], edx
 
; Blank out the password and key fields in RAM
 
mov edi, password
mov ecx, 384/4
xor eax, eax
178,13 → 191,14
rep stosd
 
; Send the authentication response to server
pop edx
mcall send, [socketnum], , 16, 0
 
mcall send, [socketnum], receive_buffer+4, 16, 0
 
securityresult:
; Wait for SecurityResult from server
call wait_for_data
cmp dword[receive_buffer], 0
cmp dword[receive_buffer], 0 ; OK
jne err_login
; jmp initialize
 
initialize:
DEBUGF 1, "Sending ClientInit\n"
307,12 → 321,10
je encoding_CopyRect
cmp eax, 2
je encoding_RRE
; cmp eax, 5
; je encoding_hextile
; cmp eax, 15
; je encoding_TRLE
; cmp eax, 16
; je encoding_ZRLE
cmp eax, 15
je encoding_TRLE
cmp eax, 16
je encoding_ZRLE
 
DEBUGF 2, "unknown encoding: %u\n", eax
jmp thread_loop
416,6 → 428,8
ret
 
.buffer_end_reached:
DEBUGF 1, "end of buffer reached, re-organizing\n"
pop edi esi edx ecx ebx
; Buffer is full, first needed data by program is pointed to by esi.
; Move all usefull data to begin of buffer
cmp esi, receive_buffer
436,6 → 450,7
je err_sock
test eax, eax
jz err_disconnected
mov esi, receive_buffer
ret
 
 
466,8 → 481,24
mcall -1
ret
 
err_security:
err_handshake:
mov [status], STATUS_SECURITY_ERR
 
lodsd ; Custom message from server?
test eax, eax
jz .no_msg
bswap eax
mov ecx, eax
cmp ecx, 512
jb @f
mov ecx, 512
@@:
mov edi, sz_err_security_c
rep movsb
mov byte[edi], 0
mov [status], STATUS_SECURITY_ERR_C
.no_msg:
 
inc [update_gui]
mcall -1
ret
/programs/network/vncc/vncc.asm
18,6 → 18,7
__DEBUG_LEVEL__ = 2
 
BITS_PER_PIXEL = 8 ; 8, 16 24
SERVERADDRLEN = 4096
 
use32
 
29,7 → 30,7
dd I_END ; size of image
dd IM_END ; memory for app
dd IM_END ; esp
dd 0x0, 0x0 ; I_Param , I_Path
dd serveraddr, 0x0 ; I_Param , I_Path
 
include "../../macros.inc"
include "../../debug-fdo.inc"
68,7 → 69,7
 
RECEIVE_BUFFER_SIZE = 8*1024*1024 ; 8 Mib
 
STATUS_INITIAL = 0
STATUS_CONNECT = 0
STATUS_CONNECTING = 1
STATUS_REQ_LOGIN = 2
STATUS_LOGIN = 3
84,6 → 85,7
STATUS_LIB_ERR = 16
STATUS_THREAD_ERR = 17
STATUS_LOGIN_FAILED = 18
STATUS_SECURITY_ERR_C = 19
 
BYTES_PER_PIXEL = (BITS_PER_PIXEL + 7) / 8
 
108,6 → 110,19
mov [status], STATUS_LIB_ERR
@@:
 
; Check if we got a server address through parameters
cmp byte[serveraddr], 0
je @f
xor al, al
mov edi, serveraddr
mov ecx, SERVERADDRLEN
repne scasb
sub edi, serveraddr+1
mov [URLbox.size], edi
mov [URLbox.pos], edi
call open_connection
@@:
 
; Present the user with the GUI and wait for network connection
call draw_gui
 
140,6 → 155,7
mcall 12, 2
 
draw_framebuffer:
DEBUGF 1, "Drawing framebuffer\n"
mcall 7, framebuffer_data, dword[screen], 0
mov [update_framebuffer], 0
 
314,13 → 330,12
 
SetEncodings db 2 ; setEncodings
db 0 ; padding
db 0, 3 ; number of encodings
db 0, 4 ; number of encodings
; db 0, 0, 0, 16 ; ZRLE
db 0, 0, 0, 15 ; TRLE
db 0, 0, 0, 2 ; RRE
db 0, 0, 0, 1 ; Copyrect encoding
db 0, 0, 0, 2 ; RRE
db 0, 0, 0, 0 ; raw encoding
; db 0, 0, 0, 5 ; HexTile
; db 0, 0, 0, 15 ; TRLE
; db 0, 0, 0, 16 ; ZRLE
.length = $ - SetEncodings
 
FramebufferUpdateRequest db 3
349,16 → 364,17
 
beep db 0x85, 0x25, 0x85, 0x40, 0
 
status dd STATUS_INITIAL
status dd STATUS_CONNECT
update_gui dd 0
mouse_dd dd 0
update_framebuffer dd 0
thread_id dd 0
 
deflate_buffer dd 0
deflate_length dd ?
deflate_str dd ?
 
URLbox edit_box 235, 70, 20, 0xffffff, 0x6f9480, 0, 0, 0, 65535, serveraddr, mouse_dd, ed_focus, 0, 0
URLbox edit_box 235, 70, 20, 0xffffff, 0x6f9480, 0, 0, 0, SERVERADDRLEN, serveraddr, mouse_dd, ed_focus, 0, 0
USERbox edit_box 215, 90, 10, 0xffffff, 0x6f9480, 0, 0, 0, 127, username, mouse_dd, ed_focus, 0, 0
PASSbox edit_box 215, 90, 30, 0xffffff, 0x6f9480, 0, 0, 0, 127, password, mouse_dd, ed_pass, 0, 0
 
367,14 → 383,16
passstr db "password:"
connectstr db "Connect"
loginstr db "Log in"
loginstr_e:
cancelstr db "Cancel"
okstr db "OK"
okstr_e:
 
sz_err_disconnected db "Server closed connection unexpectedly.", 0
sz_err_disconnected db "The server has closed the connection unexpectedly.", 0
sz_err_dns db "Could not resolve hostname.", 0
sz_err_sock db "Could not open socket.", 0
sz_err_connect db "Could not connect to the server.", 0
sz_err_proto db "A protocol error has occured.", 0
sz_err_security db "Server requested an unsupported security type.", 0
sz_err_security db "An authentication problem has occured.", 0
sz_err_library db "Could not load needed libraries.", 0
sz_err_thread db "Could not create thread.", 0
sz_err_login_failed db "Login failed.", 0
388,6 → 406,7
dd sz_err_library
dd sz_err_thread
dd sz_err_login_failed
dd sz_err_security_c
 
; import
align 4
421,6 → 440,9
 
servername rb 64+1
 
serveraddr db 0
rb SERVERADDRLEN
 
socketnum dd ?
datapointer dd ?
 
454,7 → 476,8
password rb 128
keys rd 32*2 ; DES keys for VNC authentication
 
serveraddr rb 65536
sz_err_security_c rb 512+1
 
receive_buffer rb RECEIVE_BUFFER_SIZE
framebuffer_data rb 1280*1024*3 ; framebuffer