Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-10-10 17:39:22 +02:00
parent 8c5ba4b1a7
commit 4986ce68c6
10 changed files with 242 additions and 165 deletions

View File

@ -52,7 +52,7 @@
**Out:**
Y,A = PTR to DNS.CACHE
# SKT.Socket
# Socket
Create a new socket
## C
@ -67,7 +67,7 @@ Create a new socket
CC: A = hSOCKET
CS: A = EC
# SKT.bind
# Bind
bind a name to a socket
## C
@ -82,7 +82,7 @@ bind a name to a socket
CC: A = hSOCKET
CS: A = EC
# SKT.connect
# Connect
Iinitiate a connection on a socket
## C
@ -97,7 +97,7 @@ Iinitiate a connection on a socket
CC: A = hSOCKET
CS: A = EC
# SKT.listen
# Listen
Listen for connections on a socket
## C
@ -110,7 +110,7 @@ Listen for connections on a socket
**Out:**
CS: A = EC
# SKT.Accept
# Accept
Accept a connection on a socket
## C
@ -123,19 +123,19 @@ Accept a connection on a socket
**Out:**
A = hSocket
# SKT.Close
# Shutdown
Close socket
## C
`int close(int fd);`
`int shutdown(int fd);`
## ASM
**In:**
`lda fd`
`>LIBCALL hLIBTCPIP,LIBTCPIP.close`
`>LIBCALL hLIBTCPIP,LIBTCPIP.shutdown`
**Out:**
# SKT.Read (STREAM)
# Read (STREAM)
## C
`int skt.read(hFD fd, void *buf, int count);`
@ -150,7 +150,7 @@ Close socket
CC: Y,A = bytes read
CS: A = EC
# SKT.Write (STREAM)
# Write (STREAM)
## C
`int skt.write(hFD fd, const void *buf, int count);`
@ -165,11 +165,13 @@ CS: A = EC
CC: Y,A = bytes written
CS: A = EC
# SKT.Recv (RAW,DGRAM,SEQPACKET)
# Recv (RAW,DGRAM,SEQPACKET)
# SKT.RecvFrom (RAW,DGRAM,SEQPACKET)
hMem recv(hFD fd);
hMem recvfrom(hFD fd, struct sockaddr *addr);
# RecvFrom (RAW,DGRAM,SEQPACKET)
## C
`hMem recv(hFD fd);`
`hMem recvfrom(hFD fd, struct sockaddr *addr);`
## ASM
**In:**
@ -180,9 +182,9 @@ hMem recvfrom(hFD fd, struct sockaddr *addr);
CC: A = hMem
CS: A = EC
# SKT.Send (RAW,DGRAM,SEQPACKET)
# Send (RAW,DGRAM,SEQPACKET)
# SKT.SendTo (RAW,DGRAM,SEQPACKET)
# SendTo (RAW,DGRAM,SEQPACKET)
## C
`int skt.send(hFD fd, const void *buf, int count);`
@ -199,11 +201,11 @@ CS: A = EC
CC: Y,A = bytes written
CS: A = EC
# SKT.GetTable
# GetTable
Get socket table
## C
`void * skt.gettable();`
`void * gettable();`
## ASM
**In:**

Binary file not shown.

Binary file not shown.

View File

