Subversion Repositories Kolibri OS

Rev

Rev 109 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 109 Rev 153
Line 1... Line 1...
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;                                                      ;
2
;                                                      ;
3
;    Tiny HTTP Server v 0.4 for MenuetOS               ;
3
;    Tiny HTTP Server v 0.5 for KolibriOS              ;
4
;                                                      ;
4
;                                                      ;
5
;    License GPL / See file COPYING for details.       ;
5
;    License GPL / See file COPYING for details.       ;
6
;    Copyright 2003 Ville Turjanmaa                    ;
6
;    Copyright 2003 Ville Turjanmaa                    ;
7
;                                                      ;
7
;                                                      ;
8
;    Compile with FASM for Menuet                      ;
8
;    Compile with FASM for Menuet/KolibriOS            ;
9
;                                                      ;
9
;                                                      ;
10
;    Request /TinyStat for server statistics           ;
10
;    Request /TinyStat for server statistics           ;
11
;    Request /TinyBoard for server message board       ;
11
;    Request /TinyBoard for server message board       ;
12
;                                                      ;
12
;                                                      ;
-
 
13
;    Special version for KoOS by Hex && Heavyiron      ;
-
 
14
;                                                      ;
13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line -... Line 16...
-
 
16
 
14
 
17
appname  equ  'Kolibri HTTP Server '
Line 15... Line 18...
15
version  equ  '0.4'
18
version  equ  '0.6'
Line 16... Line 19...
16
 
19
 
Line 24... Line 27...
24
                dd      I_END                   ; program image size
27
		dd	I_END			; program image size
25
                dd      0x400000                ; required amount of memory
28
		dd	0x400000		; required amount of memory
26
                dd      0x20000
29
		dd	0x20000
27
                dd      0,0                     ; reserved=no extended header
30
		dd	0,0			; reserved=no extended header
Line 28... Line -...
28
 
-
 
29
include 'lang.inc'
31
 
Line 30... Line 32...
30
include "macros.inc"
32
include "MACROS.INC"
31
 
33
 
32
; 0x0+       - program image
34
; 0x0+       - program image
33
; 0x1ffff    - stack
35
; 0x1ffff    - stack
Line 34... Line 36...
34
; 0x20000+   - message board
36
; 0x20000+   - message board
-
 
37
; 0x100000+  - requested file
-
 
38
 
-
 
39
filel:
-
 
40
   dd 0
35
; 0x100000+  - requested file
41
   dd 0
36
 
42
   dd 0
Line 37... Line 43...
37
filel:
43
   dd 50000
-
 
44
   dd 0x20000
-
 
45
   db	'/rd/1/board.htm',0
-
 
46
 
-
 
47
files:
38
   dd   0x0,0x0,50000/512,0x20000,0x70000
48
    dd 2
39
   db   '/rd/1/board.htm',0
49
    dd 0
Line 40... Line -...
40
 
-
 
41
files:
50
    dd 0
Line 42... Line 51...
42
   dd   0x1,0x0,0x0,0x20000,0x70000
51
    dd 0
43
   db   '/rd/1/board.htm',0
52
    dd 0x20000
44
 
53
    db '/rd/1/board.htm',0
45
 
54
 
46
 
55
 
47
START:                          ; start of execution
56
START:				; start of execution
Line 60... Line 69...
60
    cld
69
    cld
61
    rep  movsb
70
    rep  movsb
Line 62... Line 71...
62
 
71
 
Line 63... Line 72...
63
   board_found:
72
   board_found:
64
 
73
 
65
    mov  eax,58
74
    mov  eax,70
66
    mov  ebx,files
75
    mov  ebx,files
67
    mov  ecx,[board_size]
76
    mov  ecx,[board_size]
Line 68... Line 77...
68
    mov  [files+8],ecx
77
    mov  [files+12],ecx
69
    int  0x40
78
    int  0x40
70
 
79
 
-
 
80
    mov  [status],-1
71
    mov  [status],-1
81
    mov  [last_status],-2
Line 72... Line -...
72
    mov  [last_status],-2
-
 
73
    call clear_input
-
 
74
    call draw_window            ; at first, draw the window
82
    call clear_input
