As soon as I got my Uthernet II card installed into my Apple IIGS, I started wondering how many network and Internet application and protocols a networked IIGS would support. One that I was particularly interested in was IRC, or Internet-Relay-Chat.
A little history of my experience with IRC
When I was in college, there were not such things as Facebook, Snapchat or even text messaging for communicating with others. BBSes were sort of on their way out, falling away in favor to the newer online services like AOL and CompuServ, and the World Wide Web was taking over with it’s Hyper-Text Transfer Protocol leaving the less-hyper Gopher protocol in it’s dust. It was during this time that I was able to get my first dial-up Internet connection. I was finally able to experience all of this HTTP and HTML for myself. So what did I do? Well, I fell back into my old ways, and I found a live chat protocol that was mostly text and not a lot of graphics. It was IRC. At the time, IRC was booming. It felt like the ‘cool’ place to hang out online. It was a bit of a counter-culture to the chat forums in AOL or CompuServ, which anyone with a basic knowledge of loading programs and a 3rd grade reading level could connect to. (All they had to do was ask their mom for the free disk that came in the local newspaper.) IRC was different. It almost had an underground feel to it. It was less public, less censored, and even had some “hacker” channels, where people discussed (mostly lied) about their hacking exploits, something that AOL would have banned it’s users for doing. It felt like the Wild Wild West of online chat systems. At least it did to me.
Once my Uthernet II card was up and running, I searched the net and quickly found NinjaForce.com’s Samurai IRC Client! How awesome is it that someone had in fact, wrote a working IRC client for the GS? Samurai is a CDA or Classic Desk Accessory. This means that it is an application that runs from the OpenApple-Control-Escape CDA menu.
I downloaded it from www.ninjaforce.com, copied it to the GS with AppleTalk, uncompressed the .SHK package file, and read the manual:
To install Samurai, you just copy the file Samurai into your System/Desk.Accs folder and reboot your GS.
After following these simple instructions, I found that pressing OA-CTRL-ESC gave me my CDA menu, and I had a new entry – Samurai. I opened it up and pressed the Escape key to get to the connect menu and I already knew the first server and channel that I wanted to use – A2Central.com’s #a2c.chat.
I first found out about this IRC server and channel from Ivan Drucker’s RASPPLEII A2Cloud. This is a set of programs and custom scripts that can be installed on a Raspberry Pi, turning it into a server and telnet client for Apple II computers to use. It comes with a working setup of netatalk (the Linux version of AppleTalk/EtherTalk), ADTPro, and it comes preconfigured to connect to A2Central.com’s IRC server and the #a2c.chat channel vi a Linux command line IRC client. Maybe I’ll do another post on all of the things that I use my Raspberry Pi to do with my Apple II computers, but for now, let’s get back to IRC and Samurai.
I entered the address and port for the A2Central IRC server, entered my nick, and connected. The connection succeeded and then I tried to join the channel #a2c.chat and the server replied with “You have not registered”. I entered “/nick jefframsey” and pressed return: “You have not registered”. Every command that I tried was met with this same response. What to do? I have never had to register to any IRC server before. Most of them do not even require a password, just a name and a nick, which is like a handle or alias. I searched the Internet several times over the next few months, asking in forums, sent email to the people at Ninjaforce.com, and nobody seemed to know how to make this work. Everyone told me that they got the same message when they tried it and they resorted to using a modern IRC client instead of trying to use the Apple IIGS and Samurai. Samurai would connect to other IRC servers, DALnet, IRCNet, etc., but not the one that was hosted and used by the A2 community. It seemed like I had hit a wall. Nobody knew why it was not working, and I could not find a single person who could confirm to me that it worked for them. I was stuck.
Every few months, I would pick this torch up again and carry it another mile, asking around, setting up port mirroring and packet captures on my network, trying to determine just what the server was looking for that it was not seeing. “You have not registered” I could barely even find anything online about what “registering” to an IRC server meant.
In April 2020, I posted a screenshot of this error message in the A2GS Enthusiasts group on Facebook and asked if anyone had made this work or knew anything about this error. This post proved to bear fruit, and the responses started coming back to me. I got a response back from Phillip Allison, saying that Samurai would need to support the IDENT protocol in order to connect and register with the IRC server. Another post, from Andrew Wells, told me to try this command:
/nickserv register <nick> <password>
Could this be it? The command I had been trying to find for over 6 months that would allow me to register with this server and join the club? I was so excited to enter that command and for my efforts the server thought about it for a second or two and then promptly replied back “You have not registered”. What a let down! I replied to Andrew Wells and gave him the sad news. He said that he ran an IRC server for a while, and it was now common to require registration for clients, in an effort to keep the BOTs and other undesirables off of your server.
I decided to go back to the first response that I got, the IDENT protocol. I read about how IDENT works and discovered that it is an Internet protocol that helps identify the user of a particular TCP connection. It usually runs as a daemon on port 113 and responds to the servers IDENT request. I won’t plagiarize the Wikipedia article, but you can read more about how it works here: https://en.wikipedia.org/wiki/Ident_protocol
How was I going to get connected to A2Central IRC without the software supporting the IDENT protocol? Was it Samurai or Marinetti that should be handling this response? As an end user who was not involved in writing any code for either product, I decided that I should look for a work-around first, before I started to dig myself in over my head.
Enter BIP – The IRC Proxy
I knew enough about the IRC protocol to know that it was fairly light, mostly text-based, and was pretty easy to work with in terms of displaying its content. Therefore I figured that someone out there had written a proxy or relay server for the IRC protocol. There were in fact lots of them to choose from. I read a couple of articles on how to configure them and decided on BIP. I found a few nice blog posts describing how to install and configure BIP on Debian based Linux distros (Raspbian is based on Debian) and it seemed to support everything I needed for this project. I used this article from Linux.com to get it installed and working: https://www.linux.com/training-tutorials/weekend-project-using-irc-proxy-stay-logged-anywhere/
Once I had BIP connected to A2Central.com and #a2c.chat, it was time to try to connect to it from Samurai with my GS. I entered the IP address of my Pi into the server name, entered port 7778 (default for BIP) as the port, gave it my nick, username, real name and password… and the connection failed. BIP was connected to irc.a2central.com, but I was not getting connected to BIP. I quickly found the answer in the BIP manual – your password has to be in the following format:
This would be the username, password and server name that you configured in the bip.conf file, not the ones for the IRC server that you are trying to connect too.
I changed my password setting in Samurai and gave it another go… it worked!
I was now able to connect to #a2c.chat from my actual Apple IIGS computer! I typed a few commands, said hello to all of the other users, and everything worked as expected. Whoo Hoo! BIP IRC Proxy was a quick, easy ticket to completing this task that I had been working on for quite some time.
One thing I noticed about BIP is that it can be configured to stay connected all of the time and then you can have it play back any messages that were entered by other users while you were away. That is really handy on a channel like #a2c.chat because there does not seem to be very much activity on that channel these days.
I am guessing that Marinetti and Samurai could be updated to issue the proper response to the IDENT request, but I am not sure if their respective authors have any interest in this endeavor. Either way, my work-around was a success and I had fun learning about the IDENT protocol and how IRC registration works.
UPDATE: Turns out, even if you get connected, you still have to preface your chat messages with this command:
PRIVMSG #a2c.chat :<message>
That will frame the message in such a way that it will be sent to the channel properly.