DIRECTORY Basics USING [Card16FromH], SunPMapLocal USING [ipProtocolUDP, SetLocal], SunRPC USING [CreateServer, Error, GetCard32, GetF, GetRope, GetServerPort, Handle, PutCard32, PutF, Server, ServerProc, StartReply], SunRPCAuth USING [Conversation], SunYPBind USING [domain, DomainName, null, program, programVersion, RequestDomainBinding, ResponseBinding, ResponseCode, setdom], SunYPBindServer USING [Domain, Null, Setdom] ; SunYPBindServerStub: CEDAR PROGRAM IMPORTS Basics, SunPMapLocal, SunRPC, SunYPBindServer ~ { Handle: TYPE ~ SunRPC.Handle; Conversation: TYPE ~ SunRPCAuth.Conversation; fastTimeout: CARD _ 200; slowTimeout: CARD _ 2500; defaultRetries: CARD _ 4; noRetries: CARD _ 0; Serve: SunRPC.ServerProc -- [h: Handle, c: Conservation, proc: CARD, clientData: REF] -- ~ { SELECT proc FROM SunYPBind.null => ServeNull[h, c]; SunYPBind.domain => ServeDomain[h, c]; SunYPBind.setdom => ServeSetdom[h, c]; ENDCASE => ERROR SunRPC.Error[$wrongProc]; }; ServeNull: PROC [h: Handle, c: Conversation] ~ { SunRPC.StartReply[h]; SunYPBindServer.Null[h, c]; }; ServeDomain: PROC [h: Handle, c: Conversation] ~ { domainName: SunYPBind.DomainName; resp: SunYPBind.ResponseBinding; domainName _ SunRPC.GetRope[h]; SunRPC.StartReply[h]; TRUSTED { resp _ SunYPBindServer.Domain[h, c, domainName] }; WITH r: resp SELECT FROM success => { SunRPC.PutCard32[h, SunYPBind.ResponseCode.success.ORD]; SunRPC.PutF[h, LOOPHOLE[r.binding.address]]; SunRPC.PutCard32[h, r.binding.port]; }; failure => { SunRPC.PutCard32[h, SunYPBind.ResponseCode.failure.ORD]; SunRPC.PutCard32[h, ORD[r.errorCode]]; }; ENDCASE => ERROR; }; ServeSetdom: PROC [h: Handle, c: Conversation] ~ { req: SunYPBind.RequestDomainBinding; req.domainName _ SunRPC.GetRope[h]; req.binding.address _ LOOPHOLE[SunRPC.GetF[h]]; req.binding.port _ SunRPC.GetCard32[h]; req.version _ SunRPC.GetCard32[h]; SunRPC.StartReply[h]; SunYPBindServer.Setdom[h, c, req]; }; theServer: SunRPC.Server; Init: PROC ~ { theServer _ SunRPC.CreateServer[pgm~SunYPBind.program, version~SunYPBind.programVersion, serverProc~Serve, concurrency~3]; [] _ SunPMapLocal.SetLocal[SunYPBind.program, SunYPBind.programVersion, SunPMapLocal.ipProtocolUDP, Basics.Card16FromH[SunRPC.GetServerPort[theServer]]]; }; Init[]; }... dSunYPBindServerStub.mesa Demers, September 8, 1987 9:05:59 pm PDT Types Parameters Procedures Κ4˜code™K™(K˜—šΟk ˜ Kšœœ˜Kšœ œ˜-Kšœœy˜…Kšœ œ˜ Kšœ œr˜Kšœœ˜,K˜K˜—šΟnœœ˜"Kšœ.˜5K˜head™Kšœœ˜Kšœœ˜-—™ Kšœ œ˜Kšœ œ˜Kšœœ˜Kšœ œ˜—™ šžœΟc?œ˜\šœ˜Kšœ"˜"Kšœ&˜&Kšœ&˜&Kšœœ˜*—K˜K˜—šž œœ!˜0J˜J˜K˜K˜—šž œœ!˜2K˜!K˜ K˜K˜Kšœ5˜<šœ œ˜˜ Kšœ3œ˜8Kšœœ˜,K˜$K˜—˜ Kšœ3œ˜8Kšœœ˜&K˜—Kšœœ˜—K˜K˜—šž œœ!˜2Jšœ$˜$K˜#Kšœœ˜/K˜'K˜"K˜K˜"K˜K˜—K˜K˜šžœœ˜Kšœz˜zKšœ™˜™K˜K˜—˜K˜——K˜——…—Ψ p