<> <> <> <> May 31, 1986 4:15:13 pm 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 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 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 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. May 29, 1986 2:10:43 pm PDT All New mechanism for communicating with services: See messages of 29 May 86 18:45:56 PDT and following. Think about adding a local interface record to it. All these interfaces must be of the multiple-import type, just to avoid hassles. Document that, too. 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. May 1, 1986 1:12:11 pm PDT Intervoice Document nb=$voiceTerminalBusy case, change of $noTrunkParty to $noRelatedParty. May 1, 1986 10:21:06 am PDT Thrush Implement simple Visitors version. Then worry about multi-ring version (change in party/conversation membership structures involved?) <> <> <> <> <> <> <> <> <> 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. <> <> 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. December 19, 1985 1:52:54 pm PST Finch Want to get Feep command back earliest. First example of active-time communications. <[]= 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 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? 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. <> November 26, 1985 4:09:21 pm PST Thrush Still need quicker timeout LarkSmarts->Lark. Party -> FinchSmarts can now take longer. <> <> <> <> <> 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: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. April 28, 1986 1:18:55 pm PDT DOC Document new meanings for **7, **8, **9, *0name# => *name#, new monitor-mode stuff (hard). 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. 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 25, 1986 3:41:03 pm PST 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 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. February 2, 1986 9:43:43 am PST 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. 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.) 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. 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. 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. <> <> <> <> <> <> <> <<$Visiting not implemented.>> <> <> November 26, 1985 4:09:21 pm PST Thrush Monitor-lock what's necessary in Party/Smarts creation. Maybe everything. 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. <> November 26, 1985 4:09:21 pm PST Thrush Cause $visiting to be inherited as parties die and resurface. Worth it? November 26, 1985 4:09:21 pm PST 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. !!!!) 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. <> <> <> 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. 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? February 16, 1986 2:49:39 pm PST 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. <> 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. 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. <> 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. <> <> 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?>> April 27, 1986 6:39:12 pm PDT