PoachNotes.txt
Swinehart, June 2, 1986 5:45:51 pm PDT
Copyright © 1985 by Xerox Corporation. All rights reserved.
Vital
June 2, 1986 5:44:45 pm 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
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
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.
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.
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?)
May 1, 1986 9:51:43 am PDT
Thrush
Find out how hard it is to get trunk-flashing to work on forwarded calls! In fact, test trunk-flashing at all. Works when not forwarded, doesn't work in any way shape or form when forwarded. Wonder why.
April 27, 1986 6:45:47 pm PDT
Thrush
When a Lark fails and does not reload — at least before some LarkOut outgoing call detects the failure — recovery does not happen at all right:
Doesn't unregister.
Next attempt to contact that Lark leads to raising of LarkFailed, and nobody catching it. This stuff should be real easy, and it isn't. Why? Guess this shouldn't be surprising, since I have on the list the fact that error management is a mess.
April 27, 1986 6:38:44 pm PDT
RPC
RPC failures are frequent when caller and callee are on same machine. runtimeProtocol errors, mostly. Wonder what it is?
April 27, 1986 6:39:20 pm PDT
Thrush
When RPC failures occur and are manually aborted, party notification queue trying to end pending converations are left unfulfilled or something, and (harmless) idle conversations stay around. Probably only happens when attended allows aborting, and should proceed from attended problems anyhow. Yuk. By setting attended, appears there are a lot more failures on same machine than I once suspected.
April 24, 1986 3:17:04 pm PST
Thrush
Now worried about what happens to splicing when poachers preempt each other. Possibly works correctly by composition -- that's what you'd like anyway. Wait and see. Also worried about what happens if poacher is already active somewhere else, or something? Now active twice? Can that happen?
March 28, 1986 2:16:59 pm PST
Finch
Ken pier found this bug:
Finch code guaranteed to fail
FinchToolImpl.CheckActive: PUBLIC PROC[handle: FinchTool.Handle] RETURNS[active: BOOLFALSE] = TRUSTED {
If not active, try to make it active.
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.
March 14, 1986 6:53:46 am PST
Finch
Finch should catch WalnutDefs.Error and do something or other; happens when Walnut fails and can't read the message to see if we should read the database. Probably assume there's a voice ID and go on.
March 14, 1986 6:54:46 am PST
Finch
Finch, NamesGV, ... should use approach of VoiceDB to re-import stuff. Maybe a package to manage permanent connections? Option to poll. Built on that will be local/remote LoganBerry, and on that VoiceDB et al. Will be nice entree to conversion to LoganBerry. (NamesGV is all right. Uses hints plus the new optimized import approach.)
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
June 2, 1986 8:41:04 am PDT
Finch
Want to get Feep command back earliest. First example of active-time communications.
November 26, 1985 4:09:21 pm PST
Thrush
Consider <conv>[<party>]=<convState> rather than <convState>[<conv>] = <party>; 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
Bug: Unsnarled a monitor lock when locked registering routine reported something via TU which uses DescribeParty which is locked, too. Unsnarl Deregistering stuff of a similar ilk. Why is DescribeParty locked anyhow?
November 26, 1985 4:09:21 pm PST
Thrush
Still need quicker timeout LarkSmarts->Lark. Party -> FinchSmarts can now take longer.
Important
May 1, 1986 10:22:35 am PDT
Thrush
Finch should be able to control LarkSmarts acceptance of calls by:
LarkSmarts told not to proceed from Notified to Ringing, but to react to Finch doing it. Timeout: small numbers of seconds. Telling is done in the database. Timeout causes the database to reset. Finch is now responsible for pushing the call into a more stable state within the timeout interval.
May 1, 1986 10:26:02 am PDT
Thrush
Toy with notion that Finch/Lark can both be parties in a conversation, one slave to the other while the other exists (willing to track state changes). Eliminates the last need for stateMismatch, I think. Or doesn't. Anyhow, makes things easier when dealing with multiple rings and conference behavior. Makes counting more difficult.
April 27, 1986 8:23:39 pm PDT
Finch
Reporting of problems in conversation log is still pretty bad.
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 ///<serverRoot>/tunes, identifying ///<serverRoot>/tunes.df and ditto/tunesRefs.df. <serverRoot> 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/<userRname>/temp/<serverRoot>.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.
December 8, 1985 4:51:20 pm PST
Thrush
Humph. At the smarts level, larkInfo knows about both smartses, so one could get associated parties that way when calling? Think it through; the redundancy of how trunks and telephones are found feels funny.
December 2, 1985 2:12:13 pm PST
All
Holes in the present implementation:
Conferencing is not supported at high levels.
AssessDamage isn't implemented.
Bluejay completely unimplemented.
Finch hasn't been modified to match.
Prose, Intervals aren't anywhere.
$Visiting not implemented.
November 26, 1985 4:31:13 pm PST
Thrush
Interface: Document meaning of ThParty.Enable carefully.
November 26, 1985 4:09:21 pm PST
Thrush
Why is LarkFailed never mentioned in LarkSmartsSupImpl? And Deregister.
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
Thrush
Smarts: Don't really go idle (goingIdle is OK) until all prose reports have been made (at least an error one) and like that. Exception: when communications are down, still have to deal with that.
November 26, 1985 4:09:21 pm PST
Thrush
Need to put Reports/Problems in the point of detection of each problem, and other strategic places. Some for normal flow, some for exceptions. Need to parameterize each appropriately; many now have just constant messages.
November 26, 1985 4:09:21 pm PST
Finch
Consider a way to get a busy test into Finch.
November 26, 1985 4:09:21 pm PST
All
Logging, statistics, performance measurement.
November 27, 1985 2:43:50 pm PST
Finch
In Finch, the initialization procedures are not protected by monitors or anything. During rollback, more than one reason for starting/stopping Finch can cause trouble, which has been experienced at least once.
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.
December 2, 1985 12:30:27 pm PST
Utility
Consider a command that clears all triples, flushes the RefID cache (hard), flushes the conversation cache, and any other state saving values. Then could restart even when per-each restart code didn't work.
Some Day
April 30, 1986 11:42:07 am PDT
Why does the intelnet-converted number show up anyway? Why doesn't that happen far enough downstream that nobody but the operating units see it? Probably so that the conversions from 6xxx to 9496xxx and so on will work.
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.
March 28, 1986 2:11:05 pm PST
Finch, Thrush, VoiceDB, and the ideas therein could be used in other domains. Here are some examples of what I'm talking about:
Finch: could support talker. Or at least a simple "send this string to this other Finch user" function. For use when you don't want to intrude, but do want rapid transmission. The phone could beep, if that bit could be got right.
Could do the same with short recorded messages. They wouldn't be kept or have anything to do with GV. Only if the other party's got VoiceDB stuff running kind of thing.
Could annotate documents with synthesized voice or just with other structured text.
Could support refs in documents to unnamed but large and slow-changing things other than voice. Like figures for a paper, which are replicated in each version.
And so on.
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.
January 28, 1986 6:18:12 pm PST
Should/must mark the position of playback/recording within a message in more or less real time. Takes a different approach to communications with services.
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.
December 3, 1985 2:36:37 pm PST
There's a problem with multicasting: once a lark is listening on a multicasting port, it can't be reached unless the multicast forwarder stays accurate. Over a server or forwarder crash, this isn't guaranteed. Polle points out that one approach is to use stable storage to record the current state of forwarding, being careful about synchronization. The multicast-forwarder would be responsible for keeping the state of multicasting tracking that of the stable storage representation. There would be a reset function that would communicate with each Lark, setting it back to normal, and clearing the related entries. For now, will be as careful as possible in the server code and hope for the best during conferences.
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
Make stateInConv an ATOM, change tables into refTabs or refTabs of refTabs, stored in separate source files, registered to ATOMs (can change them on the fly). Use phone number mappings as model. Still haven't found a reasonable way to do this.
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.
December 2, 1985 12:37:30 pm PST
Consider a setting, like attended, that puts off the destruction of old conversations. Perhaps in a loop until the setting is turned off. Good for anything?
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.
December 2, 1985 12:37:30 pm PST
May 18, 1986 4:36:13 pm PDT
NamesGV
Need to change NamesGV interface to use long ropes next time we're really changing what goes on the server. In general, examine all the RPC interfaces for RPC.ShortROPEs that should be Rope.ROPEs. Has to do with long tunes. Did it for the new world. Do it for the old as the old is re-released fo the big bounce.
April 30, 1986 11:00:36 am PDT
May 18, 1986 4:36:23 pm PDT
VoiceUtils
I added GVSave to GVLarkImpl, but it doesn't help, since when run from elsewhere than the strowger command tool, it writes its results on the root directory. Add parameters somewhere, I guess. GVExport records the working directory, and GVSave/Restore use it.
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)
November 26, 1985 4:44:26 pm PST
May 26, 1986 12:09:55 pm PDT
Thrush
Doc: what to put into LarkA.patches to set signalTimeout to FALSE in the Lark so that you can have breakpoints that don't cause the Lark to timeout. How to deal with Multicasting. Once and for all how to set up Etherphone connections (extract and extend from program comments.)
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.
December 3, 1985 3:07:32 pm PST'
May 26, 1986 12:03:54 pm PDT
Should go through and eliminate all NetAddress and Machine types in favor of PupTypes.something; similarly with Lark.VoiceSocket. Similarly a naming cleanup on ThParty.PartyInfo is already called for. That's all pretty well regularized now.
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.
April 29, 1986 2:44:29 pm PDT
May 1, 1986 10:14:27 am PDT
Thrush, Finch
Phoning someone by name who doesn't exist causes no-op behavior in Finch. Right parens is missing from ident. of who is being called. Maybe forwarded outgoing Intelnet calls don't work right. Sure don't seem to any more (when you hang up before the call is complete!) There had to be an explicit check when the trunk for a forwarded call found out that the other end was idle -- no check is needed for same-machine calls, since the telset idle will idle the Lark (ugh!). The test was not including trunkSignalling as a larkState, looking only for trunkForwarding. Now the info.forwardedCall bit is checked instead.
April 28, 1986 2:55:56 pm PDT
April 29, 1986 4:41:33 pm PDT
Thrush, Finch
Outside calls seem to screw up in various ways that they didn't useta. Either from telset or from Finch, if by name. Have cured problem of nonexistent outside party fetching a dial tone. Must change GetParty so that when a number is found via RName, the name field of the resulting party become the RName.
April 30, 1986 11:42:07 am PDT
May 1, 1986 9:08:23 am PDT
Finch
8*.... now has an extra "P" to remove from the number.
April 29, 1986 5:42:23 pm PDT
April 29, 1986 5:54:53 pm PDT
"Phone #" doesn't work from Finch commander any more. Or Finch window. Weird.
April 29, 1986 3:03:41 pm PDT
April 29, 1986 6:17:36 pm PDT
Thrush
Auto-supply of authentication doesn't work any more for outgoing Intelnet calls.
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.
December 10, 1985 9:52:29 am PST
April 28, 1986 2:14:33 pm PDT
Thrush
It would now be possible to treat a speakerphone click as a flash, and simplify the upswitch stuff, since calls all behave like spkr now. I have discounted this. Don't know what to do about flashing.
November 26, 1985 4:09:21 pm PST
April 27, 1986 9:11:09 pm PDT
Thrush
Put radio, monitor mode back in. LarkInImpl, .....
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.
April 27, 1986 8:55:16 pm PDT
April 27, 1986 8:59:47 pm PDT
Fixing the next thing reintroduced another bug -- that the descriptions of what happened go away when a buzzing non-call is finally silenced.
April 27, 1986 8:22:15 pm PDT
April 27, 1986 8:47:29 pm PDT
Finch
Once a call has failed, even if beeping (thus not yet idle), Finch disassociates from it, won't kill it with disconnect, doesn't leave it highlighted, and so on. That sounds easy to fix.
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 24, 1986 3:29:46 pm PST
Thrush
during splicing, party.partyActive must be transferred to the new party. party.numConvs must be incremented in newParty, decremented in oldParty. Not sure about things like outgoing and reservedBy. Leave them for now.
April 24, 1986 2:52:53 pm PST
Thrush
The way substitution (splicing) works when parties come and go, an outgoing Finch will not get the report announcing its demise. This makes it even harder to let a Finch know when it's disconnected, so that it can clear the active indication from the conversation log and stuff like that. It has to work this way, though, because by the time the report is issued, the $Poacher link will be broken to the abandoned $telephone party, so the report wouldn't reach the still-active telephone. Modified to splice new poacher in only when owners are the same.
April 24, 1986 2:56:21 pm PST
Thrush
If we record an ongoing call as belonging to the new poacher when the poacher arrives, that's not always an accurate reflection of truth. (The call may have been/probably was to the owner not the poacher). Check whether the owner is the poacher before splicing the conversation over. Always have to splice when a Finch is going away, though.
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)
December 2, 1985 2:12:13 pm PST
February 26, 1986 5:40:48 pm PST
Holes in the present implementation:
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.
December 9, 1985 9:56:37 am PST
January 19, 1986 3:31:46 pm PST, ignored.
Verbatim, from a handwritten note: "Loop in deciding BY? Both smarts?"
November 26, 1985 4:09:21 pm PST
January 19, 1986 3:29:31 pm PST
Throughout, must deal with trunks when front doors die and v/v. Or must we? Work briefly on decoupling them as much as possible, including in LarkOut. No, they should be coupled at this level.
November 26, 1985 4:09:21 pm PST
Bug: LarkSmartsImpl.DeregisterIfRegistered doesn't compute the right host atom. In fact, it needs to try various types out to be sure usages are not changing and screwing things up. As usual, the need for trunk and lark smarts to be in synch causes problems. Think the registration/deregistration/crash scene out again after things work. For now, presume that the types remain the same and that we're not registering multipled services.
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.
November 26, 1985 4:09:21 pm PST
Figure out what party.numEnabled means now. Finch should maybe enable its party instantly? Maybe this should apply only to voice terminal smarts? Examine how used and come to terms with it. With multiple parties involved for one participant, so to speak, numEnabled is probably not a reasonable thing to look at anyhow.
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.
December 12, 1985 11:57:50 am PST
December 12, 1985 4:26:03 pm PST
Extensions handled wrong. Calling by number won't reach poacher as it stands. Once it does, the exotic (Finch but no Lark) stuff will get into a loop. Fix: $Extension[rName]=$number. Have a version of GetPartyFromNumber that will not follow the extension to an active party. Redefine the trunkOK bool to be trunkRequired.
December 11, 1985 3:21:51 pm PST
See Poachers message sent to VoiceProject^ this day to get the latest version of the switching design.
December 11, 1985 3:20:27 pm PST
January 3, 1986 1:28:22 pm PST
When somebody is running Finch but not an Etherphone, or doesn't have an Etherphone, another Etherphone caller should be able to call him or her, notifying the Finch of what's happening (almost -- it will look active while it's ringing) but using the back door. The easiest way is to set things up so that the callee is poaching on the caller's selected outgoing trunk. (Be careful about other calls arriving at that Finch while the first is in progress, but) Maybe the easiest way to do this is to have poaching be set up at GetParty time, computed anew, rather than at Create/Register time. Similarly, visiting, if that is retained as is. I'm going to attempt that. Poaching will be set up as a trunk is reserved for a calling party. You can do it only if the reservation succeeds. It shouldn't be changed if the present poachee is active (to prevent taking a connection away from somebody who already has it.) This sounds dangerous.
December 10, 1985 9:51:52 am PST
December 10, 1985 10:59:09 am PST
On-hook can now happen to an idle conversation, or when a call is ringing in. Ignore it!
December 9, 1985 10:10:35 am PST
December 10, 1985 9:51:45 am PST
both-tunes don't plug in octave thing right for back door call.
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.
November 26, 1985 4:09:21 pm PST
Revise connection spec stuff for conferences.
December 8, 1985 3:39:38 pm PST
RingTimeout needs to reschedule timeouts on maybe=>ring. Use InterpRingDetect differently.
December 8, 1985 2:16:57 pm PST
December 8, 1985 3:39:32 pm PST
info.phoneNumber doesn't get set up by anybody in LarkTrunkSmarts. Now get it as a variant of ThParty.DescribeParty. Alert trunk reserved test is bogus.
December 3, 1985 6:09:28 pm PST
December 4, 1985 8:57:19 am PST
Larks register as individuals instead of telephones. TUImpl still doesn't know about trunk parties, smarts, or smartsInfo. Fixed, but DoDescribeParty has a type bug.
Conferencing is not supported at low levels. Code is in such that if 3 or more parties show up at the conversation level, conferences will be built as they go active. If a third joins a first two, the conversation should switch from conference to regular, and vice versa.
Trunks completely unimplemented.
December 2, 1985 12:30:27 pm PST
Use RefID from CardTable.
November 27, 1985 2:37:33 pm PST
December 2, 1985 2:21:50 pm PST
Key table sent multiple times. Algorithms were todally bogus.
December 2, 1985 12:25:56 pm PST
December 2, 1985 12:30:19 pm PST
CheckIdle is now always queued on info.reports. It waits for n seconds and then kills an old conversation. During that time no further reports can be made. It's safe to FORK a process to kill the conversation after the n second wait. That will happen asynchronously with reports about other conversations. Argle.
November 30, 1985 4:43:48 pm PST
November 30, 1985 4:59:25 pm PST
info.haveKeys is bogus. Esp. when we begin alternating among conversations. Needs to be cDesc.keyTable and larkInfo.keyTable, and we need to send one whenever they differ. Also, active isn't working at all right. The test for same-hostness now must be made by comparing send and listen socket id's.
November 29, 1985 1:09:59 pm PST
November 30, 1985 4:59:19 pm PST
When one goes $idle, others may go $idle, too. Or into random other states. One must be willing to accommodate those reports, rather than complaining about impossible transitions. One needn't do anything in particular about them, though. This needs fixing quite soon. Worry only about the reportToAll states. Fix: when in $neverWas state, many transitions by others are no-ops.
November 29, 1985 1:09:57 pm PST
December 2, 1985 12:25:07 pm PST
Ring tune cache tests assume that, on Growler at least, NamesGV.GVGetAttribute is directly bound to the impl, not via RPC. Otherwise, have to do a rope compare for equality, not just a REF compare on the ropes. See LarkSmartsSupImpl.GetringTune. Turns out to work as expected. Also determine why we didn't even try to get a ring tune for Strowger (was a collection of trivial things).
November 27, 1985 2:37:33 pm PST
November 29, 1985 1:03:01 pm PST
EnterLarkState[idle] clears dial tone but doesn't clear the LED -- or it comes back on or something. Doesn't really seem to be going idle. InterpretHookState is switching from sPkr to std, moving tones to handset, just before going idle, in the case of onhook. Possibly could eliminate that transition, saving some time. The real bug is that the [hookswitch, disabled] event is not being interpreted right in the Lark parser. This EnterLarkState in InterpretHookState may be responsible for the blurp when you hang up sometimes that has plagued this system from day one. Also entering reserved=>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.
November 27, 1985 2:33:57 pm PST
November 27, 1985 2:50:29 pm PST
info.currentConvID isn't set up when conversation is initiated from LarkSmarts. ThParty checks for all idle doesn't work when there is no associated posting (need to check at end of posting for all idle and no reports outstanding.)
November 26, 1985 5:58:06 pm PST
November 27, 1985 2:53:17 pm PST
In LarkSmartsImpl, if after creating a cDesc, something goes wrong, remove the cDesc from info.conversations. At least once, the credentials in the new cDesc were bogus (PostConvEvent wasn't doing the right thing about informing the caller.)
November 26, 1985 4:51:53 pm PST
November 26, 1985 4:57:04 pm PST
Niggles: RefAddr doesn't do the right thing about trunk party name (kpt). RefAddr doesn't do the right thing about smartsInfo's or smartsData's. show doesn't make the assignment to its second argument. Registration of function to print GMT's doesn't seem to work or something -- for "0". One way or another, conversationID's have to be readable! (didn't fix it this time.)
November 26, 1985 4:31:13 pm PST
November 26, 1985 5:09:29 pm PST
Bug: Reserved-transition from idle is completely bogus — doesn't call ThParty.CreateConversation. Besides, ThParty.GetCurrentParty doesn't seal up and return the result it has.
November 26, 1985 4:26:30 pm PST
November 26, 1985 4:27:18 pm PST
Bug: Test in verify was wrong for $noSuchParty.
November 26, 1985 4:23:35 pm PST
November 26, 1985 4:31:32 pm PST
Bug: smarts.enablesParty not set when party.enabled set? And vice/versa?
November 26, 1985 4:09:21 pm PST
November 26, 1985 4:15:04 pm PST
Bug: individual[ str.pt ] = strowger.lark instead of individual[ strowger.lark ] = str.pt.
November 26, 1985 4:09:21 pm PST
Must run RefIDImpl, CardTableImpl when running Thrush. See if RefIDImpl includes a copy of CardTableImpl. Probably shouldn't.
November 26, 1985 4:09:21 pm PST
Bug: How to dial version-mismatch: Parameters depends on Thrush.
November 26, 1985 4:09:21 pm PST
Bug: Check out an "Import failed"; use attended. Was making wrong test on whether to import or use interfaceRecord.
November 26, 1985 4:09:21 pm PST
Implement ThParty.GetKeyTable!
November 26, 1985 4:09:21 pm PST
$SmartsForHost[$"173#110#telephone"] = <larkSmarts>. $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
Have to rethink whole socket stuff, make sure you understand how it works before finishing up connection stuff.
November 26, 1985 4:09:21 pm PST
ThParty: otherHost field is now a Machine, not CARDINAL.
November 26, 1985 4:09:21 pm PST
ThParty: Compute socket ID and conference host ID at the appropriate times. Supply what is claimed in the otherHost field.
November 26, 1985 4:09:21 pm PST
Make sure text-to-speech bit is still being set in LarkInfoBody.
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.
November 26, 1985 4:09:21 pm PST
Use a separate stateID for each party in a conversation in ThPartyOpsImpl. There won't be stateMismatches due to lack of knowledge of other party's actions, only one's own. Makes them very rare.
November 26, 1985 4:09:21 pm PST
Don't allow transitions from $idle.
November 26, 1985 4:09:21 pm PST
Zap conversation some number of seconds after last party goes idle.
November 26, 1985 4:09:21 pm PST
stateMismatch => try again if trying to go $idle, else no-op?
April 27, 1986 6:39:12 pm PDT