Kernel version 0.9 : LIBTCPIP development resuming....

This commit is contained in:
Rémy GIBERT 2017-03-07 17:40:32 +01:00
parent 8e863610f5
commit 30cdf5a6c8
12 changed files with 301 additions and 49 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -47,7 +47,8 @@ LIBTCPIP.SKT.CLOSEA .EQ 34
LIBTCPIP.SKT.GETTABLE .EQ 36 LIBTCPIP.SKT.GETTABLE .EQ 36
LIBTCPIP.SKT.GETA .EQ 38 LIBTCPIP.SKT.GETA .EQ 38
LIBTCPIP.SKT.ACCEPTA .EQ 40 LIBTCPIP.SKT.AcceptA .EQ 40
LIBTCPIP.SKT.MkNodA .EQ 42
LIBTCPIP.SKT.Write .EQ 44 LIBTCPIP.SKT.Write .EQ 44
LIBTCPIP.SKT.Read .EQ 46 LIBTCPIP.SKT.Read .EQ 46

View File

@ -284,6 +284,19 @@ SKT.AcceptA jsr SKT.GetA.I
.99 lda #ERR.SKT.BAD .99 lda #ERR.SKT.BAD
sec sec
.9 rts .9 rts
*/--------------------------------------
* #SKT.MkNodA
* Create a new file from TCP socket
* ##In :
* A = hSocket
* ##Out :
* A = hFile
*\--------------------------------------
SKT.MkNodA
sec
rts
*/-------------------------------------- */--------------------------------------
* #SKT.Write (DGRAM,STREAM,RAW) * #SKT.Write (DGRAM,STREAM,RAW)
* Send block of data * Send block of data
@ -292,13 +305,12 @@ SKT.AcceptA jsr SKT.GetA.I
* PUSHW = pBuf * PUSHW = pBuf
* PUSHW = len * PUSHW = len
* ##Out : * ##Out :
* A = hFrame
*\-------------------------------------- *\--------------------------------------
SKT.Write >PULLW ZPDataInLen SKT.Write >PULLW ZPDataInLen
>PULLW ZPDataInPtr >PULLW ZPDataInPtr
>PULLB hSocket >PULLB hSocket
jsr SKT.GetA.I SKT.Write.I jsr SKT.GetA.I
bcs .9 bcs .9
cmp #S.SOCKET.SOCK.DGRAM cmp #S.SOCKET.SOCK.DGRAM
@ -435,10 +447,19 @@ SKT.ReadA jsr SKT.GetA.I
* PUSHB = hSocket * PUSHB = hSocket
* PUSHB = Char * PUSHB = Char
* ##Out : * ##Out :
* A = char
*\-------------------------------------- *\--------------------------------------
SKT.PutC sec SKT.PutC >PULLB TmpByte
rts
>PULLB hSocket
lda #1
sta ZPDataOutLen
stz ZPDataOutLen+1
>LDYA L.TmpByte
>STYA ZPDataOutPtr
jmp SKT.Write.I
*/-------------------------------------- */--------------------------------------
* #SKT.PutS (STREAM) * #SKT.PutS (STREAM)
* Write Line in pBuf * Write Line in pBuf
@ -447,9 +468,17 @@ SKT.PutC sec
* PUSHW = PSTR * PUSHW = PSTR
* ##Out : * ##Out :
*\-------------------------------------- *\--------------------------------------
SKT.PutS SKT.PutS >PULLW ZPDataOutPtr
sec lda (ZPDataOutPtr)
rts
sta ZPDataOutLen
stz ZPDataOutLen+1
inc ZPDataOutPtr
bne .1
inc ZPDataOutPtr+1
.1 jmp SKT.Write.I
*/-------------------------------------- */--------------------------------------
* #SKT.GetCA (STREAM) * #SKT.GetCA (STREAM)
* Read a Char From Stream in A * Read a Char From Stream in A
@ -458,8 +487,21 @@ SKT.PutS
* ##Out : * ##Out :
* A = char * A = char
*\-------------------------------------- *\--------------------------------------
SKT.GetCA sec SKT.GetCA sta hSocket
rts stz bTextMode
lda #1
sta ZPDataOutLen
stz ZPDataOutLen+1
>LDYA L.TmpByte
>STYA ZPDataOutPtr
jsr SKT.Read.I
bcs .9
lda TmpByte
.9 rts
*/-------------------------------------- */--------------------------------------
* #SKT.GetS (STREAM) * #SKT.GetS (STREAM)
* Read a CR terminated Line in pBuf * Read a CR terminated Line in pBuf
@ -488,7 +530,7 @@ SKT.Read clc
>PULLW ZPDataOutPtr >PULLW ZPDataOutPtr
>PULLB hSocket >PULLB hSocket
jsr SKT.GetA.I SKT.Read.I jsr SKT.GetA.I
bcs .99 bcs .99
cmp #S.SOCKET.SOCK.STREAM cmp #S.SOCKET.SOCK.STREAM
bne .90 bad skt bne .90 bad skt

