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

View File

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

View File

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

View File

@ -26,46 +26,36 @@ K.TCP.WMASK .EQ 2047
LIBTCPIP.SET.IPCFG .EQ 4 LIBTCPIP.SET.IPCFG .EQ 4
LIBTCPIP.GET.IPCFG .EQ 6 LIBTCPIP.GET.IPCFG .EQ 6
*LIBTCPIP.NEW.ICMP.FRAME .EQ 8 LIBTCPIP.POLL .EQ 8
*LIBTCPIP.NEW.TCP.FRAME .EQ 10 LIBTCPIP.PULSEA .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.SEND.ICMP.FRAME .EQ 20 LIBTCPIP.ARP.CLEAR .EQ 12
*LIBTCPIP.SEND.TCP.FRAME .EQ 22 LIBTCPIP.ARP.QUERY .EQ 14
*LIBTCPIP.SEND.UDP.FRAME .EQ 24 LIBTCPIP.ARP.ADD .EQ 16
*LIBTCPIP.SEND.IP.FRAME .EQ 26 LIBTCPIP.ARP.GETCACHE .EQ 18
*LIBTCPIP.SEND.ARP.FRAME .EQ 28
*LIBTCPIP.SEND.ETH.FRAME .EQ 30
LIBTCPIP.ARP.CLEAR .EQ 32 LIBTCPIP.DNS.CLEAR .EQ 20
LIBTCPIP.ARP.QUERY .EQ 34 LIBTCPIP.DNS.QUERY .EQ 22
LIBTCPIP.ARP.ADD .EQ 36 LIBTCPIP.DNS.ADD .EQ 24
LIBTCPIP.ARP.GETCACHE .EQ 38 LIBTCPIP.DNS.GETCACHE .EQ 26
LIBTCPIP.DNS.CLEAR .EQ 40 LIBTCPIP.HST.GETBYNAME .EQ 28
LIBTCPIP.DNS.QUERY .EQ 42 LIBTCPIP.HST.GETBYADDR .EQ 30
LIBTCPIP.DNS.ADD .EQ 44
LIBTCPIP.DNS.GETCACHE .EQ 46
LIBTCPIP.POLL .EQ 48 LIBTCPIP.SKT.NEW .EQ 32
LIBTCPIP.PULSEA .EQ 50 LIBTCPIP.SKT.CLOSEA .EQ 34
LIBTCPIP.SKT.GETTABLE .EQ 36
LIBTCPIP.SKT.GETA .EQ 38
LIBTCPIP.SKT.NEW .EQ 52 LIBTCPIP.SKT.ACCEPTA .EQ 34
*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.HST.GETBYNAME .EQ 72 LIBTCPIP.SKT.Write .EQ 38
LIBTCPIP.HST.GETBYADDR .EQ 74 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.OOS .EQ $BF
ERR.SKT.BUSY .EQ $BE ERR.SKT.BUSY .EQ $BE
@ -132,26 +122,9 @@ S.DNSCACHE.IP .EQ 8
S.DNSCACHE .EQ 12 S.DNSCACHE .EQ 12
*-------------------------------------- *--------------------------------------
S.SOCKET.SOCK .EQ 0 S.SOCKET.SOCK .EQ 0
S.SOCKET.SOCK.DGRAM .EQ $10 S.SOCKET.SOCK.DGRAM .EQ 1
S.SOCKET.SOCK.STREAM .EQ $20 S.SOCKET.SOCK.STREAM .EQ 2
S.SOCKET.SOCK.RAW .EQ $30 S.SOCKET.SOCK.RAW .EQ 3
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.SO .EQ 1 S.SOCKET.SO .EQ 1
S.SOCKET.SO.DEBUG .EQ $01 S.SOCKET.SO.DEBUG .EQ $01
@ -164,8 +137,21 @@ S.SOCKET.SO.USELOOPBACK .EQ $40
S.SOCKET.SO.LINGER .EQ $80 S.SOCKET.SO.LINGER .EQ $80
S.SOCKET.RAW.PROTO .EQ 2 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.ADDR .EQ 4
S.SOCKET.SRC.PORT .EQ 8 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.OUTUSED .EQ 30
S.SOCKET.SQ.SEQNUM .EQ 32 S.SOCKET.SQ.SEQNUM .EQ 32
S.SOCKET.SQ.ACKNUM .EQ 36 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.FRAMELEN .EQ 0
S.ETH.DSTMAC .EQ 2 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.V.IHL.DSCP.ECN .EQ S.ETH+0 $0045, IPV4,HDR=5DWORDs
S.IP.TOTAL.LENGTH .EQ S.ETH+2 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.FRAGMENT.FLAGS .EQ S.ETH+6
S.IP.TTL .EQ S.ETH+8 S.IP.TTL .EQ S.ETH+8
S.IP.PROTOCOL .EQ S.ETH+9 S.IP.PROTOCOL .EQ S.ETH+9

