BSFlite - BS-Free AIM Client

(C) 2003-2007 by Claudio P. Leite
leitec (a) leitec (d) org
AIM: augaetis byrjun

This program includes NO WARRANTY. Please see the file COPYING for more 


 BSF is a very light and minimal client for AOL(R)'s Instant Messenger(TM)
service that works (or should work) under most varieties of UNIX. It 
features only the basics that every client should have, meaning
send/receive messages, add/delete buddies and view the buddy list. 

So far, the client is reported to work on following systems:

 * Linux - i386, Alpha, ARM. Several different kernel and libc versions.
 * NetBSD - tested on 1.4-3.0, several architectures.
 * FreeBSD - tested on 5.0-STABLE
 * OpenBSD - 3.3, 3.9, 4.0 on i386. (primary development platform)
 * Solaris - 5.7, 5.8 and 5.9, i86 and SPARC.
 * SunOS 4.1.4 - SPARC, does not compile out of the box, but works once
		 patched. (patch not yet included, use binary.
		 Alternatively, define uint32_t, uint16_t and uint8_t to
		 unsigned long/short/char, respectively.)
 * Windows - 95 through Vista.
 * MS-DOS - tested on a 386 (quite slow), acceptable on a 486/66.
 * Mac OS X - tested on 10.2-10.5, Intel and PPC
 * Plan 9 - tested only on x86
   (replace ~/.bsflite with $home/lib/bsflite for configuration files)

 I've successfully compiled with gcc, 8c/pcc, Sun CC, Intel CC,
 and Watcom C (Win32).

My philosophy in regards to portability is that if it doesn't compile, 
it's my fault, not yours. If you have a system that hasn't been tested 
yet, please send me a note. If bsflite doesn't compile on your system, 
definitely do send me a note. It's probably a simple fix. I write my code 
to be as portable as possible, using standard types and calls (and porting
regularly exposes errors I've made).



 Edit the Makefile to add any additional options.
 Edit bsf.h, scroll to the bottom to change formats, including outgoing
 IM formats.

 To compile, do the following:
 (% represents a user prompt, # represents a root prompt.)

 % make
 % su (optional, the binary may be installed anywhere.)
 # cp bsflite /usr/local/bin (or any other directory you wish.)
 # exit

 If you encounter errors about uintXX_t, try adding

 #include <stdint.h>

 to imcomm/imcomm.h, after the other #include's.

 Solaris users will have to add "-lsocket -lnsl" to LIBS in the Makefile.


 To install from a binary, do the following:

 % gunzip bsflite-binary-name.gz
 % mv bsflite-binary-name bsflite
 % chmod 755 bsflite
 % su (optional, the binary may be installed anywhere.)
 # cp bsflite /usr/local/bin
 # exit

 You should now be able to run the bsflite program.


 If you're skimming, please read the "Using with screen" section.

 BSFlite supports a small configuration file. An example file is included
 in the archive. To set up a minimal file, enter the following:

 % mkdir ~/.bsflite
 % chmod 700 ~/.bsflite
 % echo "username myscreenname" > ~/.bsflite/config

 If you'd like to have your password stored, run the following:

 % echo "password mypassword" >> ~/.bsflite/config

 Custom HTML profiles are read from ~/.bsflite/profile.
 Buddy icons are read from ~/.bsflite/icons. Icons may be in GIF and JPEG
 format (as far as I know).

 Now just type bsflite to start and connect. If you did not make a config
file, you will be prompted for username and password.

 Type help or h at the prompt to see commands. It's best not to put a 
space between the commands (it might be a little buggy otherwise, since 
that's not the way I do it). For example:

 :: mmybuddy this is a test

 instead of

 :: m mybuddy this is a test

 If you prefer that way and find a bug, please notify me. Please also 
notice that you cannot put a space in the person's screen name.

 To facilitate the m command, you can type the first few letters of 
someone's screen name (provided they are in your buddy list) and press TAB 
to auto-complete the name. Please see the bugs section later for some 
current problems.


 I strongly recommend the use of screen, the console windowing system. 
With screen, you can keep this program running even while you're logged 
off the system and reattach once you're back. Since bsflite stores 
incoming messages you missed and supports away messages, this is a 
very convenient feature. Also, if you're connecting to a system 
remotely over SSH or telnet and your connection is dropped, screen 
keeps your session running. Check with your sysadmin if you're on a 
multiuser system to see if screen is allowed.


 As of version 0.80, imcomm writes your buddy lists to the server, like
the official client. So, the ~/.bsflite/buddies file is now unnecessary.
Please delete the file after running the program once if you have one,
because your buddies will already have been added to the server.


 NOTE: Rate limit updates are completely broken right now (as of 0.84).
       This section should be ignored for the time being.

 The confession: IMComm does not respect rate limits just yet.

 The workaround, sort of: BSFlite displays a warning on the prompt to let you
know you are sending packets too quickly.

 If you're being warned, your prompt will be:

 <!> [randomperson] :: 

 This will go away in 30 seconds unless you're warned again. If you exceed the
limit, the server will begin to ignore you. At this point, your prompt will

 <!!> [randomperson] ::

 This will go away in some time (haven't figured out how much just yet), but
for some reason the server doesn't tell us until you sent out a packet that
isn't ignored. It's quirky; the easiest way to avoid this is to be gentle.

 NOTE: Requesting several peoples' profiles will most likely cause a rate
limit warning. This is due to the fact that request makes two calls, one for a
profile request and one for an away message request. Since these are sent
without respect to rate limits, they are quite quick.


 To update your profile, edit ~/.bsflite/profile then run:

 % kill -USR1 <bsflite PID> (use ps to get the PID)
 or (for Linux)
 % killall -USR1 bsflite

 If you'd like to create a set of away messages (see the G command),
 create a file ~/.bsflite/awaymessages, with one message per line.
 You may use HTML formatting in each line, but make sure there is no
 line break in a message, because that'll indicate a new message.

 Type G to see which numbers are assigned to each message, and type
 G<num> to set that away message. One-time messages can still be set
 with the g<message> command.


 By default, BSF logs all AIM conversations in a directory called .bsflite/log
in your home directory. This directory is chmod 700, meaning only you can 
read it. This will be a compile-time option later (I really don't like 
configuration files, so all features will be compile-time!)

LICENSING (NOTE: I am not a lawyer.)

 BSF is licensed under the BSD License. Please see the COPYING file 
in the main bsf directory. The IMComm library, included in the main source
package, is also licensed under the same terms.
 This project contains no code from AOL, and was developed without the use
of reverse engineering of any AOL product. Instant Messenger is a trademark
of AOL. 


 BSF releases may be obtained from , and I may be 
reached at leitec (a) leitec (d) org, or over AIM, "augaetis byrjun."

 Please send me a note if you like bsflite! Hearing from users encourages
me to keep developing the program.

 Also, I like receiving postcards, so if you'd like to send one to show your
appreciation, you may at:

 Claudio Leite
 1305 Linden Court NE
 Washington, DC 20002

 Thanks and enjoy!