View File

@ -65,6 +65,12 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
bne .6 bne .6
stx hSocket stx hSocket
ldy #S.TCP.OPTIONS
lda (ZPFrameInPtr),y
and #S.TCP.OPTIONS.RST RST ? go Kill this socket.
bne TCP.IN.RST
ldy #S.SOCKET.TCP.STATUS ldy #S.SOCKET.TCP.STATUS
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
asl asl
@ -85,6 +91,11 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
.9 clc Discard frame .9 clc Discard frame
rts rts
*-------------------------------------- *--------------------------------------
TCP.IN.RST txa
jsr SKT.CloseA
clc
rts
*--------------------------------------
TCP.IN.JMP.CLOSED TCP.IN.JMP.CLOSED
clc clc
rts rts

View File

@ -76,8 +76,8 @@ CS.START cld
.DA SKT.GETTABLE .DA SKT.GETTABLE
.DA SKT.GETA .DA SKT.GETA
.DA SKT.ACCEPTA .DA SKT.AcceptA
.DA $FFFF .DA SKT.MkNodA
.DA SKT.Write .DA SKT.Write
.DA SKT.Read .DA SKT.Read
@ -95,6 +95,7 @@ L.DNS.MSG .DA DNS.MSG
L.ARP.CACHE .DA ARP.CACHE L.ARP.CACHE .DA ARP.CACHE
L.DNS.CACHE .DA DNS.CACHE L.DNS.CACHE .DA DNS.CACHE
L.SKT.Template .DA SKT.Template L.SKT.Template .DA SKT.Template
L.TmpByte .DA TmpByte
L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED
.DA TCP.IN.JMP.LISTEN .DA TCP.IN.JMP.LISTEN
.DA TCP.IN.JMP.SYNSENT .DA TCP.IN.JMP.SYNSENT
@ -294,6 +295,7 @@ DNS.TmpCache .BS S.DNSCACHE
ARP.TmpCache .BS S.ARP ARP.TmpCache .BS S.ARP
SKT.Template .BS S.SOCKET.TEMPLATE SKT.Template .BS S.SOCKET.TEMPLATE
SKT.TCBCache .BS S.SOCKET SKT.TCBCache .BS S.SOCKET
TmpByte .BS 1
TmpDWord .BS 4 TmpDWord .BS 4
TmpOffset .BS 2 TmpOffset .BS 2
hFrameIn .BS 1 hFrameIn .BS 1

View File

@ -105,7 +105,7 @@ CS.RUN.INIT ldx #3
ldy #hSocket ldy #hSocket
lda (pData),y lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ACCEPTA >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.AcceptA
bcs .11 bcs .11
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GETA >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GETA
>STYA ZPSktPtr >STYA ZPSktPtr

View File

