<> <> <> <> November 24, 1986 6:57:23 am PST VU Change the way VU works. Have everybody register on a list so that when VU is issued, you get all those. If you join the list when it's in effect, you add yourself? November 22, 1986 5:01:10 pm PST Thrush Eliminate all the BTree and BTreeSimple stuff from ThNet and Thrush.df November 22, 1986 3:21:26 pm PST Cedar Need a way to control the timeout behavior of individual RPC calls. The proposal is to add a maxTimeouts field to the ConversationObject in RPC, use it when non-zero to control timeouts in RPCPktIO.PktExchange, and add an interface to set it. Will require own version of VoiceUtils, since NamesGVAuthImpl imports RpcInternal! 1. Produce own version of RPCRuntime (again) to /voice/voice/dcs/, install in basic.loadees, make a checkpoint, make sure the system runs (try Walnut). (60) RPCPktIO knows about the concrete value for conversation handles. 2. Produce own version of VoiceUtils, just to accommodate. Try to minimize excess files. (60) 3. Make Intervoice. 4. Make Thrush, LarkSynthesizer, Bluejay if necessary. 5. Make Finch, FinchSynth, whatever. 6. Experiment with timeouts. 7. Implement a timeout to Larks of 4 for operational Larks, something very large for others. Or extend the model to include the "don't do it" flag. Want a way also to force timeouts when debugging, or to inhibit timeouts when operational, based on parameter settings. 8. Experiment with different values for the Lark to server timeout. 9. Implement the best of those timeouts for operational Larks, "don't do it" for others. Want to do this only at machine initialization, so it may be tricky. October 13, 1986 9:23:34 am PDT All Impose a notation for $nb-assignment, and possibly use. Write a program to generate a registry of nb codes, where assigned and where tested. See if existing cross-reference stuff will help. Put it in a Loganberry database? October 2, 1986 6:42:37 pm PDT Thrush Convert WhitePagesCNF stuff to LoganBerry, dammit. August 9, 1986 3:22:26 pm PDT Thrush Need a test suite -- manual stuff to do to test specific cases. August 9, 1986 3:22:26 pm PDT Thrush Design methods for recording calls, playing back stuff to all/chosen parties. Needs flexibility, needed also for radio broadcasts and such, for one-way traffic on some links, dynamically determined. June 28, 1986 10:37:22 am PDT Thrush Longer-term solution to the ringing-once-per-cycle problem: Callers who can't get through immediately should be able to persist: must be able to recognize rejection states from callees. Callees willing to allow calls to persist and even eventually succeed must enter states they can get out of. Maybe inactive is good enough? Callers, similarly, when they want to persist, must enter states they can later get out of. Error may work, except for the special treatment of notReallyInConv that might conflict. Now things like increasing the priority, if reported as events, could allow real-time alteration of the treatment of existing calls, and like that. June 27, 1986 10:07:59 am PDT Lupine Recent observations: UnimportInterface is not "SAFE" in control interfaces. It is in the impl, so it's a bug. All procs should check "bound" and raise Unbound if not there. Otherwise, clients have to catch VM.AddressFault and assume that means unbound. Consider having Lupine and RPC.StartCall do the checks for unbound and work together to do imports automatically, assuming that some default values are around from last time or something. Allows automatic recovery from server restarts, failure to reconnect after rollbacks, and so on. Lupine needs to combine BinderImpl with ClientImpl, implement BinderImpl stuff only for multiple-imports interfaces, ClientImpl stuff only for single ones, provide a local interface record as part of what ServerImpl does (result of an import on the same machine!, or maybe a separate optional procedure that returns NIL if it can't be done?), eliminates all the non-relevant stuff, like Interface records for single-import versions and such. June 26, 1986 9:32:57 am PDT Recorded voice Doug or I has to decide how to use the ambient-level stuff, experiment with thressholds. It is now possible to set the silence threshhold for a Lark from Thrush, by the way. June 22, 1986 9:07:53 pm PDT Finch Conversation ID management in Finch is a total mess. Everybody seems to have to know who's who. Some don't. Idea: have a notion of "the connection to the voice service". Seldom valuable to have more than one, and in those cases we'll be controlling it. Use it if it's around. Inactivate it when not in use (rather than shutting it down in Lark) and Zap only after a while. Can inactivate when receiving incoming calls, etc., too. Maybe Flush and restart. Food for thought. <> <> <> February 16, 1986 3:25:59 pm PST VoiceRopes WalnutVoice command should accept spec of no server; WalnutVoice implementation throughout should be willing to assume that LoganBerry is local, and not import it. Better yet, determine thorugh inspection that LoganBerry is local? <> August 7, 1986 5:19:44 pm PDT Thrush Doing Visiting incrementally (major revision, which feels like it will work): Add ThParty.Visit and ThParty.Unvisit. Only $individuals can be visited. Visitors can be $individuals or $telephones. Visiting means that Alert will alert the visitor and the visitee, independently. Alert will include the intended party as well as the actual party, which will be available everywhere. Only reason this can't be done by visiting Finch is that visiting Finch might not exist; Lark has to do it. Possibly all visiting cancellations can be done from smartses, though. Before notifying the visitee, Alert will copy visitor's ring tune, with short timeout, so that call rings in with caller's tune. Or maybe the visitee can do that, using the intended-party info (TBD how that is passed on to called party.) In line with smarts taking over more of the action. It's simpler than that. SetupRingTunes in LarkSmartsSupImpl simply chooses the intended party's tune over the called party's tune. The right thing happens. Should also choose all the other intended party's attributes, except type. Non-answering site should not go on ringing forever. Choices (choose some): drop out immediately drop out after a while, ringing all the way; answering possible until then. remain in ringing state, but shut up, either for a while or for the duration. (problematic, since can't use phone for anything else then.) Use database to record options. Should drop out immediately if conversation if maxState>ringing and anybody quits while we're still ringing! Is that hard to detect? Only if originator drops out for any reason, will do. 1. Do new idlerg case (quit if originator has quit). 2. Do rgck stuff to select a (small) range of values of things to do: key=$multiring quit right away when anybody answers (drop out) $false quit after a time when anybody answers (ring until then) $#, representing seconds to ring keep ringing forever until locally answered $true (intended to be used with timed db entry; Finch can set this, but should set so it has to continually renew. Finch should also be able to put call in some non-ringing limbo state (inactive) until answered or something. Finch could also change the tune and # temporarily, and allow ringing to continue (has been answered though -- how to get anybody to notice the changed tune????) Hmph. Default: $false. 3. Do we need a way to suppress answer for a tad so Finch can deal with what answering means, too? deferringing, deferanswer should be separate values. Not yet. Would even like to be able to suppress going idle when others quit. Would allow Finch to keep connection to voice server alive. Maybe should support this one. Problem is it's a bugger to do on a timed basis. Not yet. 4. deferanswer should affect Rejected calls, allowing Finch to manage multiple calls, select among them, and so on. Try to arrange for visiting to "take" while ringing is in progress! That takes special-casery. Visit command searches around for that particular state and does an Alert? If A visits B, then B phones A (making B busy), current result is that B's Finch doesn't get an abandoned line (??), and also the ring tunes are as if A phoned A; and B gets no ringback tone at all -- bug. Absence of narcissism testing in the 2d notify case? But must now once and for all decide how to handle multiple calls in LarkSmarts; once past the notification hurdle, that is. Must somehow assume that it's OK to be in multiple conversations, and that somebody else will take care of the adjudication (like multiple-activeness). Just finish the inactive/mustActive .... state table and hope for the best. Almost anything will cancel visiting, including call-initiation from visitor home site, or deaths of anybody at all. Cancellation of visiting doesn't a priori cancel any calls. Do we really want to cancel when calls originate from visitor home site? Somebody else might be using that phone. Leave it alone until manually cancelled, for now. Time out visiting once it's done in the database. Need a way to manually cancel from visited site or from visitor's home base! Check minor Finch simple stuff. Concern about conferences and trunks. Should find low-level smarts-level way to avoid trying to conference a back door with anything. Foo. Narcissism is caught at GetParty time. It should happen only at Alert time, and only if all attempts to notify were unsuccessful. Maybe narcissism should be detected and generated only by the called smarts? That's a more radical move. June 29, 1986 12:37:56 pm PDT Thrush The $voiceTerminaBusy thing still isn't settled. BD incoming calls with FD offhook don't alert the connected Finch. Test s/b based on consistency check F[telsetState, larkSmartsState, larkTrunkSmartsState, larkState, ringDetState?] returns {ok, conflict, impossible}: conflict is a conflict between FD and BD, where one is already active; impossible is an error state that needs fixing. EnterLarkState calls it to be sure things are OK and fails if not. Others can call when change is imminent, to determine whether, for instance, to open a conversation, or to advance/cancel one. Maybe EnterLarkState could reduce the number of internal tests, then. Is this the same as April 24, 1986 3:17:04 pm PST? June 29, 1986 11:22:50 am PDT Thrush Finch death during a forwarded BD call causes partitioning or something: hanging up the FD doesn't cause the Lark with the BD to hang up. Check Poaching/substitution algorithms. Consider putting all parties into the conversation. <> July 1, 1986 7:41:42 am PDT Thrush Putting poacher and poachee into conversation made easier by sharing state among them? Still have the increased incidence of $stateMismatch to worry about, which is only need for loops. <> <> <> <> <> <> June 19, 1986 8:51:48 pm PDT Thrush/Finch Consider ThParty call that returns updated ConvEvent (self=other) to update state. Then stateMismatch can be upgraded in a loop. Consider NoteNewState change so it never does anything directly (never does, anyway, except during notification, which has to be the first we've heard of the event anyway. Can the WhatNeedsDoing stuff be pruned further? <[]= rather than [] = ; now all the parties and state to a conversation can be found by using the conversation as an attribute! The other searches are fast due to $Party attributes and so on. Sounds like a winner, but wait.>> <<>> <> February 17, 1986 6:08:55 pm PST Finch 5. Finch, when told that self is no longer poaching, or when it drops out, should unselect the present conversation and either make a separate conv log entry (not all entries need be conv Descs any more, could have entry for each connection and disconnection!) or record dubiousness in last entry. Mostly won't know about these situations, because server will forget about us. How to tell when one has been hung up on? Need a function in FinchSmarts in case there's still communications. Does this beat against the Queue flushing that's done (is it?) when a Smarts goes away? Maybe should be flushed only if communications fails. This might happen when a new poacher comes along. <> <> FinchToolImpl.CheckActive: PUBLIC PROC[handle: FinchTool.Handle] RETURNS[active: BOOL_FALSE] = TRUSTED { <> IF handle#NIL AND handle.finchActive THEN RETURN[TRUE]; StartFinch[]; RETURN[handle.finchActive]; }; tries to return NIL.finchActive if Finch not active when called. Looks like StartFinch was supposed to fill in handle. Breaks because even if StartFinch produces a handle, if there wasn't one before there still isn't. So the "Phone" command, issued before Finch has been manually started, fails. <> July 15, 1986 7:14:11 pm PDT Thrush/Finch Polling doesn't scale, if it's the primary means. But it is necessary to catch deaths that occur during hiati in communications. Right now there's no polling at all in the voice system. And there needs to be. Alternative: make it always harmless to have a hiatus; for instance, Finch can catch up with the call log when it and the server have been out of contact. June 17, 1986 10:45:54 pm PDT Lark Think about having Zap clear out voice-related sockets somehow, to save on the number of necessary calls. Probably the non-zapping version was trying to save on calls. There can still be a 400A occasionally, when things go wrong. Rebooting will usually be OK in these situations, though. January 19, 1986 3:42:40 pm PST Finch When Finch drops out, most recent conversation log entry remains selected. Should probably put distinctive value in there and deselect. If Finch restarts during same conversation, either compare convID's or just start a new entry. <> November 26, 1985 4:09:21 pm PST Finch Finch checks in once in a while, re-registers if gone. November 26, 1985 4:09:21 pm PST Thrush P: showslower: no good methodology for killing and reregistering Bluejay parties -- automatically, anyhow. <<>> <> November 26, 1985 4:09:21 pm PST Thrush Monitor-lock what's necessary in Party/Smarts creation. Maybe everything. <> July 7, 1986 6:02:37 pm PDT Thrush/Finch Why can't failures be treated as user-generated events? Main problem is that failures want to make things go away, but sometimes while others still believe they exist. Sigh. <> <> <> November 26, 1985 4:09:21 pm PST Thrush Still need quicker timeout LarkSmarts->Lark. Party -> FinchSmarts can now take longer. <> April 21, 1986 3:40:20 pm PST Thrush Service larks (T-T-S, radio) are defenseless against back-door callers (except by not plugging in the back door, of course). There's no way to detect when the other party hung up. No dial-tone or click-detection, and anyway, in the case of the radio server, the hybrid bounce from one's own noise would drown out any ability to do it. <> <<>> <> <> June 22, 1986 9:14:55 pm PDT Thrush Need some diagnostics for reportsOutstanding stuff. Count # remaining in each Party, maybe log the calls as they're made or something. Something's getting lost when things don't shut down just right. June 11, 1986 6:19:11 pm PDT Finch Maybe don't have to analyze error situation in Thrush, but Finch is truly a mess, and adding side paths for VoiceRopes makes it worse. Have really got to get that under control. Monitors, when and where to complain, and the like. Look at VoiceDB stuff for some guidance in options of who reports and all. June 11, 1986 1:13:10 pm PDT All Need to collect up the various values of nb, service reports, and so on, to make a UserProfile-like catalog. Not easy, due to indirections. May 1, 1986 1:12:11 pm PDT Intervoice Document nb=$voiceTerminalBusy case, change of $noTrunkParty to $noRelatedParty. May 4, 1986 11:49:14 pm PDT Finch Need specific tests in FinchSmarts for $voiceTerminalBusy, and a better response in error log. "no valid party found" should be replaced by the comment if there is one on failure. <> March 2, 1986 11:42:24 am PST Intervoice Better Intervoice errors, instead of or in addition to "Complain". Complain is convenient for them as don't want to handle errors, though. February 2, 1986 1:21:03 pm PST Intervoice Intervoice.Open.Complain should include an ec atom, as well as the complaint. Can be ignored for now. May also want Intervoice.Error (or have it in place of Complaint), with same parameters. December 18, 1985 11:21:07 am PST Finch The error reporting/management in FinchSmarts is as confusing as ever. Some things are reported as problems directly by FinchSmarts, others in a form of conversation state reporting to FinchSmarts client. Most of the error checking in the present rendition is minimal, awaiting a thorough review. FinchTool will just have to cope. <> December 18, 1985 11:47:13 am PST (optional) All progress report (pd.reports) output has been removed from both Thrush and Finch. Consider what's needed when thinking about statistics gathering, logging, error management. <<>> <> June 26, 1986 9:33:49 am PDT All Document briefly the list of recent improvements. April 28, 1986 1:18:55 pm PDT DOC Document new meanings for **7, **8, **9, *0name# => *name#, new monitor-mode stuff (hard). <> <> October 19, 1986 2:46:01 pm PDT BluejaySmarts Multiple-interval ropes don't work on playback. The connection shuts down too soon, then subsequent attempts to play are fouled up. When the connection is held open by the speaker switch or the handset, things work fine. Here's what's happening: 1. Ropes are requested by unique ID, but tune intervals are scheduled for reports. The same unique ID is reported $scheduled, $started, and $finished more than once, internal to the playing of the rope. The first $finished shuts down the connection. Will try to find a way to avoid that, but it's not real easy. Introduce concept in BluejaySmarts of "firstInterval" and "lastInterval", and the notion that some events are only reported for former-style intervals, and some only for latter-style. 2. When the conversation shuts down, remaining reports are stranded. They don't just effervesce, probably because of the hair surrounding reports coming from Bluejay. Not sure how serious this is. Perhaps they eventually flush out without further damage. This has been partially corroborated. If the next conversation connects to the smarts before the old conversation has been deleted, the reports get through to the Finch, too. They probably shouldn't. 3. In general, shutdown of Bluejay connections isn't too clean. When things are aborted, esp. by closing the conversation, buffer VM appears to be released before everybody's done with it, and like that. <> August 14, 1986 11:23:03 pm PDT Thrush Need a way to register behaviors with LarkSmarts. Could be through additional smarts mech., but they're gone. In any case, things like call filters and so on should be handled that way. Prose specials, all that sort of thing. Too much is done in line. General registration mechanism. Extension of service registration? Don't know. Not an issue if Finch is supposed to do most of the hairy stuff. June 19, 1986 11:14:21 pm PDT Thrush? Maybe the first key table distribution should be done by report? Would be a lot cleaner than present LarkSmartsSupImpl scheme. Look into it. December 20, 1985 4:41:30 pm PST Finch (optional) Would still be nice to have Finch <-> Lark communications. DB model, remember. For instance, to capture partially dialed numbers. March 14, 1986 6:59:43 am PST VoiceRopes Should Tune-archiving information be written into Tune headers, along with keys, voiceFileID's, creators? March 2, 1986 11:41:58 am PST VoiceRopes Voice Ropes: short expiration possible, as well as the two week kind. March 2, 1986 11:43:27 am PST VoiceRopes If one records a long rope, one might want a way to checkpoint the partial results, or at least record the existence before it completes/shortly after it starts. Also, want unvoice-activated terminations ---- recordings that stop when the speaker stops for long enough. March 2, 1986 11:44:04 am PST VoiceRopes Silence threshhold is something Bluejay could pay attention to on recording, independent of Lark choices. February 22, 1986 3:48:57 pm PST Thrush Rework all the user profile values, combine where possible, use Intervoice prefix February 4, 1986 8:37:38 am PST VoiceRopes LoganBerry calls from VoiceDB are not encrypted (!!) January 30, 1986 5:47:28 pm PST VoiceRopes At present, WalnutVoice will make a voiceFileID entry when a recording is made, and then retain it even if the message is never sent. In the voice ropes design, there needs to be a way to avoid that and make it available for collection immediately. Possibly an expiration-interest, which starts out set at an hour and is boosted to two weeks just before sending. January 27, 1986 7:03:14 pm PST VoiceRopes Walnut forwarding needs to have hooks allowing programs to run. For instance, the VoiceFileID's of the forwarded message need to be able to be substituted. We also need a way to recopy (forward assuming you're sending it again.) December 18, 1985 12:04:27 pm PST Thrush I'm no longer convinced that queueing is needed in the Smarts at all. Probably one for the Lark keyboard, just to keep the characters flowing, but otherwise, now that conversation state is reported back for each call, it may not be necessary. Seems artificial every time I queue something. WaitForActive also has to do something like that, but a simple condition variable thing might well be good enough there; Progress is reported in its own process. December 18, 1985 11:52:01 am PST Thrush During connect attempt, if get "initiating" in but "notified" fails, should enter error state or something  all smarts. Unlikely event, though. December 18, 1985 11:52:35 am PST Thrush Think about whether a common set of smarts implementations at some level would make sense. <> <> <> <> <> <> <> <<$Visiting not implemented.>> November 26, 1985 4:09:21 pm PST Thrush Make sure there are routines for setting conversation attributes (subject, urgency, ...) after initial creation. <> <> November 26, 1985 4:09:21 pm PST All Logging, statistics, performance measurement. <> August 12, 1986 6:13:17 pm PDT All Idea: many smartses seem to need (1) notification when something happens and sometimes (2) a way to wake up once in a while even if something hasn't happened (most recent example: ringing for only a while after somebody else has answered, and in fact somebody else might have answered first. Can we do anything at ThParty level to regularize this? Notify in time t would be fairly easy (all or just me!). Would be nice to have some value that would travel across and back without damage, so that the notification could include, for example, a call-back proc!!!!! See, the trouble with waiting for some event is the standard problem with waiting for two kinds -- user input and the other kind. Could we just do smarts behaviors all by Progress events? So that all smarts actions are defined by stream of such things. Like lists of ref any or something? Then with the timeout, we've got something manageable, sort of. What is then the relationship of this to what WS clients of smarts do? Have to think this out. In meantime, just do something. June 2, 1986 7:48:16 am PDT All Think about adding a local interface record to the service registration stuff. All these interfaces must be of the multiple-import type, just to avoid hassles. Document that, too. <> April 21, 1986 3:40:20 pm PST Thrush Pity DTMF detectors also don't do dial tones, busy tones, and the like. Maybe some do. <> <> <> <> <> <> February 23, 1986 1:49:37 pm PST What would it take to make BD all analog again? February 23, 1986 1:49:54 pm PST "who is talking" feature during teleconference, other high-performance stuff based on voice content; how to control? <> December 23, 1985 1:37:37 pm PST (optional) PartyInfo called in FinchSmarts uses nameReq: $description to get most human-sensible description. Then FinchToolImpl.ReportConversationState has to strip off extraneous stuff for calling/called party fields. nameReq: $current would usually be a better approach, but that would mean calling PartyInfo twice or convincing it to supply two ropes sometimes or something. Worth thinking about; still not there yet on what Smartses need to know. <> November 26, 1985 4:09:21 pm PST Reason, comment should be part of credentials? Seems to need to be replicated, too. Sigh. <> November 26, 1985 4:09:21 pm PST Determine degree of authentication possible for each type of registrant. Add data structures necessary to reflect authenticated/not. Use RPC-provided information where possible to be sure of authentication. November 26, 1985 4:09:21 pm PST In any session, authentication of a GVNames cache password should be renewed by client call supplying password. Present interface can handle it, but it's not presently done. <> <> October 13, 1986 9:06:58 am PDT Finch More prose stuff. Breakup function is now available to FinchProse clients, not done by FinchProseImpl. SynthesizerServer is the service interface. Rename FinchProse => FinchSynthesizer. One rope at a time into FinchSynthesizer.TextToSpeech. ConvID treatment like the recorded-voice stuff. September 23, 1986 3:06:18 pm PDT Finch Installing text-to-speech. Pulling functions from FinchSmarts to separate FinchProse interface. Eliminates ability to get at these functions through FinchProcs. Doug and I have pretty much decided that FinchProcs are unnecessary anyway; we can insist that low-level FinchSmarts stuff always be included if any of the code it depends on is to run. Can reverse this again if necessary, later. Pulling Recording stuff out and using it as a prototype for prose stuff. New interfaces and impls: FinchRecording(Impl), FinchProse(Impl). Must call FinchRecording.InitializeFinchRecording[] before calling its procedure! Doug: Why does ReportRequestState have two arguments, the second of which is always NIL? August 31, 1986 1:26:42 pm PDT All Reinstate DecTalk code (with hooks for Prose). How it works now: ThParty.SetProse: do some checks, call PostConvEvent to record the scheduling of the list of proseSpecs, insert stateID's, issue ThPartyPrivate.Supervise[] for all parties in the conversation (Wachet Auf.) This results in ThSmarts.Progress reports to all participants. This happens whether the SetProse is for request, started, or finished. <> <> <<17734 Check Idle >> <<16156 Q Entry>> <<24964 Q Final >> <<24461 Action>> <<21531 Subst>> <<17344 Progress>> <<17595 ReportCheck >> <<24299 No Action>> <<21464 No Subst>> <<17277 No Progress>> <> <> Current breaks: Current breaks: Break in ThPartyOpsImpl.DoReportAction (pos: 24299) (expr: &msg["No Action", LOOPHOLE[report.smarts, CARD], conv.numReportsOut, "\n"]) Break in ThPartyOpsImpl.DoReportAction (pos: 24461) (expr: &msg["Action", LOOPHOLE[report.smarts, CARD], conv.numReportsOut, "\n"]) Break in ThPartyOpsImpl.ReportSubstitution (pos: 21531) (expr: &msg["Subst", LOOPHOLE[report.smarts, CARD], UnsealConvE[substReport.convEvent.self.convID].numReportsOut, "\n"]) Break in ThPartyOpsImpl.ReportSubstitution (pos: 21464) (expr: &msg["No Subst", LOOPHOLE[report.smarts, CARD], UnsealConvE[substReport.convEvent.self.convID].numReportsOut, "\n"]) Break in ThPartyOpsImpl.CheckIdle (pos: 17734) (expr: &msg["Check Idle", conv.numReportsOut, conv.numIdle, "\n"]) Break in ThPartyOpsImpl.ReportProgress (pos: 17344) (expr: &msg["Progress", LOOPHOLE[report.smarts, CARD], UnsealConvE[convEvent.self.convID].numReportsOut, "\n"]) Break in ThPartyOpsImpl.ReportProgress (pos: 17277) (expr: &msg["No Progress", LOOPHOLE[report.smarts, CARD], UnsealConvE[convEvent.self.convID].numReportsOut, "\n"]) Break in ThPartyOpsImpl.ReportToParty (pos: 16156) (expr: &msg["Q Report", LOOPHOLE[pSmarts, CARD], HowToReport, conv.numReportsOut, "\n"]) October 19, 1986 5:13:52 pm PDT Bluejay Some more ropes to play with: Swinehart.pa#593268694 ABCDE Swinehart.pa#593268738 FGHIJ Swinehart.pa#593268762 KLMNO Swinehart.pa#593268822 FGHIJKLMNO, cat 2,3 Swinehart.pa#593268847 ABCDEFGHIJKLMNO, cat 1,4 Problem here was that some concatenation and substring operations yielded white noise (no key). There were two problems: substring could produce a rope that did not begin on a block boundary; concatenation of two ropes with the same key could call RegisterKey in a way that inhibited reports. Fix was to decouple key registration from the reporting, which is now launched by BluejaySmarts. October 17, 1986 1:51:45 pm PDT Bluejay and friends Set Trace BluejaySmartsImpl.DistributeKey [source: 6224] [pc: 3680] Before distribution Set Trace BluejaySmartsImpl.DistributeKey [source: 6571] [pc: 3818]. After distribution ack Set Trace LarkSmartsSupImpl.LarkReportAction [source: 5788] [pc: 2922]. key rept. to lark Set Trace BluejaySmartsImpl.ReportAction [source: 4526] [pc: 3331]. distr. ack coming in. Set Trace LarkOutImpl.EnterLarkSt [source: 7383] [pc: 3497]. Queing key table for lark Set Trace LarkOutImpl.EnterLarkSt [source: 7446] [pc: 3531]. After key table sent, in EnterLarkSt Set Trace LarkOutImpl.LarkSupervisor [source: 12500] [pc: 4972]. After sent, in LarkSup. Swinehart.pa#593070694 doug Swinehart.pa#593091270 me Swinehart.pa#593093911 cat prev. two. Swinehart.pa#593177782 me Swinehart.pa#593177868 cat prev. two, inverse order What's this all about: setting spy traces at these points on this date tracked down a (the last) problem in key distribution. LarkOutImpl wasn't properly tying itself and the Lark Supervisor together to be sure keys were out to the Lark before returning. They will, now! November 1, 1986 5:28:47 pm PST All Synthesizer stuff: remaining problem: if flushing, get no finished report these days, so connection doesn't shut down. What did old code do? Otherwise, is working reasonably well. Finish reports were not being generated in all instances. It all seems to work now, except for some confusion about keeping the conversation open and one experienced with a "picked bit" in an ActionID. October 29, 1986 12:38:00 pm PST All Finishing up Prose reintegration. Discovered a problem with DescribeParty, party name field, nameReq. Doing a complete analysis of all the disparate uses, and the funny service business in GetParty. (translate to RName and fix it up in DescribeParty is current suggestion). Here are the relevant things and where they appear. % .name ThPartyInitImpl.mesa!20 TUImpl.mesa!1 % name: ThPartyInitImpl.mesa!20 % GetRnameFromParty thrush>ThPartyInitImpl.mesa!20 thrush>ThPartyOpsImpl.mesa!23 % DoDescribeParty ThPartyInitImpl.mesa!20 ThPartyOpsImpl.mesa!23 % DescribeParty LarkSmartsSupImpl.mesa!18 LarkTrunkSmartsImpl.mesa!1 ThPartyInitImpl.mesa!20 TUImpl.mesa!1 % GetPartyInfo LarkSmartsSupImpl.mesa!18 ThPartyOpsImpl.mesa % GetPartyInfo FinchSmartsImpl.mesa % nameReq FinchSmartsImpl.mesa!27 October 22, 1986 8:48:16 am PDT All Synthesizer integration Here are the files involved in Text-to-speech synthesis to date: /Intervoice/Synthesizer: Interface to common text-breakup procedure; def of SynthSpec. /Intervoice/SynthesizerImpl: impl of same, replicate in workstations and server. /Intervoice/SynthesizerServer: Service Interface to the Synthesizers. /Finch/FinchSynthesizer: Client-level interface to Finch synth. stubs. /Finch/FinchSynthesizerImpl: Finch synth. stubs; with FinchSmartsImpl, invokes service. /Thrush/LarkSynthesizer: private interface as needed. /Thrush/LarkSynthesizerImpl: so far, just the LarkIn/Out Level of the synth. service. In LarkSynthesizerImpl, can collapse a lot of the LarkIn/Out code, put all the decision-making under the LarkInfo monitor lock, and so on. Don't intend to change the logic or data structures. In this implementation, client and client markers alternate, one each per request. In the previous version, I'm not sure that was quite true. I'm assuming this is OK. October 16, 1986 10:21:24 am PDT LarkOps, LarkB Add prFlowControl parameters: if TRUE, XON and XOFF are honored in Lark. Defaults to FALSE. October 16, 1986 9:22:15 am PDT Thrush Service party clones were given the wrong party.name values (not a true problem). Service smarts clones didn't have notification queues (a true problem). October 16, 1986 9:23:29 am PDT Thrush unused entries in key tables were not parity-corrected; other failures might cause packets to arrive at a Lark indexing these keys, resulting in key parity error failures in Lark. Now new key tables are initialized to parity-corrected null keys, unless pd. August 9, 1986 3:23:51 pm PDT Finch Way for finch to tell Thrush not to reject an extra call out of hand, using timed-persistence. Similar to solution in August 7, 1986 5:19:44 pm PDT for how long to ring the visitor home site or visited site after the call's been answered at the other site. Nope. This is just a case of the $deferanswer mode; Lark won't answer the first call or reject an extra one until the $deferanswer mode has timed out and been cancelled. November 26, 1985 4:09:21 pm PST August 9, 1986 3:25:33 pm PDT Finch P: more reasonable way for Finch to influence call progress without disposition. (only interesting time: notified. Finch can tell Thrush not to go into ringBack, or to reject an extra call, for some number of seconds. During that time Finch can make its own decisions. If the timeout ever occurs, this condition is removed. !!!!) August 5, 1986 10:42:51 am PDT August 7, 1986 5:19:44 pm PDT (abandoned to August 7, 1986 5:19:44 pm method, above) Thrush Doing Visiting incrementally: Add ThParty.Visit and ThParty.Unvisit. Only $individuals can be visited. Visitors can be $individuals or $telephones. Almost anything will cancel visiting, including call-initiation from visitor home site.I have by no means identified all the combinations that can occur; some of the attempts to cancel visiting don't work at all. Probably because some of the methods for cancelling Poaching don't work at all, along with specific bugs. Probably should guts it out and deal with all the cases. When visiting is cancelled, substitution has to occur to keep the call alive. I have no confidence in the implementation; should leave things stranded sometimes. Try at least to unvisit before cancelling poaching; will cause two substitution reports but might work, ?? $individual visitors, $individual and $telephone visitees get progress reports. $telephone of visitor, whether direct or $poachee from $individual, does not. Try to arrange for visiting to "take" while ringing is in progress! Now consider multi-ring options and the like. Requires both database and all-in stuff. May 1, 1986 10:21:06 am PDT August 7, 1986 3:41:40 pm PDT Thrush Implement simple Visitors version. Then worry about multi-ring version (change in party/conversation membership structures involved?) November 26, 1985 4:09:21 pm PST Thrush Cause $visiting to be inherited as parties die and resurface. Worth it? No. August 5, 1986 10:40:52 am PDT August 5, 1986 10:42:58 am PDT Thrush Added ThParty.UnregisterKey, which decrements a reference count that ThParty.RegisterKey increments. Zero-count keys are removed from the list. This requires a slightly different approach to searching and entering keys, since the table can now be non-contiguously allocated. February 16, 1986 2:49:39 pm PST July 17, 1986 2:03:10 pm PDT (actually, much earlier) The duration of a feep should be adjustable, esp. during a call via Feep command. For controlling inadequate stuff. Also, it should be an option whether feeps are audible; during dialing or otherwise, I guess. June 22, 1986 9:08:39 pm PDT July 16, 1986 9:35:17 am PDT Recording/Playback Things left to do: Clip around recorded stuff in RecordPlayImpl. Get TiogaVoice working? Check out remaining flakeys. June 28, 1986 10:41:25 am PDT July 16, 1986 9:18:04 am PDT Thrush/Finch Implement the hack that lets Finch decide whether to answer calls, defaulting (permanently) to the standard behavior in small numbers of seconds. Design: gvnames..pa.lark.deferanswer: enables. Finch just writes it. is number of seconds, but lark code can also impose a limit. LarkSmarts just forks a time bomb with timeout , which acts when after timing out the conversation still exists and is still in state notified. Acting is defined as clearing the deferanswer entry, and entering ringing state (or whatever QdNotify does.) Perhaps need not clear deferanswer, since that could be set by below facility. Finch: add some simple filter function to decide whether to accept or reject call. Immediately see the need for ways to control things like ring tune, ringing mode, ..., on temporary basis. Then Finch can set ringing to subdued, change the tune, whatever, then enter ringing state, modifying ringing on call-by-call basis. Requires a way to set temporary values for any gvnames value, as a universal facility. Timeouts specified by same sort of , stored as expiration time. For all lookups, GetAttribute first searches for $timed.attribute, then $attribute itself. GetAttributes should probably select $timed.attribute over $attribute, converting to $attribute. Need separate SetTimedAttribute call to store, overrides any other. Will require release to Thrush, so contemplate Extras interface. Convert the ringmode stuff to use this general facility. This works very well. Shared persistent storage, with timeouts, is the way to control a simple application from a complicated but possibly flakey one, so that the simple one can backstop the more elaborate. June 22, 1986 7:22:42 pm PDT July 7, 1986 5:54:19 pm PDT Finch Starting a WalnutSend recording with the phone on-hook did awful things last time I tried it. Try again after everything else works. June 12, 1986 5:44:24 pm PDT June 25, 1986 9:13:10 am PDT Finch PlaybackTune used to do the silence-shaving, and now it doesn't. FinchSmarts must include a coupling to the interval-description stuff to do that. See example of simple shaving (just after recording) in RecordPlayImpl. <> <> January 25, 1986 3:41:03 pm PST July 16, 1986 9:25:52 am PDT VoiceRopes Have agreed to revise Nuthatch to use a server-based Loganberry database. Steps: Analyze present Nuthatch logs and code to determine the format of the database, how many logs, .... Implement a local-machine version. Use a local jukebox and private server. Change to run on server, test on same machine. 5 Work out directory issues (separate naming scheme on top of Loganberry). 4 WalnutVoice can have an argument, which is the base name for a database. Default is ////tunes, identifying ////tunes.df and ditto/tunesRefs.df. is whatever server one is looking to for Thrush services. There should be a default Complain procedure, too, and eventually a default interpretation for what happens when a handle is NIL (do the appropriate open, using the default). Defaults are invented at the Intervoice level. VoiceDB is in some ways not an interesting additional interface. Local default is ///users//temp/.df and so on. Build a simple garbage collector!! Work out backup methodology. (via enhanced browser?) 8 Work out conversion methods from present system. 7 Consider building a local/remote standard Loganberry-based package that writes locally if can't write remotely, consults local if exists. When can write remotely again, enumerate the local database into the remote one and delete the local one. 9 February 2, 1986 9:43:43 am PST July 16, 1986 9:26:20 am PDT VoiceRopes VoiceDB really should be a general local/remote reopening interface to Loganberry, with the specific semantics pushed on up into RecordPlayImpl? If it weren't for GFI's and the fact that files = modules, I'd probably put another level in there. <> June 28, 1986 10:35:32 am PDT June 29, 1986 12:37:48 pm PDT Finch BD incoming calls when FD is off-hook now fail once per ring cycle. That way the callee can hang up and get the call on the next ring. Finch records each attempt separately. A short-term solution is for Finch to do something similar to its current entry-reuse heuristic when successive unanswered BD calls come in within a short interval. Turned out the test is for subsequent calls that reach $notified but not $ringing within a small interval is the right test. That's nice, because it means that calls that do ring don't have this behavior and get treated separately! June 28, 1986 10:31:07 am PDT June 29, 1986 11:22:32 am PDT Thrush $voiceTerminalBusy stuff still too aggressive. Suppose A, who has a Finch running, is on an outside line or his BD is tied up for some other purpose. B calls A. Still want A's Finch to see the call attempt, although it should fail immediately as the attempt occurs. The things we want to prevent are: A, picking up the instrument when A's BD is doing something else, fails to get anything. Ditto attempts to call from A's Finch if the BD of choice is doing something else (want multiple choice, though.) B actually succeeding in calling A under similar conditions. Attempts to call A when A is truly busy do not have to be handled this way! Perhaps all of this can be done in the Advance/Verify code, and none in GetParty. Even with a PartyAvailable[] removed from GetParty, B still fails before contacting A or A's Finch in any manner. Truth is, this is better handled at the Smarts level. At ring-detect, off-hook, or being-notified, check hook state and if it's inconsistent, ignore first two events, turn down connect attempt in third instance. Then remove all the PartyAvailable stuff from the rest of the world. Make sure that hanging up after trying to come off hook is properly ignored, though. Probably will be, since state will be idle or so. Did it that way, and it worked. Have to remove the junk from Party level. June 28, 1986 10:30:04 am PDT June 28, 1986 10:34:58 am PDT Thrush GetParty was too aggressive when the destination party was $voiceTerminalBusy (already had a back door call). That caused attempt to use own Front-door party to fail, and to go on to try to use the back door. Confusing, and not useful. June 22, 1986 9:09:33 pm PDT June 28, 1986 10:29:11 am PDT Finch When other conversations intrude and are rebuffed, the selection goes away. It shouldn't. That was due to a database foulup where two workstations each thought they owned the Finch. Little wonder I was confused. June 19, 1986 11:49:36 pm PDT June 29, 1986 11:42:09 am PDT Thrush Problem: reports don't always finish, and I can't find the outstanding call. There's some other problem that's killing off Finch, now that auto-shutdown is a possiblity. Wonder what it is? This is all tied up with the fact that there are lingering Party connections. That's because some reports haven't finished, or think they haven't. Is that because something's tied up on monitor locks? I wonder. The results are not pretty. Something keeps both parties in the conversation, and I don't understand that. This seems to happen when new conversations are started before old ones have completely died? Or something? This doesn't happen every time. Also, somebody is treating these as live conversations, even though all parties are idle. Like Bluejay repeatedly reports the conversations's death, at times when that conversation should not even be involved in anything. Major cause: when parties failed, outstanding reports were abandoned without either decrementing the count or doing the CheckIdle check that zaps conversations. Expect to see many fewer of these in future. June 20, 1986 6:17:25 pm PDT June 21, 1986 4:25:06 pm PDT All/Bluejay Ugh. Should either indicate with different finished report that all is $finished, not just the current piece, or should include a $scheduled event when an event is first accepted by Bluejay. Prefer former. To $finished, add $allFinished. But what to do now about $flushed? Possibly there should be a slight delay before shutdown when encountering this value. But that's hard. Also, the assigned intID for a request doesn't make it back to the requestor, so the later matchups are wrong. It was one of those "didn't copy a ref you should have copied" bugs. On the other front, to deal with flushed properly, will issue $scheduled report when $started will be delayed. So it's $started the first time, $scheduled as the others are scheduled when the piece queue is not empty, and $started later on as the pieces begin to play. Only those who have never heard of the events before need to deal with $scheduled. Final design: $scheduled is issued as every interval is requested. $started is issued ditto, so there is a $scheduled/$started pair at the beginning of each recording and playback. June 20, 1986 0:05:19 am PDT June 20, 1986 6:16:00 pm PDT Bluejay When a piece has been entirely scheduled, so that the server can go on to the next piece, the previous piece may well not have been fully played, but we've made the report already. There's buffering downstream of the report. Have to locate the place where the information played due to one piece has really all been send out (or in recording a fixed interval, when the interval has been exhausted and all that flushed to disk.) That won't be easy. That's false. Finished is reported at about the right time. June 19, 1986 11:14:21 pm PDT June 21, 1986 4:52:47 pm PDT Thrush Since LarkOut uses a separate process to communicate with the Lark, keys may not be fully distributed when the Report that says they are has returned. Have to develop a way to determine when the key has actually and truly been distributed. Just lock EnterLarkState and its supervisor together with a condition variable. Detect when it hasn't happened before we lose interest at 3 seconds. June 19, 1986 11:14:21 pm PDT June 20, 1986 6:17:35 pm PDT Thrush? Shut-down when nothing left to play or record and in speakerphone mode. Finch best knows the score about nothing left to play, but LarkSmarts knows whether off-hook or not. Now easier, since reports are more reliable. In reports, record last-seen $started in cDesc, wait for $finished or $flushed mentioning the same value. If you don't see it, don't shut down -- who cares?. Otherwise, schedule/do directly a simple idle when offhook. Implemented, but Bug in this design. Now don't get $started until the piece begins to play, so it's hard to know when the last one really comes home. See June 20, 1986 6:17:25 pm PDT. June 19, 1986 8:42:32 pm PDT Finch Finch is not waiting to be sure key distribution has been done before issuing a playback for a tune keyed on that key. Have to queue up the request to play in that instance. Means probably should always do so, to keep things semi-reasonable. Question about whether should queue up something that waits to be joggled, or whether queue might be needed for other things, so the request has to be saved somewhere else. Wherever the list of things to do is kept, it should be flushed on conversation end. Maybe the queue should be in the cDesc this time? Do MBQueues finalize to flush? When queued operation fails, it should do flushed event notification? The queued thing could wait, timed, and on timeout, disappear. Didn't do it that way. Just had calling procedure wait one timeout round (fairly long), then give up. One level synch queue. Should work. Not clear what happens if multiple calls of play from different client procs. June 19, 1986 8:01:09 am PDT June 19, 1986 8:42:26 pm PDT Finch Reporting of start/finished doesn't get reflected in FinchTool window. Why? Should happen, even though FinchTool didn't know about the thing in the first place. Report procedure wasn't being registered. June 18, 1986 0:55:36 am PDT June 19, 1986 7:57:20 am PDT Bluejay Bluejay doesn't work, at least for recording. Also, Lark is not transmitting packets to Bluejay or anyone else. Not clear what's with the Lark. That's quite possibly why Bluejay isn't recording any Chirps. Not sure why it doesn't record silence. Ugh. Still had some fixing to do from the change to the Pup package requiring system assignment of local sockets. Thrush has to assign all the socket numbers by allocating ephemeral sockets. Then ThPartyPrivate has to export a GetPupSocket function, which Bluejay can use to find the actual socket structure, since there's no procedure to seek it out, given the socket ID. It is mandatory that Bluejay and Thrush run on the same machine, since these socket guys are shared REFs. Works now. June 17, 1986 9:37:36 am PDT June 19, 1986 7:58:34 am PDT Lark Out of sockets 400A error arising frequently. What could have happened to do that? Is it related to the fact that we don't switch socket numbers any more? Check later. Happened at a time when would have expected connection to have been long established, so I don't fully understand it. Lots of things going wrong. LarkOutImpl apparently no longer Disconnects sockets during a disconnect, presumably figuring the Zap will do it. Zap would have trouble doing that because some of the sockets are still valid over a Zap. Also, since the socket number is now no longer changed between conversations, the beginning of the second conversation triggers the "same socket" check. Finally, after there's a voice connection, everything seems weird. 1. Disconnects should still happen when a Zap's going to happen. Verify that it doesn't, then make it happen. 2. Think about bumping the socket number for a Lark by 1 every time there's a new conversation. Will work iff the actual spec information has been moved elsewhere by then. Separation of church and state argues against. Don't do yet. June 16, 1986 2:15:33 am PDT' June 19, 1986 7:58:31 am PDT Bluejay stuff When we fail or hang up on a bluejay conversation, it doesn't go away because of reports still outstanding. Find out what they are and zap them. Zapped some, but now something similar is happeniing. All reports empty, but numReportsOut is non-zero. When idled with reports outstanding, what happens? June 11, 1986 9:26:30 am PDT June 19, 1986 8:00:02 am PDT Thrush See Design note for Server Interfaces: must redo the service-allocation with the timeouts and such as indicated there. Must rethink the DescribeParty stuff to use a different scheme for identifying who has it checked out -- like trunks. See trunks for guidance. June 9, 1986 7:51:52 am PDT June 19, 1986 8:00:48 am PDT Bluejay Working notes. Report should be synchronous, called with stream locked. Report must include started/stopped/flushed. VoiceStream, impl, client. The Report callee, though, has to MBQueue subsequent actions. Maybe Report shouldn't be synchronous! Flushing cannot be requested within a piece. Can only be done by explicit call. Should be able to do reporting within flush routine, and at piece-switch time in the server. Should be able to get a flushed report to conv. before terminating conv. -- will probably be fruitless because other end will have terminated, but later can find a way to get reports through. Error state on such terminations, until the Bluejay goes away, just to get the messages? On recording, will have to get end point through Describe... path. June 8, 1986 11:31:56 am PDT June 9, 1986 7:51:32 am PDT Thrush In VoiceStreamServerImpl.Server there's some very strange (2 else 1) code having to do with filling the rest of something with silence. This stuff should all be collected into routines anyhow, but ask Steven about that. No problem. Pointer is at first of two words, must be bumped ahead. Ugh. June 3, 1986 5:48:13 pm PDT June 9, 1986 7:51:45 am PDT Thrush Should ReportAction take a list of action reports, instead of a single one? makes everything a lot harder. No. December 19, 1985 1:52:54 pm PST June 2, 1986 8:41:04 am PDT Finch Want to get Feep command back earliest. First example of active-time communications. June 3, 1986 2:29:11 am PDT Thrush One final niggle in RegisterKey -- need to indicate when new, not alone in conv. Only then must wait for key before scheduling tune. June 2, 1986 5:44:45 pm PDT June 3, 1986 2:24:06 am PDT Finch Service registration and action reporting all works, but isn't very robust. If Finch drops out and restarts during a call, the feep interface situation is for some reason the pits. Naw, simple monitor hangup. June 2, 1986 7:48:41 am PDT June 2, 1986 8:57:22 am PDT Thrush TU stuff: "allabout" is sometimes too verbose. Add "about", which doesn't try for closures. Still need "world" sometimes? Wait on that. Need "ID xxx" which prints its RefID -- its REF value as a long cardinal. Ditto need an ID[xxx] function that returns the value of any ref as a LONG CARDINAL. Nope. LOOPHOLE[xxx] will do that. May 31, 1986 4:15:13 pm PDT June 2, 1986 8:40:28 am PDT Thrush Now Lark depends on Thrush (KeyTable). Lark is much less likely to change often. Should put it back the other way, Thrush depending on Lark for key table. May 31, 1986 3:06:37 pm PDT June 2, 1986 7:47:43 am PDT Thrush Since the same voice service interface can support multiple smartses, and since the Smarts is not one of the things typically directly available to other parties, have to include the smarts ID (probably disguised as a RefID) in the service registration information. You get it back in the Lookup. May 30, 1986 11:50:24 am PDT June 2, 1986 7:47:51 am PDT Thrush Document that there can be but one instance/version range of any interface type registered per party at any one time. Latest in wins. May 30, 1986 10:23:51 am PDT June 3, 1986 12:10:09 pm PDT All As far as I can tell, the key synch problem is worse than ever. Key tables are not now distributed, but requested, and I can't find any indication that the existence of a new key is even broadcast. Need a way to be sure all recipients have the new key before transmitting anything under it. Solve this after feeping works again. Maybe a way to tell whether a given report has been fully issued is the right thing. Maybe even a queued report back to the originator, guaranteed to follow all other reports. Not easy, since reports are by their nature unsynchronized. Read up on object-oriented active databases and LOOPs, and such. Optimization: RegisterKey indicates whether the key is new. Wait-style report isn't generated unless it is. Idea: reportsOutstanding can trigger various actions, depending. One of them is killing off idle parties. Another is generating a "they know" report. Try it. While at it, solve the problem that the key table is finite and small. See ThParty.ReportAction's selfOnCompletion option. May 29, 1986 2:10:43 pm PDT June 2, 1986 7:48:02 am PDT All New mechanism for communicating with services: See messages of 29 May 86 18:45:56 PDT and following. May 25, 1986 7:43:15 pm PDT Big bounce version done, except that apparently new server doesn't support 6.0 version of Finch (NamesGV import failure!). Test by making sure all EPhones are working, then poaching on PolleZ and trying it out. GVImport, typed directly, works, so I'm confused. It was the explicit export/import stuff. The server doesn't export by number any more, so the Finch importing didn't work. Backed it off to the old Grapevine way, until people bounce. Big bounce version: Triples, VoiceUtils, Agent, Bluejay, IntelHex, LarkTest, Multicast, LarkControl, LarkPrograms, DirectoryFiles are all in common (6.1 version). Intervoice, LarkRPC, LarkPlay, Thrush, and Finch are separate. Possibly Parameters are separate, since there are changes in GV entry format. May 15, 1986 2:13:50 pm PDT May 26, 1986 5:03:10 pm PDT When doing new Lark, remove KeyTable. Not really -- one of the procedures needs it. May 15, 1986 5:06:58 pm PDT May 25, 1986 7:42:30 pm PDT Tell Hal about puptypes 300B through 322B, defined in TeleLoad.mesa. May 10, 1986 4:44:46 pm PDT May 25, 1986 7:42:44 pm PDT All Converting to New Communications Package. Here are some questions or comments: What is the correspondence between the Get timeout in PupSocket and the ticks in PupDefs.SocketMake? Must go back and copy Lark.mesa from "torelease" to "new DCS" in such a way that LarkRPC and LarkPlay and others can reference the "torelease" versions. Reduces work considerable. Whenever there is only one version these days, it's the `DCS' version. That was the wrong choice, should be the "torelease". Should fix that one too. Will remove Lark and LarkPlay from the release, putting important data structures therefrom into Thrush, including ConnectionSpecs, KeyTables, and Tone Specs. Lark and LarkPlay drift back into the server side of the house for now. LarkPlay could come back if tune-creation had to be done from Finch. Do that for the "new" system, only. Release an "old" version of Intervoice that has Lark in it, but the new one (not for release) doesn't? Something like that. May 4, 1986 11:44:36 pm PDT May 25, 1986 7:43:02 pm PDT Thrush, Finch, et al Need to produce version of released system and of this one that uses BigBounce software. Ugh. Do minimal work on released thing, track things in parallel as they happen in the current development version. <> <> April 28, 1986 1:18:57 pm PDT May 26, 1986 5:04:31 pm PDT DOC Document changes to Lupine, restrictions on use of errors in multiple-import situations. Release Lupine to BigBounce world. February 3, 1986 2:28:57 pm PST May 26, 1986 5:05:03 pm PDT VoiceRopes If you select more than one node containing a voice file ID, the selection approach doesn't work (Plays all ID's in the header instead). February 2, 1986 1:11:18 pm PST May 26, 1986 5:05:25 pm PDT VoiceRopes WalnutVoice command should be re-executable, resulting in brand-new handles everywhere, or the equivalent. No need to close old ones, I think. Avoid doing the things like menu button setup and Walnut registration that wouldn't help if it were done twice. Easier now with better control over import. January 19, 1986 3:20:05 pm PST May 26, 1986 1:51:11 pm PDT Thrush Bug in Lark code. If a LarkSmarts dies but its Lark doesn't, system now terminates all conversations, which causes other parties to be hung up on. Maybe that shouldn't happen, but that's not the point. What happens next is that the non-failing party's user hangs up, which resets the Lark, which goes into a Loop zeroing the key table, then setting all the keys to correct parity. In the meantime, the network receive code continues to run. If a packet arrives before the key table entry to which it refers (usually 1) has been reset to correct parity, kaboom -- parity failure in Encrypt code. Also, SetKeyTable takes a long time because it does parity correction on all the keys! Question: does decryption happen before the packet is dispatched to the right buffer? Probably so. Actions, next time Lark is open: Add echo server to RAM code OK Have a value that indicates whether the system's really running, and have the FromNet code desist from doing anything when it's false. No Need Key table reset should put a zero-but-corrected value into entry 0, then blt that to all the others. Or set to corrected-zeroes only on initial startup, assuming that correctness will be maintained by subsequent key table updates. Updates all, first time only Calls on encrypt should catch the parity-error signal and ignore it, at least as an option. At least in this case. It's a CallDebugger, Can't catch readily SetKeyTable should be assumed to provide as many parity-corrected keys as are necessary. That function should also be willing to accept fewer than 16 keys and either ignore the remaining entries or zero them Takes 16, but assumes OK parity. At present, what this means is that right after hanging up in a case like this, one's Lark reboots. I don't know why it doesn't happen more often! Oh, yeah, because each user decides when to hang up and reset, and it's usually after the call's over or something. Add echo server to ROM code (harder) Repair slave ROM (DB's, whatever else LY said) <> February 1, 1986 1:53:05 pm PST Next time into Lark code, Call SetInGain(ch,0) before letting Echo suppression change the speficied buffer's attenuation table. Then can change LarkOutImpl back, since no control is a bit more efficient. Collect up Lark changes like this. <> November 26, 1985 4:09:21 pm PST May 26, 1986 5:07:12 pm PDT Compiler and so on: ROPE, Apply, VAL params. February 17, 1986 6:08:55 pm PST' May 4, 1986 11:35:45 pm PDT Thrush 6. If, then, poacher's home phone is picked up, BD call is hung up. That's because FD and BD hardware aren't adequately decoupled! At worst, should effectively ignore the offhook request. General O2I2 problem is that it has to be understood at so many levels. Issues: Which Codec to use. O2I2, inhibiting conferencing for poacher's home phone. Did some experiments and determined that it's hopeless to do anything with the front door while the back door's in use. Compromise: trunkForwarding causes the LED on the telewall machine to flash. Offhook for such a machine is ignored. We do a nasty check (under the monitor lock controlling LarkState changes, probably LarkSmart's) when offhook happens to see if the back door's tied up, before generating dial tone. Need to solve a Finch problem, too -- noSuchParty1 or something? Possibly, forwarded calls should disable the party? Ugh. Suppose front door is in use when poacher tries to use back door. This stuff needs to be caught all over the place. A way to determine that own-self is not in good shape. The only special one though is the telset off-hook one, where own self wants to change state before the other party is consulted? Maybe that one can be handled at Party-level, too? Bottom-line: Flash LED when forwarding calls. StartConversation, Alert, .... return nb=$voiceTerminalBusy when self or poachee has a trunk that's already in use. Similarly for GetParty[$telephone] for a telset like that. Avoid initiating actions involving the front door when the back door's busy -- except for incoming trunk calls! This gets really hairy. The main routine that implements it is ThPartyInitImpl.PartyAvailable[originator_NIL, party]. It sees if the Siamese twin to party's voice terminal (party or its poachee), if it exists, is busy. If so, $voiceTerminalBusy is raised. This is really a smarts-level function, but I've special-cased in here for now. If the Siamese twin is originator, the error is inhibited, since this represents the standard backdoor-in-or-out-on-same-machine case. This function is called in GetParty, to indicate that the party won't work, in StartConversation, to indicate that one's own terminal is unavailable so can't call anybody, and in Alert, to catch the case where things were OK at GetParty time, but unavailable by the time we tried to start a conversation with it. Well, it works, but I don't like it. Visitors next. February 17, 1986 6:08:55 pm PST May 1, 1986 10:15:12 am PDT 5. Call from poachee phone to poachee home number actually tries to do it, doesn't yield fast-busy. This is like narcissism, and should be prevented. In all narcissism cases, want to end up with fast-busy. For now. Finch should work too; and it should be able to arrange something different though. At present, the request is simply ignored!! November 26, 1985 4:09:21 pm PST April 28, 1986 2:20:02 pm PDT (??) Thrush When dealing with showstopper, fix up cfRef stuff in places like IdleConversationsForParty in ThPartyInitImpl. ?? January 20, 1986 7:49:44 am PST April 28, 1986 5:06:45 pm PDT Finch Finch Conversation log should indicate whether caller is authenticated or not. <> <> <> <> <> March 2, 1986 11:42:59 am PST April 28, 1986 2:18:08 pm PDT Thrush Make radio, hotline, and monitor mode harder to invoke. In fact, remove them from telephone user interface (monitor mode is now part of speakerphone arrangement.) Put telset, lineA and lineB modes on **7, **8 and **9. Make sure **7 and **8 will work with call in progress, like **0. Make * alone trigger *0 dialing! *0 remains valid by ignoring the 0. February 23, 1986 3:40:11 pm PST April 28, 1986 1:37:35 pm PDT Thrush Before next release, change PARCPhoneNumberMappings to define its own data type, so that parameters can be release-independent. Try for similar independence for DirectoryFiles. February 23, 1986 1:50:51 pm PST April 28, 1986 2:15:29 pm PDT Finch PlayNoisesImpl uses PD to control on/offness? (Want way to turn on Rollback nonsense besides at Registration time.) Added NoisyBoot, NoNoisyBoot, TestNoisyBoot commands. They'll work when playing tunes works again. <> <> November 26, 1985 4:09:21 pm PST April 27, 1986 9:11:18 pm PDT Thrush Want to be able to do *7, *1 (or *3, whichever is radio mode) on the fly. In radio mode, still route transmitter to DTMF. November 26, 1985 4:09:21 pm PST April 27, 1986 9:11:45 pm PDT Thrush Add Thparty functions for obtaining old ConvEvent information. (started) DescribeParty does fine. <> <> February 26, 1986 5:39:57 pm PST April 27, 1986 8:22:00 pm PDT Finch Finch deals with narcissism silently. February 17, 1986 6:08:55 pm PST April 27, 1986 9:00:26 pm PDT Thrush 3. Workstation deregistering shouldn't cause hangup. Otherwise all this poaching splice stuff is silly. November 26, 1985 4:09:21 pm PST April 27, 1986 9:03:32 pm PDT Thrush How to deal with showstopper: When finch smarts/party dies, zap smarts, but leave party and attached conversations and poachees. When conv is dissolved, for each party, if it's got no smarts and no other convs, zap it. November 26, 1985 4:09:21 pm PST April 27, 1986 9:04:20 pm PDT Thrush $poaching/$visiting chain must be followed backwards to zap when dying (see showstopper tho.) November 26, 1985 4:09:21 pm PST Thrush P: need a way to tell a smarts that its party is gone for some reason. Subsumed into a comment above. November 26, 1985 4:09:21 pm PST April 27, 1986 9:04:32 pm PDT Thrush P: showstopper: when poacher smarts/party dies, how to represent it to conversation and other parties for duration of call; how to shut down when safe? Have to give up on finding out about calls in progress (didn't have to after all). April 11, 1986 9:43:18 am PST April 27, 1986 9:05:25 pm PDT Thrush At the LarkSmarts level, the database is consulted to decide whether radio mode should be specified. Radio mode setting/clearing and so on should cause switching to take place immediately. Radio mode becomes audioSource. See also transmitOnly. <> <> <> April 11, 1986 9:42:06 am PST Feeping audibility and tone length is controlled by specifications in the feep string. Still haven't restored the ability of Finch to feep. "A\005P\010O\007F9325\002P2936" would (A) allow the user to hear the tones, (P)ause 500 ms. before starting, feep the string 93252936 with 80 ms (O)n intervals and 70 ms of(F) intervals, pausing for 200 ms. between the "5" and the "2". April 11, 1986 9:43:18 am PST April 19, 1986 4:16:05 pm PST Thrush radio mode is known to LarkInfo, but extended to include the selection of line A or line B. Radio mode is cancelled at the beginning of each call and must be restored. April 11, 1986 9:43:18 am PST April 19, 1986 4:15:44 pm PST Thrush One of the last-param data types to EnterLarkState turns modes like lineA and lineB on and off. The last-param stuff should be extended to be a list of specs of some kind, including Atom.DottedPair for property-like stuff. Replace current bundled nonsense. Restrict meaningfulness where necessary to one of each type in each request list. April 11, 1986 9:43:18 am PST April 19, 1986 4:24:19 pm PST Thrush autoAnswer mode is a function of the database only. The only effect on LarkOut is that in autoAnswer mode, the auto-offhook stuff produces a telset state rather than a speakerphone state. I don't believe that any more: the only effect on LarkOut is that if there's also a $TransmitOnly setting for the individual, receive direction is inhibited. March 25, 1986 9:02:18 pm PST April 11, 1986 9:42:35 am PST In Telset mode, speaker click => monitor mode. In monitor mode, hanging up => spKr mode. Draw state table. States: $idle: on hook, speaker switch off, no call in progress $telset: off hook, not monitoring on speaker $monitor: was $telset, user clicked. Monitoring on speaker $mONITOR: was $telset, user turned on speaker switch. Monitoring on speaker. Switch on. $speaker: user clicked (from $idle or from $telset and hung up) or started from Finch $sPEAKER: user turn speaker sw on (from $idle or from $telset and hung up). Switch on. March 27, 1986 10:57:22 am PST April 11, 1986 9:42:36 am PST It will be simpler if a Click/SpeakerOn decision is made before any action is reported to the client: speaker switch action can be ON, OFF, or CLICK. One could choose to treat ON when ON or OFF when OFF or CLICK when ON as errors, but better to take most harmless course. February 1, 1986 3:38:01 pm PST April 19, 1986 2:43:40 pm PST There are more Loganberry comments in the Important section that DTerry hasn't seen yet. Collect a few and then send them. January 27, 1986 9:36:10 am PST April 19, 1986 2:43:54 pm PST Things to do to upgrade Nuthatch in ways that don't conflict with VoiceRopes: Allow more than one voice message ID in a header. Play all of them if nothing selected, the selected one if there is a selection. 2 WalnutVoice interface extends FinchSmarts to include the database stuff. Move some of the FinchSmarts noises stuff into WalnutVoice. (?) Maybe do another registry at the WalnutVoice level. More Intervoice. Reorganize to allow access to the voiceFileID database without any reference to Walnut! Necessary for Peanut integration anyhow. Some stuff migrates to VoiceDB? 3 Needs thorough failure analysis, before being promulgated at all. OK to behave simply, but not OK not to catch something. 6 Try it on the real server. 6.5 1. Just try it. 2. Make LoganBerryService.DF. Contains all the Rpc files I've created. Lives on CedarChest. Upgrade Finch.df. Gets announced to CedarUsers. (No. Not really valuable except internally to Finch right now, because of Export's reliance on Names.) Change announcement to VoiceProject^, adding whatever else might be interesting. 3. Upgrade WalnutVoice.load. 4. Move the Tunes and TunesRefs databases to 6.0/top and reasonable subdirectories  shared with Morley or something. Change them to use Exports and include them in DirectoryFiles. Further update the Thrush.cm file and all that. 5. Make a new RPCRuntime that knows how to do explicit importing and use LoganBerry as the initial candidate. Make a note (Important) to retrofit everything for Thrush/Finch 7. 6. Get some Alpha-users. Go on to step 7. Decide whether to release new Finch before or after that. Copy the essence of the design from the present strange place to somewhere more permanent. Turn it into a message to VoiceProject. 1 Use MBQueue for buttons. (abandoned) 10 January 19, 1986 3:17:18 pm PST April 19, 1986 2:46:30 pm PST everything is in train. Must upgrade inline marshalling to do Atoms right. Must also release that for next Cedar bounce or release. Must check with all present users that the modified stuff will work right. Servers in fact will have to change first. February 21, 1986 10:25:10 am PST April 19, 1986 2:37:54 pm PST RPC RPC changes: 1) Inline Atom marshaling sends NIL as the pName for NIL supplied as an ATOM, and treats converts a NIL pName to a NIL ATOM when unmarshaling. This matches my version of the out of line marshaling. 2) Add an optional host hint argument to RPC importing; allows Grapevine to be circumvented when the caller (thinks it) knows the host number, with Grapevine backup when that turns out to be false. Allows instance field to remain an Rname. a) Produce Extras interface, with ImportInterfaceFromHost procedure defined. b) Implement ImportInterfaceFromHost in RPCBinding. c) Lupine produces calls on new interface, providing similar parameter to clients; default is not to use hostHint. Don't think an option is needed, as long as things are released in the right order. d) Problem: Means releasing a Lupine that produces code referring to an Extras interface. e) Work out Mesa-related things with Hal. February 24, 1986 5:22:17 pm PST February 26, 1986 5:38:43 pm PST Atom=NIL is being incorrectly marshaled by the RpcRuntime that I have most recently installed! Wonder what went wrong. Mayhap I didn't fetch my old implementation as part of this latest round! February 22, 1986 3:25:13 pm PST February 26, 1986 5:38:46 pm PST New function in VoiceUtils: NetAddressFromRope. New function in NamesGV: GVHostFromInstance, but can't use it until Growler can be upgraded. OK to include in interface, since it's at the end. For the moment, importers have to simulate it. But see its implementation for guidance. February 17, 1986 6:08:55 pm PST February 26, 1986 5:39:07 pm PST 4. Attempt to call poacher's home phone from poachee phone fails ("for some reason"). Narcissism stuff, I think. Narcissism defined as "voice party = voice party". February 17, 1986 6:08:55 pm PST February 26, 1986 5:39:38 pm PST Attempt to call poachee phone from poacher's home phone succeeds (and Finch doesn't record the call!) Crashes, though, after next thing. Narcissism defined as "voice party = voice party". February 17, 1986 6:08:55 pm PST February 17, 1986 6:08:58 pm PST 1. Calling from home phone to poachee phone works, rings own tune at poachee, but oesn't do "both" trip (same tune, shifted and so on.) February 17, 1986 6:08:55 pm PST February 17, 1986 6:16:57 pm PST 2. Outgoing BD call from poachee phone causes poacher's home phone line to place the call, but Ethernet connection is not made. The connectionSpec was available when trunkSignalling was requested, but not later when TonesDone caused the switch to trunkTalking. The signalling case didn't let connectionSpecs in. February 17, 1986 6:07:37 pm PST February 17, 1986 6:07:40 pm PST Poaching: Database sets up right for simple poaching. Off-hook stuff works OK. Incoming BD call to poacher's line works. Need to test straight poaching. Set up so that Strowger owns Constellation, then log in as me. January 20, 1986 7:50:24 am PST, February 16, 1986 11:43:18 am PST February 17, 1986 6:06:55 pm PST Showstopper implementation fairly well understood: Splice poachee in when poacher quits. Splice poacher in when poacher registers. Use new ThSmarts.Substitution call, posted to all, to spread the word  updating stateID OK. Smartses make limited use of party ID's after call is placed, so updating their knowledge is easy. Think through the process of making sure the party that initiates this change gets properly informed. Problem: if Poacher registers when another poacher is in effect and it's in a conversation, shouldn't redo Poacher stuff, since old workstation will lose the call? Maybe that's OK, since new one will pick it up. See if this can be done with two steps, the first informing the old workstation that it's out of the loop. Check case where Lark registers in during BD call to same person. Comment on above: only serious problem involves parties that are not yet enabled. Do not connect a $Poaching link to such a party, or dissolve any existing ones. Unsplice: When (after) removing a $Poaching link, foreach conversation the former poacher was in, splice the poachee in, then notify all that the poachee is now it. Notification includes the instigator somehow. Splicing the poachee in means copying $Party, $Originator, and convState links, breaking similar links of the old poacher. Finch: if it's us, we're gone and shouldn't try to re-register. Splice: Completely symmetric: copy backwards, now concerned about situation poachee was in. January 5, 1986 11:52:52 pm PST January 6, 1986 8:43:59 am PST convID needs to be passed in to FinchSmarts.PlaceCall. Must therefore be obtained one way or another from current selection, and sent on in. Simple matter to determine where that should happen. January 3, 1986 10:26:05 am PST Rolodex-calling still not making proper checks (reserved/parsing OK). December 26, 1985 5:29:41 pm PST January 3, 1986 10:25:57 am PST Validity checking for placing calls from Finch is now a travesty. Must deal properly with either (a) the knowledge that there is only one interesting call, and we have a responsibility to help maintain that fact, or (b) dealing with the full multiplicity. Also, need to avoid deselecting a conversation when another that is not to be selected comes in. Different approach to how to specify conversation selection. December 26, 1985 3:51:47 pm PST December 26, 1985 5:31:01 pm PST Called-party field doesn't fill in for outgoing calls from the Telset. Logic is now wrong that was once right. Foo. December 26, 1985 3:43:28 pm PST Remember throughout that NIL atoms get marshalled as the atom with the null PrintName. Affects a lot of decisions. That should be fixed! See Hagmann! December 26, 1985 11:36:20 am PST January 4, 1986 5:33:55 pm PST workstationhost in GVMake is done wrong; shouldn't append .lark. November 26, 1985 4:09:21 pm PST February 26, 1986 5:40:28 pm PST Call to self if poaching on somebody else reaches own office. Solution to this has to wait. Would be nice to nip all narcissism in the bud at GetParty time, but so far that's complicated. Wait. (did that, by the way) <> Registration/Deregistration/Multiple services don't work right. Want trunk registration to be more independent. Now is the time to get registration/deregistration to work right. Local trunk when remote not available: not sure it's implemented, probably doesn't work. $Poaching not tested. Not all complete, but other more detailed items supercede this one. February 2, 1986 11:25:16 am PST February 26, 1986 5:42:44 pm PST Explicit export should be eliminated. Explicit import should be accomplished by allowing the import client to specify the machine name/number as a hint. Done, need to negotiate installation. February 2, 1986 11:25:16 am PST February 26, 1986 5:43:01 pm PST Export/Import Loganberry explicitly. January 31, 1986 8:02:33 am PST February 26, 1986 5:56:27 pm PST Loganberry suggestions: (sent) Should have the option to specify the index files as df comments, so that only the log files are SModel'ed. (sent) Want to be able to specify a key as the concatenation of a number of fields (specifying the separators? (abandoned for now) Is key lookup case-sensitive? I'd prefer not. (sent) Still have some notion there should be a way to get a short Unique ID on a database, representing the most recent version, that lasts not only over an SModel or something else that writes new versions, but also over sessions of the server. Just a 32-bit version of the DB file name. This could be a(n optional) parameter to every call, instead of/as an option to the RefID ones. Means that calls could time out, or yield "temporarily not available", but would never lead to an out of date reference or "no such file" sort of thing. The out-of-service feature isn't too interesting at present, since many of the subsequent actions will in fact result in the referenced DB never coming back into service. The client is going to have to decide, when faced with an out-of-service database, that it's closed forever, and to issue another Open  can't even really figure out when to do it? (sent) On Open, Log and index file create dates should be checked, and an automatic rebuilding of the index done if any are found to have differed. This could conceivably lead to unnecessary work, but that's OK. I've already been bit by unsynchronized files. Probably Loganberry should register some commands for opening (i.e., generating an initial entry for), closing, reserving/releasing, rebuilding, and compacting a database. Or the browser should include these functions (opening is trivial); or both. A browser shouldn't close the database when it's destroyed. I think an atomic replace is important. If I'm dealing with a remote DB, it's easy to envision communications failing between the delete and the subsequent insert. I can accommodate that, but I'm not sure how reliably! LB.SetRemoteAccessI should include a comment field that is repeated to the user in the explanation when a DBNotAvailable ec is raised from Loganberry. February 3, 1986 2:24:14 pm PST VoiceDBImpl should be willing to re-import LoganBerry; otherwise the automatic recovery code doesn't work. February 2, 1986 1:18:19 pm PST February 2, 1986 11:12:15 pm PST Playback of multi-entry message headers doesn't always work. It's because FinchSmartsImpl.ReportIntervals doesn't work right, and that's because of a bug in ThPartyOpsImpl that puts an unknowable value into the stateID subfield of the unique identifier for the interval. The details are too complicated to report  has to do with the fact that stateMismatch doesn't occur as long as you supply a stateID as large as the last one that affected you  but the actual stateID may jump by more than one when calling SetIntervals and SetIntervals updates all the requests (erroneously, more or less) before posting the events. All fixed in Thrush 7. To get around it in Finch 6, just don't zero the sub-ID value, and compare only on it. Takes 65000 or so requests before it wraps around. February 2, 1986 11:45:40 am PST February 2, 1986 1:17:33 pm PST Catch "no such index" stuff from Retain and Forget at the RecordPlayImpl level, turning them into benign complaints. February 2, 1986 11:39:51 am PST February 2, 1986 12:23:55 pm PST If there's nothing to do during Retain, don't do anything. February 1, 1986 1:53:05 pm PST February 1, 1986 2:05:15 pm PST Change Thrush 7.0 version to leave these values TRUE: _ LarkOutImpl.echoStyleNoFD.buffer1Controlled _ TRUE _ LarkOutImpl.echoStyleNoBD.buffer1Controlled _ TRUE February 1, 1986 1:53:05 pm PST February 1, 1986 2:03:55 pm PST Temp fix in released Thrush: echoStyleNoFD and echoStyleNoBD in LarkOutImpl patched by adding lines to Thrush.cm: _ LarkOutImpl.echoStyleNoFD.buffer1Controlled _ TRUE _ LarkOutImpl.echoStyleNoBD.buffer1Controlled _ TRUE SModel just that. January 31, 1986 7:25:05 pm PST February 1, 1986 1:52:25 pm PST It is still the case that resetting a Lark does a better job of getting the echo tables right than setting them back the desired way does when returning from Speaker to Telset. This is true both front door and back. I verified this today. The problem is that when you turn off echo-suppression, by supplying a table that doesn't indicate which channel controls, there will be no more effective calls to SetInGain in LarkAnalog, since it doesn't do anything if there's no controlling channel. This leaves the gain table set at its most recent value, suppressing all further telset conversation. Not sure why switching back and back again doesn't help. The next three entries (back to front, remember) deal with solutions. January 30, 1986 3:53:03 pm PST January 31, 1986 10:18:22 am PST refID isn't unique in refsTo database. include creator and refIDType. Now rid: entries when type is GVID are like "swinehart.pa/Terry.pa $ ....", where creator name is lowercaseified. January 27, 1986 7:33:35 pm PST January 27, 1986 8:48:02 pm PST Extended voice messaging to allow multiple voice file ID's in a message. Now need to put multiple voice FileID's in the interest entry. VoiceDB.Retain will accept multiple calls with the same GVID and different VoiceFileID's. VoiceDB.Forget is unchanged. VoiceDB.Query now accepts either a single VoiceFileID or a RefID/Type pair; one or the other must be NIL. <> <> <> November 26, 1985 4:09:21 pm PST Don't take structures apart until all conversation-ending has been done? No need to delete parties if they can be revived. November 26, 1985 4:09:21 pm PST Do better job of idle party registering-deregistering-obtaining-deregistering when done. <> January 18, 1986 6:54:06 pm PST January 19, 1986 3:16:11 pm PST Lark deregistration: on reregister, doesn't deal with Trunk (do first!) On any sort of deregister, doesn't clear $telephone, $trunk, $Extension links (check others) January 18, 1986 6:40:04 pm PST January 18, 1986 6:41:24 pm PST GVOperate 155 sets Lark 155 to Operational; GVOperate 155 Foonly.Lark specifies the instance. GVDebug 155 sets Lark 155 to Larktest debugging mode; GVDebug 155 Morley.lark specifies the instance. January 3, 1986 10:28:54 am PST January 18, 1986 6:22:14 pm PST Once a trunk party has been used for an outgoing calls, incoming calls look to it like outgoing, they report the last outgoing number, and they feep when you try to answer them. Fix by clearing outgoing field (and name field?) when using a trunk for incoming. No, really fixed by using outgoing value only when trunk is not originator of call. December 26, 1985 3:49:59 pm PST January 3, 1986 1:28:43 pm PST For some reason, NIL atoms are marshalled as atoms with a zero-length print name, unmarshalled without test. That's bogus. Should test NIL and not do MakeAtom on unmarshalling side. I think I'll fix it and release a version of RPCRuntime for me again, rather than trying to deal with all the non-NIL's. This will (eventually?) require a change to Lupine so that those who chose not to call the fixed routines won't get screwn. Fix: change LupineRuntime to marshal NIL atoms as NIL and to produce NIL as the result on the other side. Inform HThompson, if he does atoms. I've got such an RPCRuntime that I install as Basic.Loadees. <> <> <> <> <> November 26, 1985 4:09:21 pm PST If called-party is running Finch but has no Etherphone, call via back door. November 26, 1985 4:09:21 pm PST Consider ways to deal with back door incoming calls while front-door busy. Every new ring now generates a new off-hook. If the callee hangs up, there might be time. November 26, 1985 4:09:21 pm PST January 3, 1986 1:29:23 pm PST Progress report that doesn't encounter voice terminal needs to report to own trunk party, if there is one -- how? Through poaching link set up at GetParty time. December 10, 1985 11:00:19 am PST December 10, 1985 11:00:21 am PST No busy signal, new dial tone, or any of that. <> <ring. Use InterpRingDetect differently.>> <> <> <> <> <> <> <> <> <> <> <parsing for no reason, but still shouldn't explain unwillingness to go idle. Main problem was that when conversations went idle, smartsInfo.currentConvID was being zeroed before a test for relevance that protected EnterLarkState from being called at the wrong time, in LarkSmartsSupImpl.NoteNewState. Saving the previous value and using that in the test fixes it. The other problems (spurious state transitions) should be eliminated, though. Recap  This is three problems: InterpretHookState is switching to handset mode when detecting the onhook; this is spurious (and ancient); solution is to do nothing on onhook. Parser is switching to Parsing mode when detecting the onhook; this is spurious, too, and might have an analog in the past; solution is to do nothing in that case. CheckIdle is waiting in-line, since it was originally designed to be called from an MBQueued routine. Solution: change Report to have FinishProc return both the report proc and what to report. Finish proc can return something that just checks idle, instead of full progress report, when it's the initiator.>> <> <> <> <> <> <> <> <> <> <> <> <. $SmartsForHost connection must be able to distinguish trunk from front door, multiple smarts on the same machine, and the like. Or hair up the code that uses it to enumerate and distinguish.>> November 26, 1985 4:09:21 pm PST Change from tunea, tuneb, tunec to ringtune  simplify gv commands  count on text-file truth. Never need to update GV from caches, take that stuff out or don't use it. November 26, 1985 4:09:21 pm PST Find better place for SetupRingTunes stuff. Directly to database each time. tuneb, tunec disappear, as do limits on tune length. November 26, 1985 4:09:21 pm PST GVMake must set up both workstationhost and larkhost entries for people. <> <> <> <> November 26, 1985 4:09:21 pm PST Connection can be computed at any time after both parties known. Should also record someplace convenient (in cDesc?) whether the connection involves two machines. Or just keep the connection around somewhere convenient. It should really be in the cDesc rather than in the info, though, since it can change from conv. to conv. November 26, 1985 4:09:21 pm PST LarkSmartsInitImpl and TrunkSmartsImpl must record smartsInfo back pointers. LarkOutImpl s/b changed not to accept sInfo argument any more. November 26, 1985 4:09:21 pm PST Ring tune gets to LarkOut via nth parameter. November 26, 1985 4:09:21 pm PST Subdued ring is just blurp. There can be other ring modes. November 26, 1985 4:09:21 pm PST Use MBQueue to distribute Progress, one per smarts! A timeout causes queue to be flushed. This prevents Progress from returning dispositions. November 26, 1985 4:09:21 pm PST Retain separate supervisor process if necessary to catch supervisory things? If needed. November 26, 1985 4:09:21 pm PST C-Rule: once a conversation is reported idle via Progress, no more ThParty calls may refer to it or to the other parties in the call. November 26, 1985 4:09:21 pm PST Deal with ABORTED and UNWIND in MBQueue stuff. November 26, 1985 4:09:21 pm PST C: document pulling all disposition stuff. November 26, 1985 4:09:21 pm PST Pull party.partyFailed and all that if not needed. Use enabled instead November 26, 1985 4:09:21 pm PST C: all the nb's returning from calls. Really need to point others at new ThParty and so on. November 26, 1985 4:09:21 pm PST C: document service-name-change business, or whatever you replace it with. Like trunks. November 26, 1985 4:09:21 pm PST C: $AssumedParty => $telephone/$service, $AuthenticatedParty => $individual, $TrunkParty => $trunk -- in other words, use party type as name link to RName. November 26, 1985 4:09:21 pm PST C: $VoiceTerminal => $Smarts, $Manager => $Smarts. No more distinguishing. November 26, 1985 4:09:21 pm PST C: $Poachee => $Poaching. November 26, 1985 4:09:21 pm PST C: Host names represented as ropes or atoms are always in minimal form "3#333#" unless some other requirement dictates otherwise. November 26, 1985 4:09:21 pm PST D: Move ring-enable and all that to the database (White pages, eventually!) Include termination times! Subdued ringing is just a burp again. November 26, 1985 4:09:21 pm PST D: Have completely removed ring tune stuff from party level. Change it to use the GV data base directly at the smarts level. But based on RName information from current party. November 26, 1985 4:09:21 pm PST C: Interim step: don't do gvupdates: leave .lark entries dirty. Don't change non-lark entries through NamesGV. November 26, 1985 4:09:21 pm PST No: GVSetAttribute shouldn't mark dirty when nothing's changed? Maybe it doesn't matter any more. November 26, 1985 4:09:21 pm PST Q: partyData.partyFailed zapped? November 26, 1985 4:09:21 pm PST Probably **0 version of GetParty doesn't work now. November 26, 1985 4:09:21 pm PST Q: Eliminate $Extension link in favor of WP lookup? Nope, there's no index on phone number yet. November 26, 1985 4:09:21 pm PST Make sure initialization puts the type field in SmartsBody. November 26, 1985 4:09:21 pm PST No: Q: stateMismatch triggers progress report for all stateID's higher than own? May need that. November 26, 1985 4:09:21 pm PST C: Do office-of by allowing type=$telephone in GetParty calls. <> <> <> < try again if trying to go $idle, else no-op?>>