mirror of
https://github.com/bobbimanners/emailler.git
synced 2024-07-11 05:29:32 +00:00
Removed file i/o dependencies from Web server.
This commit is contained in:
parent
e85cd83c8b
commit
b5a15464d2
@ -19,8 +19,8 @@ SEGMENTS {
|
|||||||
DATA: load = RAM, type = rw;
|
DATA: load = RAM, type = rw;
|
||||||
SELF_MODIFIED_CODE: load = RAM, type = rw, optional = yes;
|
SELF_MODIFIED_CODE: load = RAM, type = rw, optional = yes;
|
||||||
IP65_DEFAULTS: load = RAM, type = rw;
|
IP65_DEFAULTS: load = RAM, type = rw;
|
||||||
|
HTTP_VARS: load = RAM, type = rw, optional = yes;
|
||||||
BSS: load = RAM, type = bss, define = yes;
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
APP_SCRATCH: load = RAM, type = bss, optional = yes;
|
APP_SCRATCH: load = RAM, type = bss, optional = yes;
|
||||||
TCP_VARS: load = RAM, type = bss, optional = yes;
|
TCP_VARS: load = RAM, type = bss, optional = yes;
|
||||||
HTTP_VARS: load = RAM, type = bss, optional = yes;
|
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@ SEGMENTS {
|
|||||||
DATA: load = RAM, type = rw;
|
DATA: load = RAM, type = rw;
|
||||||
SELF_MODIFIED_CODE: load = RAM, type = rw, optional = yes;
|
SELF_MODIFIED_CODE: load = RAM, type = rw, optional = yes;
|
||||||
IP65_DEFAULTS: load = RAM, type = rw, optional = yes;
|
IP65_DEFAULTS: load = RAM, type = rw, optional = yes;
|
||||||
|
HTTP_VARS: load = RAM, type = rw, optional = yes;
|
||||||
BSS: load = RAM, type = bss;
|
BSS: load = RAM, type = bss;
|
||||||
APP_SCRATCH: load = RAM, type = bss, optional = yes;
|
APP_SCRATCH: load = RAM, type = bss, optional = yes;
|
||||||
TCP_VARS: load = RAM, type = bss, optional = yes;
|
TCP_VARS: load = RAM, type = bss, optional = yes;
|
||||||
HTTP_VARS: load = RAM, type = bss, optional = yes;
|
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ SEGMENTS {
|
|||||||
DATA: load = RAM, type = rw;
|
DATA: load = RAM, type = rw;
|
||||||
SELF_MODIFIED_CODE: load = RAM, type = rw, optional = yes;
|
SELF_MODIFIED_CODE: load = RAM, type = rw, optional = yes;
|
||||||
IP65_DEFAULTS: load = RAM, type = rw, optional = yes;
|
IP65_DEFAULTS: load = RAM, type = rw, optional = yes;
|
||||||
|
HTTP_VARS: load = RAM, type = rw, optional = yes;
|
||||||
BSS: load = RAM, type = bss;
|
BSS: load = RAM, type = bss;
|
||||||
APP_SCRATCH: load = RAM, type = bss, optional = yes;
|
APP_SCRATCH: load = RAM, type = bss, optional = yes;
|
||||||
TCP_VARS: load = RAM, type = bss, optional = yes;
|
TCP_VARS: load = RAM, type = bss, optional = yes;
|
||||||
HTTP_VARS: load = RAM, type = bss, optional = yes;
|
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ hex_digit: .res 1
|
|||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
||||||
http_variables_buffer: .addr $2800 ; work area for storing variables extracted from query string
|
http_variables_buffer: .addr $4800 ; work area for storing variables extracted from query string
|
||||||
|
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
160
ip65/httpd.s
160
ip65/httpd.s
@ -29,15 +29,8 @@ HTTPD_TIMEOUT_SECONDS = 5 ; what's the maximum time we let 1 connection be
|
|||||||
.import tcp_send_data_len
|
.import tcp_send_data_len
|
||||||
.import tcp_send
|
.import tcp_send
|
||||||
.import tcp_close
|
.import tcp_close
|
||||||
.import io_read_catalogue
|
|
||||||
.import native_to_ascii
|
.import native_to_ascii
|
||||||
.import io_read_file_with_callback
|
|
||||||
.import io_filename
|
|
||||||
.import io_callback
|
|
||||||
.import timer_seconds
|
.import timer_seconds
|
||||||
.import __HTTP_VARS_LOAD__
|
|
||||||
.import __HTTP_VARS_RUN__
|
|
||||||
.import __HTTP_VARS_SIZE__
|
|
||||||
|
|
||||||
temp_ptr = copy_src
|
temp_ptr = copy_src
|
||||||
|
|
||||||
@ -57,8 +50,8 @@ temp_x: .res 1
|
|||||||
|
|
||||||
.segment "HTTP_VARS"
|
.segment "HTTP_VARS"
|
||||||
|
|
||||||
httpd_io_buffer: .addr $2000 ; by default, use a 3k buffer at $2000 for storing inbound requests.
|
httpd_io_buffer: .addr $4000 ; by default, use a 3k buffer at $4000 for storing inbound requests.
|
||||||
httpd_scratch_buffer: .addr $2B00 ; by default, use a 1k buffer at $2b00 as a scratchpad
|
httpd_scratch_buffer: .addr $4B00 ; by default, use a 1k buffer at $4B00 as a scratchpad
|
||||||
httpd_port_number: .word 80
|
httpd_port_number: .word 80
|
||||||
|
|
||||||
jump_to_callback:
|
jump_to_callback:
|
||||||
@ -103,32 +96,11 @@ skip_emit_a:
|
|||||||
; this routine will stay in an endless loop that is broken only if user press the ABORT key (runstop on a c64)
|
; this routine will stay in an endless loop that is broken only if user press the ABORT key (runstop on a c64)
|
||||||
; inputs:
|
; inputs:
|
||||||
; httpd_port_number = port number to listen on
|
; httpd_port_number = port number to listen on
|
||||||
; AX = pointer to routine to callback for each inbound HTTP request=
|
; AX = pointer to routine to callback for each inbound HTTP request
|
||||||
; set this to $0000 to use the default handler (which will look for requested files on the local disk).
|
|
||||||
; outputs:
|
; outputs:
|
||||||
; none
|
; none
|
||||||
httpd_start:
|
httpd_start:
|
||||||
pha ; save AX while we relocate self modifying code
|
stax jump_to_callback+1
|
||||||
txa
|
|
||||||
pha
|
|
||||||
|
|
||||||
; relocate the self-modifying code
|
|
||||||
ldax #__HTTP_VARS_LOAD__
|
|
||||||
stax copy_src
|
|
||||||
ldax #__HTTP_VARS_RUN__
|
|
||||||
stax copy_dest
|
|
||||||
ldax #__HTTP_VARS_SIZE__
|
|
||||||
jsr copymem
|
|
||||||
pla
|
|
||||||
tax
|
|
||||||
pla
|
|
||||||
|
|
||||||
stx jump_to_callback+2
|
|
||||||
bne @not_default_handler
|
|
||||||
ldax #default_httpd_handler
|
|
||||||
jmp httpd_start
|
|
||||||
@not_default_handler:
|
|
||||||
sta jump_to_callback+1
|
|
||||||
|
|
||||||
@listen:
|
@listen:
|
||||||
jsr tcp_close
|
jsr tcp_close
|
||||||
@ -242,66 +214,6 @@ http_callback:
|
|||||||
bne @look_for_eol
|
bne @look_for_eol
|
||||||
rts
|
rts
|
||||||
|
|
||||||
default_httpd_handler:
|
|
||||||
lda #$02
|
|
||||||
jsr http_get_value
|
|
||||||
bcc @not_error
|
|
||||||
ldy #5
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
@not_error:
|
|
||||||
stax temp_ptr
|
|
||||||
ldy #1
|
|
||||||
lda (temp_ptr),y
|
|
||||||
bne @not_index
|
|
||||||
ldax #default_html
|
|
||||||
ldy #2
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
@not_index:
|
|
||||||
; assume that 'path' is a filename
|
|
||||||
inc temp_ptr
|
|
||||||
bne :+
|
|
||||||
inc temp_ptr
|
|
||||||
: lda #0
|
|
||||||
sta sent_header
|
|
||||||
ldax temp_ptr
|
|
||||||
stax io_filename
|
|
||||||
ldax #send_file_callback
|
|
||||||
stax io_callback
|
|
||||||
ldax httpd_scratch_buffer
|
|
||||||
jsr io_read_file_with_callback
|
|
||||||
bcc @sent_ok
|
|
||||||
ldy #4
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
@sent_ok:
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
send_file_callback:
|
|
||||||
sty buffer_size ; only 1 (the last) sector can ever be != $100 bytes
|
|
||||||
lda sent_header
|
|
||||||
bne @sent_header
|
|
||||||
ldy #3 ; "application/octet-stream"
|
|
||||||
jsr send_header
|
|
||||||
inc sent_header
|
|
||||||
@sent_header:
|
|
||||||
ldax httpd_scratch_buffer
|
|
||||||
stax temp_ptr
|
|
||||||
ldy #0
|
|
||||||
@loop:
|
|
||||||
tya
|
|
||||||
pha
|
|
||||||
lda (temp_ptr),y
|
|
||||||
jsr emit_a
|
|
||||||
pla
|
|
||||||
tay
|
|
||||||
iny
|
|
||||||
cpy buffer_size
|
|
||||||
bne @loop
|
|
||||||
rts
|
|
||||||
|
|
||||||
reset_output_buffer:
|
reset_output_buffer:
|
||||||
ldax httpd_io_buffer
|
ldax httpd_io_buffer
|
||||||
sta emit_a_ptr+1
|
sta emit_a_ptr+1
|
||||||
@ -312,54 +224,6 @@ reset_output_buffer:
|
|||||||
sta skip_mode
|
sta skip_mode
|
||||||
rts
|
rts
|
||||||
|
|
||||||
emit_disk_catalogue:
|
|
||||||
ldax httpd_scratch_buffer
|
|
||||||
jsr io_read_catalogue
|
|
||||||
lda get_next_byte+1
|
|
||||||
pha
|
|
||||||
lda get_next_byte+2
|
|
||||||
pha
|
|
||||||
ldax httpd_scratch_buffer
|
|
||||||
stax get_next_byte+1
|
|
||||||
|
|
||||||
@next_filename:
|
|
||||||
jsr get_next_byte
|
|
||||||
cmp #0
|
|
||||||
beq @done
|
|
||||||
pha
|
|
||||||
|
|
||||||
ldax #file_li_preamble
|
|
||||||
jsr emit_string
|
|
||||||
pla
|
|
||||||
pha
|
|
||||||
jsr emit_a
|
|
||||||
ldax get_next_byte+1
|
|
||||||
jsr emit_string
|
|
||||||
|
|
||||||
ldax #file_li_middle
|
|
||||||
jsr emit_string
|
|
||||||
pla
|
|
||||||
bne @convert_byte
|
|
||||||
@next_byte:
|
|
||||||
jsr get_next_byte
|
|
||||||
cmp #0
|
|
||||||
beq @done_this_filename
|
|
||||||
@convert_byte:
|
|
||||||
jsr native_to_ascii
|
|
||||||
jsr emit_a
|
|
||||||
jmp @next_byte
|
|
||||||
@done_this_filename:
|
|
||||||
ldax #file_li_postamble
|
|
||||||
jsr emit_string
|
|
||||||
|
|
||||||
jmp @next_filename
|
|
||||||
@done:
|
|
||||||
pla
|
|
||||||
sta get_next_byte+2
|
|
||||||
pla
|
|
||||||
sta get_next_byte+1
|
|
||||||
rts
|
|
||||||
|
|
||||||
send_response:
|
send_response:
|
||||||
stax get_next_byte+1
|
stax get_next_byte+1
|
||||||
jsr reset_output_buffer
|
jsr reset_output_buffer
|
||||||
@ -450,7 +314,7 @@ send_buffer:
|
|||||||
jsr tcp_send
|
jsr tcp_send
|
||||||
jmp reset_output_buffer
|
jmp reset_output_buffer
|
||||||
|
|
||||||
send_header:
|
send_header:
|
||||||
; inputs: Y = header type
|
; inputs: Y = header type
|
||||||
; $00 = no header (assume header sent already)
|
; $00 = no header (assume header sent already)
|
||||||
; $01 = 200 OK, 'text/text'
|
; $01 = 200 OK, 'text/text'
|
||||||
@ -471,7 +335,6 @@ send_buffer:
|
|||||||
|
|
||||||
@not_text:
|
@not_text:
|
||||||
cpy #2
|
cpy #2
|
||||||
|
|
||||||
bne @not_html
|
bne @not_html
|
||||||
jsr emit_ok_status_line_and_content_type
|
jsr emit_ok_status_line_and_content_type
|
||||||
ldax #text_html
|
ldax #text_html
|
||||||
@ -533,12 +396,6 @@ emit_string:
|
|||||||
|
|
||||||
.rodata
|
.rodata
|
||||||
|
|
||||||
default_html:
|
|
||||||
.byte "<h1>Index of /</h1><br><ul>%; "
|
|
||||||
.word emit_disk_catalogue
|
|
||||||
.byte "</ul><i>kipper - the 100%% 6502 m/l web server </i> "
|
|
||||||
.byte 0
|
|
||||||
|
|
||||||
CR = $0D
|
CR = $0D
|
||||||
LF = $0A
|
LF = $0A
|
||||||
|
|
||||||
@ -571,13 +428,6 @@ end_of_header:
|
|||||||
.byte "Server: Kipper_httpd/0.c64",CR,LF
|
.byte "Server: Kipper_httpd/0.c64",CR,LF
|
||||||
.byte CR,LF,0
|
.byte CR,LF,0
|
||||||
|
|
||||||
file_li_preamble:
|
|
||||||
.byte "<li><a href=",'"',0
|
|
||||||
file_li_middle:
|
|
||||||
.byte '"',">",0
|
|
||||||
file_li_postamble:
|
|
||||||
.byte "</a></li>",0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; -- LICENSE FOR httpd.s --
|
; -- LICENSE FOR httpd.s --
|
||||||
|
Loading…
Reference in New Issue
Block a user