@ -36,10 +36,15 @@ CS.START cld
L.LIBTCPIP .DA LIBTCPIP
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
.DA MSG1.UDP
.DA MSG1.TCP
.DA MSG1.RAW
.DA MSG1.INV
L.MSG1.T .DA MSG1.T.RAW
.DA MSG1.T.DGRAM
.DA MSG1.T.SEQPKT
.DA MSG1.T.STREAM
.DA MSG1.T.INV
L.MSG1.P .DA MSG1.P.ICMP
.DA MSG1.P.TCP
.DA MSG1.P.UDP
.DA MSG1.P.INV
L.MSG1.S .DA MSG1.S.0
.DA MSG1.S.1
.DA MSG1.S.2
@ -51,6 +56,7 @@ L.MSG1.S .DA MSG1.S.0
.DA MSG1.S.8
.DA MSG1.S.9
.DA MSG1.S.10
.DA MSG1.S.INV
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
@ -64,7 +70,7 @@ CS.INIT >LDYA L.LIBTCPIP
CS.RUN >LDYA L.MSG0
>SYSCALL puts
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GETTABLE
>LIBCALL hLIBTCPIP,LIBTCPIP.GetTable
>STYA ZPPTR1
>STZ.G SocketCount
@ -72,15 +78,15 @@ CS.RUN >LDYA L.MSG0
.1 tay
lda (ZPPTR1),y
beq .7
>SYSCALL GetMemPtr
>STYA ZPPTR2
ldy #S.SOCKET.TCP.S
lda (ZPPTR2),y
cmp #S.SOCKET.TCP.S.TIMEWT+1
bcs *
tax
>PUSHB L.MSG1.S+1,x
>PUSHB L.MSG1.S,x
lda (ZPPTR2)
cmp #AF.INET
* bne .7
jsr CS.RUN.S
ldy #S.SOCKET.O
>PUSHB (ZPPTR2),y
@ -92,15 +98,10 @@ CS.RUN >LDYA L.MSG0
cpy #S.SOCKET.LOC.ADDR-1
bne .2
lda (ZPPTR2)
tax
cpx #S.SOCKET.T.SEQPACKET+1
bcc .3
ldx #S.SOCKET.T.SEQPACKET+1
.3 >PUSHB L.MSG1+1,x
>PUSHB L.MSG1,x
>PUSHBI 17
jsr CS.RUN.P
jsr CS.RUN.T
>PUSHBI 19
>LDYA L.MSG1
>SYSCALL printf
@ -112,6 +113,53 @@ CS.RUN >LDYA L.MSG0
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN.S ldy #S.SOCKET.TCP.S
lda (ZPPTR2),y
cmp #S.SOCKET.TCP.S.TIMEWT+1
bcc .1
lda #S.SOCKET.TCP.S.TIMEWT+1
.1 asl
tax
>PUSHB L.MSG1.S+1,x
>PUSHB L.MSG1.S,x
rts
*--------------------------------------
CS.RUN.P ldy #S.SOCKET.PROTO
lda (ZPPTR2),y
ldx #0
.3 cmp PROTO,x
beq .4
inx
cpx #PROTO.Cnt
bne .3
.4 txa
asl
tax
>PUSHB L.MSG1.P+1,x
>PUSHB L.MSG1.P,x
rts
*--------------------------------------
CS.RUN.T ldy #S.SOCKET.T
lda (ZPPTR2),y
tax
cpx #S.SOCKET.T.STREAM+1
bcc .5
ldx #S.SOCKET.T.STREAM+1
.5 >PUSHB L.MSG1.T+1,x
>PUSHB L.MSG1.T,x
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
@ -124,12 +172,19 @@ CS.QUIT lda hLIBTCPIP
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip"
MSG0 .AZ "Proto Local Remote Options Status"
MSG1 .AZ "%s %03d.%03d.%03d.%03d:%05D %03d.%03d.%03d.%03d:%05D %b %s\r\n"
MSG1.UDP .AZ "UDP"
MSG1.TCP .AZ "TCP"
MSG1.RAW .AZ "RAW"
MSG1.INV .AZ "???"
MSG0 .AZ "Type Prot Local Remote Options Status"
MSG1 .AZ "%s %s %03d.%03d.%03d.%03d:%05D %03d.%03d.%03d.%03d:%05D %b %s\r\n"
MSG1.T.RAW .AZ "RAW "
MSG1.T.DGRAM .AZ "DGRAM "
MSG1.T.SEQPKT .AZ "SEQPKT"
MSG1.T.STREAM .AZ "STREAM"
MSG1.T.INV .AZ "??? "
PROTO .DA #S.IP.PROTOCOL.ICMP,#S.IP.PROTOCOL.TCP,#S.IP.PROTOCOL.UDP
PROTO.Cnt .EQ *-PROTO
MSG1.P.ICMP .AZ "ICMP"
MSG1.P.TCP .AZ "TCP "
MSG1.P.UDP .AZ "UDP "
MSG1.P.INV .AZ "??? "
MSG1.S.0 .AZ "*"
MSG1.S.1 .AZ "LISTENING"
MSG1.S.2 .AZ "SYN-SENT"
@ -141,6 +196,7 @@ MSG1.S.7 .AZ "FIN-WAIT-1"
MSG1.S.8 .AZ "FIN-WAIT-2"
MSG1.S.9 .AZ "CLOSING"
MSG1.S.10 .AZ "TIME-WAIT"
MSG1.S.INV .AZ "???"
hLIBTCPIP .BS 1
*--------------------------------------
.DUMMY

