AmTALK ====== AmTALK is a combined server/client for the Internet TALK protocol for point-to-point online chatting. AmTALK has the following highlites: - fully multithreaded for several talk sessions at once. - Auto answer facility to accept talk requests and store incoming messages. Can be triggered manually or by a user-definable timeout. Optional auto answer information icon on workbench displaying number of new and unread messages. - "Locate" function to locate a user on a dynamic IP address even if you don't know which IP he is using right now. - History of last used talk addresses for easy access. - user configurable sounds for notifying of incoming talk requests and successfully established talk links. - Userlist to store frequently used talk partners, with aliasing for easy talk start and specificable access privilleges (override auto answer, refuse/ignore always, locate always etc.) - Can be started from inetd, or reside resident in the background, activated by hotkey. - Supports clipboard Cut & Paste from talk windows. - Keeps a full log of incoming talk requests. - nice and friendly GUI to start talks, control operation and configuration. - very compact. Although of the available set of features, the executable is only 44k in size and therefore only 6k longer than the old AmiTalk package. - handles incoming talk requests with "wrong" usernames gracefully. - works with Miami, AmiTCP and as225r2-derived TCP/IP stacks. Installation ============ AmTALK is currently a beta distribution which is limited to operate up to 31-11-96. Due to the beta status, you have to expect severe bugs -- only use it if your are knowledgable upon Amiga networking software and software debugging. You have to install the provided Term.mcc and Textfield.mcc classes to mui:libs/mui manually -- better check if the versions you have installed are NOT newer. Then copy AmTALK to wheverever you want. If you want to to be startable from inetd, add the following line to inetd.conf: ntalk dgram udp wait root amtalk amtalk identd=1 Note that you have to specify the full path to the AmTALK executable, and it's right that you have to specify it TWICE to overcome a bug in AmiTCP's inetd which doesn't set PROGDIR: correctly on started demons. When started manually without inetd, AmTALK will hide in the background, waiting for talk requests. You can activate it with , or use the provided talk.rexx ARexx frontend for the well known "talk user@host" startup. In addition to the standard MUI Arexx commands, AmTALK provides the following two commands: struct MUI_Command rexxcmds[] = { { "talk", "RemoteUser/A,RemoteHost/A,RemoteTTY,Locate/S", 4, RXH(talk) }, { "findalias", "AliasName/A", 1, RXH(findalias) }, NULL }; There is a support mailing list to discuss amtalk related issues; write to "amtalk-request@vapor.com" and put "ADD" in the mail body. Please join the list if you want to report bugs or have suggestions. Catalog translators wanted, too. Please write to . Locate ====== Many people seem to have problems understanding how the "Locate and Talk" facility in AmTALK works, so I try to give a more thorough explanation. One of the reasons that the talk protocol went out of fashion recently is tied to the more and more advancing usage of dynamic IP addresses. Since you must know the exact host name of a party you want to "talk" to, it's nearly impossible to talk to someone which normally uses a dynamic IP address without a means of finding out the address he currently uses. You can, for example, find this out if you meet in IRC, but it's pretty pointless to use talk if you could use the more efficient DCC CHAT anyway. AmTALK tried to provide a solution to this problem, the so-called "Locate facility". How does it work? Let's assume you want to talk to MrFitz, which ISP's has the domain "ifx.net". ifx.net provides dynamic IP addresses to it's users, so everytime MrFitz logs on, he gets a different host name -- "ip69.ifx.net", "ip42.ifx.net" etc.pp. So, when you want to talk to MrFitz, you don't know which address he's currently using. Locate, however, does the trick of asking all of the potential IPs he may be on for a user with the name of "MrFitz", and if you're lucky, the correct AmTALK at the remote end will respond with "Here I am!" and voilá, you know where to talk to. Actually, in order for "Locate" to work, you must know at least one of the IP addresses that MrFitz normally has -- you might have gotten it from the last time you saw him on IRC, or when he "talk"ed to you etc. You can't use "*.ifx.net" or just "ifx.net" as a anchor address to Locate, btw -- it must be a valid hostname which results in a IP address record. Also, you must know the exact username that he uses at his end, because this is the anchor at which the identification takes place. If you try to locate "mike@ip42.ifx.net", you will fail, because his AmTALK will only responds to queries for the username "Mike". The local username is normally equivalent to the email name of the person, or the username in his IRC userhost address. If you are unsure, just ask. Technically, "Locate" works by assuming that the ISP gives out all his Dynamic IP addresses from within a single Class-C network. It takes the host name you feed to it, masks out the network part and then queries all 254 IP addresses of this net with a short UDP packet bearing the username. If the correct site is hit, it will respond with a acknowledge packet. This is a very brute force approach to the problem, but has the advantage of not relying to any global or ISP-local "talk hostname servers". The bandwidth waste caused by the packet flood is comparable to WWW or usenet comp.sys.*.advocacy hierarchies, and therefore "Locate" should not be used lightly. ************************************************************************ History ======= 0.41beta -------- - now does a identd lookup on the remote stream socket after a talk is established, displaying the returned username or / in the message. - messages in the auto answer box now have 3 different statii: NEW, UNREAD and READ. - forcefully enables the ARexx port even if it's disabled in MUI prefs. - added preliminary amtalk.text documentation by AdamH. It's written by a canadian, so don't expect too much :-) 0.40beta -------- - didn't send UNKNOWN_REQUEST upon getting a UNKNOWN_REQUEST. Now does. Fixes problems with other clients sending non-standard stuff to talk ports to do tricky things, notably WinTalk. - included new term.mcc which fixes spurious "Please insert Volume : in any drive" and cut&paste errors. 0.39beta -------- - fixed reset handler not notifying "I'm done" and therefore causing a 10 second delay in the reset process. [0.38 skipped due to revision error] 0.37beta -------- - fixed reading of auto answer messages (finally...) - moved "Accept" to the top of the announcewin window to have it more easily reachable with keyboard control (Tab/Enter). - added a hopefully thorough explanation of the locate protocol to this readme, in the hope that someone reads it (Aren't I silly?) - fixed ARexx argument parsing for TTY and LOCATE flag. 0.36beta -------- - added keyboard reset handler. Will close all talk connections with a "*** REMOTE MACHINE REBOOTING ***" - removed all shortcuts from the "Incoming TALK request" requester - "talk to" string gadget now only rejects WSP chars. - fixed display of auto answer messages (was turned upside down) - fixed yet another crash related to AmTALK unable to find it's own path due to inetd startup and screwed PROGDIR:. Happened on prefs save. Will now put up a warning requester in this case, telling users to fix their inetd.conf. 0.35beta --------- - fixed potential crash upon problems with getting the App's icon - aainfo win now has a "Talk" button to start the main UI - changed layout of the "Incoming talk request" requester - talk window now appears relative to mouse pointer position 0.34alpha --------- - AA-Info-Win is now snapshottable - Quit didn't work on inetd-startup - added "Locate always" flag to userlist - added "Locate and Talk" to auto answer list and log window. 0.33alpha --------- - will now raise it's priority itself when being started from inetd with -1. - fixed window ID assignment for the talk window. - now handles edit char exchange correctly. - now dies upon CTRL^C in edit windows. - locate now works, or is supposed to do so :-) 0.32alpha --------- - fixed window list stuffup (removed windows weren't actually removed from the window list, causing all kinds of neat trouble) - removed all otalk support stuff (never used anyway) - fixed loading of Auto-Answer messages. - fixed crash when AmTALK is unable to GetDiskObjectNew() it's icon. NOTE: There is a problem with AmiTCP's inetd not setting PROGDIR: correctly when it starts up demons. Modify your identd.conf so that the line looks like: ntalk dgram udp wait root p:amtalk/amtalk p:amtalk/amtalk identd=1 That is, the full path to AmTALK has to be specified both in the "server name" and the path field of identd.conf, otherwise AmTALK can't locate settings, log, autoanswerstore etc. 0.31alpha --------- - recompiled for new term.mcc 0.29alpha --------- - added locate facility 0.28alpha --------- - will not put up the quit warning requester when started from identd - is a nice daemon and queries the service database for talk and ntalk port numbers - documentation error: you must NOT start otalk sessions via identd 0.27alpha --------- - fixed the as225 interface - it's now possible to start AmTALK via identd so you don't have to run it all the time The entry for AmiTCP is: ntalk dgram udp wait root p:amtalk/amtalk amtalk identd=1 Replace p:amtalk/amtalk with wherever amtalk resides on your system. Make sure you don't have an entry for otalk there! 0.26alpha --------- - when started twice, a "can't create window object" error occured, instead of silently quitting and forcing the other instances to front - fixed crashes when closing the "Auto Answer" setup windows