NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF SBIN/TELNETD *-------------------------------------- .INB INC/MACROS.I .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. *-------------------------------------- ZPIPCfgPtr .EQ ZPBIN ZPSktPtr .EQ ZPBIN+2 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA #S.PS.F.EVENT S.PS.F .DA #0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #64 SS .DA #4 ZP SS .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP L.SA.LOCAL .DA SA.LOCAL 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 L.MSG.EXECERR .DA MSG.EXECERR L.NOD.Template .DA NOD.Template L.CMD.Template .DA CMD.Template .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP >SYSCALL LoadLib bcs .9 sta hLIBTCPIP .9 rts *-------------------------------------- CS.RUN jsr Init.Timeout >LDYA L.MSG.TCPWAIT >SYSCALL puts .1 >SLEEP >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? bcs .99 >STYA ZPIPCfgPtr lda (ZPIPCfgPtr) Configured ? bmi CS.RUN.INIT jsr Wait.Timeout bcs .99 ldy #S.PS.hStdIn lda (pPs),y >SYSCALL feof bcs .9 I/O err tay beq .1 >SYSCALL GetChar bcs .9 cmp #$03 bne .1 jmp CS.RUN.ABORT .99 pha >LDYA L.MSG.TCPIPERR >SYSCALL puts pla sec .9 rts CS.RUN.INIT ldx #3 ldy #S.IPCFG.IP+3 .1 lda (ZPIPCfgPtr),y sta SA.LOCAL+S.SOCKADDR.ADDR,x dey dex bpl .1 lda #1 >SYSCALL ArgV bcs CS.RUN.PORTOK >SYSCALL atoi >STYA SA.LOCAL+S.SOCKADDR.PORT CS.RUN.PORTOK >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 .2 >SLEEP >LDA.G hSrvSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Accept bcs .2 jsr CS.RUN.SERVER bcc .2 rts .9 pha >LDYA L.MSG.SKTERR >SYSCALL puts pla sec rts CS.RUN.ABORT >LDYA L.MSG.ABORT >SYSCALL puts lda #3 sec rts *-------------------------------------- CS.RUN.SERVER pha ldy #hSockets ldx #CONN.MAX .1 lda (pData),y bne .2 pla sta (pData),y bra CS.RUN.CLIENT .2 iny dex bne .1 pla >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown .8 clc rts *-------------------------------------- CS.RUN.CLIENT >SLEEP give some time for TCPIP SYN/ACK >STA.G hClientSocket >SYSCALL GetMemPtr >STYA ZPSktPtr ldx #3 ldy #S.SOCKET.REM.ADDR+3 .3 >PUSHB (ZPSktPtr),y dey dex bpl .3 >PUSHB.G hClientSocket >PUSHBI 5 >LDYA L.MSG.INCOMING >SYSCALL printf >PUSHB.G hClientSocket >PUSHBI 1 >PUSHW L.NOD.Template >LEA.G NodBuf >SYSCALL sprintf >PUSHB.G hClientSocket >PUSHW 0 >LEA.G NodBuf >SYSCALL mknod bcs .9 >STA.G hClientFile >PUSHEA.G NodBuf >PUSHBI 2 >PUSHW L.CMD.Template >LEA.G CmdBuf >SYSCALL sprintf >PUSHBI 0 >LEA.G CmdBuf >SYSCALL execl bcc .8 >PUSHA >PUSHBI 1 >LDYA L.MSG.EXECERR >SYSCALL printf .8 clc .9 rts *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? >LDA.G TimeOut beq .9 dec sta (pData),y .9 sec do not discard TIMER event rts *-------------------------------------- CS.QUIT ldx #CONN.MAX ldy #hSockets .1 lda (pData),y beq .2 phx phy >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown ply plx .2 iny dex bne .1 >LDA.G hSrvSocket beq .3 >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown .3 lda hLIBTCPIP beq .8 >SYSCALL UnloadLib .8 clc rts *-------------------------------------- Init.Timeout lda #TIMEOUT.MAX >STA.G TimeOut rts *-------------------------------------- Wait.TimeOut sec >LDA.G TimeOut beq .9 clc .9 rts *-------------------------------------- CS.END *-------------------------------------- hLIBTCPIP .BS 1 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." MSG.SKTERR .AZ "TELNETD:Listen Error." MSG.ABORT .AZ "TELNETD:User Aborted." MSG.INCOMING .AZ "TELNETD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n" MSG.EXECERR .AZ "TELNETD:ExecL failed $%h." *-------------------------------------- NOD.Template .AZ "/DEV/TTY%h" CMD.Template .AZ "${ROOT}SBIN/GETTY -E %s ${ROOT}SBIN/LOGIN" *-------------------------------------- SA.LOCAL .DA #AF.INET S.SOCKADDR.AF .BS 1 .BS 4 S.SOCKADDR.ADDR .DA TCP.PORT.TELNET *-------------------------------------- .DUMMY .OR 0 DS.START hSockets .BS CONN.MAX pData SktIndex .BS 1 hSrvSocket .BS 1 hClientSocket .BS 1 hClientFile .BS 1 TimeOut .BS 1 NodBuf .BS 11 CmdBuf .BS 65 DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/SBIN/TELNETD.S ASM