/*
RPCPktIOb.c
L. Stewart March 31, 1983 2:56 PM, split from rpcpktio.c.
L. Stewart May 4, 1983 3:38 PM, BindingRopes.
L. Stewart June 6, 1983 11:06 AM, 256 byte Pups.
*/
#include <Context.h>
#include <Queue.h>
#include <Env.h>
#include <Signal.h>
#include <rpc.h>
#include <rpcinternal.h>
#include <rpclupine.h>
#include <rpcpkt.h>
extern EnqueueAgain();
extern EnqueueBcst();
extern ServerMain();
extern struct Queue idlerQ;
extern struct Queue *myCtxQ;
extern struct Machine myHost;
extern BindingInitialize();
extern SecurityInitialize();
struct Port {
union Machine m;
struct Socket s;
};
RPCInitializeCtx(hearBroadcasts)
int hearBroadcasts;
{
int i, tmr;
struct Port port;
struct Machine m;
InitPupLevel1 (myCtxQ, 28, 230); /* for 256 byte ether packets */
for (i = 0; i < 4; i += 1) {
RequestRoute(0); /* Initialize Routing tables */
Dismiss(100); /* Wait for multiple response packets to arrive */
/* Based on a superstition that late arrivals mess up the time stuff */
SetTmr(2000, &tmr);
while (!TmrExp(&tmr)) {
m.w = GetPupHost();
if (m.b.net != 0) goto Break2;
Block();
};
};
Break2:
InitCalendar(4); /* Get time of day set up */
port.m.w = myHost.w = GetPupHost();
port.s.ms = port.s.midS = 0;
port.s.LS = rpcSocket;
OpenLevel1Socket(&port, &EnqueueAgain, 0);
port.s.LS = rpcBcstSocket;
if (hearBroadcasts) OpenLevel1Socket(&port, &EnqueueBcst, 0);
BindingRopes();
AgentRopes();
BindingInitialize();
SecurityInitialize();
StreamInitialize();
InitQueue(&idlerQ);
for (i = 1; i < 4; i += 1)
StartNProcess("RPCServer", myCtxQ, &ServerMain, 300, 90);
};
RPCRestart()
{
StreamRestart(); /* forget connection counts */
SecurityRestart(); /* invalidate local conversations */
BindingRestart(); /* nothing? */
};