<<>> <> <> <> <> <<>> DIRECTORY Arpa USING [ Address ], ArpaUDP USING [ Port ], Commander USING [ Handle ], IO USING [ STREAM, Value ], Rope USING [ ROPE ], RPC USING [ EncryptionKey, Password, NetAddress, PupSocket, nullSocket, nullNetAddress ] ; VoiceUtils: CEDAR DEFINITIONS = { <> PD: TYPE = RECORD [ attended: BOOLEAN¬FALSE, defaultReportStream: IO.STREAM _ NIL, <> reportLimit: NAT¬1000, -- If 200 (say) reports of any kind, or 10 problem reports, are problemLimit: NAT¬10, -- issued in any 60 second period, report that (high priority), and limitInterval: NAT¬60, -- then inhibit all reports until these limits have not been exceeded reportingEnabled: BOOL¬TRUE, -- whether the limits have been reached <> reportMethods: ARRAY ProblemPriority OF ReportMethod ¬ ALL[], maximumMailReportInterval: INT ¬ 60*15 -- mailed reports no more frequently than 4/hr. ]; pd: REF PD; <> ROPE: TYPE=Rope.ROPE; Rname: TYPE = ROPE; NetAddress: TYPE = RPC.NetAddress; nullSocket: RPC.PupSocket = RPC.nullSocket; nullNetAddress: NetAddress = RPC.nullNetAddress; <> <> <> <> WhereToReport: TYPE=ATOM; WhereProc: TYPE = PROC[fixedWhereData: REF, whereData: REF] RETURNS[s: IO.STREAM¬NIL]; nullValue: IO.Value = [null[]]; DNFProc: TYPE = PROC[fixedWhereData: REF, whereData: REF] RETURNS[default: BOOL]; RegisterWhereToReport: PROC[ proc: WhereProc¬NIL, where: WhereToReport, fixedWhereData: REF¬NIL, defaultIfNotFound: DNFProc¬NIL]; <> FindWhere: PROC[where: WhereToReport, whereData: REF] RETURNS [s: IO.STREAM¬NIL]; ReportMethod: TYPE = RECORD [ reportByMail: BOOL¬FALSE, reportTo: ROPE ]; Report: PROC[remark: ROPE, where: WhereToReport¬NIL, whereData: REF ¬NIL]; ReportFR: PROC[remark: ROPE, where: WhereToReport¬NIL, whereData: REF ¬NIL, a1, a2, a3: IO.Value ¬ nullValue]; ProblemPriority: TYPE = { minimal, low, medium, high, maximum }; Problem: PROC[ remark: ROPE¬NIL, where: WhereToReport¬NIL, whereData: REF ¬NIL, priority: ProblemPriority ¬ maximum]; ProblemFR: PROC[ remark: ROPE¬NIL, where: WhereToReport¬NIL, whereData: REF ¬NIL, a1, a2: IO.Value ¬ nullValue, priority: ProblemPriority ¬ maximum]; <> Registrize: PROC[name: ROPE] RETURNS [ROPE]; <> CurrentRName: PROC RETURNS [ROPE]; <> CurrentPasskey: PROC[passwordText: ROPE¬NIL] RETURNS [RPC.EncryptionKey]; CurrentPassword: PROC[passwordText: ROPE¬NIL] RETURNS [RPC.Password] = INLINE { RETURN[LOOPHOLE[CurrentPasskey[passwordText]]]; }; <> OwnNetAddress: PROC RETURNS [netAddress: NetAddress]; Rspec: TYPE = REF RspecBody; RspecBody: TYPE = RECORD [ simpleName: ROPE¬NIL, registry: ROPE¬NIL]; RNameStyle: TYPE = { rName, nameDotLark, rNameDotLark }; InstanceFromNetAddress: PROC[netAddress: NetAddress, suffix: ROPE¬NIL] RETURNS [instance: Rname]; <> <> RnameToRspec: PROC[name: Rname, defaultRegistry: ROPE¬NIL] RETURNS [spec: Rspec]; <> RspecToRname: PROC[spec: Rspec] RETURNS [name: Rname]; <> RspecToSortName: PROC[spec: Rspec] RETURNS [name: ROPE]; <> MakeAtom: PROC[rName: Rname, case: BOOL¬FALSE] RETURNS [ATOM]; <> MakeRName: PROC[name: ROPE, style: RNameStyle¬ rNameDotLark] RETURNS[rName: ROPE]; LowerCaseRope: PROC[r: ROPE] RETURNS [ROPE]; <<>> <> <<>> CmdOrToken: PROC[cmd: Commander.Handle, key: ROPE, default: ROPE¬NIL] RETURNS [value: ROPE]; <> <<>> SunProtocol: PROC [netAddressRope: Rope.ROPE] RETURNS [BOOL]; SunAddrFromRope: PROC [netAddressRope: Rope.ROPE] RETURNS [address: Arpa.Address, port: ArpaUDP.Port]; RopeFromSunAddr: PROC[address: Rope.ROPE¬NIL, port: CARD32] RETURNS [netAddressRope: Rope.ROPE]; <> GetUniqueID: PROC RETURNS [CARD32]; <> }. <> <> <<>> <> <> <> <<>> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<>> <<>> <<>>