Line 75... Line 83...
75
 
83
red:
76
;    call ops
84
    call draw_window		; at first, draw the window
77
 
85
 
Line 96... Line 104...
96
    int  0x40
104
    int  0x40
97
    call check_events
105
    call check_events
Line 98... Line 106...
98
 
106
 
Line 99... Line -...
99
    jmp  still
-
 
100
 
-
 
101
 
-
 
102
 reb:  ; boot
-
 
103
 
-
 
104
    mov  eax,18
-
 
105
    mov  ebx,1
-
 
106
    int  0x40
-
 
107
 
-
 
108
    jmp  $
-
 
109
 
107
    jmp  still
Line 110... Line 108...
110
 
108
 
Line 111... Line 109...
111
last_status   dd   0x0
109
last_status   dd   0x0
Line 119... Line 117...
119
    cmp  eax,3                  ; button in buffer ?
117
    cmp  eax,3			; button in buffer ?
120
    jz   button
118
    jz   button
Line 121... Line 119...
121
 
119
 
Line 122... Line -...
122
    ret
-
 
123
 
-
 
124
red:                           ; redraw
-
 
125
    call draw_window
-
 
126
    ret
120
    ret
127
 
121
 
128
key:                           ; Keys are not valid at this part of the
122
key:			       ; Keys are not valid at this part of the
129
    mov  eax,2                 ; loop. Just read it and ignore
123
    mov  al,2		       ; loop. Just read it and ignore
Line 130... Line 124...
130
    int  0x40
124
    int  0x40
Line 131... Line 125...
131
    ret
125
    ret
132
 
126
 
Line 133... Line 127...
133
button:                         ; button
127
button: 			; button
134
 
128
 
135
    mov  eax,17                 ; get id
129
    mov  al,17 		; get id
Line 162... Line 156...
162
    call check_for_incoming_data
156
    call check_for_incoming_data
163
    call clear_input
157
    call clear_input
164
    call draw_data
158
    call draw_data
165
    mov  [server_active],1
159
    mov  [server_active],1
166
    call check_status
160
    call check_status
167
;    cmp  [status],0
-
 
168
;    je   reb
-
 
169
    ret
161
    ret
170
  tst3:
162
  tst3:
171
 
-
 
172
    cmp  ah,4                   ; button id=4 ?
163
    cmp  ah,4			; button id=4 ?
173
    jnz  no4
164
    jnz  no4
174
    mov  [server_active],0
165
    mov  [server_active],0
175
  close_socket:
166
  close_socket:
176
    mov  eax,53
167
    mov  eax,53
Line 317... Line 308...
317
 
308
 
Line 318... Line 309...
318
    pusha
309
    pusha
Line 319... Line -...
319
 
-
 
320
  wait_more:
-
 
321
 
-
 
322
;    rdtsc
-
 
323
;    mov  ecx,eax
-
 
324
;    add  ecx,1000000
-
 
325
;   wr:
-
 
326
;    rdtsc
-
 
327
;    cmp  eax,ecx
310
 
328
;    jb   wr
311
  wait_more:
329
 
312
 
Line 330... Line 313...
330
    mov  eax,5
313
    mov  eax,5
Line 395... Line 378...
395
    int   0x40
378
    int   0x40
Line 396... Line 379...
396
 
379
 
397
    popa
380
    popa
Line -... Line 381...
-
 
381
    ret
-
 
382
 
398
    ret
383
fileinfo	dd 0
-
 
384
		dd 0
399
 
385
		dd 0
400
 
386
		dd 512
401
fileinfo     dd  0,0,1,0x100000,0xf0000
387
		dd 0x100000
402
getf         db  '/RD/1/'
388
getf		db '/rd/1/'
Line 403... Line 389...
403
             times 50 db 0
389
	     times 50 db 0
Line 432... Line 418...
432
message dd 0x0
418
message dd 0x0
433
message_len dd 0x0
419
message_len dd 0x0
Line 434... Line 420...
434
 
420
 
Line 435... Line 421...
435
read_file:                          ; start of execution
421
read_file:			    ; start of execution
-
 
422
 
436
 
423
    mov  [fileinfo+16],eax
