Rev 264 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 264 | Rev 485 | ||
---|---|---|---|
1 | ; |
1 | ; |
2 | ; |
2 | ; |
3 | ; VNC Client for kolibrios by hidnplayr |
3 | ; VNC Client for kolibrios by hidnplayr |
4 | ; |
4 | ; |
5 | ; |
5 | ; |
6 | ; WORK IN PROGRESS... |
6 | ; WORK IN PROGRESS... |
7 | ; |
7 | ; |
8 | ; FEEL FREE TO CONTRIBUTE ! |
8 | ; FEEL FREE TO CONTRIBUTE ! |
9 | ; |
9 | ; |
10 | ; hidnplayr@gmail.com |
10 | ; hidnplayr@gmail.com |
11 | ; |
11 | ; |
12 | 12 | ||
13 | use32 |
13 | use32 |
14 | 14 | ||
15 | org 0x0 |
15 | org 0x0 |
16 | 16 | ||
17 | db 'MENUET01' ; 8 byte id |
17 | db 'MENUET01' ; 8 byte id |
18 | dd 0x01 ; header version |
18 | dd 0x01 ; header version |
19 | dd START ; start of code |
19 | dd START ; start of code |
20 | dd I_END ; size of image |
20 | dd I_END ; size of image |
21 | dd IM_END ; memory for app |
21 | dd IM_END ; memory for app |
22 | dd IM_END ; esp |
22 | dd IM_END ; esp |
23 | dd 0x0 , 0x0 ; I_Param , I_Icon |
23 | dd 0x0 , 0x0 ; I_Param , I_Icon |
24 | 24 | ||
25 | __DEBUG__ equ 1 |
25 | __DEBUG__ equ 1 |
26 | __DEBUG_LEVEL__ equ 1 |
26 | __DEBUG_LEVEL__ equ 1 |
27 | 27 | ||
28 | STRLEN = 64 ; password and server max length |
28 | STRLEN = 64 ; password and server max length |
29 | xpos = 4 ; coordinates of image |
29 | xpos = 4 ; coordinates of image |
30 | ypos = 22 ; |
30 | ypos = 22 ; |
31 | 31 | ||
32 | TIMEOUT = 60 ; timeout in seconds |
32 | TIMEOUT = 60 ; timeout in seconds |
33 | BUFFER = 1500 ; Buffer size for DNS |
33 | BUFFER = 1500 ; Buffer size for DNS |
- | 34 | ||
34 | 35 | include '..\..\macros.inc' |
|
35 | include 'fdo.inc' |
36 | include 'fdo.inc' |
36 | include 'ETH.INC' |
37 | include 'ETH.INC' |
37 | include 'logon.inc' |
38 | include 'logon.inc' |
38 | include 'raw.inc' |
39 | include 'raw.inc' |
39 | include 'copyrect.inc' |
40 | include 'copyrect.inc' |
40 | include 'thread.inc' |
41 | include 'thread.inc' |
41 | - | ||
42 | 42 | ||
43 | START: ; start of execution |
43 | START: ; start of execution |
44 | 44 | ||
45 | call red_logon |
45 | call red_logon |
46 | 46 | ||
47 | mov eax,40 ; Report events |
47 | mov eax,40 ; Report events |
48 | mov ebx,00000000b ; Only Stack |
48 | mov ebx,00000000b ; Only Stack |
49 | int 0x40 |
49 | mcall |
50 | 50 | ||
51 | mov eax,67 ; resize the window (hide it) |
51 | mov eax,67 ; resize the window (hide it) |
52 | xor ebx,ebx |
52 | xor ebx,ebx |
53 | mov ecx,ebx |
53 | mov ecx,ebx |
54 | mov edx,ebx |
54 | mov edx,ebx |
55 | mov esi,ebx |
55 | mov esi,ebx |
56 | int 0x40 |
56 | mcall |
57 | 57 | ||
58 | mov eax,51 |
58 | mov eax,51 |
59 | mov ebx,1 |
59 | mov ebx,1 |
60 | mov ecx,thread_start |
60 | mov ecx,thread_start |
61 | mov edx,thread_stack |
61 | mov edx,thread_stack |
62 | int 0x40 |
62 | mcall |
63 | 63 | ||
64 | DEBUGF 1,'Thread created: %u\n',eax |
64 | DEBUGF 1,'Thread created: %u\n',eax |
65 | 65 | ||
66 | @@: |
66 | @@: |
67 | mov eax,5 |
67 | mov eax,5 |
68 | mov ebx,10 |
68 | mov ebx,10 |
69 | int 0x40 |
69 | mcall |
70 | 70 | ||
71 | cmp byte[thread_ready],0 |
71 | cmp byte[thread_ready],0 |
72 | je @r |
72 | je @r |
73 | 73 | ||
74 | mov eax,40 ; report events |
74 | mov eax,40 ; report events |
75 | mov ebx,100111b ; mouse, button, key, redraw |
75 | mov ebx,100111b ; mouse, button, key, redraw |
76 | int 0x40 |
76 | mcall |
77 | 77 | ||
78 | mov eax,67 ; resize the window |
78 | mov eax,67 ; resize the window |
79 | mov ebx,10 |
79 | mov ebx,10 |
80 | mov ecx,10 |
80 | mov ecx,10 |
81 | mov edx,dword[framebuffer] |
81 | mov edx,dword[framebuffer] |
82 | bswap edx |
82 | bswap edx |
83 | movzx esi,dx |
83 | movzx esi,dx |
84 | shr edx,16 |
84 | shr edx,16 |
85 | add edx,2*xpos |
85 | add edx,2*xpos |
86 | add esi,ypos+xpos |
86 | add esi,ypos+xpos |
87 | int 0x40 |
87 | mcall |
88 | 88 | ||
89 | mainloop: |
89 | mainloop: |
90 | eth.socket_status [socket],eax |
90 | eth.socket_status [socket],eax |
91 | cmp al,TCB_CLOSE_WAIT |
91 | cmp al,TCB_CLOSE_WAIT |
92 | je close |
92 | je close |
93 | 93 | ||
94 | mov eax,23 ; wait for event with timeout |
94 | mov eax,23 ; wait for event with timeout |
95 | mov ebx,50 ; 0,5 s |
95 | mov ebx,50 ; 0,5 s |
96 | int 0x40 |
96 | mcall |
97 | 97 | ||
98 | cmp eax,1 |
98 | cmp eax,1 |
99 | je redraw |
99 | je redraw |
100 | cmp eax,2 ; key |
100 | cmp eax,2 ; key |
101 | je key |
101 | je key |
102 | cmp eax,3 ; button |
102 | cmp eax,3 ; button |
103 | je button |
103 | je button |
104 | cmp eax,6 ; mouse |
104 | cmp eax,6 ; mouse |
105 | je mouse |
105 | je mouse |
106 | 106 | ||
107 | call drawbuffer |
107 | call drawbuffer |
108 | 108 | ||
109 | jmp mainloop |
109 | jmp mainloop |
110 | 110 | ||
111 | key: |
111 | key: |
112 | DEBUGF 1,'Sending key event\n' |
112 | DEBUGF 1,'Sending key event\n' |
113 | 113 | ||
114 | mov eax,2 |
114 | mov eax,2 |
115 | int 0x40 |
115 | mcall |
116 | mov byte[keyevent.key+3],ah |
116 | mov byte[keyevent.key+3],ah |
117 | 117 | ||
118 | eth.write_tcp [socket],8,keyevent |
118 | eth.write_tcp [socket],8,keyevent |
119 | 119 | ||
120 | jmp mainloop |
120 | jmp mainloop |
121 | 121 | ||
122 | mouse: |
122 | mouse: |
123 | DEBUGF 1,'Sending mouse event\n' |
123 | DEBUGF 1,'Sending mouse event\n' |
124 | 124 | ||
125 | mov eax,37 |
125 | mov eax,37 |
126 | mov ebx,1 |
126 | mov ebx,1 |
127 | int 0x40 |
127 | mcall |
128 | 128 | ||
129 | sub eax,xpos*65536+ypos |
129 | sub eax,xpos*65536+ypos |
130 | bswap eax |
130 | bswap eax |
131 | mov word[pointerevent.x],ax |
131 | mov word[pointerevent.x],ax |
132 | shr eax,16 |
132 | shr eax,16 |
133 | mov word[pointerevent.y],ax |
133 | mov word[pointerevent.y],ax |
134 | 134 | ||
135 | mov eax,37 |
135 | mov eax,37 |
136 | mov ebx,2 |
136 | mov ebx,2 |
137 | int 0x40 |
137 | mcall |
138 | 138 | ||
139 | test al,00000010b ; test if right button was pressed (bit 1 in kolibri) |
139 | test al,00000010b ; test if right button was pressed (bit 1 in kolibri) |
140 | jz @f |
140 | jz @f |
141 | 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 |
141 | 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 |
142 | @@: |
142 | @@: |
143 | 143 | ||
144 | mov byte[pointerevent.mask],al |
144 | mov byte[pointerevent.mask],al |
145 | 145 | ||
146 | eth.write_tcp [socket],6,pointerevent |
146 | eth.write_tcp [socket],6,pointerevent |
147 | 147 | ||
148 | jmp mainloop |
148 | jmp mainloop |
149 | 149 | ||
150 | redraw: |
150 | redraw: |
151 | 151 | ||
152 | DEBUGF 1,'Drawing window\n' |
152 | DEBUGF 1,'Drawing window\n' |
153 | 153 | ||
154 | mov eax,12 |
154 | mov eax,12 |
155 | mov ebx,1 |
155 | mov ebx,1 |
156 | int 0x40 |
156 | mcall |
157 | 157 | ||
158 | mov eax,0 ; draw window |
158 | mov eax,0 ; draw window |
159 | mov ebx,dword[framebuffer] |
159 | mov ebx,dword[framebuffer] |
160 | bswap ebx |
160 | bswap ebx |
161 | movzx ecx,bx |
161 | movzx ecx,bx |
162 | shr ebx,16 |
162 | shr ebx,16 |
163 | add ebx,2*xpos |
163 | add ebx,2*xpos |
164 | add ecx,ypos+xpos |
164 | add ecx,ypos+xpos |
165 | mov edx,0x03ffffff |
165 | mov edx,0x03ffffff |
166 | mov esi,0x80555599 |
- | |
167 | mov edi,0x00ffffff |
- | |
168 | int 0x40 |
166 | mcall |
169 | 167 | ||
170 | mov eax,4 ; label |
168 | mov eax,4 ; label |
171 | mov ebx,9*65536+8 |
169 | mov ebx,9*65536+8 |
172 | mov ecx,0x10ffffff |
170 | mov ecx,0x10ffffff |
173 | mov edx,name |
171 | mov edx,name |
174 | mov esi,[name_length] |
172 | mov esi,[name_length] |
175 | bswap esi |
173 | bswap esi |
176 | int 0x40 |
174 | mcall |
177 | 175 | ||
178 | call drawbuffer |
176 | call drawbuffer |
179 | 177 | ||
180 | mov eax,12 |
178 | mov eax,12 |
181 | mov ebx,2 |
179 | mov ebx,2 |
182 | int 0x40 |
180 | mcall |
183 | 181 | ||
184 | jmp mainloop |
182 | jmp mainloop |
185 | 183 | ||
186 | drawbuffer: |
184 | drawbuffer: |
187 | 185 | ||
188 | mov eax,7 |
186 | mov eax,7 |
189 | mov ebx,framebuffer_data |
187 | mov ebx,framebuffer_data |
190 | mov ecx,dword[screen] |
188 | mov ecx,dword[screen] |
191 | mov edx,xpos*65536+ypos |
189 | mov edx,xpos*65536+ypos |
192 | int 0x40 |
190 | mcall |
193 | 191 | ||
194 | ret |
192 | ret |
195 | 193 | ||
196 | 194 | ||
197 | button: ; button |
195 | button: ; button |
198 | mov eax,17 ; get id |
196 | mov eax,17 ; get id |
199 | int 0x40 |
197 | mcall |
200 | 198 | ||
201 | close: |
199 | close: |
202 | call read_data |
200 | call read_data |
203 | ; eth.close_tcp [socket] ; We're done, close the socket ;;; BUG WHEN CLOSING SOCKET !! |
201 | ; eth.close_tcp [socket] ; We're done, close the socket ;;; BUG WHEN CLOSING SOCKET !! |
204 | DEBUGF 1,'Socket closed\n' |
202 | DEBUGF 1,'Socket closed\n' |
205 | 203 | ||
206 | mov eax,-1 |
204 | mov eax,-1 |
207 | int 0x40 |
205 | mcall |
208 | 206 | ||
209 | no_rfb: |
207 | no_rfb: |
210 | DEBUGF 1,'This is no vnc server!\n' |
208 | DEBUGF 1,'This is no vnc server!\n' |
211 | jmp close |
209 | jmp close |
212 | 210 | ||
213 | invalid_security: |
211 | invalid_security: |
214 | DEBUGF 1,'Security error: %s\n',receive_buffer+5 |
212 | DEBUGF 1,'Security error: %s\n',receive_buffer+5 |
215 | jmp close |
213 | jmp close |
216 | 214 | ||
217 | 215 | ||
218 | ; DATA AREA |
216 | ; DATA AREA |
219 | 217 | ||
220 | include_debug_strings ; ALWAYS present in data section |
218 | include_debug_strings ; ALWAYS present in data section |
221 | 219 | ||
222 | handshake db 'RFB 003.003',0x0a |
220 | handshake db 'RFB 003.003',0x0a |
223 | shared db 0 |
221 | shared db 0 |
224 | beep db 0x85,0x25,0x85,0x40,0 |
222 | beep db 0x85,0x25,0x85,0x40,0 |
225 | 223 | ||
226 | pixel_format32 db 0 ; setPixelformat |
224 | pixel_format32 db 0 ; setPixelformat |
227 | rb 3 ; padding |
225 | rb 3 ; padding |
228 | .bpp db 32 ; bits per pixel |
226 | .bpp db 32 ; bits per pixel |
229 | .depth db 32 ; depth |
227 | .depth db 32 ; depth |
230 | .big_endian db 0 ; big-endian flag |
228 | .big_endian db 0 ; big-endian flag |
231 | .true_color db 1 ; true-colour flag |
229 | .true_color db 1 ; true-colour flag |
232 | .red_max db 0,255 ; red-max |
230 | .red_max db 0,255 ; red-max |
233 | .green_max db 0,255 ; green-max |
231 | .green_max db 0,255 ; green-max |
234 | .blue_max db 0,255 ; blue-max |
232 | .blue_max db 0,255 ; blue-max |
235 | .red_shif db 0 ; red-shift |
233 | .red_shif db 0 ; red-shift |
236 | .green_shift db 8 ; green-shift |
234 | .green_shift db 8 ; green-shift |
237 | .blue_shift db 16 ; blue-shift |
235 | .blue_shift db 16 ; blue-shift |
238 | rb 3 ; padding |
236 | rb 3 ; padding |
239 | 237 | ||
240 | pixel_format16 db 0 ; setPixelformat |
238 | pixel_format16 db 0 ; setPixelformat |
241 | rb 3 ; padding |
239 | rb 3 ; padding |
242 | .bpp db 16 ; bits per pixel |
240 | .bpp db 16 ; bits per pixel |
243 | .depth db 15 ; depth |
241 | .depth db 15 ; depth |
244 | .big_endian db 0 ; big-endian flag |
242 | .big_endian db 0 ; big-endian flag |
245 | .true_color db 1 ; true-colour flag |
243 | .true_color db 1 ; true-colour flag |
246 | .red_max db 0,31 ; red-max |
244 | .red_max db 0,31 ; red-max |
247 | .green_max db 0,31 ; green-max |
245 | .green_max db 0,31 ; green-max |
248 | .blue_max db 0,31 ; blue-max |
246 | .blue_max db 0,31 ; blue-max |
249 | .red_shif db 0 ; red-shift |
247 | .red_shif db 0 ; red-shift |
250 | .green_shift db 5 ; green-shift |
248 | .green_shift db 5 ; green-shift |
251 | .blue_shift db 10 ; blue-shift |
249 | .blue_shift db 10 ; blue-shift |
252 | rb 3 ; padding |
250 | rb 3 ; padding |
253 | 251 | ||
254 | pixel_format8 db 0 ; setPixelformat |
252 | pixel_format8 db 0 ; setPixelformat |
255 | rb 3 ; padding |
253 | rb 3 ; padding |
256 | .bpp db 8 ; bits per pixel |
254 | .bpp db 8 ; bits per pixel |
257 | .depth db 6 ; depth |
255 | .depth db 6 ; depth |
258 | .big_endian db 0 ; big-endian flag |
256 | .big_endian db 0 ; big-endian flag |
259 | .true_color db 1 ; true-colour flag |
257 | .true_color db 1 ; true-colour flag |
260 | .red_max db 0,3 ; red-max |
258 | .red_max db 0,3 ; red-max |
261 | .green_max db 0,3 ; green-max |
259 | .green_max db 0,3 ; green-max |
262 | .blue_max db 0,3 ; blue-max |
260 | .blue_max db 0,3 ; blue-max |
263 | .red_shif db 0 ; red-shift |
261 | .red_shif db 0 ; red-shift |
264 | .green_shift db 2 ; green-shift |
262 | .green_shift db 2 ; green-shift |
265 | .blue_shift db 4 ; blue-shift |
263 | .blue_shift db 4 ; blue-shift |
266 | rb 3 ; padding |
264 | rb 3 ; padding |
267 | 265 | ||
268 | encodings db 2 ; setEncodings |
266 | encodings db 2 ; setEncodings |
269 | rb 1 ; padding |
267 | rb 1 ; padding |
270 | db 1,0 ; number of encodings |
268 | db 1,0 ; number of encodings |
271 | db 0,0,0,0 ; raw encoding (DWORD, Big endian order) |
269 | db 0,0,0,0 ; raw encoding (DWORD, Big endian order) |
272 | db 1,0,0,0 ; Copyrect encoding |
270 | db 1,0,0,0 ; Copyrect encoding |
273 | 271 | ||
274 | fbur db 3 ; frame buffer update request |
272 | fbur db 3 ; frame buffer update request |
275 | .inc db 0 ; incremental |
273 | .inc db 0 ; incremental |
276 | .x dw 0 |
274 | .x dw 0 |
277 | .y dw 0 |
275 | .y dw 0 |
278 | .width dw 0 |
276 | .width dw 0 |
279 | .height dw 0 |
277 | .height dw 0 |
280 | 278 | ||
281 | keyevent db 4 ; keyevent |
279 | keyevent db 4 ; keyevent |
282 | .down db 0 ; down-flag |
280 | .down db 0 ; down-flag |
283 | dw 0 ; padding |
281 | dw 0 ; padding |
284 | .key dd 0 ; key |
282 | .key dd 0 ; key |
285 | 283 | ||
286 | pointerevent db 5 ; pointerevent |
284 | pointerevent db 5 ; pointerevent |
287 | .mask db 0 ; button-mask |
285 | .mask db 0 ; button-mask |
288 | .x dw 0 ; x-position |
286 | .x dw 0 ; x-position |
289 | .y dw 0 ; y-position |
287 | .y dw 0 ; y-position |
290 | 288 | ||
291 | I_END: |
289 | I_END: |
292 | 290 | ||
293 | framebuffer: |
291 | framebuffer: |
294 | .width dw ? |
292 | .width dw ? |
295 | .height dw ? |
293 | .height dw ? |
296 | pixelformat: |
294 | pixelformat: |
297 | .bpp db ? |
295 | .bpp db ? |
298 | .depth db ? |
296 | .depth db ? |
299 | .big_endian db ? |
297 | .big_endian db ? |
300 | .true_color db ? |
298 | .true_color db ? |
301 | .red_max dw ? |
299 | .red_max dw ? |
302 | .green_max dw ? |
300 | .green_max dw ? |
303 | .blue_max dw ? |
301 | .blue_max dw ? |
304 | .red_shift db ? |
302 | .red_shift db ? |
305 | .green_shift db ? |
303 | .green_shift db ? |
306 | .blue_shift db ? |
304 | .blue_shift db ? |
307 | .padding rb 3 |
305 | .padding rb 3 |
308 | name_length dd ? |
306 | name_length dd ? |
309 | name rb 256 |
307 | name rb 256 |
310 | 308 | ||
311 | server_ip dd 0 |
309 | server_ip dd 0 |
312 | server_port dd 0 |
310 | server_port dd 0 |
313 | socket dd 0 |
311 | socket dd 0 |
314 | datapointer dd 0 |
312 | datapointer dd 0 |
315 | 313 | ||
316 | frame: |
314 | frame: |
317 | .width dw 0 |
315 | .width dw 0 |
318 | .height dw 0 |
316 | .height dw 0 |
319 | .x dw 0 |
317 | .x dw 0 |
320 | .y dw 0 |
318 | .y dw 0 |
321 | 319 | ||
322 | screen: |
320 | screen: |
323 | .height dw 0 |
321 | .height dw 0 |
324 | .width dw 0 |
322 | .width dw 0 |
325 | 323 | ||
326 | thread_ready db 0 |
324 | thread_ready db 0 |
327 | 325 | ||
328 | dnsMsg: |
326 | dnsMsg: |
329 | receive_buffer rb 5*1024*1024 ; 5 mb buffer for received data (incoming frbupdate etc) |
327 | receive_buffer rb 5*1024*1024 ; 5 mb buffer for received data (incoming frbupdate etc) |
330 | framebuffer_data rb 1024*768*3 ; framebuffer |
328 | framebuffer_data rb 1024*768*3 ; framebuffer |
331 | 329 | ||
332 | thread_stack rb 0x1000 |
330 | thread_stack rb 0x1000 |
333 | 331 | ||
334 | IM_END: |
332 | IM_END: |