Subversion Repositories Kolibri OS

Rev

Rev 3618 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3545 hidnplayr 1
;
2
;
3
; VNC Client for kolibrios by hidnplayr
4
;
5
; hidnplayr@gmail.com
6
;
7
 
8
format binary as ""
9
 
10
use32
11
 
12
        org     0x0
13
 
14
        db      'MENUET01'              ; 8 byte id
15
        dd      0x01                    ; header version
16
        dd      START                   ; start of code
17
        dd      I_END                   ; size of image
18
        dd      IM_END                  ; memory for app
19
        dd      IM_END                  ; esp
20
        dd      0x0 , 0x0               ; I_Param , I_Path
21
 
22
__DEBUG__ equ 1
23
__DEBUG_LEVEL__ equ 1
24
 
25
STRLEN = 64      ; password and server max length
26
xpos = 4         ; coordinates of image
27
ypos = 22        ;
28
 
29
TIMEOUT = 5     ; timeout in seconds
30
 
31
include '../macros.inc'
32
include '../debug-fdo.inc'
33
include '../proc32.inc'
34
include '../dll.inc'
35
include '../struct.inc'
36
include '../network.inc'
37
 
38
include 'structs.inc'
39
include 'logon.inc'
40
include 'raw.inc'
41
include 'thread.inc'
42
 
43
START:
44
 
45
        mcall   68, 11                  ; init heap
46
 
47
; load libraries
48
        stdcall dll.Load, @IMPORT
49
        test    eax, eax
50
        jnz     exit
51
 
52
        call    red_logon
53
 
54
        mcall   40, 0                   ; no events
55
        mcall   67, 0, 0, 0, 0          ; resize the window (hide it)
56
        mcall   51, 1, thread_start, thread_stack
57
 
58
        DEBUGF 1,'Thread created: %u\n', eax
59
 
60
      @@:
61
        mcall   5, 10
62
        cmp     byte [thread_ready], 0
63
        je      @r
64
 
65
        mcall   40, 100111b             ; mouse, button, key, redraw
66
 
67
 
68
        mov     edx, dword [screen]
69
        movzx   esi, dx
70
        shr     edx, 16
71
        add     edx, 2*xpos
72
        add     esi, ypos+xpos
73
        mcall   67, 10, 10              ; resize the window
74
 
75
mainloop:
76
        mcall   23, 50                  ; wait for event, 0,5s timeout
77
 
78
        dec     eax
79
        jz      redraw
80
 
81
        dec     eax
82
        jz      key
83
 
84
        dec     eax
85
        jz      button
86
 
87
        sub     eax, 3
88
        jz      mouse
89
 
90
        jmp     mainloop
91
 
92
key:
93
 
94
        DEBUGF  1,'Sending key event\n'
95
 
96
        mcall   2
97
        mov     byte [keyevent.key+3], ah
98
 
99
        mcall   send, [socketnum], keyevent, 8, 0
100
        jmp     mainloop
101
 
102
mouse:
103
 
104
        DEBUGF  1,'Sending mouse event\n'
105
 
106
        mcall   37, 1           ; get mouse pos
107
        sub     eax, xpos shl 16 + ypos
108
        bswap   eax
109
        mov     [pointerevent.x], ax
110
        shr     eax, 16
111
        mov     [pointerevent.y], ax
112
 
113
        mcall   37, 2           ; get mouse buttons
114
        test    al, 00000010b   ; test if right button was pressed  (bit 1 in kolibri)
115
        jz      @f
116
        add     al, 00000010b   ; in RFB protocol it is bit 2, so if we add bit 2 again, we'll get bit 3 and bit 1 will remain the same
117
      @@:
118
        mov     [pointerevent.mask],al
119
 
120
        mcall   send, [socketnum], pointerevent, 6, 0
121
        jmp     mainloop
122
 
123
redraw:
124
 
125
        DEBUGF  1,'Drawing window\n'
126
 
127
        mcall   12, 1
128
 
129
        mov     ebx, dword[screen]
130
        movzx   ecx, bx
131
        shr     ebx, 16
132
        mov     edx, 0x74ffffff
133
        mov     edi, name
134
        mcall   0               ; draw window
135
 
136
        call    drawbuffer
137
 
138
        mcall   12, 2
139
 
140
        jmp     mainloop
141
 
142
drawbuffer:
143
 
144
        mcall   7, framebuffer_data, dword[screen], 0
145
        ret
146
 
147
 
148
button:
149
        mcall   17              ; get id
150
 
151
exit:
152
        DEBUGF  1, 'Closing time!\n'
