NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF lib/libcifs *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/kernel.i .INB inc/mli.e.i .INB inc/eth.i .INB inc/libtcpip.i .INB inc/net.smb.i *-------------------------------------- .DUMMY .OR ZPLIB ZS.START ZPReqPtr .BS 2 ZPReqLen .BS 2 ZPCtxPtr .BS 2 pFD .BS 2 pPath .BS 2 ZPPtr1 .BS 2 ZPPtr2 .BS 2 BufPtr .BS 2 hBuf .BS 1 hResp .BS 1 ZPRespPtr .BS 2 bFlag .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 0 .DA CS.END-CS.START .DA 0 .DA 0 .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA LIB.LOAD .DA LIB.UNLOAD .DA CIFS.Negotiate .DA CIFS.SessionSetup .DA CIFS.TreeConnect .DA CIFS.Mount .DA CIFS.UMount *-------------------------------------- L.CALLBACK .DA CIFS.CallBack *-------------------------------------- J.CIFS .DA CIFS.ChTyp .DA CIFS.ChMod .DA CIFS.FStat .DA CIFS.Stat .DA CIFS.MKDir .DA CIFS.MKNod .DA CIFS.MKFIFO .DA CIFS.Pipe .DA CIFS.OpenDir .DA CIFS.ReadDir .DA CIFS.CloseDir .DA CIFS.Open .DA CIFS.Close .DA CIFS.Read .DA CIFS.Write .DA CIFS.ChOwn J.CIFS2 .DA CIFS2.ChTyp .DA CIFS2.ChMod .DA CIFS2.FStat .DA CIFS2.Stat .DA CIFS2.MKDir .DA CIFS2.MKNod .DA CIFS2.MKFIFO .DA CIFS2.Pipe .DA CIFS2.OpenDir .DA CIFS2.ReadDir .DA CIFS2.CloseDir .DA CIFS2.Open .DA CIFS2.Close .DA CIFS2.Read .DA CIFS2.Write .DA CIFS2.ChOwn L.LIBTCPIP .DA LIBTCPIP L.NETBIOS .DA NETBIOS .DA 0 *-------------------------------------- LIB.LOAD >LDYA L.LIBTCPIP >SYSCALL2 LoadLib bcs .9 sta hLIBTCPIP >SYSCALL2 GetMemPtr >STYA pLIBTCPIP >LDYAI 256 >SYSCALL2 GetMem bcs .9 stx hReq * clc .9 rts *-------------------------------------- LIB.UNLOAD lda hReq beq .1 >SYSCALL2 FreeMem .1 lda hLIBTCPIP beq .8 >SYSCALL2 UnloadLib .8 clc rts *-------------------------------------- * >PUSHB hSocket * >PUSHBI 0 * >LIBCALL Negotiate * A = hSMBContext *-------------------------------------- CIFS.Negotiate lda (pStack) bne .1 dec sta (pStack) >PUSHWI SMB.NegReq.end-NETBIOS >PUSHW L.NETBIOS ldy #1+4 hSocket lda (pStack),y ldx #LIBTCPIP.Send jsr GO.LIBTCPIP bcs .99 lda #0 sec rts .1 dec sta (pStack) beq .98 ldy #1 hSocket lda (pStack),y ldx #LIBTCPIP.Recv jsr GO.LIBTCPIP bcc .3 cmp #E.NODATA bne .99 inc rts .3 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y bne .97 ldy #S.NETBIOS.LEN+2 lda (ZPRespPtr),y clc adc #S.NETBIOS sta ZPPtr1 tay lda #0 >SYSCALL2 GetMem bcs .99 >STYA ZPCtxPtr ldy ZPPtr1 .4 dey lda (ZPRespPtr),y sta (ZPCtxPtr),y tya bne .4 ldy #S.NETBIOS+S.SMB.H.FLAGS sta (ZPCtxPtr),y phx lda hResp >SYSCALL2 FreeMem pla clc >RET 2 .97 lda hResp >SYSCALL2 FreeMem .98 lda #MLI.E.IO .99 >RET 2 *-------------------------------------- * >PUSHB hSocket * >PUSHB hSMBContext * >PUSHW username * >PUSHW password * >PUSHBI 0 * >LIBCALL SessionSetup * (SMBContext updated with UID) *-------------------------------------- CIFS.SessionSetup lda (pStack) bne .5 dec sta (pStack) ldy #5 hSMBContext jsr GetSMBContext ldx #S.SMB.H.CMD.SESSION.SETUP.ANDX jsr RequestSetupX ldx #0 .2 lda SMB.SessionSetup.H,x sta (ZPReqPtr),y iny inx cpx #SMB.SessionSetup.H.Len bne .2 phy save Y = LEN iny iny ldx #0 .3 lda SMB.SessionSetup.Guest,x sta (ZPReqPtr),y iny inx cpx #SMB.SessionSetup.Guest.Len bne .3 ldx #0 .4 lda SMB.SessionSetup.T,x sta (ZPReqPtr),y iny inx cpx #SMB.SessionSetup.T.Len bne .4 pla jsr SetReqLenYAtA >PUSHYA >PUSHW ZPReqPtr ldy #6+4 hSocket lda (pStack),y ldx #LIBTCPIP.Send jsr GO.LIBTCPIP bcs .99 lda #0 sec rts .5 dec sta (pStack) beq .98 ldy #6 hSocket lda (pStack),y ldx #LIBTCPIP.Recv jsr GO.LIBTCPIP bcc .6 cmp #E.NODATA bne .99 inc rts .6 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y bne .97 ldy #5 hSMBContext jsr GetSMBContext ldy #S.NETBIOS+S.SMB.H.UID lda (ZPRespPtr),y sta (ZPCtxPtr),y iny lda (ZPRespPtr),y sta (ZPCtxPtr),y .8 lda hResp >SYSCALL2 FreeMem clc >RET 7 .97 lda hResp >SYSCALL2 FreeMem .98 lda #MLI.E.IO sec .99 >RET 7 *-------------------------------------- * >PUSHB hSocket * >PUSHB hSMBContext * >PUSHW pathname * >PUSHBI 0 * >LIBCALL TreeConnect * (SMBContext updated with TID) *-------------------------------------- CIFS.TreeConnect lda (pStack) bne .5 dec sta (pStack) ldy #1 pathname lda (pStack),y sta ZPPtr1 iny lda (pStack),y sta ZPPtr1+1 iny hSMBContext jsr GetSMBContext ldx #S.SMB.H.CMD.TREE.CONNECT.ANDX jsr RequestSetupX ldx #0 .1 lda SMB.TreeConnect.H,x sta (ZPReqPtr),y iny inx cpx #SMB.TreeConnect.H.Len bne .1 phy save Y = LEN iny iny lda #0 sta (ZPReqPtr),y PASSWORD = "\0" iny .2 lda (ZPPtr1) inc ZPPtr1 bne .3 inc ZPPtr1+1 .3 sta (ZPReqPtr),y iny tax bne .2 ldx #0 .4 lda SMB.TreeConnect.T,x sta (ZPReqPtr),y iny inx cpx #SMB.TreeConnect.T.Len bne .4 pla jsr SetReqLenYAtA >PUSHYA >PUSHW ZPReqPtr ldy #4+4 hSocket lda (pStack),y ldx #LIBTCPIP.Send jsr GO.LIBTCPIP bcs .99 lda #0 sec rts .5 dec sta (pStack) beq .98 ldy #4 hSocket lda (pStack),y ldx #LIBTCPIP.Recv jsr GO.LIBTCPIP bcc .6 cmp #E.NODATA bne .99 inc rts .6 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y bne .97 ldy #3 hSMBContext jsr GetSMBContext ldy #S.NETBIOS+S.SMB.H.TID lda (ZPRespPtr),y sta (ZPCtxPtr),y iny lda (ZPRespPtr),y sta (ZPCtxPtr),y .8 lda hResp >SYSCALL2 FreeMem clc >RET 5 .97 lda hResp >SYSCALL2 FreeMem .98 lda #MLI.E.IO sec .99 >RET 5 *-------------------------------------- * >PUSHB hSocket * >PUSHB hSMBContext * >PUSHW MountPoint * >LIBCALL Mount *-------------------------------------- CIFS.Mount ldy #1 lda (pStack),y MP HI >PUSHA lda (pStack),y MP LO >PUSHA >PUSHW L.CALLBACK >SYSCALL2 Mount bcs .9 pha hMount ldx #0 .1 >PULLB MountTable,x inx cpx #4 bne .1 pla clc rts .9 >RET 4 *-------------------------------------- CIFS.UMount clc rts *-------------------------------------- CIFS.CallBack bit CIFS.Status bpl .1 phy pha ldy #S.PS.PID lda (pPS),y cmp CIFS.PID beq .2 pla ply lda #0 sec rts .1 jmp (J.CIFS,x) .2 pla ply jmp (J.CIFS2,x) *-------------------------------------- CIFS.ChTyp CIFS2.ChTyp *-------------------------------------- CIFS.ChMod CIFS2.ChMod *-------------------------------------- CIFS.FStat *-------------------------------------- CIFS2.FStat lda #MLI.E.BADCALL sec rts *-------------------------------------- CIFS.Stat >STYA pPath resolved path jsr MakeTrans2Reg ldx #0 .1 lda SMB.QueryPathInfo,x sta (ZPReqPtr),y iny inx cpx #SMB.QueryPathInfo.Len bne .1 jsr AppendPath lda #0 sta (ZPReqPtr),y iny jsr SetT2ReqLenYA >PUSHYA >PUSHW ZPReqPtr lda MountTable+3 hSocket ldx #LIBTCPIP.Send jsr GO.LIBTCPIP bcs .9 jmp Sleep .9 >RET 4 *-------------------------------------- CIFS2.Stat lda MountTable+3 hSocket ldx #LIBTCPIP.Recv jsr GO.LIBTCPIP bcs .9 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y beq .1 lda #MLI.E.FNOTFND bra .99 .1 >PULLW ZPPtr2 Stat Buffer inc pStack Skip Filename inc pStack jsr GetRespDataOffset jsr FileInfo2StatBuf jsr StatBuf2Ptr2 lda hResp >SYSCALL2 FreeMem stz CIFS.Status clc rts .9 cmp #E.NODATA bne .99 dec CIFS.Retries beq .90 lda #0 sec rts .90 lda #MLI.E.IO .99 sec stz CIFS.Status >RET 4 *-------------------------------------- CIFS.MKDir >STYA pPath resolved path jsr MakeTrans2Reg ldx #0 .1 lda SMB.CreateDirectory,x sta (ZPReqPtr),y iny inx cpx #SMB.CreateDirectory.Len bne .1 jsr AppendPath lda #0 sta (ZPReqPtr),y iny jsr SetT2ReqLenYA >PUSHYA >PUSHW ZPReqPtr lda MountTable+3 hSocket ldx #LIBTCPIP.Send jsr GO.LIBTCPIP bcs .9 jmp Sleep .9 >RET 4 *-------------------------------------- CIFS2.MKDir lda MountTable+3 hSocket ldx #LIBTCPIP.Recv jsr GO.LIBTCPIP bcs .9 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y clc beq .8 lda #MLI.E.DUPFILE sec .8 jsr FreeRespData stz CIFS.Status >RET 4 .9 cmp #E.NODATA bne .99 dec CIFS.Retries beq .98 lda #0 sec rts .98 lda #MLI.E.IO .99 sec stz CIFS.Status >RET 4 *-------------------------------------- CIFS.MKNod CIFS2.MKNod *-------------------------------------- CIFS.MKFIFO CIFS2.MKFIFO *-------------------------------------- CIFS.Pipe CIFS2.Pipe lda #MLI.E.BADCALL sec rts *-------------------------------------- CIFS.OpenDir >STYA pPath resolved path >LDYAI S.FD.DIR >SYSCALL2 GetMem bcs .9 >STYA ZPPtr2 lda #S.FD.T.DIR sta (ZPPtr2) lda hHandler ldy #S.FD.HANDLER sta (ZPPtr2),y lda #0 ldy #S.FD.DIR.EPB sta (ZPPtr2),y EOF Flag iny sta (ZPPtr2),y iny sta (ZPPtr2),y >PUSHW pPath >PUSHWI 0 txa >PUSHA >SYSCALL2 mknod .9 rts *-------------------------------------- CIFS2.OpenDir lda #MLI.E.BADCALL sec rts *-------------------------------------- CIFS.ReadDir jsr GetPFD ldy #S.FD.DIR.EPB lda (pFD),y beq .1 lda #MLI.E.EOF sec rts .1 iny lda (pFD),y iny ora (pFD),y bne CIFS.ReadDir.Next jsr MakeTrans2Reg ldx #0 .2 lda SMB.FindFirst2,x sta (ZPReqPtr),y iny inx cpx #SMB.FindFirst2.Len bne .2 bra CIFS.ReadDir.Send CIFS.ReadDir.Next jsr MakeTrans2Reg ldx #0 .2 lda SMB.FindNext2,x sta (ZPReqPtr),y iny inx cpx #SMB.FindNext2.Len bne .2 phy ldy #S.FD.DIR.FC+1 lda (pFD),y tax dey lda (pFD),y ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 Search ID sta (ZPReqPtr),y txa iny sta (ZPReqPtr),y ply CIFS.ReadDir.Send lda (pPath) beq .1 jsr AppendPath lda #'\' sta (ZPReqPtr),y iny .1 lda #'*' sta (ZPReqPtr),y iny lda #0 sta (ZPReqPtr),y iny jsr SetT2ReqLenYA >PUSHYA >PUSHW ZPReqPtr lda MountTable+3 hSocket ldx #LIBTCPIP.Send jsr GO.LIBTCPIP bcs .9 jmp Sleep .9 rts *-------------------------------------- CIFS2.ReadDir jsr GetPFD lda MountTable+3 hSocket ldx #LIBTCPIP.Recv jsr GO.LIBTCPIP bcs .90 jsr GetRespData ldy #S.NETBIOS+S.SMB.H.STATUS lda (ZPRespPtr),y beq .1 .91 sec lda #MLI.E.IO bra .9 .1 ldy #S.FD.DIR.FC lda (pFD),y iny ora (pFD),y sta bFlag bne .2 ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H+1 Search ID lda (ZPRespPtr),y tax dey ora (ZPRespPtr),y beq .91 lda (ZPRespPtr),y ldy #S.FD.DIR.FC sta (pFD),y iny txa sta (pFD),y .2 jsr GetRespDataOffset jsr CIFS2.ReadDir.GetBuf bcs .9 jsr GetRespDataOffset jsr CIFS2.ReadDir.FillBuf lda hResp >SYSCALL2 FreeMem >LDYA BufPtr ldx hBuf stz CIFS.Status clc rts .9 stz CIFS.Status jmp FreeRespData .90 cmp #E.NODATA bne .99 dec CIFS.Retries beq .98 lda #0 sec rts .98 lda #MLI.E.IO .99 stz CIFS.Status sec rts *-------------------------------------- CIFS2.ReadDir.GetBuf ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H Search Count lda bFlag bne .10 iny iny .10 iny iny lda (ZPRespPtr),y End Of Search phy ldy #S.FD.DIR.EPB sta (pFD),y ply dey dey lda (ZPRespPtr),y Search Count beq .99 tax lda #1 +Ending 0 sta ZPPtr2 stz ZPPtr2+1 .1 lda ZPPtr2 clc adc #S.STAT sta ZPPtr2 bcc .2 inc ZPPtr2+1 .2 lda ZPPtr1 clc adc #22 sta ZPPtr1 bcc .3 inc ZPPtr1+1 .3 lda (ZPPtr1) Filename Len pha sec adc ZPPtr2 sta ZPPtr2 bcc .4 inc ZPPtr2+1 .4 pla inc sec adc ZPPtr1 sta ZPPtr1 bcc .5 inc ZPPtr1+1 .5 dex bne .1 >LDYA ZPPtr2 >SYSCALL2 GetMem bcs .9 >STYA BufPtr >STYA ZPPtr2 stx hBuf .9 rts .99 lda #MLI.E.EOF sec rts *-------------------------------------- CIFS2.ReadDir.FillBuf ldy #S.NETBIOS+S.SMB.H+S.TRANS2.H Search Count lda bFlag bne .10 iny iny .10 lda (ZPRespPtr),y tax .1 jsr FileInfo2StatBuf lda ZPPtr1 sec skip Filename Len adc #22 sta ZPPtr1 bcc .2 inc ZPPtr1+1 .2 ldy #$ff .3 iny lda (ZPPtr1),y sta (ZPPtr2),y bne .3 tya sec adc ZPPtr1 sta ZPPtr1 bcc .4 inc ZPPtr1+1 .4 tya sec adc ZPPtr2 sta ZPPtr2 bcc .5 inc ZPPtr2+1 .5 jsr StatBuf2Ptr2 lda #S.STAT clc adc ZPPtr2 sta ZPPtr2 bcc .7 inc ZPPtr2+1 .7 dex bne .1 lda #0 sta (ZPPtr2) rts *-------------------------------------- CIFS.CloseDir tax lda Nod.Table.hName-2,x beq .1 phx stz Nod.Table.hName-2,x >SYSCALL2 FreeMem plx .1 lda Nod.Table.hFD-2,x stz Nod.Table.hFD-2,x >SYSCALL2 FreeMem stz CIFS.Status clc rts *-------------------------------------- CIFS2.CloseDir lda #MLI.E.INVPATH sec rts *-------------------------------------- CIFS.Open CIFS2.Open *-------------------------------------- CIFS.Close CIFS2.Close lda #MLI.E.INVPATH sec rts *-------------------------------------- CIFS.Read CIFS2.Read *-------------------------------------- CIFS.Write CIFS2.Write *-------------------------------------- CIFS.ChOwn CIFS2.ChOwn lda #MLI.E.BADCALL sec rts *-------------------------------------- GetPFD tax phx lda Nod.Table.hName-2,x >SYSCALL2 GetMemPtr >STYA pPath plx lda Nod.Table.hFD-2,x >SYSCALL2 GetMemPtr >STYA pFD rts *-------------------------------------- MakeTrans2Reg lda MountTable+2 >SYSCALL2 GetMemPtr >STYA ZPCtxPtr ldx #S.SMB.H.CMD.TRANS2 jsr RequestSetupX ldx #0 .1 lda SMB.Trans2.H,x sta (ZPReqPtr),y iny inx cpx #SMB.Trans2.H.Len bne .1 rts *-------------------------------------- GetSMBContext lda (pStack),y >SYSCALL2 GetMemPtr >STYA ZPCtxPtr rts *-------------------------------------- RequestSetupX phx lda hReq >SYSCALL2 GetMemPtr >STYA ZPReqPtr plx ldy #0 .1 lda (ZPCtxPtr),y cpy #S.NETBIOS+S.SMB.H.CMD bne .2 txa .2 sta (ZPReqPtr),y iny cpy #S.NETBIOS+S.SMB.H bne .1 rts *-------------------------------------- AppendPath ldx #0 .1 lda (pPath) beq .4 inc pPath bne .2 inc pPath+1 .2 cmp #'/' bne .3 lda #'\' .3 sta (ZPReqPtr),y tax iny bra .1 .4 cpx #'\' bne .5 dey .5 rts *-------------------------------------- * Y = LEN from S.NETBIOS.TYPE * A = Ptr to LEN Word *-------------------------------------- SetReqLenYAtA sty ZPReqLen stz ZPReqLen+1 sta ZPPtr1 pha tya dec dec sec sbc ZPPtr1 ply sta (ZPReqPtr),y iny lda #0 sta (ZPReqPtr),y bra SetReqLenNETBIOS *-------------------------------------- SetT2ReqLenYA sty ZPReqLen stz ZPReqLen+1 tya sec sbc #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+7 ldy #S.NETBIOS+S.SMB.H+1 sta (ZPReqPtr),y ldy #S.NETBIOS+S.SMB.H+19 sta (ZPReqPtr),y inc inc inc ldy #S.NETBIOS+S.SMB.H+SMB.Trans2.H.Len+2 sta (ZPReqPtr),y SetReqLenNETBIOS lda ZPReqLen sec sbc #S.NETBIOS ldy #S.NETBIOS.LEN+2 sta (ZPReqPtr),y lda ZPReqLen+1 sec sbc /S.NETBIOS dey sta (ZPReqPtr),y >LDYA ZPReqLen rts *-------------------------------------- Sleep ldy #S.PS.PID lda (pPS),y sta CIFS.PID dec CIFS.Status stz CIFS.Retries lda #0 sec rts *-------------------------------------- GetRespData sta hResp >SYSCALL2 GetMemPtr pha tya * clc adc #S.TCP sta ZPRespPtr pla adc /S.TCP sta ZPRespPtr+1 rts *-------------------------------------- GetRespDataOffset ldy #S.NETBIOS+S.SMB.H+15 Data Offset lda (ZPRespPtr),y clc adc ZPRespPtr tax iny lda (ZPRespPtr),y adc ZPRespPtr+1 pha txa clc adc #S.NETBIOS sta ZPPtr1 pla adc /S.NETBIOS sta ZPPtr1+1 rts *-------------------------------------- FreeRespData php pha lda hResp >SYSCALL2 FreeMem pla plp rts *-------------------------------------- FileInfo2StatBuf phx ldx #S.STAT-1 .1 stz StatBuf,x dex bpl .1 ldy #0 Creation Date/Time ldx #S.STAT.CTIME jsr FileInfo2StatBufDT ldy #4 Last Access Date/Time ldx #S.STAT.ATIME jsr FileInfo2StatBufDT ldy #8 Last Write Date/Time ldx #S.STAT.MTIME jsr FileInfo2StatBufDT ldy #12+3 Data Size ldx #3 .7 lda (ZPPtr1),y sta StatBuf+S.STAT.SIZE,x dey dex bpl .7 ldy #20 File Attribute lda (ZPPtr1),y and #$10 beq .8 lda /S.STAT.MODE.DIR sta StatBuf+S.STAT.MODE+1 .8 plx rts *-------------------------------------- * YYYYYYYM MMM DDDDD * HHHHHmmm mmm SSSSS *-------------------------------------- FileInfo2StatBufDT iny lda (ZPPtr1),y lsr php clc adc #80 sta StatBuf+S.TIME.YEAR,x lda #19 adc #0 sta StatBuf+S.TIME.CENTURY,x dey plp lda (ZPPtr1),y ror lsr lsr lsr lsr sta StatBuf+S.TIME.MONTH,x lda (ZPPtr1),y and #$1F sta StatBuf+S.TIME.DAY,x iny iny lda (ZPPtr1),y and #$1F asl sta StatBuf+S.TIME.SECOND,x lda (ZPPtr1),y and #$E0 sta StatBuf+S.TIME.MINUTE,x lda (ZPPtr1),y lsr ror StatBuf+S.TIME.MINUTE,x lsr ror StatBuf+S.TIME.MINUTE,x lsr ror StatBuf+S.TIME.MINUTE,x lsr StatBuf+S.TIME.MINUTE,x lsr StatBuf+S.TIME.MINUTE,x sta StatBuf+S.TIME.HOUR,x rts * TODO : S.TIME.WDAY *-------------------------------------- StatBuf2Ptr2 ldy #S.STAT-1 .1 lda StatBuf,y sta (ZPPtr2),y dey bpl .1 rts *-------------------------------------- GO.LIBTCPIP jmp (pLIBTCPIP) *-------------------------------------- CS.END *-------------------------------------- NETBIOS .DA #0 DIRECT TCP TRANSPORT .DA #0 24 BITS LENGTH .DA /SMB.NegReq.end-SMB.H .DA #SMB.NegReq.end-SMB.H *-------------------------------------- SMB.H .DA #$FF .AS "SMB" .DA #S.SMB.H.CMD.NEGOTIATE .HS 00000000 .DA #0 S.SMB.H.FLAGS .DA S.SMB.H.FLAGS2.LONGNAMES .DA 0 PIDHI .HS 0000000000000000 SECFEAT .DA 0 RSVD .DA $FFFF TID .DA $FFFE PIDLO .BS 2 UID .DA 0 MID *-------------------------------------- SMB.NegReq .DA #0 WORD COUNT .DA #SMB.NegReq.end-2-* ByteCount .DA #0 * .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.SessionSetup.H .DA #13 WORD COUNT .HS FF000000 NO MORE CMD .DA 1280 MAX BUFFER .DA 2 MAX MPX COUNT .HS 0000 VC NUMBER .HS 00000000 SESSION KEY .DA 0 CI PASS LEN (ANSI) .DA 0 CS PASS LEN (UNICODE) .HS 00000000 .HS 00000000 CAPABILITIES SMB.SessionSetup.H.Len .EQ *-SMB.SessionSetup.H * .BS 2 ByteCount SMB.SessionSetup.Guest * .AZ "" Password .AZ "Guest" Account Name .AZ "?" Primary Domain SMB.SessionSetup.Guest.Len .EQ *-SMB.SessionSetup.Guest SMB.SessionSetup.T .AZ "A2osX" Native OS .AZ "A2osX-CIFSD" Native LANMAN SMB.SessionSetup.T.Len .EQ *-SMB.SessionSetup.T *-------------------------------------- SMB.TreeConnect.H .DA #4 WORD COUNT .HS FF000000 NO MORE CMD .DA 0 .DA 1 PASSWORD LEN (1 for "\0") SMB.TreeConnect.H.Len .EQ *-SMB.TreeConnect.H * .BS 2 ByteCount * .AZ "" PASSWORD * .AZ "_temp" PATH SMB.TreeConnect.T .AZ "A:" Disk Share SMB.TreeConnect.T.Len .EQ *-SMB.TreeConnect.T *-------------------------------------- #$2E SMB.ComRead.H .DA #10 WORD COUNT .HS FF000000 NO MORE CMD .BS 2 FID .BS 4 Offset .BS 2 MaxCountOfBytesToReturn .HS 0000 MinCountOfBytesToReturn .HS 00000000 Timeout .HS 0000 Remaining .HS 0000 ByteCount SMB.ComRead.H.Len .EQ *-SMB.ComRead.H *-------------------------------------- #$2F SMB.ComWrite.H .DA #12 WORD COUNT .HS FF000000 NO MORE CMD .BS 2 FID .BS 4 Offset .HS 00000000 Timeout .HS 0001 WriteMode=WritethroughMode .BS 2 Remaining .HS 0000 Reserved .BS 2 DataLength .BS 2 DataOffset SMB.ComWrite.H.Len .EQ *-SMB.ComWrite.H .BS 2 ByteCount SMB.ComWrite.T * DATA..... SMB.ComWrite.T.Len .EQ *-SMB.ComWrite.T *-------------------------------------- #$04 SMB.ComClose.H .DA #3 WORD COUNT .BS 2 FID .HS 00000000 LastTimeModified .HS 0000 ByteCount SMB.ComClose.H.Len .EQ *-SMB.ComClose.H *-------------------------------------- SMB.Trans2.H .DA #15 WORD COUNT .BS 2 TotalParamCount .DA 0 TotalDataCount .DA 10 MaxParameterCount .DA 450 MaxDataCount .DA #0 MaxSetupCount .HS 00 Reserved1 .DA 0 Flags .HS 00000000 Timeout .HS 0000 Reserved2 .BS 2 ParameterCount .DA 68 ParameterOffset .HS 0000 DataCount .HS 0000 DataOffset .DA #1 SetupCount .HS 00 Reserved3 SMB.Trans2.H.Len .EQ *-SMB.Trans2.H *-------------------------------------- SMB.Open2 .DA 0 TRANS2_OPEN2 .BS 2 PrmCnt .HS 000000 Padding .HS 0000 Flags .BS 2 Access Mode .HS 0000 Reserved1 .BS 2 FileAttributes .HS 00000000 CreationTime .BS 2 OpenMode .HS 00000000 AllocationSize .HS 00000000000000000000 Reserved * .AZ "filename" SMB.Open2.Len .EQ *-SMB.Open2 *-------------------------------------- SMB.FindFirst2 .DA 1 TRANS2_FIND_FIRST2 .BS 2 PrmCnt .HS 000000 Padding .DA $0037 SearchAttributes .DA 1024 SearchCount .DA 2 Flags .DA SMB_INFO_STANDARD InformationLevel .HS 00000000 SearchStorageType * .AZ "path\*" SMB.FindFirst2.Len .EQ *-SMB.FindFirst2 *-------------------------------------- SMB.FindNext2 .DA 2 TRANS2_FIND_NEXT2 .BS 2 PrmCnt .HS 000000 Padding .BS 2 SID .DA 1024 SearchCount .DA SMB_INFO_STANDARD InformationLevel .HS 00000000 ResumeKey .DA 2+8 Flags * .AZ "path\*" SMB.FindNext2.Len .EQ *-SMB.FindNext2 *-------------------------------------- SMB.QueryPathInfo .DA 5 TRANS2_QUERY_PATH_INFORMATION .BS 2 PrmCnt .HS 000000 Padding .DA SMB_INFO_STANDARD InformationLevel .HS 00000000 SearchStorageType * .AZ "filename" SMB.QueryPathInfo.Len .EQ *-SMB.QueryPathInfo *-------------------------------------- SMB.CreateDirectory .DA 13 TRANS2_CREATE_DIRECTORY .BS 2 PrmCnt .HS 000000 Padding .HS 00000000 Reserved * .AZ "DirName" SMB.CreateDirectory.Len .EQ *-SMB.CreateDirectory *-------------------------------------- LIBTCPIP .AZ "libtcpip" hLIBTCPIP .BS 1 pLIBTCPIP .BS 2 hSocket .BS 1 hReq .BS 1 *-------------------------------------- CIFS.Status .BS 1 CIFS.PID .BS 1 CIFS.Retries .BS 1 *-------------------------------------- MountTable .BS 2 pMountPoint .BS 1 hSMBContext .BS 1 hSocket *-------------------------------------- StatBuf .BS S.STAT *-------------------------------------- MAN SAVE usr/src/lib/libcifs.s ASM