437
    mov  [fileinfo+12],eax
-
 
438
    mov  [fileinfo+8],ebx
424
    shl ebx, 9
439
 
425
    mov  [fileinfo+12],ebx
440
    mov  [file_type],unk
426
    mov  [file_type],unk
Line 441... Line 427...
441
    mov  [type_len],unkl-unk
427
    mov  [type_len],unkl-unk
Line 447... Line 433...
447
    cmp  [input_text+256+11],dword 'oard'     ; server board message
433
    cmp  [input_text+256+11],dword 'oard'     ; server board message
448
    jne  no_server_message_2
434
    jne  no_server_message_2
Line 449... Line 435...
449
 
435
 
Line 450... Line 436...
450
  yes_new_message:
436
  yes_new_message:
451
 
437
 
452
    mov  eax,58
438
    mov  eax,70
453
    mov  ebx,filel
439
    mov  ebx,filel
Line 454... Line 440...
454
    int  0x40
440
    int  0x40
Line 483... Line 469...
483
    je   name_found_len
469
    je	 name_found_len
484
    cmp  edx,1000
470
    cmp  edx,1000
485
    je   name_found_len
471
    je	 name_found_len
486
    inc  edx
472
    inc  edx
487
    jmp  name_new_len
473
    jmp  name_new_len
-
 
474
 
488
   name_found_len:
475
   name_found_len:
Line 489... Line 476...
489
 
476
 
Line 490... Line 477...
490
    mov  [from_len],edx
477
    mov  [from_len],edx
Line 572... Line 559...
572
    cld
559
    cld
573
    rep  movsb
560
    rep  movsb
Line 574... Line 561...
574
 
561
 
575
    mov  esi,[from_i]          ; name
562
    mov  esi,[from_i]	       ; name
-
 
563
    mov  edi,0x20000
576
    mov  edi,0x20000
564
    add  edi,board1-board
577
    add  edi,board1-board + board1e-board1
565
    add  edi,board1e-board1
578
    mov  ecx,[from_len]
566
    mov  ecx,[from_len]
579
    cld
567
    cld
Line 580... Line 568...
580
    rep  movsb
568
    rep  movsb
Line 605... Line 593...
605
    rep  movsb
593
    rep  movsb
Line 606... Line 594...
606
 
594
 
Line 607... Line 595...
607
    inc  [board_messages]
595
    inc  [board_messages]
608
 
596
 
Line 609... Line 597...
609
    mov  eax,[board_size]
597
    mov  eax,[board_size]
610
    mov  [files+8],eax
598
    mov  [files+12],eax
611
 
599
 
Line 612... Line 600...
612
    mov  eax,58
600
    mov  eax,70
613
    mov  ebx,files
601
    mov  ebx,files
Line 776... Line 764...
776
    mov  edi,filename
764
    mov  edi,filename
777
    mov  ecx,35
765
    mov  ecx,35
778
    cld
766
    cld
779
    rep  movsb
767
    rep  movsb
Line 780... Line 768...
780
 
768
 
781
    mov  [fileinfo+8],dword 1   ; file exists ?
769
    mov  [fileinfo+12],dword 1	 ; file exists ?
782
    mov  eax,58
770
    mov  eax,70
783
    mov  ebx,fileinfo
771
    mov  ebx,fileinfo
Line 784... Line 772...
784
    int  0x40
772
    int  0x40
785
 
773
 
Line 802... Line 790...
802
 
790
 
Line 803... Line 791...
803
    jmp  file_not_found
791
    jmp  file_not_found
Line 804... Line 792...
804
 
792
 
805
   file_found:
793
   file_found:
806
 
794
 
807
    mov  [fileinfo+8],dword 0x2f0000 / 512 ; read all of file
795
    mov  [fileinfo+12],dword 0x2f0000 ; read all of file
Line 808... Line 796...
808
    mov  eax,58
796
    mov  eax,70
809
    mov  ebx,fileinfo
797
    mov  ebx,fileinfo
Line 1086... Line 1074...
1086
 
1074
 
Line 1087... Line 1075...
1087
print_text:
1075
print_text:
Line 1088... Line -...
1088
 
-
 
