Kernel version 0.9 : TCP Client sockets

This commit is contained in:
Rémy GIBERT 2017-03-13 08:07:07 +01:00
parent eb7b12f642
commit 6a05b3a3bb
8 changed files with 87 additions and 95 deletions

Binary file not shown.

Binary file not shown.

View File

@ -74,6 +74,8 @@ CS.RUN >LDYA L.MSG0
ldy #S.SOCKET.TCP.STATUS
lda (ZPPTR1),y
cmp #S.SOCKET.TCP.STATUS.TIMEWT+1
bcs *
asl
tax
>PUSHB L.MSG1.S+1,x

View File

@ -210,7 +210,7 @@ READBLOCK.RxOK and /PP.RxEvent.Brdcast
adc #2
tay
pla
adc #2
adc #0
>PUSHYA Size+2
>PUSHBI 0

View File

@ -13,7 +13,12 @@ AUTO 6
* YA = PTR to new S.SOCKET
* X = hSocket
*\--------------------------------------
SKT.New >PULLW ZPTmpPtr1
SKT.New clc
.HS B0 BCS
SKT.New.Listen sec
ror
sta .71+1
>PULLW ZPTmpPtr1
ldy #S.SOCKET.SRC.PORT+1
lda (ZPTmpPtr1),y
dey
@ -93,6 +98,14 @@ SKT.New >PULLW ZPTmpPtr1
jsr SKT.New.TCP
bcs .99
.71 lda #$ff
bmi .8 From Listen, do not send SYN packet
>LDYA ZPTmpPtr3
>STYA ZPPtrSKT
jsr TCP.OUT.SYN Only for CLIENT conn!!!!
bcs .99
.8 ldx TmpOffset
>LDYA ZPTmpPtr3
clc
@ -102,21 +115,22 @@ SKT.New >PULLW ZPTmpPtr1
sec
.99 rts
*--------------------------------------
SKT.New.TCP >PUSHW S.TCB
>PUSHBI 0
SKT.New.TCP >PUSHWI S.TCB
>PUSHBI S.MEM.F.INIT0
>SYSCALL GetMem
bcs .9
>STYA .4+1
txa
ldy #S.SOCKET.SQ.hTCB
sta (ZPTmpPtr3),y
ldx #S.TCB.OUTTAIL+1
* ldx #S.TCB.OUTTAIL+1
.10 stz SKT.TCBCache,x
dex
bpl .10
*.1 stz SKT.TCBCache,x
* dex
* bpl .1
lda #K.TCP.WSIZE
sta SKT.TCBCache+S.TCB.INFREE
@ -125,19 +139,19 @@ SKT.New.TCP >PUSHW S.TCB
sta SKT.TCBCache+S.TCB.INFREE+1
sta SKT.TCBCache+S.TCB.OUTFREE+1
stz SKT.TCBCache+S.TCB.INUSED
stz SKT.TCBCache+S.TCB.INUSED+1
stz SKT.TCBCache+S.TCB.OUTUSED
stz SKT.TCBCache+S.TCB.OUTUSED+1
* stz SKT.TCBCache+S.TCB.INUSED
* stz SKT.TCBCache+S.TCB.INUSED+1
* stz SKT.TCBCache+S.TCB.OUTUSED
* stz SKT.TCBCache+S.TCB.OUTUSED+1
ldx #3
.1 lda A2osX.TIMER16,x
.2 lda A2osX.TIMER16,x
sta SKT.TCBCache+S.TCB.SEQNUM,x
dex
bpl .1
bpl .2
>PUSHW K.TCP.WSIZE
>PUSHWI K.TCP.WSIZE
>PUSHBI 0
>SYSCALL GetMem
bcs .9
@ -146,7 +160,7 @@ SKT.New.TCP >PUSHW S.TCB
ldy #S.SOCKET.SQ.hInMem
sta (ZPTmpPtr3),y
>PUSHW K.TCP.WSIZE
>PUSHWI K.TCP.WSIZE
>PUSHBI 0
>SYSCALL GetMem
bcs .9
@ -155,9 +169,12 @@ SKT.New.TCP >PUSHW S.TCB
ldy #S.SOCKET.SQ.hOutMem
sta (ZPTmpPtr3),y
jsr SKT.StoreTCB
ldx #S.TCB-1
jsr TCP.OUT.SYN
.3 lda SKT.TCBCache,x
.4 sta $ffff,x
dex
bpl .3
clc
.9 rts
@ -329,7 +346,6 @@ SKT.AcceptA jsr SKT.GetA.I
.99 lda #ERR.SKT.BAD
sec
.9 rts
*/--------------------------------------
* #SKT.MkNodA
* Create a new file from TCP socket
@ -637,22 +653,19 @@ SKT.AddToQueueA sta .2+1
* Dst : hOutMem/OUTTAIL
*--------------------------------------
SKT.AckDataToSktOut
jsr SKT.GetTCB
ldy #S.TCP.ACK.NUMBER+3 Get new ACK number from FrameIn...
ldx #0 Substract old Ack from socket
ldx #3 Substract old SEQ from socket
sec
.1 lda (ZPFrameInPtr),y
pha
sbc SKT.TCBCache+S.TCB.ACKNUM,x
sbc SKT.TCBCache+S.TCB.SEQNUM,x
sta TmpDWord,x
pla
sta SKT.TCBCache+S.TCB.ACKNUM,x
sta SKT.TCBCache+S.TCB.SEQNUM,x
dey
inx
cpx #4
dex
bpl .1
lda SKT.TCBCache+S.TCB.OUTTAIL
@ -683,7 +696,8 @@ SKT.AckDataToSktOut
sbc TmpDWord+1
sta SKT.TCBCache+S.TCB.OUTUSED+1
jmp SKT.StoreTCB
clc
rts
*--------------------------------------
* From TCP.IN
* Src : ZPDataInPtr/ZPDataInLen

