From 0c12a64225efe477d8e9e28db9b2dd1039077cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 24 Feb 2016 21:01:26 +0100 Subject: [PATCH] Sample RPCDUMP util for testing UDP Socket API --- BIN/RPCINFO.S.txt | 474 +++++++++++++++++++--------------------------- 1 file changed, 199 insertions(+), 275 deletions(-) diff --git a/BIN/RPCINFO.S.txt b/BIN/RPCINFO.S.txt index 879b469b..3068ffd4 100644 --- a/BIN/RPCINFO.S.txt +++ b/BIN/RPCINFO.S.txt @@ -13,12 +13,10 @@ AUTO 6 .INB INC/LIBSTR.I .INB INC/LIBTCPIP.I *-------------------------------------- -RPCINFO.TIMEOUT .EQ 40 40*100ms = 4 sec. +TIMEOUT.MAX .EQ 40 40*100ms = 4 sec. *-------------------------------------- -ZPFrameBase1 .EQ ZPBIN -ZPFrameLen1 .EQ ZPBIN+2 -ZPFramePtr1 .EQ ZPBIN+4 -ZPIPCfgPtr .EQ ZPBIN+6 +ZPIPCfgPtr .EQ ZPBIN +ZPFrameBase .EQ ZPBIN+2 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -38,220 +36,151 @@ CS.START cld .DA CS.QUIT L.LIBSTR .DA LIBSTR L.LIBTCPIP .DA LIBTCPIP -L.SSCANF.IP .DA SSCANF.IP -L.MSG0 .DA MSG0 -L.MSG1 .DA MSG1 -L.MSG2 .DA MSG2 -L.MSG3 .DA MSG3 +L.Socket .DA Socket +L.Socket.Dst.Addr .DA Socket.Dst.Addr +L.RPC.Request .DA RPC.Request +L.MSG.USAGE .DA MSG.USAGE +L.MSG.UNKNOWN .DA MSG.UNKNOWN +L.MSG.TIMEOUT .DA MSG.TIMEOUT +L.MSG.DUMP0 .DA MSG.DUMP0 +L.MSG.DUMP1 .DA MSG.DUMP1 .DA 0 *-------------------------------------- CS.INIT ldy #S.PS.hARGS lda (pPs),y - bne .1 - lda #SYSMGR.ERRSYN - sec - rts - -.1 >LDYA L.LIBSTR + beq .99 + + >LDYA L.LIBSTR >SYSCALL SYS.LoadLibYA sta hLIBSTR - + >LDYA L.LIBTCPIP >SYSCALL SYS.LoadLibYA sta hLIBTCPIP >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ? - bcs .9 + bcs .99 >STYA ZPIPCfgPtr lda (ZPIPCfgPtr) Configured ? - bpl .9 - - ldy #S.IPCFG.HDEV - lda (ZPIPCfgPtr),y - sta hDev - - lda A2OSX.RANDOM16 - ldy #XID - sta (pData),y - lda A2OSX.RANDOM16+1 - iny - sta (pData),y - - lda (pPs) - ora #S.PS.F.EVENT Now accept events - sta (pPs) - clc - -.9 rts -*-------------------------------------- -CS.RUN >PUSHW pData DST.IP - >PUSHW L.SSCANF.IP - ldy #S.PS.hARGS - lda (pPs),y - >SYSCALL SYS.GetMemPtrA - >PUSHYA - >LIBCALL hLIBSTR,LIBSTR.SSCANF - bcc CS.RUN.IPOK - - lda #RPCINFO.TIMEOUT - ldy #TimeOut - sta (pData),y - -CS.RUN.DNSQUERY >PUSHW pData DST.IP - ldy #S.PS.hARGS - lda (pPs),y - >SYSCALL SYS.GetMemPtrA - >PUSHYA - >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY - bcc CS.RUN.IPOK - - jsr A2osX.SLEEP - ldy #TimeOut - lda (pData),y - bne CS.RUN.DNSQUERY - - ldy #S.PS.hARGS - lda (pPs),y - >SYSCALL SYS.GetMemPtrA - >PUSHYA - >PUSHW L.MSG0 - >LIBCALL hLIBSTR,LIBSTR.PRINTF - - sec -CS.RUN.RTS rts - -CS.RUN.IPOK ldy #S.PS.hARGS - lda (pPs),y - >SYSCALL SYS.GetMemPtrA - >PUSHYA - ldy #3 - >PUSHB (pData),y DST.IP+3 - dey - >PUSHB (pData),y DST.IP+2 - dey - >PUSHB (pData),y DST.IP+1 - >PUSHB (pData) DST.IP - >PUSHW L.MSG1 - >LIBCALL hLIBSTR,LIBSTR.PRINTF - -CS.RUN.RPCCALL >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.UDP.FRAME - bcs CS.RUN.RTS - >STYA ZPFrameBase1 - txa - ldy #hFrame - sta (pData),y - - ldx #3 - ldy #DST.IP -.10 lda (pData),y - pha - iny - dex - bpl .10 + bpl .99 ldx #3 - ldy #S.IP.DST+3 -.1 pla - sta (ZPFrameBase1),y + ldy #S.IPCFG.IP+3 +.1 lda (ZPIPCfgPtr),y + sta Socket.Src.Addr,x dey dex bpl .1 - ldy #S.UDP.SRCPORT - lda #UDP.PORT.PMAP - sta (ZPFrameBase1),y - ldy #S.UDP.DSTPORT - sta (ZPFrameBase1),y + lda (pPs) + ora #S.PS.F.EVENT Now accept events + sta (pPs) + clc + rts - ldy #XID - lda (pData),y - tax - iny - lda (pData),y +.99 >LDYA L.MSG.USAGE + >SYSCALL SYS.PSTROutYA + lda #SYSMGR.ERRSYN + sec + rts +*-------------------------------------- +CS.RUN jsr Init.Timeout - ldy #S.RPC.XID+1 - sta (ZPFrameBase1),y - dey - txa - sta (ZPFrameBase1),y - -.3 >PUSHWI S.RPC+32 - ldy #hFrame - lda (pData),y +.1 >PUSHW L.Socket.Dst.Addr + ldy #S.PS.hARGS + lda (pPs),y >SYSCALL SYS.GetMemPtrA >PUSHYA - >LIBCALL hLIBTCPIP,LIBTCPIP.SEND.UDP.FRAME + >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME + bcc .2 + + >SYSCALL SYS.Sleep + jsr Wait.Timeout + bcc .1 + + ldy #S.PS.hARGS + lda (pPs),y + >SYSCALL SYS.GetMemPtrA + >PUSHYA + >LDYA L.MSG.UNKNOWN + >SYSCALL SYS.PSTROutYA + sec + rts + +.2 >PUSHW L.Socket + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.NEW + bcc .21 + jsr Wait.Timeout + bcc .2 + bra .99 + +.21 txa + ldy #hSocket + sta (pData),y + +.3 >PUSHWI RPC.Request.End-RPC.Request + >PUSHW L.RPC.Request + ldy #hSocket + >PUSHB (pData),y + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND bcc .4 - jsr A2osX.SLEEP - ldy #TimeOut - lda (pData),y - bne .3 + >SYSCALL SYS.Sleep + jsr Wait.Timeout + bcc .3 + bra .99 + +.4 jsr Init.Timeout -.4 ldy #hFrame +.5 ldy #hSocket + lda (pData),y + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.RCVD + bcc .6 + + >SYSCALL SYS.Sleep + jsr Wait.Timeout + bcc .5 + bra .99 + +.6 ldy #hFrame + sta (pData),y + >SYSCALL SYS.GetMemPtrA + >STYA ZPFrameBase + + jsr DumpRPCFrame + + ldy #hFrame lda (pData),y >SYSCALL SYS.FreeMemA - ldy #bReply lda #0 - sta (pData),y - lda #RPCINFO.TIMEOUT - ldy #TimeOut - sta (pData),y + sec + rts -CS.RUN.WAIT jsr A2osX.SLEEP - ldy #bReply - lda (pData),y - bne .1 - - ldy #bCTRLC - lda (pData),y - bne CS.RUN.ERROR - ldy #TimeOut - lda (pData),y - bne CS.RUN.WAIT - - ldy #3 - >PUSHB (pData),y DST.IP+3 - dey - >PUSHB (pData),y DST.IP+2 - dey - >PUSHB (pData),y DST.IP+1 - >PUSHB (pData) DST.IP - >PUSHW L.MSG2 - >LIBCALL hLIBSTR,LIBSTR.PRINTF - -.1 ldy #bCTRLC - lda (pData),y - bne CS.RUN.ERROR - ldy #TimeOut - lda (pData),y - beq .2 - - jsr A2osX.SLEEP - bra .1 - -.2 -CS.RUN.ERROR sec +.99 ldy #S.PS.hARGS + lda (pPs),y + >SYSCALL SYS.GetMemPtrA + >PUSHYA + >LDYA L.MSG.TIMEOUT + >SYSCALL SYS.PSTROutYA + sec rts *-------------------------------------- CS.DOEVENT lda (pEvent) - and #S.EVT.F.TIMER is it a TIMER event? + bit #S.EVT.F.TIMER is it a TIMER event? beq .1 no.... ldy #TimeOut lda (pData),y - beq .10 - + beq .9 dec sta (pData),y -.10 sec do not discard TIMER event +.9 sec do not discard TIMER event rts -.1 lda (pEvent) - and #S.EVT.F.KEY is it a KEY event? - beq .2 +.1 bit #S.EVT.F.KEY is it a KEY event? + beq .8 ldy #S.EVT.hDEV is Event from active IN device? lda (pEvent),y @@ -273,126 +202,121 @@ CS.DOEVENT lda (pEvent) sta (pData),y bra .8 -.2 lda (pEvent) - and #S.EVT.F.NET - beq .9 - - ldy #S.EVT.hDEV - lda (pEvent),y - cmp hDev - bne .9 - - ldy #S.EVT.DATALO Get Frame hMem - lda (pEvent),y - >SYSCALL SYS.GetMemPtrA - >STYA ZPFrameBase1 - - ldy #S.IP.PROTOCOL - lda (ZPFrameBase1),y - cmp #S.IP.PROTOCOL.UDP - - bne .9 - - ldy #S.UDP.DSTPORT - lda (ZPFrameBase1),y - cmp #S.ICMP.TYPE.ECHOREP - bne .9 - - ldy #S.RPC.XID - lda (ZPFrameBase1),y - tax - iny - lda (ZPFrameBase1),y - ldy #XID+1 - cmp (pData),y - bne .9 - dey - txa - cmp (pData),y - bne .9 - - jsr CS.EVENT.REPLY .8 clc rts +*-------------------------------------- +CS.QUIT ldy #hSocket + lda (pData),y + >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA -.9 sec + lda hLIBSTR + beq .1 + >SYSCALL SYS.UnloadLibA + +.1 lda hLIBTCPIP + beq .8 + >SYSCALL SYS.UnloadLibA + +.8 clc rts *-------------------------------------- -CS.EVENT.REPLY lda #RPCINFO.TIMEOUT - sec - sbc TimeOut - - stz TimeOut.ms - stz TimeOut.ms+1 - - tay - beq .3 - -.1 lda TimeOut.ms - clc - adc #K.TIMER16RESOLUTION*20 - sta TimeOut.ms - bcc .2 - inc TimeOut -.2 dey - bne .1 - -.3 >PUSHW TimeOut.ms - ldy #S.IP.TTL - >PUSHB (ZPFrameBase1),y - - ldy #S.ICMP.SEQUENCE+1 - >PUSHB (ZPFrameBase1),y - dey - >PUSHB (ZPFrameBase1),y - - ldy #S.IP.SRC+3 - >PUSHB (ZPFrameBase1),y - dey - >PUSHB (ZPFrameBase1),y - dey - >PUSHB (ZPFrameBase1),y - dey - >PUSHB (ZPFrameBase1),y - - >PUSHW L.MSG3 - >LIBCALL hLIBSTR,LIBSTR.PRINTF - - ldy #bReply - lda (pData),y - inc +Init.Timeout ldy #TimeOut + lda #TIMEOUT.MAX sta (pData),y rts *-------------------------------------- -CS.QUIT lda hLIBTCPIP - >SYSCALL SYS.UnloadLibA - lda hLIBSTR - >SYSCALL SYS.UnloadLibA +Wait.TimeOut sec + ldy #TimeOut + lda (pData),y + beq .9 + ldy #bCTRLC + lda (pData),y + bmi .9 clc - rts +.9 rts +*-------------------------------------- +DumpRPCFrame lda #S.UDP+24 + clc + adc ZPFrameBase + sta ZPFrameBase + lda /S.UDP+24 + adc ZPFrameBase+1 + sta ZPFrameBase+1 + + >LDYA L.MSG.DUMP0 + >SYSCALL SYS.PSTROutYA + +.1 ldy #3 + lda (ZPFrameBase),y Value follows? + beq .9 + + ldy #18 port + >PUSHB (ZPFrameBase),y + iny + >PUSHB (ZPFrameBase),y + + ldy #15 proto + >PUSHB (ZPFrameBase),y + + ldy #11 version + >PUSHB (ZPFrameBase),y + + ldy #4 program +.7 >PUSHB (ZPFrameBase),y + iny + cpy #8 + bne .7 + + >PUSHW L.MSG.DUMP1 + >LIBCALL hLIBSTR,LIBSTR.PRINTF + + lda #20 + clc + adc ZPFrameBase + sta ZPFrameBase + bcc .1 + inc ZPFrameBase+1 + bra .1 + +.9 rts *-------------------------------------- CS.END LIBSTR >PSTRING "libstr.o" LIBTCPIP >PSTRING "libtcpip.o" -SSCANF.IP >PSTRING "%d.%d.%d.%d" -MSG0 >CSTRING "%S: Unknown host\n" -MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n" -MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n" -MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n" -hLIBSTR .BS 1 +MSG.USAGE >PSTRING "Usage : RPCINFO \n" +MSG.UNKNOWN >PSTRING "%S: Unknown host\n" +MSG.TIMEOUT >PSTRING "No response from %S\n" +MSG.DUMP0 >PSTRING "Program Ver Proto:Port\n" +MSG.DUMP1 >CSTRING "%10L %2d %2d:%D\n" +Socket .DA #S.SOCKET.SOCK.DGRAM + .BS 3 +Socket.Src.Addr .BS 4 +Socket.Src.Port .DA 0 Dynamic +Socket.Dst.Addr .BS 4 +Socket.Dst.Port .DA UDP.PORT.PMAP + .BS 16 +*-------------------------------------- +RPC.Request .HS 12345678 XID + .HS 00000000 0=CALL + .HS 00000002 RPCVERS + .HS 000186A0 PROG=portmapper + .HS 00000002 VERS + .HS 00000004 PMAPPROC_DUMP + .HS 00000000 CRED + .HS 00000000 + .HS 00000000 VERF + .HS 00000000 +RPC.Request.End .EQ * +hLIBSTR .BS 1 hLIBTCPIP .BS 1 -hDev .BS 1 -TimeOut.ms .BS 2 *-------------------------------------- .DUMMY .OR 0 DS.START -DST.IP .BS 4 +hSocket .BS 1 hFrame .BS 1 TimeOut .BS 1 -XID .BS 4 bCTRLC .BS 1 -bReply .BS 1 DS.END .ED *--------------------------------------