1089
    pusha
-
 
1090
 
-
 
1091
    mov  eax,13
-
 
1092
    mov  ebx,97*65536+23*6
-
 
1093
    mov  ecx,[ya]
-
 
1094
    shl  ecx,16
-
 
1095
    mov  cx,9
-
 
1096
    mov  edx,0xffffff
1076
 
1097
    int  0x40
1077
    pusha
1098
 
1078
 
1099
    mov  eax,4
1079
    mov  eax,4
1100
    mov  edx,[addr]
1080
    mov  edx,[addr]
1101
    mov  ebx,97*65536
1081
    mov  ebx,97*65536
-
 
1082
    add  ebx,[ya]
1102
    add  ebx,[ya]
1083
    mov  ecx,0x40000000
Line 1103... Line 1084...
1103
    mov  ecx,0x000000
1084
    mov  esi,23
1104
    mov  esi,23
1085
    mov  edi,0xffffff
Line 1105... Line -...
1105
    int  0x40
-
 
1106
 
-
 
1107
    popa
-
 
1108
    ret
-
 
1109
 
1086
    int  0x40
1110
 
1087
 
1111
 
1088
    popa
Line 1125... Line 1102...
1125
 
1102
 
1126
                                   ; DRAW WINDOW
1103
				   ; DRAW WINDOW
1127
    mov  eax,0                     ; function 0 : define and draw window
1104
    mov  eax,0			   ; function 0 : define and draw window
1128
    mov  ebx,100*65536+480         ; [x start] *65536 + [x size]
1105
    mov  ebx,100*65536+480	   ; [x start] *65536 + [x size]
1129
    mov  ecx,100*65536+215         ; [y start] *65536 + [y size]
1106
    mov  ecx,100*65536+215	   ; [y start] *65536 + [y size]
1130
    mov  edx,0x03ffffff            ; color of work area RRGGBB
-
 
1131
    mov  esi,0x8050a0b0            ; color of grab bar  RRGGBB,8->color gl
-
 
1132
    mov  edi,0x0050a0b0            ; color of frames    RRGGBB
-
 
1133
    int  0x40
-
 
1134
 
1107
    mov  edx,0x13ffffff 	   ; color of work area RRGGBB
1135
                                   ; WINDOW LABEL
-
 
1136
    mov  eax,4                     ; function 4 : write text to window
-
 
1137
    mov  ebx,8*65536+8             ; [x start] *65536 + [y start]
-
 
1138
    mov  ecx,0x10ffffff            ; color of text RRGGBB
-
 
1139
    mov  edx,labelt                ; pointer to text beginning
-
 
1140
    mov  esi,labellen-labelt       ; text length
1108
    mov  edi,header		   ; WINDOW LABEL
Line 1141... Line 1109...
1141
    int  0x40
1109
    int  0x40
1142
 
1110
 
1143
    mov  eax,8                     ; function 8 : define and draw button
1111
    mov  eax,8			   ; function 8 : define and draw button
1144
    mov  ebx,(40)*65536+20         ; [x start] *65536 + [x size]
1112
    mov  ebx,(40)*65536+20	   ; [x start] *65536 + [x size]
1145
    mov  ecx,59*65536+9           ; [y start] *65536 + [y size]
1113
    mov  ecx,59*65536+9 	   ; [y start] *65536 + [y size]
1146
    mov  edx,2                     ; button id
1114
    mov  edx,2			   ; button id
Line 1147... Line 1115...
1147
    mov  esi,0x66aa66              ; button color RRGGBB
1115
    mov  esi,0x66aa66		   ; button color RRGGBB
1148
    int  0x40
1116
    int  0x40
1149
 
1117
 
1150
    mov  eax,8                     ; function 8 : define and draw button
1118
			   ; function 8 : define and draw button
1151
    mov  ebx,(40)*65536+20         ; [x start] *65536 + [x size]
1119
    mov  ebx,(40)*65536+20	   ; [x start] *65536 + [x size]
1152
    mov  ecx,72*65536+9           ; [y start] *65536 + [y size]
1120
    mov  ecx,72*65536+9          ; [y start] *65536 + [y size]