View File

@ -57,13 +57,13 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
.5 ldy #S.SOCKET.DST.ADDR
.6 lda SKT.Template,y regular socket, check remote ADDR/PORT
.6 lda SKT.Template,y regular socket, check remote ADDR/PORT
cmp (ZPPtrSKT),y
bne .7
iny
cpy #S.SOCKET.DST.PORT+2
bne .6
stx hSocket
ldy #S.TCP.OPTIONS
@ -77,6 +77,7 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
bcs *
asl
tax
jmp (L.TCP.IN.JMP,x)
.7 lda ZPPtrSKT
@ -105,45 +106,38 @@ TCP.IN.JMP.CLOSED
TCP.IN.JMP.LISTEN
lda #S.SOCKET.SOCK.STREAM
sta SKT.Template+S.SOCKET.SOCK
stz SKT.Template+S.SOCKET.SO
stz SKT.Template+S.SOCKET.TCP.STATUS
>PUSHW L.SKT.Template
jsr SKT.New
bcs .9
jsr SKT.New.Listen
bcs .99
phy
pha
sty .1+1
sta .2+1
txa
jsr SKT.AddToQueueA
pla
sta ZPPtrSKT+1
pla
bcs .99 Queued successfully ?
.1 lda #$ff
sta ZPPtrSKT
bcc .3 Queued successfully ?
.2 lda #$ff
sta ZPPtrSKT+1
lda #0 error
sta (ZPPtrSKT) clear this socket
lda #ERR.SKT.OOS
.9 rts
.3 jsr SKT.GetTCB
ldy #S.TCP.SEQ.NUMBER
ldy #S.TCP.SEQ.NUMBER+3
ldx #3
sec
.1 lda (ZPFrameInPtr),y Set ACK=SEQ+1 for new socket...
.3 lda (ZPFrameInPtr),y Set ACK=SEQ+1 for new socket...
adc #0
sta SKT.TCBCache+S.TCB.ACKNUM,x
iny
dey
dex
bpl .1
bpl .3
jsr SKT.StoreTCB
@ -156,11 +150,18 @@ TCP.IN.JMP.LISTEN
lda #S.SOCKET.TCP.STATUS.SYNRCVD
sta (ZPPtrSKT),y
clc
rts
.9 lda #0 error
sta (ZPPtrSKT) clear this socket
lda #ERR.SKT.OOS
.99 rts
*--------------------------------------
TCP.IN.JMP.SYNSENT
clv
bra *
ldy #S.TCP.OPTIONS only accept SYN.ACK packet
lda (ZPFrameInPtr),y
cmp #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
@ -186,7 +187,7 @@ TCP.IN.JMP.SYNRCVD
jsr SKT.GetTCB
ldx #3
ldy #S.TCP.ACK.NUMBER
ldy #S.TCP.ACK.NUMBER+3
sec
@ -195,7 +196,7 @@ TCP.IN.JMP.SYNRCVD
sta SKT.TCBCache+S.TCB.SEQNUM,x
eor (ZPFrameInPtr),y
bne .8
iny
dey
dex
bpl .1
@ -204,7 +205,7 @@ TCP.IN.JMP.SYNRCVD
ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.ESTBLSH
sta (ZPPtrSKT),y
.8 clc
rts
*--------------------------------------
@ -218,19 +219,19 @@ TCP.IN.JMP.ESTBLSH
jsr SKT.AckDataToSktOut
.1 lda ZPDataInLen
.1 jsr TCP.SetDataInPtrAndLen
lda ZPDataInLen
ora ZPDataInLen+1
beq .2 No data in this incoming frame...
jsr TCP.SetDataInPtrAndLen
jsr SKT.AddDataToSktIn
bcs .9
.2 ldy #S.TCP.OPTIONS
lda (ZPFrameInPtr),y
bit #S.TCP.OPTIONS.FIN
beq .1
beq .8
ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.CLWAIT
@ -241,9 +242,7 @@ TCP.IN.JMP.ESTBLSH
ora #S.TCP.OPTIONS.ACK
sta (ZPPtrSKT),y
.8 jsr SKT.StoreTCB
clc
.8 jmp TCP.OUT.I
.9 rts
*--------------------------------------
TCP.IN.JMP.CLWAIT
@ -293,11 +292,11 @@ TCP.OUT.SYN >LDYAI 0
bcs .9
ldx #3
ldy #S.TCP.SEQ.NUMBER
ldy #S.TCP.SEQ.NUMBER+3
.1 lda SKT.TCBCache+S.TCB.SEQNUM,x
sta (ZPFrameOutPtr),y
iny
dey
dex
bpl .1
@ -322,10 +321,6 @@ TCP.OUT.SYN >LDYAI 0
lda #0
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.SYNSENT
sta (ZPPtrSKT),y
clc
.9 rts
*--------------------------------------
@ -333,24 +328,15 @@ TCP.OUT.SYNACK >LDYAI 0
jsr TCP.NewFrame
bcs .9
ldx #3
ldy #S.TCP.SEQ.NUMBER
ldx #7
ldy #S.TCP.SEQ.NUMBER+7
.1 lda SKT.TCBCache+S.TCB.SEQNUM,x
sta (ZPFrameOutPtr),y
iny
dey
dex
bpl .1
ldy #S.TCP.ACK.NUMBER
ldx #3
.3 lda SKT.TCBCache+S.TCB.ACKNUM,x
sta (ZPFrameOutPtr),y
iny
dex
bpl .3
ldy #S.TCP.OPTIONS
lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK
sta (ZPFrameOutPtr),y
@ -369,16 +355,12 @@ TCP.OUT.SYNACK >LDYAI 0
lda #0
sta (ZPPtrSKT),y
ldy #S.SOCKET.TCP.STATUS
lda #S.SOCKET.TCP.STATUS.SYNSENT
sta (ZPPtrSKT),y
clc
.9 rts
*--------------------------------------
TCP.OUT jsr SKT.GetTCB
lda SKT.TCBCache+S.TCB.OUTUSED+1
TCP.OUT.I lda SKT.TCBCache+S.TCB.OUTUSED+1
ldy SKT.TCBCache+S.TCB.OUTUSED
bne .1
@ -491,19 +473,13 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP
lda #$50 Header size = 5 DWORDS
sta (ZPFrameOutPtr),y
ldy #S.TCB.INFREE
lda (ZPPtrSKT),y
pha
iny
lda (ZPPtrSKT),y
ldy #S.TCP.WINDOW
lda SKT.TCBCache+S.TCB.INFREE+1
sta (ZPFrameOutPtr),y
iny
pla
lda SKT.TCBCache+S.TCB.INFREE
sta (ZPFrameOutPtr),y
clc
.9 rts
*--------------------------------------

View File

@ -112,7 +112,7 @@ CS.RUN.INIT ldx #3
beq .3
* jsr CS.RUN.CLIENT
jsr CS.RUN.CLIENT
.3 ldy #SktIndex
lda (pData),y

View File

@ -20,7 +20,7 @@ K.IrqHandlerAuxLC
pha
and #$10 BRK?
beq .10
bra *
lda K.IrqMgr.A
.82 jmp (K.IrqMgrOldFFFE)