View File

@ -10,6 +10,7 @@ AUTO 4,1
.INB INC/A2OSX.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
.INB INC/NET.TELNET.I
*--------------------------------------
TIMEOUT.MAX .EQ 40 4 sec.
BUFSIZE .EQ 256
@ -37,7 +38,10 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.Socket .DA Socket
L.SA.LOCAL .DA SA.LOCAL
L.SA.LOCAL.AD .DA SA.LOCAL+S.SOCKADDR.ADDR
L.SA.REMOTE .DA SA.REMOTE
L.SA.REMOTE.AD .DA SA.REMOTE+S.SOCKADDR.ADDR
L.MSG.IPKO .DA MSG.IPKO
L.MSG.USAGE .DA MSG.USAGE
L.MSG.UNKNOWN .DA MSG.UNKNOWN
@ -54,12 +58,7 @@ CS.INIT >LDYA L.LIBTCPIP
bcs .9
sta hLIBTCPIP
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
.9 rts
*--------------------------------------
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
@ -81,7 +80,7 @@ CS.RUN.IPOK ldy #S.PS.ARGC
jsr Init.Timeout
.2 >PUSHEA.G DST.IP
.2 >PUSHW L.SA.REMOTE.AD
lda #1
>SYSCALL GetArg
>PUSHYA
@ -114,21 +113,17 @@ CS.RUN.HOSTOK ldy #S.PS.ARGC
lda #2
>SYSCALL GetArg
>SYSCALL atoi
>STYA Socket.Dst.Port
>STYA SA.REMOTE+S.SOCKADDR.PORT
CS.RUN.PORTOK lda #1
>SYSCALL GetArg
>PUSHYA
>PUSHW Socket.Dst.Port
>PUSHW SA.REMOTE+S.SOCKADDR.PORT
ldy #DST.IP+3
ldx #3
.1 lda (pData),y
sta Socket.Dst.Addr,x
>PUSHA
dey
.1 >PUSHB SA.REMOTE+S.SOCKADDR.ADDR,x
dex
bpl .1
@ -136,26 +131,27 @@ CS.RUN.PORTOK lda #1
>LDYA L.MSG.HOSTOK
>SYSCALL printf
CS.RUN.OPENSKT 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
CS.RUN.OPENSKT >PUSHBI 0 no protocol
lda #S.SOCKET.T.STREAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
>STA.G hSocket
pha
>PUSHW L.SA.LOCAL
pla
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcc .2
>LDYA L.MSG.SKTKO
.9 >LDYA L.MSG.SKTKO
>SYSCALL puts
lda #K.E.SYN
sec
.9 rts
rts
.2 >STA.G hSocket
.2 >PUSHW L.SA.REMOTE
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
>LDYA L.MSG.SKTOK
>SYSCALL puts
@ -172,7 +168,7 @@ CS.RUN.LOOP >SLEEP
>PUSHWI BUFSIZE
>PUSHW ZPBufPtr
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Read
>LIBCALL hLIBTCPIP,LIBTCPIP.Read
bcc .1
tay
@ -205,7 +201,7 @@ CS.RUN.LOOP >SLEEP
>PUSHW ZPBufLen
>PUSHW ZPBufPtr
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write
>LIBCALL hLIBTCPIP,LIBTCPIP.Write
bcs CS.RUN.SKTERR
@ -255,7 +251,7 @@ CS.DOEVENT lda (pEvent)
CS.QUIT >LDA.G hSocket
beq .1
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.1 >LDA.G hBuf
beq .2
@ -293,19 +289,19 @@ MSG.SKTERR .AZ "Socket Error : $%h\r\n"
MSG.IOERR .AZ "I/O Error : $%h\r\n"
MSG.USER .AZ "User interrupt."
*--------------------------------------
Socket .DA #S.SOCKET.T.STREAM
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
*--------------------------------------
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 1
Socket.Src.Addr .BS 4
Socket.Src.Port .DA 0 Dynamic
Socket.Dst.Addr .BS 4
Socket.Dst.Port .DA TCP.PORT.TELNET
.BS 4 S.SOCKADDR.ADDR
.DA TCP.PORT.TELNET
*--------------------------------------
.DUMMY
.OR 0
DS.START
DST.IP .BS 4
hBuf .BS 1
hSocket .BS 1
TimeOut .BS 1

