mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-16 18:30:26 +00:00
Kernel version 0.9 : TCP Client sockets
This commit is contained in:
parent
eb7b12f642
commit
6a05b3a3bb
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
@ -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
|
||||
|
@ -210,7 +210,7 @@ READBLOCK.RxOK and /PP.RxEvent.Brdcast
|
||||
adc #2
|
||||
tay
|
||||
pla
|
||||
adc #2
|
||||
adc #0
|
||||
|
||||
>PUSHYA Size+2
|
||||
>PUSHBI 0
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
*--------------------------------------
|
||||
|
@ -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
|
||||
|
@ -20,7 +20,7 @@ K.IrqHandlerAuxLC
|
||||
pha
|
||||
and #$10 BRK?
|
||||
beq .10
|
||||
|
||||
bra *
|
||||
lda K.IrqMgr.A
|
||||
.82 jmp (K.IrqMgrOldFFFE)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user