zxuno-git/http.asm

177 lines
2.6 KiB
NASM

; Some parts taken from ZiFi sources
; Performs HTTP-get request
; First packet will be in var 'output_buffer'
; received packet size in var 'bytes_avail'
;
; HL - url includes http:// header
httpGet ld de,cmd_conn2site_adr
pu1 ld a,(hl) ; http://
inc hl
cp "/"
jr nz,pu1
inc hl ; /
ld bc,"//"
ld (host_url+1),hl
call find_copy_char
inc hl
ld (file_url+1),hl
create_link1 ld hl,create_link_suffix
ld bc,7
ldir
ld hl,modem_command
ld (hl),"G"
inc hl
ld (hl),"E"
inc hl
ld (hl),"T"
inc hl
ld (hl)," "
inc hl
ld (hl),"/"
inc hl
ex hl,de
file_url ld hl,0
ld bc,#0d0a
call find_copy_char
ld hl,http_part1
ld bc,http_part2-http_part1
ldir
host_url ld hl,0
ld bc,"//"
call find_copy_char
ld a,13
ld (de),a
inc de
ld a,10
ld (de),a
inc de
ld hl,http_part2
ld bc,http_part3-http_part2
ldir
ex de,hl
ld de,modem_command
or a
sbc hl,de
ld de,url_len
ld bc,-1000
call Num1
cp "0"
jr z,1f
ld (de),a
inc de
1 ld bc,-100
call Num1
ld (de),a
inc de
1 ld c,-10
call Num1
ld (de),a
inc de
1 ld c,-1
call Num1
ld (de),a
inc de
ld a,#0d
ld (de),a
inc de
ld a,#0a
ld (de),a
inc de
xor a
ld (de),a
jr firstPacket
Num1: ld a,'0'-1
Num2: inc a
add hl,bc
jr c,Num2
sbc hl,bc
ret
find_copy_char ld a,(hl)
cp c
ret z
cp b
ret z
ld (de),a
inc hl
inc de
jr find_copy_char
firstPacket:
call performRequest
skipHeaders:
ld de, output_buffer
ld bc, 0
shLp:
ld a, (de)
push de
push bc
call pushRing
ld hl, headers_end
call searchRing
pop bc
pop de
inc de
inc bc
cp 1
jr nz, shLp
ld hl, (bytes_avail)
sbc hl, bc
ld (bytes_avail), hl
push hl
pop bc
push de
ld de, output_buffer
pop hl
ldir
ret
performRequest:
ld hl, cmd_conn2site
call okErrCmd
cp 1
jr z, zg_ok
ld hl, cmd_close
call okErrCmd
jr performRequest
zg_ok:
ld hl, cmd_cipsend
call okErrCmd
guLp:
call uartReadBlocking
call pushRing
ld hl, send_prompt
call searchRing
cp 1
jr nz, guLp
ld hl, modem_command
call okErrCmd
jp getPacket
create_link_suffix
db #22,",80",13,10,0
display $
modem_command ds 256+128
display $
http_part1 db " HTTP/1.0",13,10 ;size=123
db "Host: "
http_part2 db "User-Agent: ZX Uno(Z80 CPU)",13,10 ; show off ;)
db "Accept: */*",13,10
db "Connection: close",13,10,13,10
http_part3
cmd_conn2site defb "AT+CIPSTART=", 0x22,"TCP",0x22,",",0x22
cmd_conn2site_adr ds #40
headers_end defb 13,10,13,10,0
cmd_cipsend defb "AT+CIPSEND="
url_len defs 6
defb 0