View File

@ -39,23 +39,23 @@ LIBTCPIP.DNS.GetCache .EQ 26
LIBTCPIP.HST.GetByName .EQ 28
LIBTCPIP.HST.GetByAddr .EQ 30
LIBTCPIP.SKT.Socket .EQ 32
LIBTCPIP.SKT.Bind .EQ 34
LIBTCPIP.SKT.Connect .EQ 36
LIBTCPIP.SKT.Listen .EQ 38
LIBTCPIP.Socket .EQ 32
LIBTCPIP.Bind .EQ 34
LIBTCPIP.Connect .EQ 36
LIBTCPIP.Listen .EQ 38
LIBTCPIP.SKT.Accept .EQ 40
LIBTCPIP.SKT.Close .EQ 42
LIBTCPIP.Accept .EQ 40
LIBTCPIP.shutdown .EQ 42
LIBTCPIP.SKT.Read .EQ 44
LIBTCPIP.SKT.Write .EQ 46
LIBTCPIP.SKT.Recv .EQ 48
LIBTCPIP.SKT.Send .EQ 50
LIBTCPIP.Read .EQ 44
LIBTCPIP.Write .EQ 46
LIBTCPIP.Recv .EQ 48
LIBTCPIP.Send .EQ 50
LIBTCPIP.SKT.RecvFrom .EQ 52
LIBTCPIP.SKT.SendTo .EQ 54
LIBTCPIP.RecvFrom .EQ 52
LIBTCPIP.SendTo .EQ 54
LIBTCPIP.SKT.GetTable .EQ 56
LIBTCPIP.GetTable .EQ 56
*--------------------------------------
ERR.SKT.OOS .EQ $BF
ERR.SKT.BUSY .EQ $BE
@ -69,8 +69,6 @@ ERR.ARP.PENDING .EQ $B5
UDP.PORT.DNS .EQ 53
UDP.PORT.PMAP .EQ 111
*--------------------------------------
TCP.PORT.TELNET .EQ 23
*--------------------------------------
S.IPCFG.STATUS .EQ 0
S.IPCFG.STATUS.OFF .EQ %00000000 TCPIP Unconfigured
S.IPCFG.STATUS.SDISC .EQ %00000001 DISCOVERY Sent

View File

@ -493,7 +493,7 @@ SET.IPCFG.I >LDYA L.DCB.NIC
.2 lda hDNSSocket
beq .3
jsr SKT.Close
jsr SKT.Shutdown
stz hDNSSocket
.3 lda IPCFG+S.IPCFG.DNS1

View File

