BluejaySmarts.mesa
Copyright © 1986 by Xerox Corporation. All rights reserved.
Initial skeleton Implementation for Bluejay Smarts
Last modified by D. Swinehart, October 19, 1986 4:05:00 pm PDT
Doug Terry, November 18, 1986 4:09:40 pm PST
DIRECTORY
Jukebox  USING [ IntervalSpecBody, VoiceDirection ],
MBQueue USING [ Queue ],
Rope   USING [ ROPE ],
Thrush  USING [ ConversationID, ConvEventBody, Credentials, EncryptionKey, KeyTable, NB, nullConvID, PartyID, SmartsID, SHHH ],
ThSmarts,
VoiceStream USING [ Handle ]
;
BluejaySmarts: CEDAR DEFINITIONS = {
Permanent and variable information needed to support the operation of a Smarts
JayInfo: TYPE = REF JayInfoBody;
JayInfoBody: TYPE = RECORD [
credentials: Thrush.Credentials,
shh: Thrush.SHHH,
stream: VoiceStream.Handle←NIL,
conversations: LIST OF ConvDesc ← NIL,
intervalReqs: LIST OF IntervalReq ← NIL,
notifications: MBQueue.Queue←NIL,
numNotifications: INT𡤀,
reportsExist: CONDITION,
currentConvID: Thrush.ConversationID ← Thrush.nullConvID
];
infos: ARRAY[0..100) OF JayInfo;
Unique ID's for intervals within a conversation
IntID: TYPE = LONG CARDINAL;
nullIntID: IntID = 0;
Specifications retained by BluejaySmartsImpl to keep track of Interval requests.
firstInterval=TRUE => $started and $scheduled events should be passed through to client.
lastInterval=TRUE => $finished events should be passed through to client.
      $flushed events should always be passed through if reportRequested.
 (intended usage: multiple-interval voice ropes that result in only one sequence of client reports.)
IntervalReq: TYPE = REF IntervalReqBody;
IntervalReqBody: TYPE = RECORD [
iSpec: Jukebox.IntervalSpecBody,
direction: Jukebox.VoiceDirection,
cDesc: ConvDesc,
requestingParty: Thrush.PartyID, -- not cDesc.situation.other, since could be more than rqstr.
intID: IntID ← nullIntID,
firstInterval: BOOL,
lastInterval: BOOL,
reportRequested: BOOLFALSE
];
Description of the participation of a Bluejay Smarts in a single conversation. In this Smarts, the division of information between ConvDesc and Info is rather arbitrary, since the Smarts can be active in only one conversation anyhow. What's kept here is the stuff that's needed to send supplicants begging.
ConvDesc: TYPE = REF ConvDescBody;
ConvDescBody: TYPE = RECORD [
info: JayInfo,
situation: Thrush.ConvEventBody,
keyTable: Thrush.KeyTable←NIL,
keysMightBeDistributed: CONDITION, -- for waiting for keys to distribute, see ..Impl
keysDistributed: BOOLFALSE
];
GetConversation: PROC [smartsID: Thrush.SmartsID, conv: Thrush.ConversationID] RETURNS [nb: Thrush.NB, cDesc: ConvDesc];
DistributeKey: PROC [cDesc: ConvDesc, key: Thrush.EncryptionKey, wait: BOOLFALSE] RETURNS [nb: Thrush.NB, keyIndex: [0..17B]];
SetInterval: PROC [IntervalReq] RETURNS [nb: Thrush.NB];
}.
Doug Terry, July 29, 1986 11:13:23 am PDT
Added SetInterval as exported procedure; removed dependency on VoiceTemp/VoiceRope.
changes to: DIRECTORY, IntervalReqBody, handle, SetInterval
Doug Terry, August 18, 1986 2:13:23 pm PDT
Added intID to IntervalReqBody and as a parameter to SetInterval.
changes to: IntervalReqBody, SetInterval
Doug Terry, August 19, 1986 10:55:20 am PDT
Exports GetConversation.
changes to: GetConversation, SetInterval
Doug Terry, August 25, 1986 5:00:54 pm PDT
Added DistributeKey.
changes to: SetInterval, GetConversation, DistributeKey, DIRECTORY, ConvDescBody
Doug Terry, November 18, 1986 4:09:40 pm PST
Moved shared data to the RecordingServiceRegister interface.
changes to: BluejaySmarts, ConvDescBody, JayInfoBody, DIRECTORY