@ -12,6 +12,12 @@ AUTO 6
.INB /A2OSX.DEV/INC/A2OSX.I .INB /A2OSX.DEV/INC/A2OSX.I
.INB /A2OSX.DEV/INC/LIBTCPIP.I .INB /A2OSX.DEV/INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
TIMEOUT.MAX .EQ 30 30 sec.
CONN.MAX .EQ 16
*--------------------------------------
ZPIPCfgPtr .EQ ZPBIN
ZPSktPtr .EQ ZPBIN+2
*--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
@ -20,7 +26,7 @@ CS.START cld
.DA #1 BIN Layout Version 1 .DA #1 BIN Layout Version 1
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA 0 .DA DS.END-DS.START Data Segment to Allocate
.DA 0 .DA 0
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
@ -31,52 +37,236 @@ CS.START cld
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.Socket .DA Socket
L.MSG.TCPWAIT .DA MSG.TCPWAIT
L.MSG.INITOK .DA MSG.INITOK
L.MSG.TCPIPERR .DA MSG.TCPIPERR
L.MSG.SKTERR .DA MSG.SKTERR
L.MSG.ABORT .DA MSG.ABORT
L.MSG.INCOMING .DA MSG.INCOMING
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.LIBTCPIP CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLibYA >SYSCALL LoadLibYA
bcs .99
sta hLIBTCPIP sta hLIBTCPIP
>PUSHWI S.IP.PROTOCOL.TCP lda (pPs)
>PUSHWI TCP.PORT.TELNET ora #S.PS.F.EVENT Now accept events
>LIBCALL hLIBTCPIP,LIBTCPIP.NewSrvSocket sta (pPs)
bcs .99
sta hSrvSocket
clc clc
.99 rts rts
*-------------------------------------- *--------------------------------------
CS.RUN >PUSHB hSrvSocket CS.RUN jsr Init.Timeout
>LIBCALL hLIBTCPIP,LIBTCPIP.SrvSocketAccept
>LDYA L.MSG.TCPWAIT
>SYSCALL CPrintFYA
.1 >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
bcs .99
>STYA ZPIPCfgPtr
lda (ZPIPCfgPtr) Configured ?
bmi CS.RUN.INIT
>SYSCALL Sleep
jsr Wait.Timeout
bcc .1
>SYSCALL GetC
bcs .1
cmp #$03
bne .1
jmp CS.RUN.ABORT
.99 >LDYA L.MSG.TCPIPERR
>SYSCALL CPrintFYA
lda #SYSMGR.ERRSYN
sec
rts
CS.RUN.INIT ldx #3
ldy #S.IPCFG.IP+3
.1 lda (ZPIPCfgPtr),y
sta Socket.Src.Addr,x
dey
dex
bpl .1
>PUSHW L.Socket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New
bcs .9
txa
ldy #hSrvSocket
sta (pData),y
>LDYA L.MSG.INITOK
>SYSCALL CPrintFYA
.2 >SYSCALL Sleep
jsr CS.RUN.SERVER
bcs CS.RUN.ERR
ldy #SktIndex
lda (pData),y
tay
lda (pData),y hSockets
beq .3
* jsr CS.RUN.CLIENT
.3 ldy #SktIndex
lda (pData),y
inc
cmp #CONN.MAX
bne .4
lda #0
.4 sta (pData),y
bra .2
.9 >LDYA L.MSG.SKTERR
>SYSCALL CPrintFYA
lda #SYSMGR.ERRSYN
sec
rts
CS.RUN.ABORT >LDYA L.MSG.ABORT
>SYSCALL CPrintFYA
lda #0
CS.RUN.ERR sec
rts
*--------------------------------------
CS.RUN.SERVER ldy #hSrvSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.AcceptA
bcs .8 bcs .8
pha
ldy #hSockets
ldx #CONN.MAX
.1 lda (pData),y
beq .2
iny
dex
bne .1
pla
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CloseA
bra .8
.2 pla
sta (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetA
>STYA ZPSktPtr
ldx #3
ldy #S.SOCKET.DST.ADDR+3
.3 >PUSHB (ZPSktPtr),y
dey
dex
bpl .3
>LDYA L.MSG.INCOMING
>SYSCALL CPrintFYA
.8 clc
.9 rts
*--------------------------------------
CS.RUN.CLIENT >PUSHA hSocket
sta .1+1
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetCA
bcs .8
sta .2+1
>SYSCALL PutCA
.1 lda #$ff
>PUSHA
.2 lda #$ff
>PUSHA
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.PutC
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT clc CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT >PUSHB hSrvSocket CS.QUIT ldx #CONN.MAX
>LIBCALL hLIBTCPIP,LIBTCPIP.CloseSocket 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
lda hLIBTCPIP lda hLIBTCPIP
>SYSCALL UnloadLibA >SYSCALL UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
Init.Timeout ldy #TimeOut
lda #TIMEOUT.MAX
sta (pData),y
rts
*--------------------------------------
Wait.TimeOut sec
ldy #TimeOut
lda (pData),y
beq .9
clc
.9 rts
*--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
LIBTCPIP >PSTR "libtcpip.o" LIBTCPIP >PSTR "libtcpip.o"
MSG.TCPWAIT >CSTR "TELNETD:Waiting for TCP/IP initializing...\r\n"
MSG.INITOK >CSTR "TELNETD:Init Ok, Listening.\r\n"
MSG.TCPIPERR >CSTR "TELNETD:TCP/IP Not initialized properly\r\n"
MSG.SKTERR >CSTR "TELNETD:Listen Error\r\n"
MSG.ABORT >CSTR "TELNETD:User Aborted\r\n"
MSG.INCOMING >CSTR "TELNETD:Incoming Connection From : %d.%d.%d.%d\r\n"
hLIBTCPIP .BS 1 hLIBTCPIP .BS 1
hSrvSocket .BS 1
*-------------------------------------- *--------------------------------------
Socket .DA #S.SOCKET.SOCK.STREAM
.DA #S.SOCKET.SO.ACCEPTCONN
.DA #S.SOCKET.TCP.STATUS.LISTEN
.BS 1
Socket.Src.Addr .BS 4
Socket.Src.Port .DA 23
Socket.Dst.Addr .BS 4
Socket.Dst.Port .BS 2
*--------------------------------------
.DUMMY
.OR 0
DS.START
hSockets .BS CONN.MAX pData
SktIndex .BS 1
hSrvSocket .BS 1
TimeOut .BS 1
DS.END
.ED
*--------------------------------------
MAN MAN
SAVE SBIN/TELNETD.S SAVE SBIN/TELNETD.S
ASM ASM

View File

@ -1,6 +1,6 @@
PR#3 PR#3
PREFIX /A2OSX.SRC PREFIX /A2OSX.SRC
NEW LOMEM $900
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
@ -100,7 +100,7 @@ K.GetDevStatusA jsr K.GetDevByIDA
jmp (ZPPtr1) jmp (ZPPtr1)
*/-------------------------------------- */--------------------------------------
* #MkNodYA * #MkNodYA
* return a S.FILE for a given Device NAME * return a hFile for a given Device Name
* ##IN: * ##IN:
* Y,A=DevName * Y,A=DevName
* ##OUT: * ##OUT:
@ -164,7 +164,7 @@ K.MkNodYA jsr K.GetDevByNameYA Ptr1=NAME
.4 jmp $ffff .4 jmp $ffff
*/-------------------------------------- */--------------------------------------
* #MkNodA * #MkNodA
* return a S.FILE for a given Socket * return a hFile for a given Socket
* ##IN: * ##IN:
* A=hSocket * A=hSocket
* ##OUT: * ##OUT:
@ -186,7 +186,7 @@ K.MKFIFO >PUSHWI 256
jsr K.GetMem jsr K.GetMem
bcs .99 bcs .99
phx save FIFO buffer stx .1+1 save FIFO buffer
>PUSHWI S.NODE.FIFO >PUSHWI S.NODE.FIFO
>PUSHBI S.MEM.F.INIT0 >PUSHBI S.MEM.F.INIT0
@ -201,15 +201,14 @@ K.MKFIFO >PUSHWI 256
sta (ZPPtr1),y sta (ZPPtr1),y
iny S.NODE.FIFO.hMem iny S.NODE.FIFO.hMem
pla .1 lda #$ff Self Modified
sta (ZPPtr1),y sta (ZPPtr1),y
txa txa
clc clc
rts rts
.9 plx get back FIFO buffer .9 pha save error code
pha save error code lda .1+1 get back FIFO buffer
txa
jsr K.FreeMemA jsr K.FreeMemA
pla pla
sec sec

View File

@ -159,7 +159,7 @@ Prints Pascal/C-Style String
+ Y,A = Ptr to S.DEVINFO + Y,A = Ptr to S.DEVINFO
#MkNodYA #MkNodYA
return a S.FILE for a given Device NAME return a hFile for a given Device Name
##IN: ##IN:
+ Y,A=DevName + Y,A=DevName
@ -169,7 +169,7 @@ return a S.FILE for a given Device NAME
+ A = hFILE + A = hFILE
#MkNodA #MkNodA
return a S.FILE for a given Socket return a hFile for a given Socket
##IN: ##IN:
+ A=hSocket + A=hSocket

View File

@ -110,6 +110,15 @@
##Out : ##Out :
+ A = hSocket + A = hSocket
#SKT.MkNodA
+ Create a new file from TCP socket
##In :
+ A = hSocket
##Out :
+ A = hFile
#SKT.Write (DGRAM,STREAM,RAW) #SKT.Write (DGRAM,STREAM,RAW)
+ Send block of data + Send block of data
@ -119,7 +128,6 @@
+ PUSHW = len + PUSHW = len
##Out : ##Out :
+ A = hFrame
#SKT.ReadA (DGRAM,RAW) #SKT.ReadA (DGRAM,RAW)
@ -137,7 +145,6 @@
+ PUSHB = Char + PUSHB = Char
##Out : ##Out :
+ A = char
#SKT.PutS (STREAM) #SKT.PutS (STREAM)
+ Write Line in pBuf + Write Line in pBuf