Kernel version 0.9 : TCP/IP API Cleanup

This commit is contained in:
Rémy GIBERT 2017-02-15 17:14:41 +01:00
parent 02de1e130a
commit 81afee1ca5
18 changed files with 969 additions and 720 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -72,9 +72,8 @@ CS.RUN >LDYA L.MSG0
.1 lda (ZPPTR1)
beq .7
ldy #S.SOCKET.STATUS
ldy #S.SOCKET.TCP.STATUS
lda (ZPPTR1),y
and #S.SOCKET.STATUS.MASK
asl
tax
>PUSHB L.MSG1.S+1,x
@ -90,10 +89,6 @@ CS.RUN >LDYA L.MSG0
bne .2
lda (ZPPTR1)
lsr
lsr
lsr
lsr
cmp #S.SOCKET.SOCK.RAW+1
bcc .3

View File

@ -177,7 +177,7 @@ CS.RUN.SEND.ECHO
>PUSHW L.ICMP.Request
>PUSHWI ICMP.RequestLen
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write
bcs CS.RUN.ERR
jsr Init.Timeout
@ -191,7 +191,7 @@ CS.RUN.WAIT.REPLY
.1 ldy #hSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.RCVDA
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ReadA
bcs .2
ldy #hFrame

View File

@ -112,7 +112,7 @@ CS.RUN jsr Init.Timeout
>PUSHW L.RPC.Request
ldy #hSocket
>PUSHB (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write
bcc .4
>SYSCALL Sleep
@ -124,7 +124,7 @@ CS.RUN jsr Init.Timeout
.5 ldy #hSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.RCVDA
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ReadA
bcc .6
>SYSCALL Sleep

View File

@ -26,46 +26,36 @@ K.TCP.WMASK .EQ 2047
LIBTCPIP.SET.IPCFG .EQ 4
LIBTCPIP.GET.IPCFG .EQ 6
*LIBTCPIP.NEW.ICMP.FRAME .EQ 8
*LIBTCPIP.NEW.TCP.FRAME .EQ 10
*LIBTCPIP.NEW.UDP.FRAME .EQ 12
*LIBTCPIP.NEW.IP.FRAME .EQ 14
*LIBTCPIP.NEW.ARP.FRAME .EQ 16
*LIBTCPIP.NEW.ETH.FRAME .EQ 18
LIBTCPIP.POLL .EQ 8
LIBTCPIP.PULSEA .EQ 10
*LIBTCPIP.SEND.ICMP.FRAME .EQ 20
*LIBTCPIP.SEND.TCP.FRAME .EQ 22
*LIBTCPIP.SEND.UDP.FRAME .EQ 24
*LIBTCPIP.SEND.IP.FRAME .EQ 26
*LIBTCPIP.SEND.ARP.FRAME .EQ 28
*LIBTCPIP.SEND.ETH.FRAME .EQ 30
LIBTCPIP.ARP.CLEAR .EQ 12
LIBTCPIP.ARP.QUERY .EQ 14
LIBTCPIP.ARP.ADD .EQ 16
LIBTCPIP.ARP.GETCACHE .EQ 18
LIBTCPIP.ARP.CLEAR .EQ 32
LIBTCPIP.ARP.QUERY .EQ 34
LIBTCPIP.ARP.ADD .EQ 36
LIBTCPIP.ARP.GETCACHE .EQ 38
LIBTCPIP.DNS.CLEAR .EQ 20
LIBTCPIP.DNS.QUERY .EQ 22
LIBTCPIP.DNS.ADD .EQ 24
LIBTCPIP.DNS.GETCACHE .EQ 26
LIBTCPIP.DNS.CLEAR .EQ 40
LIBTCPIP.DNS.QUERY .EQ 42
LIBTCPIP.DNS.ADD .EQ 44
LIBTCPIP.DNS.GETCACHE .EQ 46
LIBTCPIP.HST.GETBYNAME .EQ 28
LIBTCPIP.HST.GETBYADDR .EQ 30
LIBTCPIP.POLL .EQ 48
LIBTCPIP.PULSEA .EQ 50
LIBTCPIP.SKT.NEW .EQ 32
LIBTCPIP.SKT.CLOSEA .EQ 34
LIBTCPIP.SKT.GETTABLE .EQ 36
LIBTCPIP.SKT.GETA .EQ 38
LIBTCPIP.SKT.NEW .EQ 52
*LIBTCPIP.SKT.LISTEN .EQ 54
LIBTCPIP.SKT.ACCEPTA .EQ 56
LIBTCPIP.SKT.SENDA .EQ 58
LIBTCPIP.SKT.SEND .EQ 60
LIBTCPIP.SKT.RCVDA .EQ 62
*LIBTCPIP.SKT.RCVD .EQ 64
LIBTCPIP.SKT.CLOSEA .EQ 66
LIBTCPIP.SKT.GETTABLE .EQ 68
LIBTCPIP.SKT.GETA .EQ 70
LIBTCPIP.SKT.ACCEPTA .EQ 34
LIBTCPIP.HST.GETBYNAME .EQ 72
LIBTCPIP.HST.GETBYADDR .EQ 74
LIBTCPIP.SKT.Write .EQ 38
LIBTCPIP.SKT.Read .EQ 50
LIBTCPIP.SKT.ReadA .EQ 40
LIBTCPIP.SKT.PutC .EQ 42
LIBTCPIP.SKT.PutS .EQ 44
LIBTCPIP.SKT.GetCA .EQ 46
LIBTCPIP.SKT.GetS .EQ 48
*--------------------------------------
ERR.SKT.OOS .EQ $BF
ERR.SKT.BUSY .EQ $BE
@ -132,26 +122,9 @@ S.DNSCACHE.IP .EQ 8
S.DNSCACHE .EQ 12
*--------------------------------------
S.SOCKET.SOCK .EQ 0
S.SOCKET.SOCK.DGRAM .EQ $10
S.SOCKET.SOCK.STREAM .EQ $20
S.SOCKET.SOCK.RAW .EQ $30
S.SOCKET.SOCK.MASK .EQ $70
S.SOCKET.SOCK.ACK .EQ $80
S.SOCKET.STATUS .EQ 0
S.SOCKET.STATUS.CLOSED .EQ 0
S.SOCKET.STATUS.LISTEN .EQ 1
S.SOCKET.STATUS.SYNSENT .EQ 2
S.SOCKET.STATUS.SYNRCVD .EQ 3
S.SOCKET.STATUS.ESTBLSH .EQ 4
S.SOCKET.STATUS.CLWAIT .EQ 5
S.SOCKET.STATUS.LASTACK .EQ 6
S.SOCKET.STATUS.FINWT1 .EQ 7
S.SOCKET.STATUS.FINWT2 .EQ 8
S.SOCKET.STATUS.CLOSING .EQ 9
S.SOCKET.STATUS.TIMEWT .EQ 10
S.SOCKET.STATUS.MASK .EQ $0F
S.SOCKET.SOCK.DGRAM .EQ 1
S.SOCKET.SOCK.STREAM .EQ 2
S.SOCKET.SOCK.RAW .EQ 3
S.SOCKET.SO .EQ 1
S.SOCKET.SO.DEBUG .EQ $01
@ -164,8 +137,21 @@ S.SOCKET.SO.USELOOPBACK .EQ $40
S.SOCKET.SO.LINGER .EQ $80
S.SOCKET.RAW.PROTO .EQ 2
S.SOCKET.STREAM.hInMem .EQ 2
S.SOCKET.STREAM.hOutMem .EQ 3
S.SOCKET.TCP.STATUS .EQ 2
S.SOCKET.TCP.STATUS.CLOSED .EQ 0
S.SOCKET.TCP.STATUS.LISTEN .EQ 1
S.SOCKET.TCP.STATUS.SYNSENT .EQ 2
S.SOCKET.TCP.STATUS.SYNRCVD .EQ 3
S.SOCKET.TCP.STATUS.ESTBLSH .EQ 4
S.SOCKET.TCP.STATUS.CLWAIT .EQ 5
S.SOCKET.TCP.STATUS.LASTACK .EQ 6
S.SOCKET.TCP.STATUS.FINWT1 .EQ 7
S.SOCKET.TCP.STATUS.FINWT2 .EQ 8
S.SOCKET.TCP.STATUS.CLOSING .EQ 9
S.SOCKET.TCP.STATUS.TIMEWT .EQ 10
S.SOCKET.TCP.OPTIONS .EQ 3
S.SOCKET.SRC.ADDR .EQ 4
S.SOCKET.SRC.PORT .EQ 8
@ -191,8 +177,10 @@ S.SOCKET.SQ.INUSED .EQ 28
S.SOCKET.SQ.OUTUSED .EQ 30
S.SOCKET.SQ.SEQNUM .EQ 32
S.SOCKET.SQ.ACKNUM .EQ 36
S.SOCKET.STREAM.hInMem .EQ 40
S.SOCKET.STREAM.hOutMem .EQ 41
*
S.SOCKET .EQ 40
S.SOCKET .EQ 42
*--------------------------------------
S.ETH.FRAMELEN .EQ 0
S.ETH.DSTMAC .EQ 2
@ -219,7 +207,7 @@ S.ARP .EQ S.ETH+28
*--------------------------------------
S.IP.V.IHL.DSCP.ECN .EQ S.ETH+0 $0045, IPV4,HDR=5DWORDs
S.IP.TOTAL.LENGTH .EQ S.ETH+2
S.IP.IDENTIFICATION .EQ S.ETH+4 $0000
S.IP.IDENTIFICATION .EQ S.ETH+4
S.IP.FRAGMENT.FLAGS .EQ S.ETH+6
S.IP.TTL .EQ S.ETH+8
S.IP.PROTOCOL .EQ S.ETH+9

View File

@ -4,23 +4,29 @@ LOMEM $A00
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
ARP.CLEAR ldx #K.ARPCACHE.SIZE*S.ARPCACHE
*/--------------------------------------
* #ARP.Clear
* Clear ARP Cache
* ##In :
* ##Out :
*\--------------------------------------
ARP.Clear ldx #K.ARPCACHE.SIZE*S.ARPCACHE
.1 stz ARP.CACHE-1,x
dex
bne .1
clc
rts
*--------------------------------------
* ARP.QUERY
* In:
* PULLW PTR to IP
* PULLW PTR to MAC (to fill)
* Out:
* CC: hit: MAC filled
* CS: missed
*--------------------------------------
ARP.QUERY >PULLW ZPPtrIP IP
*/--------------------------------------
* #ARP.Query
* Query ARP Cache and returns HW address
* ##In:
* PUSHW PTR to MAC (to fill)
* PUSHW PTR to IP
* ##Out:
* CC: hit: MAC filled
* CS: missed
*\--------------------------------------
ARP.Query >PULLW ZPPtrIP IP
>PULLW ZPPtrMAC MAC
ldy #3
@ -38,13 +44,14 @@ ARP.QUERY >PULLW ZPPtrIP IP
bpl .2
clc
.9 rts
*--------------------------------------
* ARP.ADD
* In:
* PULLW PTR to IP
* PULLW PTR to MAC
*--------------------------------------
ARP.ADD >PULLW ZPPtrIP IP
*/--------------------------------------
* #ARP.Add
* Add a static ARP cache record
* ##In:
* PUSHW PTR to MAC
* PUSHW PTR to IP
*\--------------------------------------
ARP.Add >PULLW ZPPtrIP IP
>PULLW ZPPtrMAC MAC
stz ARP.TmpCache+S.ARPCACHE.TTL
@ -78,12 +85,14 @@ ARP.ADD.I sta ARP.TmpCache
clc
rts
*--------------------------------------
* ARP.GETCACHE
* Out:
*/--------------------------------------
* #ARP.GetCache
* Return a Ptr to ARP Cache Table
* ##In:
* ##Out:
* Y,A = PTR to ARP.CACHE
*--------------------------------------
ARP.GETCACHE >LDYA L.ARP.CACHE
*\--------------------------------------
ARP.GetCache >LDYA L.ARP.CACHE
clc
rts
*--------------------------------------

View File

@ -4,26 +4,32 @@ NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
DNS.CLEAR ldx #K.DNSCACHE.SIZE*S.DNSCACHE
*/--------------------------------------
* #DNS.Clear
* Clear DNS Cache
* ##In :
* ##Out :
*\--------------------------------------
DNS.Clear ldx #K.DNSCACHE.SIZE*S.DNSCACHE
.1 stz DNS.CACHE-1,x
dex
bne .1
clc
rts
*--------------------------------------
* DNS.QUERY
* In:
* PULLW = hostname PTR to PSTR
* PULLW = PTR to IP to fill with cached data
* Out:
*/--------------------------------------
* #DNS.Query
* Query DNS for specified host
* ##In:
* PUSHW = PTR to IP to fill with cached data
* PUSHW = hostname PTR to PSTR
* ##Out:
* CC: hit: IP filled with address
* CS: missed
*--------------------------------------
DNS.QUERY >PULLW ZPPtrDNS Get host string
*\--------------------------------------
DNS.Query >PULLW ZPPtrDNS Get host string
>PULLW ZPPtrIP Get IP address to fill
DNS.QUERY.I jsr DNS.FIND.BY.NAME
DNS.Query.I jsr DNS.FIND.BY.NAME
bcs DNS.REQUEST
lda (ZPCachePtr) get status...
@ -105,7 +111,7 @@ DNS.REQUEST lda hDNSSocket1
>PUSHW DNS.MSG.LEN
>PUSHW L.DNS.MSG
>PUSHB hDNSSocket1
jsr SKT.SEND
jsr SKT.Write
lda hDNSSocket2
beq .3
@ -113,18 +119,19 @@ DNS.REQUEST lda hDNSSocket1
>PUSHW DNS.MSG.LEN
>PUSHW L.DNS.MSG
>PUSHB hDNSSocket2
jsr SKT.SEND
jsr SKT.Write
.3 lda #ERR.DNS.PENDING
.9 sec
rts
*--------------------------------------
* DNS.ADD
* In:
* PULLW = hostname PSTR to Add
* PULLW = PTR to IP
*--------------------------------------
DNS.ADD >PULLW ZPPtrDNS Get host string
*/--------------------------------------
* #DNS.Add
* Add a static DNS record
* ##In:
* PUSHW = PTR to IP
* PUSHW = hostname PSTR to Add
*\--------------------------------------
DNS.Add >PULLW ZPPtrDNS Get host string
>PULLW ZPPtrIP Get host IP address
ldy #3
@ -167,8 +174,14 @@ DNS.ADD.I sta DNS.TmpCache
clc
.9 rts
*--------------------------------------
DNS.GETCACHE >LDYA L.DNS.CACHE
*/--------------------------------------
* #DNS.GetCache
* Return a Ptr to DNS Cache Table
* ##In:
* ##Out:
* Y,A = PTR to DNS.CACHE
*\--------------------------------------
DNS.GetCache >LDYA L.DNS.CACHE
clc
rts
*--------------------------------------
@ -355,13 +368,13 @@ DNS.FREE ldy #S.DNSCACHE.hNAME
*--------------------------------------
DNS.POLL lda hDNSSocket1
beq .8
jsr SKT.RCVDA
jsr SKT.ReadA
bcs .8
jsr DNS.DecodeMsg
lda hDNSSocket2
beq .8
jsr SKT.RCVDA
jsr SKT.ReadA
bcs .8
jsr DNS.DecodeMsg

View File

@ -15,9 +15,9 @@ AUTO 6
*--------------------------------------
FRM.NewIP stx .8+1
>STYA ZPDataOutLen
cpx #S.IP.PROTOCOL.ICMP
cpx #S.IP.PROTOCOL.TCP
bne .1
lda #S.IP-2
lda #S.TCP-2
bra .4
.1 cpx #S.IP.PROTOCOL.UDP
@ -25,10 +25,7 @@ FRM.NewIP stx .8+1
lda #S.UDP-2
bra .4
.2 cpx #S.IP.PROTOCOL.TCP
bne *
lda #S.TCP-2
.2 lda #S.IP-2
bra .4
.4 sta .5+1 save Header len for reset later
@ -133,27 +130,6 @@ FRM.NewIP stx .8+1
.9 rts
*--------------------------------------
FRM.SendICMP
bra FRM.SendIP
*--------------------------------------
FRM.SendTCP
bra FRM.SendIP
*--------------------------------------
FRM.SendUDP lda ZPFrameOutLen
sec
sbc #S.IP-2
ldy #S.UDP.LENGTH+1
sta (ZPFrameOutPtr),y
lda ZPFrameOutLen+1
sbc /S.IP-2
dey
sta (ZPFrameOutPtr),y
*--------------------------------------
FRM.SendIP ldx #3 Copy SRC.IP even if IP offload
ldy #S.IP.SRC+3 for proper UDP/TCP CRC calculation
@ -223,6 +199,20 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload
.3 cmp #S.IP.PROTOCOL.UDP
bne .4
lda ZPFrameOutLen
sec
sbc #S.IP-2
ldy #S.UDP.LENGTH+1
sta (ZPFrameOutPtr),y
lda ZPFrameOutLen+1
sbc /S.IP-2
dey
sta (ZPFrameOutPtr),y
jsr UDP.ComputeChecksum
bra .5

View File

@ -5,14 +5,14 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
HST.GETBYNAME >PULLW ZPPtrDNS
HST.GetByName >PULLW ZPPtrDNS
>PULLW ZPPtrIP
jsr HST.ScanIP
bcc .9
jmp DNS.QUERY.I
.9 rts
*--------------------------------------
HST.GETBYADDR >PULLW ZPPtrIP
HST.GetByAddr >PULLW ZPPtrIP
>PULLW ZPPtrDNS

View File

@ -66,7 +66,7 @@ ICMP.IN.ECHOREQ ldy #S.IP.DST+3
sta hFrameOut DO NOT DISCARD this frame,it is SOURCE frame!!!
>LDYA ZPFrameInPtr
>STYA ZPFrameOutPtr
jmp FRM.SendICMP
jmp FRM.SendIP
ICMP.IN.EXIT lda hFrameIn
>SYSCALL FreeMemA
@ -92,7 +92,6 @@ ICMP.IN.ECHOREP jsr IP.FillTmpSocketSrcDst
.3 lda (ZPPtrSKT)
beq .7
and #S.SOCKET.SOCK.MASK
cmp #S.SOCKET.SOCK.RAW
bne .7

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,7 @@ TCP.IN ldy #S.IP.SRC+3
.4 lda TmpSocket,y
cmp (ZPPtrSKT),y
bne .7 Not for this socket...
iny
cpy #S.SOCKET.SRC.PORT+2
bne .4
@ -139,14 +140,14 @@ TCP.IN.LISTEN.NEW
lda #ERR.SKT.OOS
.9 rts
.3 ldy #S.SOCKET.STATUS
lda #S.SOCKET.STATUS.SYNRCVD
.3 ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.SYNRCVD
sta (ZPPtrSKT),y
jmp TCP.SendSYNACK
*--------------------------------------
TCP.IN.REGULAR stx hSocket
ldy #S.SOCKET.STATUS
ldy #S.SOCKET.TCP.STATUS
lda (ZPPtrSKT),y
asl
tax
@ -191,8 +192,8 @@ TCP.IN.JMP.SYNRCVD
dex
bpl .12
ldy #S.SOCKET.STATUS
lda #S.SOCKET.STATUS.ESTBLSH
ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.ESTBLSH
sta (ZPPtrSKT),y
@ -208,7 +209,7 @@ TCP.IN.JMP.ESTBLSH
jsr TCP.UpdateSktAckNum
.1 jsr TCP.SetDataInPtrAndLen
jsr TCP.AddDataToSkt
jsr SKT.AddDataToSktIn
clc
@ -223,12 +224,18 @@ TCP.IN.JMP.TIMEWT
clc
rts
*--------------------------------------
TCP.OUT jsr SKT.GetCopy
TCP.OUT ldy #S.SOCKET.SQ.OUTUSED
lda (ZPPtrSKT),y
lda SKT.TmpCache+S.SOCKET.SQ.OUTUSED+1
pha
iny
lda (ZPPtrSKT),y
ply
bne .1
ldy SKT.TmpCache+S.SOCKET.SQ.OUTUSED
beq .8 nothing to send....go check if ACK pending
tax
beq .2 Y,A=0 : nothing to send....
.1 cpy #K.TCP.MSS
pha
@ -236,15 +243,75 @@ TCP.OUT jsr SKT.GetCopy
pla
bcs .2 no....get data len
>LDYAI K.TCP.MSS yes gert only MSS
>LDYAI K.TCP.MSS yes get only MSS
.2 >STYA ZPDataOutLen
.2 >STYA TmpOffset
ldx #S.IP.PROTOCOL.TCP
jsr FRM.NewIP
bcs .9
jsr SKT.GetDataFromSktOut
ldy #S.SOCKET.SQ.SEQNUM compute new SEQ.NUM
lda (ZPPtrSKT),y
clc
adc TmpOffset
sta TmpDWord
jmp FRM.SendTCP
iny
lda (ZPPtrSKT),y
adc TmpOffset+1
sta TmpDWord+1
iny
lda (ZPPtrSKT),y
adc #0
sta TmpDWord+2
iny
lda (ZPPtrSKT),y
adc #0
sta TmpDWord+3
ldy #S.TCP.SEQ.NUMBER+3
ldx #3
.3 lda TmpDWord,x
sta (ZPFrameOutPtr),y
dey
dex
bpl .3
ldy #S.SOCKET.TCP.OPTIONS
lda (ZPPtrSKT),y
bit #S.TCP.OPTIONS.ACK
beq .7
ldy #S.TCP.OPTIONS
lda (ZPFrameOutPtr),y
ora #S.TCP.OPTIONS.ACK
sta (ZPFrameOutPtr),y
.7 jsr FRM.SendIP
bcs .9
ldy #S.SOCKET.SOCK
lda (ZPPtrSKT),y
and #$ff^S.TCP.OPTIONS.ACK
sta (ZPPtrSKT),y
ldx #3
ldy #S.SOCKET.SQ.SEQNUM+3
.71 lda TmpDWord,x
sta (ZPPtrSKT),y
dey
dex
bpl .71
.8 clc
rts
.9 rts
*--------------------------------------
TCP.UpdateSktAckNum
ldy #S.SOCKET.SQ.ACKNUM+3
@ -318,83 +385,9 @@ TCP.SetDataInPtrAndLen
sta ZPDataInLen+1
rts
*--------------------------------------
TCP.AddDataToSkt
ldy #S.SOCKET.STREAM.hInMem
lda (ZPPtrSKT),y
>SYSCALL GetMemPtrA
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
ldy #S.SOCKET.SQ.INHEAD
lda (ZPPtrSKT),y
tax save LO for compare later
clc
adc ZPTmpPtr1
sta ZPTmpPtr2 Make ZPTmpPtr2=actual head
iny
lda (ZPPtrSKT),y
pha save HI for compare later
adc ZPTmpPtr1+1
sta ZPTmpPtr2+1
lda ZPDataInLen
eor #$ff
sta ZPTmpPtr3 Make ZPTmpPtr3=!count
lda ZPDataInLen+1
eor #$ff
sta ZPTmpPtr3+1
ldy #0
.1 inc ZPTmpPtr3
bne .2
inc ZPTmpPtr3+1
beq .9
.2 lda (ZPDataInPtr),y
sta (ZPTmpPtr2)
iny
bne .3
inc ZPDataInPtr+1
.3 inc ZPTmpPtr2
bne .4
inc ZPTmpPtr2+1
.4 pla
inx
bne .5
inc
.5 pha
cpx #K.TCP.WSIZE
sbc /K.TCP.WSIZE
bcc .1
.6 inc ZPTmpPtr3
bne .7
inc ZPTmpPtr3+1
beq .9
.7 lda (ZPDataInPtr),y
sta (ZPTmpPtr1)
iny
bne .8
inc ZPDataInPtr+1
.8 inc ZPTmpPtr1
bne .6
inc ZPTmpPtr1+1
bra .6
.9 pla
rts
*--------------------------------------
TCP.SendACK lda #S.TCP.OPTIONS.ACK
bra TCP.SendMSG
TCP.SendSYNACK lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
TCP.SendMSG sta TCP.MSG+S.TCP.OPTIONS
sta TCP.MSG+S.TCP.OPTIONS
ldy #S.SOCKET.SRC.ADDR+3
ldx #3

View File

@ -52,23 +52,12 @@ CS.START cld
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA POLL
.DA PULSEA
.DA SET.IPCFG
.DA GET.IPCFG
.DA $ffff NEW.ICMP.FRAME
.DA $ffff NEW.TCP.FRAME
.DA $ffff NEW.UDP.FRAME
.DA $ffff NEW.IP.FRAME
.DA $ffff NEW.ARP.FRAME
.DA $ffff NEW.ETH.FRAME
.DA $ffff SEND.ICMP.FRAME
.DA $ffff SEND.TCP.FRAME
.DA $ffff SEND.UDP.FRAME
.DA $ffff SEND.IP.FRAME
.DA $ffff SEND.ARP.FRAME
.DA $ffff SEND.ETH.FRAME
.DA ARP.CLEAR
.DA ARP.QUERY
.DA ARP.ADD
@ -79,22 +68,24 @@ CS.START cld
.DA DNS.ADD
.DA DNS.GETCACHE
.DA POLL
.DA PULSEA
.DA HST.GETBYNAME
.DA HST.GETBYADDR
.DA SKT.NEW
.DA $FFFF
.DA SKT.ACCEPTA
.DA $FFFF
.DA SKT.SEND
.DA SKT.RCVDA
.DA $FFFF
.DA SKT.CLOSEA
.DA SKT.GETTABLE
.DA SKT.GETA
.DA SKT.ACCEPTA
.DA $FFFF
.DA HST.GETBYNAME
.DA HST.GETBYADDR
.DA SKT.Write
.DA SKT.Read
.DA SKT.ReadA
.DA SKT.PutC
.DA SKT.PutS
.DA SKT.GetCA
.DA SKT.GetS
*--------------------------------------
L.IPCFG .DA IPCFG
L.ARP.REQ .DA ARP.REQ
@ -331,6 +322,7 @@ TmpSocket .BS S.SOCKET
hFrameIn .BS 1
hFrameOut .BS 1
hSocket .BS 1
bTextMode .BS 1
TmpOffset .BS 2
HST.DecStr .BS 4
HST.IP .BS 5

View File

@ -122,7 +122,7 @@ CS.RUN.SDISC ldy #hSocket
>PUSHB (pData),y
>PUSHW L.DHCP.DISC
>PUSHWI DHCP.DISC.LEN
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write
bcc .1
jmp CS.RUN.KO
@ -159,7 +159,7 @@ CS.RUN.SREQ ldx #3
>PUSHB (pData),y
>PUSHW L.DHCP.REQ
>PUSHWI DHCP.REQ.LEN
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write
bcs CS.RUN.KO
lda #S.IPCFG.STATUS.SREQ
@ -211,7 +211,7 @@ CS.RUN.KO pha
*--------------------------------------
CS.RUN.SKT.RCVD ldy #hSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.RCVDA
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ReadA
bcs .9
ldy #hFrame
sta (pData),y

View File

@ -13,6 +13,7 @@ AUTO 6
.INB /A2OSX.DEV/INC/LIBTCPIP.I
*--------------------------------------
TIMEOUT.MAX .EQ 30 30 sec.
CONN.MAX .EQ 16
*--------------------------------------
ZPIPCfgPtr .EQ ZPBIN
ZPSktPtr .EQ ZPBIN+2
@ -94,23 +95,38 @@ CS.RUN.INIT ldx #3
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.NEW
bcs .9
txa
ldy #hSocket
ldy #hSrvSocket
sta (pData),y
>LDYA L.MSG.INITOK
>SYSCALL CPrintFYA
.11 >SYSCALL Sleep
>SYSCALL GetC
bcs .12
cmp #03
beq CS.RUN.ABORT
.12 ldy #hSocket
.12 ldy #hSrvSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ACCEPTA
bcs .11
bcs .15
pha
ldy #hSockets
ldx #CONN.MAX
.13 lda (pData),y
beq .14
iny
dex
bne .13
pla
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA
bra .15
.14 pla
sta (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GETA
>STYA ZPSktPtr
@ -124,6 +140,25 @@ CS.RUN.INIT ldx #3
>LDYA L.MSG.INCOMING
>SYSCALL CPrintFYA
.15 ldy #SktIndex
lda (pData),y
tay
lda (pData),y hSockets
beq .16
jsr CS.RUN.CLIENT
.16 ldy #SktIndex
lda (pData),y
inc
cmp #CONN.MAX
bne .17
lda #0
.17 sta (pData),y
bra .11
.9 >LDYA L.MSG.SKTERR
@ -138,10 +173,38 @@ CS.RUN.ABORT >LDYA L.MSG.ABORT
sec
rts
*--------------------------------------
CS.RUN.CLIENT >PUSHA hSocket
>PUSHWI UsrBuf256
>PUSHWI 256
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetS
bcc .1
.1 clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT ldy #hSocket
CS.QUIT ldx #CONN.MAX
ldy #hSockets
.1 lda (pData),y
beq .2
phx
phy
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA
ply
plx
.2 iny
dex
bne .1
ldy #hSrvSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA
@ -159,9 +222,6 @@ Wait.TimeOut sec
ldy #TimeOut
lda (pData),y
beq .9
ldy #bCTRLC
lda (pData),y
bmi .9
clc
.9 rts
*--------------------------------------
@ -176,22 +236,22 @@ MSG.ABORT >CSTR "HTTPD:User Aborted\n"
MSG.INCOMING >CSTR "HTTPD:Incoming Connection From : %d.%d.%d.%d\n"
hLIBTCPIP .BS 1
*--------------------------------------
Socket .DA #S.SOCKET.SOCK.STREAM+S.SOCKET.STATUS.LISTEN
Socket .DA #S.SOCKET.SOCK.STREAM
.DA #S.SOCKET.SO.ACCEPTCONN
.DA 0
.DA #S.SOCKET.TCP.STATUS.LISTEN
.BS 1
Socket.Src.Addr .BS 4
Socket.Src.Port .DA 80
Socket.Dst.Addr .BS 4
Socket.Dst.Port .BS 2
.BS 16
*--------------------------------------
.DUMMY
.OR 0
DS.START
hSockets .BS CONN.MAX pData
SktIndex .BS 1
hSrvSocket .BS 1
TimeOut .BS 1
bCTRLC .BS 1
hSocket .BS 1
DS.END
.ED
*--------------------------------------

View File

@ -207,9 +207,10 @@ MSG.ABORT >CSTR "NFSD:User Aborted\n"
MSG.INCOMING >CSTR "NFSD:Incoming Connection From : %d.%d.%d.%d\n"
hLIBTCPIP .BS 1
*--------------------------------------
Socket .DA #S.SOCKET.SOCK.DGRAM+S.SOCKET.STATUS.LISTEN
Socket .DA #S.SOCKET.SOCK.DGRAM
.DA #S.SOCKET.SO.ACCEPTCONN
.BS 2
.DA #S.SOCKET.TCP.STATUS.LISTEN
.BS 1
Socket.Src.Addr .BS 4
Socket.Src.Port .DA 2049
Socket.Dst.Addr .BS 4