153
        mcall   close, [socketnum]
154
        mcall   -1
155
 
156
no_rfb:
157
        DEBUGF  1, 'This is no vnc server!\n'
158
        jmp     exit
159
 
160
invalid_security:
161
        DEBUGF  1, 'Security error: %s\n', receive_buffer+5
162
        jmp     exit
163
 
164
 
165
; DATA AREA
166
 
167
include_debug_strings    ; ALWAYS present in data section
168
 
169
handshake          db 'RFB 003.003', 10
170
shared             db 0
171
beep               db 0x85,0x25,0x85,0x40,0
172
 
173
pixel_format32     db 0       ; setPixelformat
174
                   rb 3       ; padding
175
.bpp               db 32      ; bits per pixel
176
.depth             db 32      ; depth
177
.big_endian        db 0       ; big-endian flag
178
.true_color        db 1       ; true-colour flag
179
.red_max           db 0,255   ; red-max
180
.green_max         db 0,255   ; green-max
181
.blue_max          db 0,255   ; blue-max
182
.red_shif          db 0       ; red-shift
183
.green_shift       db 8       ; green-shift
184
.blue_shift        db 16      ; blue-shift
185
                   rb 3       ; padding
186
 
187
pixel_format16     db 0       ; setPixelformat
188
                   rb 3       ; padding
189
.bpp               db 16      ; bits per pixel
190
.depth             db 15      ; depth
191
.big_endian        db 0       ; big-endian flag
192
.true_color        db 1       ; true-colour flag
193
.red_max           db 0,31    ; red-max
194
.green_max         db 0,31    ; green-max
195
.blue_max          db 0,31    ; blue-max
196
.red_shif          db 0       ; red-shift
197
.green_shift       db 5       ; green-shift
198
.blue_shift        db 10      ; blue-shift
199
                   rb 3       ; padding
200
 
201
pixel_format8      db 0       ; setPixelformat
202
                   rb 3       ; padding
203
.bpp               db 8       ; bits per pixel
204
.depth             db 6       ; depth
205
.big_endian        db 0       ; big-endian flag
206
.true_color        db 1       ; true-colour flag
207
.red_max           db 0,3     ; red-max
208
.green_max         db 0,3     ; green-max
209
.blue_max          db 0,3     ; blue-max
210
.red_shif          db 0       ; red-shift
211
.green_shift       db 2       ; green-shift
212
.blue_shift        db 4       ; blue-shift
213
                   rb 3       ; padding
214
 
215
encodings          db 2       ; setEncodings
216
                   rb 1       ; padding
217
                   db 1,0     ; number of encodings
218
                   db 0,0,0,0 ; raw encoding        (DWORD, Big endian order)
219
                   db 1,0,0,0 ; Copyrect encoding
220
 
221
fbur               db 3       ; frame buffer update request
222
.inc               db 0       ; incremental
223
.x                 dw 0
224
.y                 dw 0
225
.width             dw 0
226
.height            dw 0
227
 
228
keyevent           db 4       ; keyevent
229
.down              db 0       ; down-flag
230
                   dw 0       ; padding
231
.key               dd 0       ; key
232
 
233
pointerevent       db 5       ; pointerevent
234
.mask              db 0       ; button-mask
235
.x                 dw 0       ; x-position
236
.y                 dw 0       ; y-position
237
 
238
 
239
sockaddr1:
240
        dw AF_INET4
241
.port   dw 0x0c17       ; 5900
242
.ip     dd 0
243
        rb 10
244
 
245
thread_ready    db 0
246
; import
247
align 4
248
@IMPORT:
249
 
250
library         network, 'network.obj'
251
import          network,        \
252
                getaddrinfo,    'getaddrinfo',  \
253
                freeaddrinfo,   'freeaddrinfo', \
254
                inet_ntoa,      'inet_ntoa'
255
 
256
name    db 'VNC client', 0
257
 
258
I_END:
259
 
260
socketnum          dd ?
261
datapointer        dd ?
262
 
263
frame:
264
.width             dw ?
265
.height            dw ?
266
.x                 dw ?
267
.y                 dw ?
268
 
269
screen:
270
.height            dw ?
271
.width             dw ?
272
 
273
receive_buffer     rb 5*1024*1024 ; 5 mb buffer for received data (incoming frbupdate etc)
274
framebuffer_data   rb 1024*768*3  ; framebuffer
275
 
276
 
277
                rb 0x1000
278
thread_stack:
279
 
280
                rb 0x1000
281
IM_END:
282