@ -3,7 +3,7 @@ PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
*/--------------------------------------
* # SKT.Socket
* # Socket
* Create a new socket
* ## C
* `hFD socket(short int type, short int protocol);`
@ -101,7 +101,7 @@ SKT.Socket.FindFree
clc
rts
*/--------------------------------------
* # SKT.bind
* # Bind
* bind a name to a socket
* ## C
* `int bind(hFD fd, const struct sockaddr *addr);`
@ -121,13 +121,13 @@ SKT.bind >SYSCALL GetMemPtr
lda SKT.LOC.ADDR+S.SOCKADDR.PORT
bne .1
ldy SKT.LOC.ADDR+S.SOCKADDR.PORT+1
ldx SKT.LOC.ADDR+S.SOCKADDR.PORT+1
bne .1
jsr GetDynPort
sta SKT.LOC.ADDR+S.SOCKADDR.PORT+1
stx SKT.LOC.ADDR+S.SOCKADDR.PORT
sta SKT.LOC.ADDR+S.SOCKADDR.PORT
stx SKT.LOC.ADDR+S.SOCKADDR.PORT+1
.1 jsr SKT.FindMatchingLoc
bcc .9
@ -141,7 +141,7 @@ SKT.bind >SYSCALL GetMemPtr
sec
rts
*/--------------------------------------
* # SKT.connect
* # Connect
* Iinitiate a connection on a socket
* ## C
* `int connect(hFD fd, const struct sockaddr *addr);`
@ -231,7 +231,7 @@ SKT.connect.9 lda #ERR.SKT.BAD
sec
SKT.connect.99 rts
*/--------------------------------------
* # SKT.listen
* # Listen
* Listen for connections on a socket
* ## C
* `int listen(hFD fd);`
@ -268,7 +268,7 @@ SKT.listen >SYSCALL GetMemPtr
sec
rts
*/--------------------------------------
* # SKT.Accept
* # Accept
* Accept a connection on a socket
* ## C
* `hFD Accept(hFD fd);`
@ -314,17 +314,17 @@ SKT.Accept >SYSCALL GetMemPtr
sec
.9 rts
*/--------------------------------------
* # SKT.Close
* # Shutdown
* Close socket
* ## C
* `int close(int fd);`
* `int shutdown(int fd);`
* ## ASM
* **In:**
* `lda fd`
* `>LIBCALL hLIBTCPIP,LIBTCPIP.close`
* `>LIBCALL hLIBTCPIP,LIBTCPIP.shutdown`
* **Out:**
*\--------------------------------------
SKT.Close >SYSCALL GetMemPtr
SKT.shutdown >SYSCALL GetMemPtr
>STYA ZPPtrSKT
cmp #S.SOCKET.T.STREAM
@ -391,7 +391,7 @@ SKT.Close >SYSCALL GetMemPtr
jmp TCP.OUT Try to push FIN/ACK
*/--------------------------------------
* # SKT.Read (STREAM)
* # Read (STREAM)
* ## C
* `int skt.read(hFD fd, void *buf, int count);`
* ## ASM
@ -442,7 +442,7 @@ SKT.Read >SYSCALL GetMemPtr
sec
.99 rts
*/--------------------------------------
* # SKT.Write (STREAM)
* # Write (STREAM)
* ## C
* `int skt.write(hFD fd, const void *buf, int count);`
* ## ASM
@ -495,8 +495,8 @@ SKT.Write >SYSCALL GetMemPtr
sec
rts
*/--------------------------------------
* # SKT.Recv (RAW,DGRAM,SEQPACKET)
* # SKT.RecvFrom (RAW,DGRAM,SEQPACKET)
* # Recv (RAW,DGRAM,SEQPACKET)
* # RecvFrom (RAW,DGRAM,SEQPACKET)
* ## C
* `hMem recv(hFD fd);`
* `hMem recvfrom(hFD fd, struct sockaddr *addr);`
@ -601,8 +601,8 @@ SKT.Recv clc
sec
rts
*/--------------------------------------
* # SKT.Send (RAW,DGRAM,SEQPACKET)
* # SKT.SendTo (RAW,DGRAM,SEQPACKET)
* # Send (RAW,DGRAM,SEQPACKET)
* # SendTo (RAW,DGRAM,SEQPACKET)
* ## C
* `int skt.send(hFD fd, const void *buf, int count);`
* `int skt.sendto(hFD fd, const void *buf, int count, const struct sockaddr *addr);`
@ -669,10 +669,10 @@ SKT.Send.9 rts
SKT.Send.SEQPACKET
bra *
*/--------------------------------------
* # SKT.GetTable
* # GetTable
* Get socket table
* ## C
* `void * skt.gettable();`
* `void * gettable();`
* ## ASM
* **In:**
* `>LIBCALL hLIBTCPIP,LIBTCPIP.skt.GetTable`
@ -691,7 +691,7 @@ SKT.PullLocAddr >PULLW ZPTmpPtr1
.1 lda (ZPTmpPtr1),y
sta SKT.LOC.ADDR,y
dey
bne .1
bpl .1
rts
*--------------------------------------
SKT.PullRemAddr >PULLW ZPTmpPtr1
@ -701,24 +701,24 @@ SKT.PullRemAddr >PULLW ZPTmpPtr1
.1 lda (ZPTmpPtr1),y
sta SKT.REM.ADDR,y
dey
bpl .1
rts
*--------------------------------------
SKT.SetLocAddr ldy #S.SOCKET.LOC.ADDR
.1 lda SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
sta (ZPPtrSKT),y
iny
cpy #S.SOCKET.LOC.PORT+2
bne .1
rts
*--------------------------------------
SKT.SetLocAddr ldy #S.SOCKET.LOC.PORT+1
SKT.SetRemAddr ldy #S.SOCKET.REM.ADDR
.1 lda SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
.1 lda SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
sta (ZPPtrSKT),y
dey
cpy #S.SOCKET.LOC.ADDR-1
bne .1
rts
*--------------------------------------
SKT.SetRemAddr ldy #S.SOCKET.REM.PORT+1
.1 lda SKT.REM.ADDR-S.SOCKET.REM.ADDR,y
sta (ZPPtrSKT),y
dey
cpy #S.SOCKET.REM.ADDR-1
iny
cpy #S.SOCKET.REM.PORT+2
bne .1
rts
*--------------------------------------
@ -742,13 +742,13 @@ SKT.FindMatchingLocRem
.3 lda (ZPTmpPtr1),y
.4 cmp SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
.4 cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
bne .8
iny
cpy #S.SOCKET.REM.ADDR
bne .3
lda SKT.REM.ADDR
lda SKT.REM.ADDR+S.SOCKADDR.ADDR
cmp #$ff FF.FF.FF.FF, Broadcast ?
bne .5
@ -760,7 +760,7 @@ SKT.FindMatchingLocRem
ldy #S.SOCKET.REM.PORT Boradcast, check port only
.5 lda (ZPTmpPtr1),y
cmp SKT.REM.ADDR-S.SOCKET.REM.ADDR,y
cmp SKT.REM.ADDR+S.SOCKADDR.ADDR-S.SOCKET.REM.ADDR,y
bne .9 wrong remote host, exit....
iny
cpy #S.SOCKET.REM.PORT+2
@ -797,7 +797,7 @@ SKT.FindMatchingLoc
phy
.2 lda (ZPTmpPtr1),y
cmp SKT.LOC.ADDR-S.SOCKET.LOC.ADDR,y
cmp SKT.LOC.ADDR+S.SOCKADDR.ADDR-S.SOCKET.LOC.ADDR,y
bne .7
dey
cpy #S.SOCKET.LOC.ADDR-1

