DIRECTORY ArpaUDP USING [Address], Basics USING [HFromCard16], SunPMap USING [callit, dump, getPort, ipProtocolUDP, MapEntry, null, program, programVersion, set, udpPort, unset], SunPMapServer USING [Callit, Dump, GetPort, Null, Set, Unset], SunRPC USING [CreateServer, Error, GetCard32, GetRefText, Handle, PutCard32, PutRefText, Server, ServerProc, StartReply], SunRPCAuth USING [Conversation] ; SunPMapServerStub: CEDAR PROGRAM IMPORTS Basics, SunRPC, SunPMapServer ~ { Address: TYPE ~ ArpaUDP.Address; Handle: TYPE ~ SunRPC.Handle; Conversation: TYPE ~ SunRPCAuth.Conversation; MapEntry: TYPE ~ SunPMap.MapEntry; fastTimeout: CARD _ 200; mediumTimeout: CARD _ 500; defaultReplyTTL: CARDINAL _ 2; defaultRetries: CARD _ 2; noRetries: CARD _ 0; Serve: SunRPC.ServerProc -- [h: Handle, c: Conservation, proc: CARD, clientData: REF] RETURNS [doReply: BOOL, replyTimeToLive: CARDINAL] -- ~ { doReply _ TRUE; replyTimeToLive _ defaultReplyTTL; SELECT proc FROM SunPMap.null => ServeNull[h, c]; SunPMap.set => ServeSet[h, c]; SunPMap.unset => ServeUnset[h, c]; SunPMap.getPort => ServeGetPort[h, c]; SunPMap.dump => ServeDump[h, c]; SunPMap.callit => ServeCallit[h, c]; ENDCASE => ERROR SunRPC.Error[$wrongProc]; }; ServeNull: PROC [h: Handle, c: Conversation] ~ { SunRPC.StartReply[h]; SunPMapServer.Null[h, c]; }; ServeSet: PROC [h: Handle, c: Conversation] ~ { program, version, protocol, port: CARD32; success: BOOL; program _ SunRPC.GetCard32[h]; version _ SunRPC.GetCard32[h]; protocol _ SunRPC.GetCard32[h]; port _ SunRPC.GetCard32[h]; SunRPC.StartReply[h]; success _ SunPMapServer.Set[h, c, program, version, protocol, port]; SunRPC.PutCard32[h, IF success THEN 1 ELSE 0]; }; ServeUnset: PROC [h: Handle, c: Conversation] ~ { program, version: CARD32; success: BOOL; program _ SunRPC.GetCard32[h]; version _ SunRPC.GetCard32[h]; SunRPC.StartReply[h]; success _ SunPMapServer.Unset[h, c, program, version]; SunRPC.PutCard32[h, IF success THEN 1 ELSE 0]; }; ServeGetPort: PROC [h: Handle, c: Conversation] ~ { program, version, protocol: CARD32; port: CARD32; program _ SunRPC.GetCard32[h]; version _ SunRPC.GetCard32[h]; protocol _ SunRPC.GetCard32[h]; SunRPC.StartReply[h]; port _ SunPMapServer.GetPort[h, c, program, version, protocol]; SunRPC.PutCard32[h, port]; }; ServeDump: PROC [h: Handle, c: Conversation] ~ { EachMapEntry: PROC [mapEntry: MapEntry] ~ { SunRPC.PutCard32[h, 1]; SunRPC.PutCard32[h, mapEntry.program]; SunRPC.PutCard32[h, mapEntry.version]; SunRPC.PutCard32[h, mapEntry.protocol]; SunRPC.PutCard32[h, mapEntry.port]; }; SunRPC.StartReply[h]; SunPMapServer.Dump[h, c, EachMapEntry]; SunRPC.PutCard32[h, 0]; }; ServeCallit: PUBLIC PROC [h: Handle, c: Conversation] ~ { program, version, proc: CARD32; args: REF TEXT; port: CARD32; result: REF TEXT; program _ SunRPC.GetCard32[h]; version _ SunRPC.GetCard32[h]; proc_ SunRPC.GetCard32[h]; args _ SunRPC.GetRefText[h]; SunRPC.StartReply[h]; [port, result] _ SunPMapServer.Callit[h, c, program, version, proc, args]; SunRPC.PutCard32[h, port]; SunRPC.PutRefText[h, result]; }; theServer: SunRPC.Server; Init: PROC ~ { theServer _ SunRPC.CreateServer[SunPMap.program, SunPMap.programVersion, Serve, Basics.HFromCard16[SunPMap.udpPort], 3, NIL]; [] _ SunPMapServer.Set[NIL, NIL, SunPMap.program, SunPMap.programVersion, SunPMap.ipProtocolUDP, SunPMap.udpPort]; }; Init[]; }... `SunPMapServerStub.mesa Demers, October 8, 1987 5:40:09 pm PDT Types Parameters Procedures Κ³˜code™K™&K˜—šΟk ˜ Kšœœ ˜Kšœœ˜Kšœœf˜sKšœœ+˜>Kšœœm˜yKšœ œ˜K˜K˜—šΟnœœ˜ Kšœ˜%K˜head™Kšœ œ˜ K˜Kšœœ˜Kšœœ˜-K˜Kšœ œ˜"—™ Kšœ œ˜Kšœœ˜Kšœœ˜Kšœœ˜Kšœ œ˜—™ šžœΟcrœ˜Kšœ œ˜Kšœ"˜"šœ˜Kšœ ˜ K˜Kšœ"˜"Kšœ&˜&Kšœ ˜ Kšœ$˜$Kšœœ˜*—K˜K˜—šž œœ!˜0J˜J˜K˜K˜—šžœœ!˜/Kšœ"œ˜)Kšœ œ˜K˜Kšœ˜Kšœ˜Kšœ˜K˜KšœD˜DKšœœ œœ˜.K˜K˜—šž œœ˜-Kšœ˜Kšœœ˜Kšœ œ˜K˜Kšœ˜K˜Kšœ6˜6Kšœœ œœ˜.K˜K˜—šž œœ!˜3Kšœœ˜#Kšœœ˜ K˜Kšœ˜Kšœ˜K˜Kšœ?˜?Kšœ˜K˜K˜—šž œœ!˜0šž œœ˜+Kšœ˜Kšœ&˜&Kšœ&˜&Kšœ'˜'Kšœ#˜#K˜—K˜Kšœ'˜'Kšœ˜K˜K˜—šž œœœ!˜9Kšœœ˜Kšœœœ˜Kšœœ˜ Kšœœœ˜K˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜K˜KšœJ˜JKšœ˜Kšœ˜K˜K˜—K˜K˜šžœœ˜Kšœxœ˜}KšœœœS˜rK˜K˜—K˜—K˜—J˜J˜J˜—…— &9