A2osX/SBIN/CIFSD.S.txt
2020-06-13 21:27:06 +02:00

349 lines
7.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1 Enable MASM3 auto line num
.LIST OFF
.OP 65C02 Target CPU, must match CPU level in header
.OR $2000 usualy $2000, but any value > $100 allowed
.TF sbin/cifsd
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.e.i
.INB inc/eth.i
.INB inc/libtcpip.i
.INB inc/net.smb.i
*--------------------------------------
TIMEOUT.MAX .EQ 100 20 sec.
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPIPCfgPtr .BS 2
hResp .BS 1
ZPRespPtr .BS 2
TimeOut .BS 1
ZS.END
.ED
*--------------------------------------
* 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
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.MSG.TCPIPERR .DA MSG.TCPIPERR
L.MSG.USAGE .DA MSG.USAGE
L.MSG.UNKNOWN .DA MSG.UNKNOWN
L.SMB.NegReq .DA SMB.NegReq
L.SMB.SessSetup .DA SMB.SessSetup
L.SMB.TreeConnReq .DA SMB.TreeConnReq
.DA 0
*--------------------------------------
* Called once at process creation
* Put code for loading LIB here
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
bcs .9
sta hLIBTCPIP
clc
.9 rts
*--------------------------------------
* Called until exit with CS
* if RUN exits with CC, RUN entered again
*--------------------------------------
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ?
bcs .9
>STYA ZPIPCfgPtr
lda (ZPIPCfgPtr) Configured ?
bmi .1
>LDYA L.MSG.TCPIPERR
>SYSCALL PutS
lda #E.SYN
sec
rts
.1 jsr CS.RUN.CheckArgs
bcs .90
jsr CS.RUN.Connect
>SLEEP
jsr CS.RUN.Negotiate
bcs .9
jsr CS.RUN.SessSetup
bcs .9
lda #0
clc
.9 rts
.90 >LDYA L.MSG.USAGE
>SYSCALL PutS
lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN.CheckArgs
ldy #S.PS.ARGC
lda (pPS),y
cmp #3
bcc .9
lda #TIMEOUT.MAX
sta TimeOut
.1 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR
lda #1
>SYSCALL ArgV
>PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
bcc .2
>SLEEP
lda TimeOut
bne .1
>PUSHW L.MSG.UNKNOWN
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
sec
.9 rts
.2 lda #AF.INET
>STA.G SA.LOCAL
>STA.G SA.REMOTE
ldy #S.IPCFG.IP+3
.3 lda (ZPIPCfgPtr),y
pha
dey
cpy #S.IPCFG.IP-1
bne .3
ldy #SA.REMOTE+S.SOCKADDR.PORT
.4 pla
sta (pData),y
iny
cpy #SA.REMOTE+S.SOCKADDR.PORT+4
bne .4
lda #TCP.PORT.CIFS
>STA.G SA.REMOTE+S.SOCKADDR.PORT
iny
lda /TCP.PORT.CIFS
sta (pData),y
clc
rts
*--------------------------------------
CS.RUN.Connect >PUSHBI 0 no protocol
lda #S.SOCKET.T.SEQPKT
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
>STA.G hSocket
>PUSHEA.G SA.LOCAL
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9
>PUSHEA.G SA.REMOTE
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
.9 rts
*--------------------------------------
CS.RUN.Negotiate
lda #TIMEOUT.MAX
sta TimeOut
.1 >PUSHWI SMB.NegReq.end-SMB.NegReq
>PUSHW L.SMB.NegReq
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .2
>SLEEP
ldx TimeOut
bne .1
bra .99
.2 >SLEEP
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .3
tay
beq .2
bra .99
.3 stx hResp
>STYA ZPRespPtr
ldy #$3f
lda (ZPRespPtr),y
iny
ora (ZPRespPtr),y
bne .9
ldy #$5B
lda (ZPRespPtr),y
cmp #5
bne .9
lda hResp
>SYSCALL FreeMem
* clc
rts
.9 lda hResp
>SYSCALL FreeMem
.99 lda #MLI.E.INVPATH
sec
rts
*--------------------------------------
CS.RUN.SessSetup
clc
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
lda TimeOut
beq .9
dec TimeOut
.9 sec do not discard TIMER event
rts
*--------------------------------------
* Called once, when RUN exited with CS
* Put code for unloading LIB here
*--------------------------------------
CS.QUIT >LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
lda hLIBTCPIP
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
CS.END
*--------------------------------------
* Initialized DATA
*--------------------------------------
LIBTCPIP .AZ "libtcpip"
hLIBTCPIP .BS 1
MSG.TCPIPERR .AZ "HTTPD:TCP/IP Not initialized properly."
MSG.USAGE .AZ "Usage : CIFSD <ip|host> sharename mountpoint"
MSG.UNKNOWN .AZ "%s: Unknown host\r\n"
*--------------------------------------
SMB.NegReq .DA #0 DIRECT TCP TRANSPORT
.DA #0 24 BITS LENGTH
.DA /SMB.NegReq.end-1-*
.DA #SMB.NegReq.end-1-*
.DA #$FF
.AS "SMB"
.DA #S.SMB.HEADER.CMD.NEGOTIATE
.HS 00000000
.DA #0 S.SMB.HEADER.FLAGS
.DA S.SMB.HEADER.FLAGS2.LONGNAMES
.DA 0 PIDHI
.HS 0000000000000000 SECFEAT
.DA 0 RSVD
.DA $FFFF TID
.DA $FEFF PIDLO
.DA 0 UID
.DA 0 MID
.DA #0 WORD COUNT
.DA #SMB.NegReq.end-2-*
.DA /SMB.NegReq.end-2-*
.DA #2
.AZ "PC NETWORK PROGRAM 1.0"
.DA #2
.AZ "LANMAN1.0"
.DA #2
.AZ "Windows for Workgroups 3.1a"
.DA #2
.AZ "LM1.2X002"
.DA #2
.AZ "LANMAN2.1"
.DA #2
.AZ "NT LM 0.12"
.DA #2
.AZ "SMB 2.002"
.DA #2
.AZ "SMB 2.???"
SMB.NegReq.end .EQ *
*--------------------------------------
SMB.SessSetup .DA #0 DIRECT TCP TRANSPORT
.DA #0 24 BITS LENGTH
.DA /SMB.SessSetup.end-1-*
.DA #SMB.SessSetup.end-1-*
.DA #$FF
.AS "SMB"
.DA #S.SMB.HEADER.CMD.SESSION.SETUP.ANDX
SMB.SessSetup.end .EQ *
*--------------------------------------
SMB.TreeConnReq .DA #0 DIRECT TCP TRANSPORT
.DA #0 24 BITS LENGTH
.DA /SMB.TreeConnReq.end-1-*
.DA #SMB.TreeConnReq.end-1-*
.DA #$FF
.AS "SMB"
.DA #S.SMB.HEADER.CMD.TREE.CONNECT.ANDX
SMB.TreeConnReq.end .EQ *
*--------------------------------------
.DUMMY
.OR 0
DS.START
SA.LOCAL .BS 1 S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
SA.REMOTE .BS 1 S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
hSocket .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE usr/src/sbin/cifsd
ASM