View File

@ -78,7 +78,7 @@ CS.START cld
.DA SKT.Listen
.DA SKT.Accept
.DA SKT.Close
.DA SKT.Shutdown
.DA SKT.Read
.DA SKT.Write
@ -308,8 +308,8 @@ FD.DSOCK .DA #S.FD.T.DSOCK
.BS 1 S.FD.DSOCK.HSKT
.DA #0 S.FD.DSOCK.OPEN
.DA #0 S.FD.DSOCK.CLOSE
.DA #LIBTCPIP.SKT.Recv
.DA #LIBTCPIP.SKT.Send
.DA #LIBTCPIP.Recv
.DA #LIBTCPIP.Send
.DA #0 S.FD.DSOCK.STATUS
*--------------------------------------
.DA #AF.INET S.SOCKET.AF
@ -322,8 +322,8 @@ FD.SSOCK .DA #S.FD.T.SSOCK
.BS 1 S.FD.DSOCK.HSKT
.DA #0 S.FD.DSOCK.OPEN
.DA #0 S.FD.DSOCK.CLOSE
.DA #LIBTCPIP.SKT.Read
.DA #LIBTCPIP.SKT.Write
.DA #LIBTCPIP.Read
.DA #LIBTCPIP.Write
.DA #0 S.FD.DSOCK.STATUS
*--------------------------------------
.DA #AF.INET S.SOCKET.AF

View File

