<> <> <> <> <> DIRECTORY Arpa USING [nullAddress, Address], Commander USING [CommandProc, Register], CommandTool USING [NextArgument], ConvertExtras USING [ArpaAddressFromRope], IO USING [STREAM], Rope USING [ROPE, IsEmpty], TypeScript USING [ChangeLooks], ViewerEvents USING [EventProc, RegisterEventProc], ViewerIO USING [CreateViewerStreams, GetViewerFromStream, Viewer], ArpaTCPLogging USING [addrToWatch, logFile]; ArpaTCPWatcher: CEDAR PROGRAM IMPORTS ConvertExtras, Commander, CommandTool, Rope, TypeScript, ViewerEvents, ViewerIO, ArpaTCPLogging = BEGIN StartWatcher: Commander.CommandProc = { <<[cmd: Commander.Handle] RETURNS [result: REF ANY _ NIL, msg: ROPE _ NIL]>> out: IO.STREAM; viewer: ViewerIO.Viewer; inRope: Rope.ROPE _ CommandTool.NextArgument[cmd]; addr: Arpa.Address _ [255,255,255,255]; -- Default to all addreses IF ~Rope.IsEmpty[inRope] THEN addr _ ConvertExtras.ArpaAddressFromRope[inRope]; IF ArpaTCPLogging.logFile#NIL THEN RETURN[msg: "ArpaTCPWatcher already started."]; out _ ViewerIO.CreateViewerStreams[ name: "ArpaTCP.log", viewer: NIL, backingFile: "ArpaTCP.log", editedStream: FALSE].out; viewer _ ViewerIO.GetViewerFromStream[out]; TypeScript.ChangeLooks[viewer, 'f]; [] _ ViewerEvents.RegisterEventProc[proc: DestroyProc, event: destroy, filter: viewer]; ArpaTCPLogging.logFile _ out; ArpaTCPLogging.addrToWatch _ addr; }; DestroyProc: ViewerEvents.EventProc = { <<[viewer: ViewerClasses.Viewer, event: ViewerEvents.ViewerEvent, before: BOOL] RETURNS [abort: BOOL _ FALSE]>> ArpaTCPLogging.addrToWatch _ Arpa.nullAddress; ArpaTCPLogging.logFile _ NIL; }; Commander.Register["ArpaTCPWatcher", StartWatcher, "Start up a typescript to watch TCP packets."]; END.