Line 1153... Line 1121...
1153
    mov  edx,4                     ; button id
1121
    mov  edx,4			   ; button id
1154
    mov  esi,0xaa6666              ; button color RRGGBB
1122
    mov  esi,0xaa6666		   ; button color RRGGBB
1155
    int  0x40
1123
    int  0x40
1156
 
1124
 
1157
    mov  eax,8                     ; Enter directory
1125
			   ; Enter directory
1158
    mov  ebx,(25)*65536+66
1126
    mov  ebx,(25)*65536+66
Line 1165... Line 1133...
1165
    mov  ebx,240*65536+240
1133
    mov  ebx,240*65536+240
1166
    mov  ecx,22*65536+210
1134
    mov  ecx,22*65536+210
1167
    mov  edx,0x6699cc ; 002288
1135
    mov  edx,0x6699cc ; 002288
1168
    int  0x40
1136
    int  0x40
Line 1169... Line 1137...
1169
 
1137
 
1170
    mov  eax,38
1138
 
1171
    mov  ebx,241*65536+241
1139
    mov  ebx,241*65536+241
1172
    mov  ecx,22*65536+210
1140
    mov  ecx,22*65536+210
1173
    mov  edx,0x336699 ; 002288
1141
    mov  edx,0x336699 ; 002288
Line 1257... Line 1225...
1257
    db '                                        '
1225
    db '                                        '
1258
    db 'Requests: /TinyStat  -statistics        '
1226
    db 'Requests: /TinyStat  -statistics        '
1259
    db '          /TinyBoard -message board     '
1227
    db '          /TinyBoard -message board     '
1260
    db '                                        '
1228
    db '                                        '
1261
dirp:
1229
dirp:
1262
    db '   Files:   /RD/1/                      '
1230
    db '   Files:   /rd/1/                      '
1263
    db '                                        '
1231
    db '                                        '
1264
filename:
1232
filename:
1265
    db '                                        '
1233
    db '                                        '
1266
    db 'Size: -------                           '
1234
    db 'Size: -------                           '
1267
    db 'Type: ---                               '
1235
    db 'Type: ---                               '
Line 1269... Line 1237...
1269
 
1237
 
Line 1270... Line 1238...
1270
 
1238
 
1271
html_header:
1239
html_header:
1272
 
1240
 
1273
     db  'HTTP/1.0 200 OK',13,10
1241
     db  'HTTP/1.0 200 OK',13,10
Line 1274... Line 1242...
1274
     db  'Server: MenuetOS HTTP Server',13,10
1242
     db  'Server: KolibriOS HTTP Server',13,10
Line 1275... Line 1243...
1275
     db  'Content-Length: '
1243
     db  'Content-Length: '
1276
c_l: db  '000000',13,10
1244
c_l: db  '000000',13,10
1277
 
1245
 
1278
h_len:
1246
h_len:
1279
 
1247
 
1280
fnf:
1248
fnf:
1281
     db  ''
1249
     db  ''
1282
     db  '
'
1250
     db  '
'
1283
     db  "TinyServer v ",version," for MenuetOS",13,10,13,10
1251
     db  "HTTP-Ñåðâåð v ",version," äëÿ KolibriOS",13,10,13,10
1284
     db  "Error 404 - File not found.",13,10,13,10
1252
     db  "

Error 404 - File not found

",13,10,13,10
Line 1285... Line 1253...
1285
     db  "For more info about server: request /TinyStat",13,10,13,10
1253
     db  "Äëÿ ïîëó÷åíèÿ ñòàòèñòèêè âûïîëíèòå çàïðîñ /TinyStat",13,10,13,10
1286
et:  db  "xx:xx:xx",13,10
1254
et:  db  "xx:xx:xx",13,10
1287
ed:  db  "xx.xx.xx",13,10
1255
ed:  db  "xx.xx.xx",13,10
1288
     db  "
"
1256
     db  "
"
1289
fnfe:
1257
fnfe:
1290
 
1258
 
1291
 
1259
 
1292
sm:
1260
sm:
1293
     db  ''
1261
     db  ''
1294
     db  '
'
1262
     db  '
'
1295
     db  "TinyServer v ",version," for MenuetOS",13,10,13,10