@ -10,6 +10,7 @@ AUTO 4,1
.INB INC/A2OSX.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
.INB INC/NET.TELNET.I
*--------------------------------------
CONN.MAX .EQ 16
TIMEOUT.MAX .EQ 30 30 sec.
@ -38,7 +39,9 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.Socket .DA Socket
L.SA.LOCAL .DA SA.LOCAL
L.NOD.Template .DA NOD.Template
L.NOD.Name .DA NOD.Name
L.MSG.TCPWAIT .DA MSG.TCPWAIT
L.MSG.INITOK .DA MSG.INITOK
L.MSG.TCPIPERR .DA MSG.TCPIPERR
@ -85,16 +88,26 @@ CS.RUN jsr Init.Timeout
CS.RUN.INIT ldx #3
ldy #S.IPCFG.IP+3
.1 lda (ZPIPCfgPtr),y
sta Socket.Src.Addr,x
sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey
dex
bpl .1
>PUSHW L.Socket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New
>PUSHBI 0 no protocol
lda #S.SOCKET.T.STREAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
>STA.G hSrvSocket
pha
>PUSHW L.SA.LOCAL
pla
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9
>LDA.G hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Listen
bcs .9
>LDYA L.MSG.INITOK
>SYSCALL puts
@ -127,7 +140,7 @@ CS.RUN.ERR sec
*--------------------------------------
CS.RUN.SERVER >LDA.G hSrvSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Accept
>LIBCALL hLIBTCPIP,LIBTCPIP.Accept
bcs .8
>STA.G hClientSocket
@ -135,21 +148,23 @@ CS.RUN.SERVER >LDA.G hSrvSocket
ldx #CONN.MAX
.1 lda (pData),y
beq .2
beq CS.RUN.CLIENT
iny
dex
bne .1
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
bra .8
>LDA.G hClientSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.8 clc
rts
.2 sta (pData),y
CS.RUN.CLIENT sta (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Get
>SYSCALL GetMemPtr
>STYA ZPSktPtr
ldx #3
ldy #S.SOCKET.DST.ADDR+3
ldy #S.SOCKET.REM.ADDR+3
.3 >PUSHB (ZPSktPtr),y
dey
@ -163,8 +178,16 @@ CS.RUN.SERVER >LDA.G hSrvSocket
>SYSCALL printf
bcs .9
>PUSHB.G hClientSocket
>PUSHBI 1
>PUSHWI L.NOD.Template
>LDYAI L.NOD.Name
>SYSCALL sprintf
>PUSHB.G hClientSocket
>PUSHW 0
>LDYAI L.NOD.Name
>SYSCALL mknod
.8 clc
@ -190,7 +213,7 @@ CS.QUIT ldx #CONN.MAX
phx
phy
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
ply
plx
@ -201,7 +224,7 @@ CS.QUIT ldx #CONN.MAX
ldy #hSrvSocket
lda (pData),y
beq .3
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.3 lda hLIBTCPIP
>SYSCALL UnloadLib
@ -223,7 +246,7 @@ Wait.TimeOut sec
CS.END
*--------------------------------------
hLIBTCPIP .BS 1
LIBTCPIP .AZ "libtcpip.o"
LIBTCPIP .AZ "libtcpip"
MSG.TCPWAIT .AZ "TELNETD:Waiting for TCP/IP initializing..."
MSG.INITOK .AZ "TELNETD:Init Ok, Listening."
MSG.TCPIPERR .AZ "TELNETD:TCP/IP Not initialized properly"
@ -234,16 +257,18 @@ CMD.LINE .AS "${A2OSX}SBIN/GETTY "
.AZ " ${A2OSX}SBIN/LOGIN"
*--------------------------------------
Socket .DA #S.SOCKET.T.STREAM
.DA #S.SOCKET.O.ACCEPTCONN
.DA #S.SOCKET.TCP.S.LISTEN
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1
Socket.Src.Addr .BS 4
Socket.Src.Port .DA TCP.PORT.TELNET
Socket.Dst.Addr .BS 4
Socket.Dst.Port .BS 2
.BS 4 S.SOCKADDR.ADDR
.DA TCP.PORT.TELNET
*--------------------------------------
NOD.Name .AZ "TTY%h"
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
*--------------------------------------
NOD.Template .AZ "/DEV/TTY%h"
NOD.Name .AZ " "
*--------------------------------------
.DUMMY
.OR 0