View File

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

View File

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

View File

@ -15,9 +15,9 @@ AUTO 6
*-------------------------------------- *--------------------------------------
FRM.NewIP stx .8+1 FRM.NewIP stx .8+1
>STYA ZPDataOutLen >STYA ZPDataOutLen
cpx #S.IP.PROTOCOL.ICMP cpx #S.IP.PROTOCOL.TCP
bne .1 bne .1
lda #S.IP-2 lda #S.TCP-2
bra .4 bra .4
.1 cpx #S.IP.PROTOCOL.UDP .1 cpx #S.IP.PROTOCOL.UDP
@ -25,10 +25,7 @@ FRM.NewIP stx .8+1
lda #S.UDP-2 lda #S.UDP-2
bra .4 bra .4
.2 cpx #S.IP.PROTOCOL.TCP .2 lda #S.IP-2
bne *
lda #S.TCP-2
bra .4 bra .4
.4 sta .5+1 save Header len for reset later .4 sta .5+1 save Header len for reset later
@ -133,27 +130,6 @@ FRM.NewIP stx .8+1
.9 rts .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 FRM.SendIP ldx #3 Copy SRC.IP even if IP offload
ldy #S.IP.SRC+3 for proper UDP/TCP CRC calculation 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 .3 cmp #S.IP.PROTOCOL.UDP
bne .4 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 jsr UDP.ComputeChecksum
bra .5 bra .5

View File