1263
     db  "HTTP-Ñåðâåð v ",version," äëÿ KolibriOS",13,10,13,10
1296
     db  "Statistics: (before current request)",13,10,13,10
1264
     db  "Ñòàòèñòèêà: (ïîñëå äàííîãî çàïðîñà)",13,10,13,10
1297
sms: db  "- Documents served  : xxxxxxxxx",13,10
1265
sms: db  "- Äîêóìåíòîâ ïðèíÿòî: xxxxxxxxx",13,10
1298
smb: db  "- Bytes transferred : xxxxxxxxx",13,10
1266
smb: db  "- Áàéò ïåðåäàííî    : xxxxxxxxx",13,10
1299
     db  "- Location          : /TinyStat",13,10,13,10
1267
     db  "- Ìåñòîíàõîæäåíèå   : Ñòàòèñòèêà",13,10,13,10
1300
     db  "TinyBoard:",13,10,13,10
1268
     db  "Ãîñòåâàÿ:",13,10,13,10
Line 1324... Line 1292...
1324
jpgl:
1292
jpgl:
1325
unk:   db  'Content-Type: unknown/unknown',13,10,13,10
1293
unk:   db  'Content-Type: unknown/unknown',13,10,13,10
1326
unkl:
1294
unkl:
Line 1327... Line 1295...
1327
 
1295
 
1328
 
-
 
Line 1329... Line 1296...
1329
 labelt:  db   'Tiny http server ',version
1296
 
1330
 labellen:
1297
header db   appname,version,0
Line 1331... Line 1298...
1331
 
1298
 
Line -... Line 1299...
-
 
1299
socket		dd  0x0
1332
socket          dd  0x0
1300
server_active	db  0x0
1333
server_active   db  0x0
1301
 
1334
 
1302
board:
1335
board:
1303
 
1336
 
1304
db "INTKolibriOS - /Ãîñòåâàÿ/",13,10
1337
db "
",13,10
1305
db "
",13,10
1338
db "
",13,10
1306
db "
",13,10
1339
db ""
1307
db ""
Line 1340... Line 1308...
1340
db 13,10
1308
db 13,10
Line 1341... Line 1309...
1341
db "
",13,10 1309
db "
",13,10
1342
db "Tinyserver Messageboard

",13,10
1310
db "Ãîñòåâàÿ ñåðâåðà INTKolibriOS

",13,10
1343
db ""
1311
db """,13,10",13,10",13,10",13,10
1344
db 13,10,13,10
1312
db 13,10,13,10
1345
 
1313
 
1346
board1:
1314
board1:
1347
 
1315
 
1348
db "
1316
db "
1349
db "

",13,10

1317
db "

",13,10

1350
db "",13,10
1318
db "",13,10
1351
board1e:
1319
board1e:
1352
db "WebMaster",13,10
1320
db "Hex",13,10
1353
board2:
1321
board2:
1354
db "",13,10
1322
db "",13,10
1355
db "


",13,10
1323
db "


",13,10
1356
db "



",13,10
1324
db "



",13,10
1357
bsmt:
1325
bsmt:
1358
db "12.23.45
",13,10
1326
db "15.23.45
",13,10
1359
bsmd:
1327
bsmd:
1360
db "02.05.03",13,10
1328
db "22.03.06",13,10
1361
db "

1329
db "

Line 1372... Line 1340...
1372
db "
",13,10
1340
db "
",13,10
1373
db "
",13,10
1341
db "
",13,10
1374
db ""
1342
db """,13,10",13,10",13,10",13,10
1375
db 13,10
1343
db 13,10
1376
db "
1344
db "
1377
db "

",13,10

1345
db "

",13,10

1378
db "
",13,10
1346
db "",13,10
1379
db "Name: 

",13,10
1347
db "Èìÿ: 

",13,10
1380
db "Message: 

",13,10
1348
db "Ñîîáùåíèå: 

",13,10
1381
db "",13,10
1349
db "",13,10
1382
db "
1350
db "
1383
db "
",13,10
1351
db "
",13,10
1384
db "",13,10
1352
db "",13,10
1385
db "",13,10
1353
db "",13,10