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

@ -44,10 +44,11 @@ LIBTCPIP.HST.GETBYADDR .EQ 30
LIBTCPIP.SKT.New .EQ 32
LIBTCPIP.SKT.CLOSEA .EQ 34
LIBTCPIP.SKT.GETTABLE .EQ 36
LIBTCPIP.SKT.GETTABLE .EQ 36
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.Read .EQ 46

View File

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

View File

@ -65,6 +65,12 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
bne .6
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
lda (ZPPtrSKT),y
asl
@ -85,6 +91,11 @@ TCP.IN jsr IP.FillSKT.TemplateSrcDst
.9 clc Discard frame
rts
*--------------------------------------
TCP.IN.RST txa
jsr SKT.CloseA
clc
rts
*--------------------------------------
TCP.IN.JMP.CLOSED
clc
rts

View File

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

View File

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

View File

@ -12,6 +12,12 @@ AUTO 6
.INB /A2OSX.DEV/INC/A2OSX.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)
*--------------------------------------
CS.START cld
@ -20,7 +26,7 @@ CS.START cld
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
@ -31,52 +37,236 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
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
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLibYA
bcs .99
sta hLIBTCPIP
>PUSHWI S.IP.PROTOCOL.TCP
>PUSHWI TCP.PORT.TELNET
>LIBCALL hLIBTCPIP,LIBTCPIP.NewSrvSocket
bcs .99
sta hSrvSocket
clc
.99 rts
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
rts
*--------------------------------------
CS.RUN >PUSHB hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.SrvSocketAccept
CS.RUN jsr Init.Timeout
>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
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
rts
*--------------------------------------
CS.DOEVENT clc
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT >PUSHB hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.CloseSocket
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
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA
lda hLIBTCPIP
>SYSCALL UnloadLibA
clc
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
*--------------------------------------
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
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
SAVE SBIN/TELNETD.S
ASM

View File

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

View File

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

View File

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