@ -5,14 +5,14 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
HST.GETBYNAME >PULLW ZPPtrDNS HST.GetByName >PULLW ZPPtrDNS
>PULLW ZPPtrIP >PULLW ZPPtrIP
jsr HST.ScanIP jsr HST.ScanIP
bcc .9 bcc .9
jmp DNS.QUERY.I jmp DNS.QUERY.I
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
HST.GETBYADDR >PULLW ZPPtrIP HST.GetByAddr >PULLW ZPPtrIP
>PULLW ZPPtrDNS >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!!! sta hFrameOut DO NOT DISCARD this frame,it is SOURCE frame!!!
>LDYA ZPFrameInPtr >LDYA ZPFrameInPtr
>STYA ZPFrameOutPtr >STYA ZPFrameOutPtr
jmp FRM.SendICMP jmp FRM.SendIP
ICMP.IN.EXIT lda hFrameIn ICMP.IN.EXIT lda hFrameIn
>SYSCALL FreeMemA >SYSCALL FreeMemA
@ -92,7 +92,6 @@ ICMP.IN.ECHOREP jsr IP.FillTmpSocketSrcDst
.3 lda (ZPPtrSKT) .3 lda (ZPPtrSKT)
beq .7 beq .7
and #S.SOCKET.SOCK.MASK
cmp #S.SOCKET.SOCK.RAW cmp #S.SOCKET.SOCK.RAW
bne .7 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 .4 lda TmpSocket,y
cmp (ZPPtrSKT),y cmp (ZPPtrSKT),y
bne .7 Not for this socket... bne .7 Not for this socket...
iny iny
cpy #S.SOCKET.SRC.PORT+2 cpy #S.SOCKET.SRC.PORT+2
bne .4 bne .4
@ -139,14 +140,14 @@ TCP.IN.LISTEN.NEW
lda #ERR.SKT.OOS lda #ERR.SKT.OOS
.9 rts .9 rts
.3 ldy #S.SOCKET.STATUS .3 ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.STATUS.SYNRCVD lda #S.SOCKET.TCP.STATUS.SYNRCVD
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
jmp TCP.SendSYNACK jmp TCP.SendSYNACK
*-------------------------------------- *--------------------------------------
TCP.IN.REGULAR stx hSocket TCP.IN.REGULAR stx hSocket
ldy #S.SOCKET.STATUS ldy #S.SOCKET.TCP.STATUS
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
asl asl
tax tax
@ -191,8 +192,8 @@ TCP.IN.JMP.SYNRCVD
dex dex
bpl .12 bpl .12
ldy #S.SOCKET.STATUS ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.STATUS.ESTBLSH lda #S.SOCKET.TCP.STATUS.ESTBLSH
sta (ZPPtrSKT),y sta (ZPPtrSKT),y
@ -208,7 +209,7 @@ TCP.IN.JMP.ESTBLSH
jsr TCP.UpdateSktAckNum jsr TCP.UpdateSktAckNum
.1 jsr TCP.SetDataInPtrAndLen .1 jsr TCP.SetDataInPtrAndLen
jsr TCP.AddDataToSkt jsr SKT.AddDataToSktIn
clc clc
@ -223,12 +224,18 @@ TCP.IN.JMP.TIMEWT
clc clc
rts 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 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 .1 cpy #K.TCP.MSS
pha pha
@ -236,15 +243,75 @@ TCP.OUT jsr SKT.GetCopy
pla pla
bcs .2 no....get data len 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
jmp FRM.SendTCP jsr SKT.GetDataFromSktOut
ldy #S.SOCKET.SQ.SEQNUM compute new SEQ.NUM
lda (ZPPtrSKT),y
clc
adc TmpOffset
sta TmpDWord
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 .8 clc
rts .9 rts
*-------------------------------------- *--------------------------------------
TCP.UpdateSktAckNum TCP.UpdateSktAckNum
ldy #S.SOCKET.SQ.ACKNUM+3 ldy #S.SOCKET.SQ.ACKNUM+3
@ -318,83 +385,9 @@ TCP.SetDataInPtrAndLen
sta ZPDataInLen+1 sta ZPDataInLen+1
rts 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.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 ldy #S.SOCKET.SRC.ADDR+3
ldx #3 ldx #3

View File

@ -52,23 +52,12 @@ CS.START cld
.1 .DA LIB.LOAD .1 .DA LIB.LOAD
.DA LIB.UNLOAD .DA LIB.UNLOAD
.DA POLL
.DA PULSEA
.DA SET.IPCFG .DA SET.IPCFG
.DA GET.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.CLEAR
.DA ARP.QUERY .DA ARP.QUERY
.DA ARP.ADD .DA ARP.ADD
@ -79,22 +68,24 @@ CS.START cld
.DA DNS.ADD .DA DNS.ADD
.DA DNS.GETCACHE .DA DNS.GETCACHE
.DA POLL .DA HST.GETBYNAME
.DA PULSEA .DA HST.GETBYADDR
.DA SKT.NEW .DA SKT.NEW
.DA $FFFF
.DA SKT.ACCEPTA
.DA $FFFF
.DA SKT.SEND
.DA SKT.RCVDA
.DA $FFFF
.DA SKT.CLOSEA .DA SKT.CLOSEA
.DA SKT.GETTABLE .DA SKT.GETTABLE
.DA SKT.GETA .DA SKT.GETA
.DA HST.GETBYNAME .DA SKT.ACCEPTA
.DA HST.GETBYADDR .DA $FFFF
.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.IPCFG .DA IPCFG
L.ARP.REQ .DA ARP.REQ L.ARP.REQ .DA ARP.REQ
@ -331,6 +322,7 @@ TmpSocket .BS S.SOCKET
hFrameIn .BS 1 hFrameIn .BS 1
hFrameOut .BS 1 hFrameOut .BS 1
hSocket .BS 1 hSocket .BS 1
bTextMode .BS 1
TmpOffset .BS 2 TmpOffset .BS 2
HST.DecStr .BS 4 HST.DecStr .BS 4
HST.IP .BS 5 HST.IP .BS 5

View File

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

View File

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