A2osX/LIB/LIBTCPIP.S.DNS.txt

306 lines
5.4 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
2015-06-03 18:30:57 +00:00
PREFIX /A2OSX.SRC
2015-03-14 21:48:35 +00:00
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
DNS.CLEAR ldx #K.DNSCACHE.SIZE*S.DNSCACHE
.1 stz DNS.CACHE-1,x
dex
bne .1
clc
rts
*--------------------------------------
* DNS.QUERY
* In:
2015-10-19 20:35:00 +00:00
* PULLW = hostname PTR to PSTR
2015-03-14 21:48:35 +00:00
* PULLW = PTR to IP to fill with cached data
* Out:
* CC: hit: IP filled with address
* CS: missed
*--------------------------------------
DNS.QUERY >PULLW ZPPtrDNS Get host string
>PULLW ZPPtrIP Get IP address to fill
2015-03-14 21:48:35 +00:00
DNS.QUERY.I jsr HST.PSTR2DNS.I
2015-03-14 21:48:35 +00:00
ldx #0
.1 lda DNS.CACHE,x
beq .6 empty DNS cache entry?
2015-10-19 20:35:00 +00:00
phx
2015-03-14 21:48:35 +00:00
lda DNS.CACHE+S.DNSCACHE.hNAME,x
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtrDNS
2015-10-19 20:35:00 +00:00
plx
ldy #0
.2 lda DNSHostname,y
bne .21
lda (ZPPtrDNS),y
2015-10-19 20:35:00 +00:00
beq .22
.21 cmp (ZPPtrDNS),y
2015-03-14 21:48:35 +00:00
bne .6
2015-10-19 20:35:00 +00:00
iny
2015-03-14 21:48:35 +00:00
bne .2
2015-10-19 20:35:00 +00:00
.22 lda DNS.CACHE,x get back status...
2015-03-14 21:48:35 +00:00
bpl .4 Pending...
ldy #0
.3 lda DNS.CACHE+S.DNSCACHE.RDATA,x
sta (ZPPtrIP),y
2015-03-14 21:48:35 +00:00
inx
iny
cpy #4
bne .3
clc
rts
.4 sec
rts
.6 txa
clc
adc #S.DNSCACHE
tax
cmp #K.DNSCACHE.SIZE*S.DNSCACHE
bne .1
*--------------------------------------
DNS.REQUEST ldx #0
ldy #12
2015-03-14 21:48:35 +00:00
.1 lda DNSHostname,x
sta DNS.MSG,y
beq .2
inx
2015-03-14 21:48:35 +00:00
iny
bne .1
2015-10-19 20:35:00 +00:00
.2 iny
2015-03-14 21:48:35 +00:00
lda /S.DNS.QTYPE.A
sta DNS.MSG,y
2015-03-14 21:48:35 +00:00
iny
lda #S.DNS.QTYPE.A
sta DNS.MSG,y
2015-03-14 21:48:35 +00:00
iny
lda /S.DNS.QCLASS.IN
sta DNS.MSG,y
2015-03-14 21:48:35 +00:00
iny
lda #S.DNS.QCLASS.IN
sta DNS.MSG,y
2015-03-14 21:48:35 +00:00
iny
tya
sta DNS.MSG.LEN
lda #0
sta DNS.MSG.LEN+1
2015-03-14 21:48:35 +00:00
lda hDNSSocket1
beq .9
>LDYA A2osX.RANDOM16
>STYA DNS.MSG
>PUSHW DNS.MSG.LEN
>PUSHW L.DNS.MSG
>PUSHB hDNSSocket1
jsr SKT.SEND
2015-03-14 21:48:35 +00:00
lda hDNSSocket2
beq .9
2015-03-14 21:48:35 +00:00
>LDYA A2osX.RANDOM16
>STYA DNS.MSG+S.DNS.ID
>PUSHW DNS.MSG.LEN
>PUSHW L.DNS.MSG
>PUSHB hDNSSocket2
jsr SKT.SEND
2015-03-14 21:48:35 +00:00
.9 sec
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
* DNS.ADD
* In:
2015-10-19 20:35:00 +00:00
* PULLW = hostname PSTR to Add
2015-03-14 21:48:35 +00:00
* PULLW = PTR to IP
*--------------------------------------
DNS.ADD >PULLW ZPPtrDNS Get host string
>PULLW ZPPtrIP Get host IP address
2015-10-19 20:35:00 +00:00
jsr HST.PSTR2DNS.I
2015-10-19 20:35:00 +00:00
lda #$80
sta DNSHostTTL+3
stz DNSHostTTL+2
stz DNSHostTTL+1
stz DNSHostTTL
2015-03-14 21:48:35 +00:00
lda #S.DNSCACHE.STATUS.RESOLVED
bra DNS.ADD.I
DNS.ADD.PENDING.I
lda #S.DNSCACHE.STATUS.PENDING
DNS.ADD.I sta Status
ldx #0
.1 lda DNS.CACHE,x
beq DNS.ADD.ENTRY free ?
lda DNS.CACHE+S.DNSCACHE.hNAME,x
2015-10-19 20:35:00 +00:00
phx
2015-03-14 21:48:35 +00:00
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtrDNS
2015-10-19 20:35:00 +00:00
plx
2015-03-14 21:48:35 +00:00
2015-10-19 20:35:00 +00:00
ldy #0
.2 lda DNSHostname,y
cmp (ZPPtrDNS),y
2015-03-14 21:48:35 +00:00
bne .4
2015-10-19 20:35:00 +00:00
and #$FF End Of String?
beq DNS.UPD.ENTRY
iny
bne .2
2015-03-14 21:48:35 +00:00
.4 txa
clc
adc #S.DNSCACHE
tax
2015-10-19 20:35:00 +00:00
cmp #K.DNSCACHE.SIZE*S.DNSCACHE
bne .1
lda DNS.CACHE+S.DNSCACHE.hNAME discard oldest entry hNAME
2015-03-14 21:48:35 +00:00
>SYSCALL SYS.FreeMemA
ldx #K.DNSCACHE.SIZE*S.DNSCACHE-S.DNSCACHE
2015-10-19 20:35:00 +00:00
2015-03-14 21:48:35 +00:00
.6 lda DNS.CACHE+S.DNSCACHE-1,x
sta DNS.CACHE-1,x
dex
bne .6
ldx #K.DNSCACHE.SIZE*S.DNSCACHE-S.DNSCACHE
DNS.ADD.ENTRY phx
2015-10-19 20:35:00 +00:00
ldy DNSHostnameLen
iny add 1 for Ending 00
2015-03-14 21:48:35 +00:00
lda #0
>PUSHYA push PSTR len
>PUSHBI 0 no option
>SYSCALL SYS.GetMem
bcc .10
plx
rts
.10 >STYA ZPPtrDNS
2015-03-14 21:48:35 +00:00
txa
plx
sta DNS.CACHE+S.DNSCACHE.hNAME,x
2015-10-19 20:35:00 +00:00
ldy #0
.1 lda DNSHostname,y
sta (ZPPtrDNS),y
2015-10-19 20:35:00 +00:00
iny
cpy DNSHostnameLen
2015-03-14 21:48:35 +00:00
bne .1
2015-10-19 20:35:00 +00:00
lda #0
sta (ZPPtrDNS),y
2015-03-14 21:48:35 +00:00
DNS.UPD.ENTRY lda Status
2015-10-19 20:35:00 +00:00
sta DNS.CACHE+S.DNSCACHE.STATUS,x
bmi .1 pending?
* lda DNSMessageID
* sta DNS.CACHE+S.DNSCACHE.ID,x
* lda DNSMessageID+1
* sta DNS.CACHE+S.DNSCACHE.ID+1,x
2015-03-14 21:48:35 +00:00
2015-10-19 20:35:00 +00:00
bra .9
.1 lda DNSHostTTL
2015-03-14 21:48:35 +00:00
sta DNS.CACHE+S.DNSCACHE.TTL,x
2015-10-19 20:35:00 +00:00
lda DNSHostTTL+1
2015-03-14 21:48:35 +00:00
sta DNS.CACHE+S.DNSCACHE.TTL+1,x
2015-10-19 20:35:00 +00:00
lda DNSHostTTL+2
sta DNS.CACHE+S.DNSCACHE.TTL+2,x
lda DNSHostTTL+3
sta DNS.CACHE+S.DNSCACHE.TTL+3,x
2015-03-14 21:48:35 +00:00
ldy #0
.2 lda (ZPPtrIP),y
sta DNS.CACHE+S.DNSCACHE.RDATA,x
2015-03-14 21:48:35 +00:00
inx
iny
cpy #4
bne .2
clc
rts
.9 sec
rts
*--------------------------------------
DNS.GETCACHE >LDYA L.DNS.CACHE
clc
rts
*--------------------------------------
DNS.SKTPOLL lda hDNSSocket1
beq .8
jsr SKT.RCVDA
bcs .8
bra *
2015-10-19 20:35:00 +00:00
.8 clc
rts
.9 sec
rts
*--------------------------------------
ldy #S.DNS.F+1
lda (ZPFrameBase1),y
and /S.DNS.F.QR
beq .9
ldy #S.DNS.ANCOUNT+1
lda (ZPFrameBase1),y
beq .9
ldy #S.DNS.QDCOUNT+1
lda (ZPFrameBase1),y
tax
beq .3 no QUERY to skip
ldy #S.DNS Read query
.1 lda (ZPFrameBase1),y
beq .2
iny
bne .1
.2 tya
clc
adc #4 Skip QTYPE & QCLASS
tay
dex skip another QUERY ?
bne .1
.3 iny skip high byte of offset
iny skip lo byte of offset
*--------------------------------------
2015-03-14 21:48:35 +00:00
MAN
SAVE LIB/LIBTCPIP.S.DNS
LOAD LIB/LIBTCPIP.S
ASM