1,18 → 1,21 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; ; |
; Tiny HTTP Server v 0.4 for MenuetOS ; |
; Tiny HTTP Server v 0.5 for KolibriOS ; |
; ; |
; License GPL / See file COPYING for details. ; |
; Copyright 2003 Ville Turjanmaa ; |
; ; |
; Compile with FASM for Menuet ; |
; Compile with FASM for Menuet/KolibriOS ; |
; ; |
; Request /TinyStat for server statistics ; |
; Request /TinyBoard for server message board ; |
; ; |
; Special version for KoOS by Hex && Heavyiron ; |
; ; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
version equ '0.4' |
appname equ 'Kolibri HTTP Server ' |
version equ '0.6' |
|
use32 |
|
26,8 → 29,7 |
dd 0x20000 |
dd 0,0 ; reserved=no extended header |
|
include 'lang.inc' |
include "macros.inc" |
include "MACROS.INC" |
|
; 0x0+ - program image |
; 0x1ffff - stack |
35,18 → 37,25 |
; 0x100000+ - requested file |
|
filel: |
dd 0x0,0x0,50000/512,0x20000,0x70000 |
dd 0 |
dd 0 |
dd 0 |
dd 50000 |
dd 0x20000 |
db '/rd/1/board.htm',0 |
|
files: |
dd 0x1,0x0,0x0,0x20000,0x70000 |
dd 2 |
dd 0 |
dd 0 |
dd 0 |
dd 0x20000 |
db '/rd/1/board.htm',0 |
|
|
|
START: ; start of execution |
|
mov eax,58 |
mov eax,70 |
mov ebx,filel |
int 0x40 |
mov [board_size],ebx |
62,19 → 71,18 |
|
board_found: |
|
mov eax,58 |
mov eax,70 |
mov ebx,files |
mov ecx,[board_size] |
mov [files+8],ecx |
mov [files+12],ecx |
int 0x40 |
|
mov [status],-1 |
mov [last_status],-2 |
call clear_input |
red: |
call draw_window ; at first, draw the window |
|
; call ops |
|
still: |
|
call check_status |
98,16 → 106,6 |
|
jmp still |
|
|
reb: ; boot |
|
mov eax,18 |
mov ebx,1 |
int 0x40 |
|
jmp $ |
|
|
last_status dd 0x0 |
|
check_events: |
121,18 → 119,14 |
|
ret |
|
red: ; redraw |
call draw_window |
ret |
|
key: ; Keys are not valid at this part of the |
mov eax,2 ; loop. Just read it and ignore |
mov al,2 ; loop. Just read it and ignore |
int 0x40 |
ret |
|
button: ; button |
|
mov eax,17 ; get id |
mov al,17 ; get id |
int 0x40 |
|
cmp ah,1 ; close |
164,11 → 158,8 |
call draw_data |
mov [server_active],1 |
call check_status |
; cmp [status],0 |
; je reb |
ret |
tst3: |
|
cmp ah,4 ; button id=4 ? |
jnz no4 |
mov [server_active],0 |
319,14 → 310,6 |
|
wait_more: |
|
; rdtsc |
; mov ecx,eax |
; add ecx,1000000 |
; wr: |
; rdtsc |
; cmp eax,ecx |
; jb wr |
|
mov eax,5 |
mov ebx,1 |
int 0x40 |
397,9 → 380,12 |
popa |
ret |
|
|
fileinfo dd 0,0,1,0x100000,0xf0000 |
getf db '/RD/1/' |
fileinfo dd 0 |
dd 0 |
dd 0 |
dd 512 |
dd 0x100000 |
getf db '/rd/1/' |
times 50 db 0 |
wanted_file: times 100 db 0 |
|
434,9 → 420,9 |
|
read_file: ; start of execution |
|
mov [fileinfo+12],eax |
mov [fileinfo+8],ebx |
|
mov [fileinfo+16],eax |
shl ebx, 9 |
mov [fileinfo+12],ebx |
mov [file_type],unk |
mov [type_len],unkl-unk |
mov [filename+40*2+6],dword 'UNK ' |
449,7 → 435,7 |
|
yes_new_message: |
|
mov eax,58 |
mov eax,70 |
mov ebx,filel |
int 0x40 |
mov [board_size],ebx |
485,6 → 471,7 |
je name_found_len |
inc edx |
jmp name_new_len |
|
name_found_len: |
|
mov [from_len],edx |
574,7 → 561,8 |
|
mov esi,[from_i] ; name |
mov edi,0x20000 |
add edi,board1-board + board1e-board1 |
add edi,board1-board |
add edi,board1e-board1 |
mov ecx,[from_len] |
cld |
rep movsb |
607,9 → 595,9 |
inc [board_messages] |
|
mov eax,[board_size] |
mov [files+8],eax |
mov [files+12],eax |
|
mov eax,58 |
mov eax,70 |
mov ebx,files |
int 0x40 |
|
778,8 → 766,8 |
cld |
rep movsb |
|
mov [fileinfo+8],dword 1 ; file exists ? |
mov eax,58 |
mov [fileinfo+12],dword 1 ; file exists ? |
mov eax,70 |
mov ebx,fileinfo |
int 0x40 |
|
804,8 → 792,8 |
|
file_found: |
|
mov [fileinfo+8],dword 0x2f0000 / 512 ; read all of file |
mov eax,58 |
mov [fileinfo+12],dword 0x2f0000 ; read all of file |
mov eax,70 |
mov ebx,fileinfo |
int 0x40 |
|
1088,20 → 1076,13 |
|
pusha |
|
mov eax,13 |
mov ebx,97*65536+23*6 |
mov ecx,[ya] |
shl ecx,16 |
mov cx,9 |
mov edx,0xffffff |
int 0x40 |
|
mov eax,4 |
mov edx,[addr] |
mov ebx,97*65536 |
add ebx,[ya] |
mov ecx,0x000000 |
mov ecx,0x40000000 |
mov esi,23 |
mov edi,0xffffff |
int 0x40 |
|
popa |
1108,10 → 1089,6 |
ret |
|
|
|
|
|
|
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
1127,19 → 1104,10 |
mov eax,0 ; function 0 : define and draw window |
mov ebx,100*65536+480 ; [x start] *65536 + [x size] |
mov ecx,100*65536+215 ; [y start] *65536 + [y size] |
mov edx,0x03ffffff ; color of work area RRGGBB |
mov esi,0x8050a0b0 ; color of grab bar RRGGBB,8->color gl |
mov edi,0x0050a0b0 ; color of frames RRGGBB |
mov edx,0x13ffffff ; color of work area RRGGBB |
mov edi,header ; WINDOW LABEL |
int 0x40 |
|
; WINDOW LABEL |
mov eax,4 ; function 4 : write text to window |
mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
mov ecx,0x10ffffff ; color of text RRGGBB |
mov edx,labelt ; pointer to text beginning |
mov esi,labellen-labelt ; text length |
int 0x40 |
|
mov eax,8 ; function 8 : define and draw button |
mov ebx,(40)*65536+20 ; [x start] *65536 + [x size] |
mov ecx,59*65536+9 ; [y start] *65536 + [y size] |
1147,7 → 1115,7 |
mov esi,0x66aa66 ; button color RRGGBB |
int 0x40 |
|
mov eax,8 ; function 8 : define and draw button |
; function 8 : define and draw button |
mov ebx,(40)*65536+20 ; [x start] *65536 + [x size] |
mov ecx,72*65536+9 ; [y start] *65536 + [y size] |
mov edx,4 ; button id |
1154,7 → 1122,7 |
mov esi,0xaa6666 ; button color RRGGBB |
int 0x40 |
|
mov eax,8 ; Enter directory |
; Enter directory |
mov ebx,(25)*65536+66 |
mov ecx,135*65536+15 |
mov edx,6 |
1167,7 → 1135,7 |
mov edx,0x6699cc ; 002288 |
int 0x40 |
|
mov eax,38 |
|
mov ebx,241*65536+241 |
mov ecx,22*65536+210 |
mov edx,0x336699 ; 002288 |
1259,7 → 1227,7 |
db ' /TinyBoard -message board ' |
db ' ' |
dirp: |
db ' Files: /RD/1/ ' |
db ' Files: /rd/1/ ' |
db ' ' |
filename: |
db ' ' |
1271,7 → 1239,7 |
html_header: |
|
db 'HTTP/1.0 200 OK',13,10 |
db 'Server: MenuetOS HTTP Server',13,10 |
db 'Server: KolibriOS HTTP Server',13,10 |
db 'Content-Length: ' |
c_l: db '000000',13,10 |
|
1280,9 → 1248,9 |
fnf: |
db '<body>' |
db '<pre>' |
db "TinyServer v ",version," for MenuetOS",13,10,13,10 |
db "Error 404 - File not found.",13,10,13,10 |
db "For more info about server: request /TinyStat",13,10,13,10 |
db "HTTP-Ñåðâåð v ",version," äëÿ KolibriOS",13,10,13,10 |
db "<H1>Error <FONT color=red>404</FONT> - File not found</H1>",13,10,13,10 |
db "Äëÿ ïîëó÷åíèÿ ñòàòèñòèêè âûïîëíèòå çàïðîñ /TinyStat",13,10,13,10 |
et: db "xx:xx:xx",13,10 |
ed: db "xx.xx.xx",13,10 |
db "</pre></body>" |
1292,15 → 1260,15 |
sm: |
db '<body>' |
db '<pre>' |
db "TinyServer v ",version," for MenuetOS",13,10,13,10 |
db "Statistics: (before current request)",13,10,13,10 |
sms: db "- Documents served : xxxxxxxxx",13,10 |
smb: db "- Bytes transferred : xxxxxxxxx",13,10 |
db "- Location : <a href=/TinyStat>/TinyStat</a>",13,10,13,10 |
db "TinyBoard:",13,10,13,10 |
smm: db "- Messages : xxxxxxxxx",13,10 |
smz: db "- Size in bytes : xxxxxxxxx",13,10 |
db "- Location : <a href=/TinyBoard>/TinyBoard</a>",13,10,13,10 |
db "HTTP-Ñåðâåð v ",version," äëÿ KolibriOS",13,10,13,10 |
db "Ñòàòèñòèêà: (ïîñëå äàííîãî çàïðîñà)",13,10,13,10 |
sms: db "- Äîêóìåíòîâ ïðèíÿòî: xxxxxxxxx",13,10 |
smb: db "- Áàéò ïåðåäàííî : xxxxxxxxx",13,10 |
db "- Ìåñòîíàõîæäåíèå : <a href=/TinyStat>Ñòàòèñòèêà</a>",13,10,13,10 |
db "Ãîñòåâàÿ:",13,10,13,10 |
smm: db "- Ñîîáùåíèé : xxxxxxxxx",13,10 |
smz: db "- Ðàçìåð â áàéòàõ : xxxxxxxxx",13,10 |
db "- Ìåñòîíàõîæäåíèå : <a href=/TinyBoard>Ãîñòåâàÿ</a>",13,10,13,10 |
smt: db "xx:xx:xx",13,10 |
smd: db "xx.xx.xx",13,10 |
db '</pre></body>' |
1326,8 → 1294,7 |
unkl: |
|
|
labelt: db 'Tiny http server ',version |
labellen: |
header db appname,version,0 |
|
socket dd 0x0 |
server_active db 0x0 |
1334,12 → 1301,13 |
|
board: |
|
db "<HTML><BODY BGCOLOR=#ffffff ALINK=black VLINK=black><br>",13,10 |
db "<HTML><HEAD><TITLE>INTKolibriOS - /Ãîñòåâàÿ/</TITLE></HEAD>",13,10 |
db "<BODY background=bgnd.gif BGCOLOR=#ffffff ALINK=black VLINK=black><br>",13,10 |
db "<center>",13,10 |
db "<TABLE CELLPADDING=10 CELLSPACING=0 BORDER=0 bgcolor=#ffffff width=600>" |
db 13,10 |
db "<TR VALIGN=top><TD ALIGN=center bgcolor=f0f0f8>",13,10 |
db "<font size=3>Tinyserver Messageboard</TD></TR></TABLE><br>",13,10 |
db "<TR VALIGN=top><TD ALIGN=center bgcolor=F4F4F4>",13,10 |
db "<font size=4>Ãîñòåâàÿ ñåðâåðà INTKolibriOS</TD></TR></TABLE><br>",13,10 |
db "<TABLE CELLPADDING=14 CELLSPACING=2 BORDER=0 bgcolor=#ffffff width=600>" |
db 13,10,13,10 |
|
1346,22 → 1314,22 |
board1: |
|
db "<TR VALIGN=top>",13,10 |
db "<TD ALIGN=left width=80 bgcolor=f0f0f8><P>",13,10 |
db "<TD ALIGN=left width=80 bgcolor=F4F4F4><P>",13,10 |
db "<font size=3>",13,10 |
board1e: |
db "WebMaster",13,10 |
db "Hex",13,10 |
board2: |
db "</font>",13,10 |
db "<br><br><br>",13,10 |
db "<br><br><br><br>",13,10 |
bsmt: |
db "12.23.45<br>",13,10 |
db "15.23.45<br>",13,10 |
bsmd: |
db "02.05.03",13,10 |
db "22.03.06",13,10 |
db "</P></TD>",13,10 |
db "<TD bgcolor=f0f0f8><P>",13,10 |
db "<TD bgcolor=F4F4F4><P>",13,10 |
board2e: |
db "Assembly written messageboard from assembly written MenuetOS.<br>" |
db "Äîáðî ïîæàëîâàòü â ãîñòåâóþ ñåðâåðà INTKolibriOS! (-:<br>" |
db 13,10 |
board3: |
db "</P></TD></TR>",13,10,13,10 |
1374,11 → 1342,11 |
db "<TABLE CELLPADDING=14 CELLSPACING=3 BORDER=0 bgcolor=#ffffff width=600>" |
db 13,10 |
db "<TR VALIGN=top>",13,10 |
db "<TD ALIGN=left bgcolor=f0f0f8><P>",13,10 |
db "<TD ALIGN=left bgcolor=F4F4F4><P>",13,10 |
db "<form method=Post Action=/TinyBoard>",13,10 |
db "Name: <br><input type=text name=from size=20 MAXLENGTH=20><br>",13,10 |
db "Message: <br><textarea cols=60 rows=6 name=message></textarea><br>",13,10 |
db "<input type=Submit Value=' Send Message '></form>",13,10 |
db "Èìÿ: <br><input type=text name=from size=20 MAXLENGTH=20><br>",13,10 |
db "Ñîîáùåíèå: <br><textarea cols=60 rows=6 name=message></textarea><br>",13,10 |
db "<input type=Submit Value=' Îòïðàâèòü ñîîáùåíèå '></form>",13,10 |
db "</TD></TR>",13,10 |
db "</TABLE>",13,10 |
db "</BODY>",13,10 |