mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-28 03:55:01 +00:00
Kernel 0.92 : TCP close fix
This commit is contained in:
parent
478a13a4be
commit
2b0f70dc74
Binary file not shown.
Binary file not shown.
@ -186,20 +186,17 @@ SKT.connect.STREAM
|
|||||||
SKT.connect.SEQPACKET
|
SKT.connect.SEQPACKET
|
||||||
jsr SKT.SetRemAddr
|
jsr SKT.SetRemAddr
|
||||||
jsr SKT.NewTCB
|
jsr SKT.NewTCB
|
||||||
bcs SKT.connect.99
|
bcs .99
|
||||||
|
|
||||||
lda #S.TCP.OPTIONS.SYN
|
lda #S.TCP.OPTIONS.SYN
|
||||||
jsr TCP.OUT.SendOptA Send SYN
|
jsr TCP.OUT.SendOptA Send SYN
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
lda #S.SOCKET.TCP.S.SYNSENT
|
lda #S.SOCKET.TCP.S.SYNSENT
|
||||||
sta SKT.Cache+S.SOCKET.TCP.S
|
jmp SKT.StoreTCB.S
|
||||||
|
|
||||||
jmp SKT.StoreTCB
|
|
||||||
|
|
||||||
.9 lda #ERR.SKT.BAD
|
.9 lda #ERR.SKT.BAD
|
||||||
sec
|
sec
|
||||||
SKT.connect.99 rts
|
.99 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # Listen
|
* # Listen
|
||||||
* Listen for connections on a socket
|
* Listen for connections on a socket
|
||||||
@ -354,22 +351,30 @@ SKT.shutdown.SEQPACKET
|
|||||||
rts
|
rts
|
||||||
SKT.shutdown.STREAM
|
SKT.shutdown.STREAM
|
||||||
pla
|
pla
|
||||||
|
jsr SKT.GetTCB
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.S
|
ldy #S.SOCKET.TCP.S
|
||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
cmp #S.SOCKET.TCP.S.CLWAIT
|
cmp #S.SOCKET.TCP.S.ESTBLSH
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda #S.SOCKET.TCP.S.LASTACK
|
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||||
bra .2
|
jsr TCP.OUT.SendOptA
|
||||||
|
bcs .9
|
||||||
|
|
||||||
.1 lda #S.SOCKET.TCP.S.FINWT1
|
lda #S.SOCKET.TCP.S.FINWT1
|
||||||
.2 sta (ZPPtrSKT),y
|
jmp SKT.StoreTCB.S
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.O
|
.1 cmp #S.SOCKET.TCP.S.TIMEWT
|
||||||
lda (ZPPtrSKT),y
|
beq .8
|
||||||
ora #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
lda #S.TCP.OPTIONS.RST+S.TCP.OPTIONS.ACK
|
||||||
sta (ZPPtrSKT),y
|
jsr TCP.OUT.SendOptA
|
||||||
jmp TCP.OUT
|
bcs .9
|
||||||
|
|
||||||
|
lda #S.SOCKET.TCP.S.TIMEWT
|
||||||
|
jmp SKT.StoreTCB.S
|
||||||
|
.8 clc
|
||||||
|
.9 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # Read (STREAM)
|
* # Read (STREAM)
|
||||||
* ## C
|
* ## C
|
||||||
@ -447,6 +452,7 @@ SKT.Write jsr SKT.PullhFDDataInPtrLen
|
|||||||
lda (ZPPtrSKT),y
|
lda (ZPPtrSKT),y
|
||||||
cmp #S.SOCKET.TCP.S.ESTBLSH
|
cmp #S.SOCKET.TCP.S.ESTBLSH
|
||||||
bcc .90 Not yet established...no data
|
bcc .90 Not yet established...no data
|
||||||
|
bne .91
|
||||||
|
|
||||||
jsr SKT.AddDataToSktOut will call SKT.GetTCB
|
jsr SKT.AddDataToSktOut will call SKT.GetTCB
|
||||||
bcs .90
|
bcs .90
|
||||||
@ -1261,7 +1267,7 @@ SKT.AckDataToSktOut
|
|||||||
|
|
||||||
.8 rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.NewTCB ldx #S.SOCKET
|
SKT.NewTCB ldx #S.SOCKET.TCP.INTAIL
|
||||||
|
|
||||||
.1 stz SKT.Cache,x
|
.1 stz SKT.Cache,x
|
||||||
inx
|
inx
|
||||||
@ -1271,7 +1277,7 @@ SKT.NewTCB ldx #S.SOCKET
|
|||||||
>LDYAI K.TCP.WSIZE
|
>LDYAI K.TCP.WSIZE
|
||||||
>STYA SKT.Cache+S.SOCKET.TCP.INFREE
|
>STYA SKT.Cache+S.SOCKET.TCP.INFREE
|
||||||
>SYSCALL getmem
|
>SYSCALL getmem
|
||||||
bcs SKT.StoreTCB.RTS
|
bcs .9
|
||||||
txa
|
txa
|
||||||
ldy #S.SOCKET.SQ.hInMem
|
ldy #S.SOCKET.SQ.hInMem
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
@ -1279,7 +1285,7 @@ SKT.NewTCB ldx #S.SOCKET
|
|||||||
>LDYAI K.TCP.WSIZE
|
>LDYAI K.TCP.WSIZE
|
||||||
>STYA SKT.Cache+S.SOCKET.TCP.OUTFREE
|
>STYA SKT.Cache+S.SOCKET.TCP.OUTFREE
|
||||||
>SYSCALL getmem
|
>SYSCALL getmem
|
||||||
bcs SKT.StoreTCB.RTS
|
bcs .9
|
||||||
txa
|
txa
|
||||||
ldy #S.SOCKET.SQ.hOutMem
|
ldy #S.SOCKET.SQ.hOutMem
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
@ -1290,18 +1296,22 @@ SKT.NewTCB ldx #S.SOCKET
|
|||||||
sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
|
sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
|
||||||
dex
|
dex
|
||||||
bpl .2
|
bpl .2
|
||||||
|
* clc
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.StoreTCB ldy #S.SOCKET
|
SKT.StoreTCB.S ldy #S.SOCKET.TCP.S
|
||||||
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
|
SKT.StoreTCB ldy #S.SOCKET.TCP.INTAIL
|
||||||
.1 lda SKT.Cache,y
|
.1 lda SKT.Cache,y
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
iny
|
iny
|
||||||
cpy #S.SOCKET.TCP
|
cpy #S.SOCKET.TCP
|
||||||
bne .1
|
bne .1
|
||||||
clc
|
clc
|
||||||
SKT.StoreTCB.RTS
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SKT.GetTCB ldy #S.SOCKET
|
SKT.GetTCB ldy #S.SOCKET.TCP.INTAIL
|
||||||
.1 lda (ZPPtrSKT),y
|
.1 lda (ZPPtrSKT),y
|
||||||
sta SKT.Cache,y
|
sta SKT.Cache,y
|
||||||
iny
|
iny
|
||||||
|
@ -56,13 +56,23 @@ TCP.CLOSE ldx #0
|
|||||||
ldy #S.SOCKET.TCP.S
|
ldy #S.SOCKET.TCP.S
|
||||||
lda (ZPTmpPtr1),y
|
lda (ZPTmpPtr1),y
|
||||||
cmp #S.SOCKET.TCP.S.TIMEWT
|
cmp #S.SOCKET.TCP.S.TIMEWT
|
||||||
bcc .8
|
bne .8
|
||||||
|
|
||||||
|
ldy #S.SOCKET.SQ.hInMem
|
||||||
|
lda (ZPTmpPtr1),y
|
||||||
|
>SYSCALL freemem
|
||||||
|
ldy #S.SOCKET.SQ.hOutMem
|
||||||
|
lda (ZPTmpPtr1),y
|
||||||
|
>SYSCALL freemem
|
||||||
|
|
||||||
plx
|
plx
|
||||||
phx
|
phx
|
||||||
|
|
||||||
lda SKT.TABLE,x
|
lda SKT.TABLE,x
|
||||||
jsr SKT.Shutdown
|
>SYSCALL freemem
|
||||||
|
|
||||||
|
plx
|
||||||
|
phx
|
||||||
|
stz SKT.TABLE,x
|
||||||
|
|
||||||
.8 plx
|
.8 plx
|
||||||
inx
|
inx
|
||||||
@ -105,8 +115,7 @@ TCP.IN.JMP.LISTEN
|
|||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
lda #S.SOCKET.TCP.S.SYNRCVD
|
lda #S.SOCKET.TCP.S.SYNRCVD
|
||||||
sta SKT.Cache+S.SOCKET.TCP.S
|
jmp SKT.StoreTCB.S
|
||||||
jmp SKT.StoreTCB
|
|
||||||
|
|
||||||
.9 lda #ERR.SKT.OOS
|
.9 lda #ERR.SKT.OOS
|
||||||
.99 rts
|
.99 rts
|
||||||
@ -141,8 +150,7 @@ TCP.IN.JMP.SYNSENT
|
|||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
lda #S.SOCKET.TCP.S.ESTBLSH
|
lda #S.SOCKET.TCP.S.ESTBLSH
|
||||||
sta SKT.Cache+S.SOCKET.TCP.S
|
jmp SKT.StoreTCB.S
|
||||||
jmp SKT.StoreTCB
|
|
||||||
|
|
||||||
.9 lda #S.TCP.OPTIONS.RST
|
.9 lda #S.TCP.OPTIONS.RST
|
||||||
jsr TCP.OUT.SendOptA
|
jsr TCP.OUT.SendOptA
|
||||||
@ -175,8 +183,7 @@ TCP.IN.JMP.SYNRCVD
|
|||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
lda #S.SOCKET.TCP.S.ESTBLSH
|
lda #S.SOCKET.TCP.S.ESTBLSH
|
||||||
sta SKT.Cache+S.SOCKET.TCP.S
|
jmp SKT.StoreTCB.S
|
||||||
jmp SKT.StoreTCB
|
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
.9 rts
|
.9 rts
|
||||||
@ -209,13 +216,12 @@ TCP.IN.JMP.ESTBLSH
|
|||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
jsr TCP.IN.ACKTheFIN
|
jsr TCP.IN.ACKTheFIN
|
||||||
|
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||||
|
jsr TCP.OUT.SendOptA FIN received, Send FIN.ACK
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.S
|
|
||||||
lda #S.SOCKET.TCP.S.CLWAIT
|
lda #S.SOCKET.TCP.S.CLWAIT
|
||||||
sta (ZPPtrSKT),y
|
jmp SKT.StoreTCB.S
|
||||||
jmp SKT.StoreTCB
|
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
.9 rts
|
.9 rts
|
||||||
@ -230,30 +236,38 @@ TCP.IN.JMP.LASTACK
|
|||||||
bit #S.TCP.OPTIONS.ACK
|
bit #S.TCP.OPTIONS.ACK
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
ldx SKT.Index
|
ldy #S.SOCKET.TCP.S
|
||||||
lda SKT.TABLE,x
|
lda #S.SOCKET.TCP.S.TIMEWT
|
||||||
jmp SKT.shutdown
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.JMP.FINWT1
|
TCP.IN.JMP.FINWT1
|
||||||
ldy #S.TCP.OPTIONS only accept ACK packet
|
jsr SKT.GetTCB
|
||||||
|
|
||||||
|
ldy #S.TCP.OPTIONS FIN sent, accept ACK or FIN/ACK packet
|
||||||
lda (ZPFrameInPtr),y
|
lda (ZPFrameInPtr),y
|
||||||
bit #S.TCP.OPTIONS.FIN
|
bit #S.TCP.OPTIONS.FIN
|
||||||
beq .8
|
bne .1
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.O
|
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||||
lda #S.TCP.OPTIONS.FIN send FIN
|
jsr TCP.OUT.SendOptA Send FIN.ACK
|
||||||
sta (ZPPtrSKT),y
|
|
||||||
jsr TCP.IN.ACKTheFIN
|
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.S
|
|
||||||
lda #S.SOCKET.TCP.S.FINWT2
|
lda #S.SOCKET.TCP.S.FINWT2
|
||||||
sta (ZPPtrSKT),y
|
jmp SKT.StoreTCB.S
|
||||||
|
|
||||||
.8 clc
|
.1 jsr TCP.IN.ACKTheFIN FIN/ACK
|
||||||
|
|
||||||
|
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
|
||||||
|
jsr TCP.OUT.SendOptA Send FIN.ACK
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
lda #S.SOCKET.TCP.S.TIMEWT
|
||||||
|
jmp SKT.StoreTCB.S
|
||||||
|
|
||||||
|
* clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.JMP.FINWT2
|
TCP.IN.JMP.FINWT2
|
||||||
@ -263,12 +277,15 @@ TCP.IN.JMP.FINWT2
|
|||||||
bit #S.TCP.OPTIONS.FIN
|
bit #S.TCP.OPTIONS.FIN
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
|
jsr SKT.GetTCB
|
||||||
jsr TCP.IN.ACKTheFIN
|
jsr TCP.IN.ACKTheFIN
|
||||||
|
|
||||||
|
lda #S.TCP.OPTIONS.ACK
|
||||||
|
jsr TCP.OUT.SendOptA FIN received, Send ACK
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
ldy #S.SOCKET.TCP.S
|
|
||||||
lda #S.SOCKET.TCP.S.TIMEWT
|
lda #S.SOCKET.TCP.S.TIMEWT
|
||||||
sta (ZPPtrSKT),y
|
jmp SKT.StoreTCB.S
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
.9 rts
|
.9 rts
|
||||||
@ -311,21 +328,27 @@ TCP.IN.ACKTheFIN
|
|||||||
ora #S.TCP.OPTIONS.ACK
|
ora #S.TCP.OPTIONS.ACK
|
||||||
sta (ZPPtrSKT),y
|
sta (ZPPtrSKT),y
|
||||||
|
|
||||||
jsr SKT.GetTCB
|
ldx #3
|
||||||
|
|
||||||
|
sec
|
||||||
|
|
||||||
|
.2 lda SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x
|
||||||
|
adc #0
|
||||||
|
sta SKT.Cache+S.SOCKET.TCP.INLASTSEQNUM,x
|
||||||
|
dex
|
||||||
|
bpl .2
|
||||||
|
|
||||||
ldx #3
|
ldx #3
|
||||||
ldy #S.TCP.ACKNUM+3
|
|
||||||
|
|
||||||
sec
|
sec
|
||||||
|
|
||||||
.3 lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
|
.3 lda SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
|
||||||
adc #0
|
adc #0
|
||||||
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
|
sta SKT.Cache+S.SOCKET.TCP.OUTACKNUM,x
|
||||||
dey
|
|
||||||
dex
|
dex
|
||||||
bpl .3
|
bpl .3
|
||||||
|
|
||||||
jmp TCP.OUT.I ACK the FIN
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TCP.IN.SetDataInPtrAndLen
|
TCP.IN.SetDataInPtrAndLen
|
||||||
ldy #S.IP.TOTAL.LENGTH+1
|
ldy #S.IP.TOTAL.LENGTH+1
|
||||||
|
@ -446,6 +446,7 @@ CL.CheckCmd ldy #$ff
|
|||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
>SYSCALL GetMemPtr
|
>SYSCALL GetMemPtr
|
||||||
jsr CL.SearchExt
|
jsr CL.SearchExt
|
||||||
|
|
||||||
bcs CL.CheckCmd.90
|
bcs CL.CheckCmd.90
|
||||||
|
|
||||||
.6 >PUSHEA.G CMD.Stat
|
.6 >PUSHEA.G CMD.Stat
|
||||||
|
@ -280,7 +280,7 @@ CS.RUN.BATCH >SYSCALL GetChar
|
|||||||
jsr CL.Trace
|
jsr CL.Trace
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN.Exec jsr CL.Parse
|
CS.RUN.Exec jsr CL.Parse
|
||||||
bcs CS.RUN.LOOP.8
|
bcs CS.RUN.LOOP.END
|
||||||
|
|
||||||
lda (ZPArgVBuf)
|
lda (ZPArgVBuf)
|
||||||
beq CS.RUN.LOOP.8
|
beq CS.RUN.LOOP.8
|
||||||
|
Loading…
Reference in New Issue
Block a user