
	IPChat - Peer to peer, serverless, easy to use chat program.


Introduction
============

  IPChat is a simple and small ncurses-based chat program, written in C,
  where you find your partners (what we call contacts) by their IP
  addresses (or hostnames, so you may use it with dyn-dns things).

  Even though it's meant to be a very lightweight program, it already has
  nice features like colors, terminal window resizing, line editing and
  recalling of previously written lines.

  It mantains a persistent contact list, and it works like an "instant
  messenger" program in the sense that when a contact connects, you
  immediatly see that she/he is connected (and she/he sees you).

  You have a "window" for every connected contact (like ircII or BitchX
  windows). On the right of the terminal, you see a list of all contacts
  (connected or not). That's where you see which contacs are connected,
  which contacts said something while you're not in their windows, etc. You
  add contacts with the "/add" command. Other commands exist to modify and
  remove contacts.

  Plans for the future include support for encrypted communications,
  unicode, IPv6, file transfers, X-windows (Kopete, GTK+)... We need your
  help to develop all these things!!


Features
========

  - Does not depend on central servers.
  - Colors, bold and underline supported. They are shown as you write.
  - Easy line editing and recalling of previously written lines.
  - Handles terminal window resizing smoothly.
  - Configuration files need not be hand-edited, but it's easy to do it.
  - One window for each contact, like ircII windows.


Installation
============

  This program should compile on most POSIX compliant systems. It has been
  tested on GNU/Linux, GNU/Hurd and HP-UX. If you have a POSIX system where
  it does not compile, please report it as a bug. We will use autoconf and
  automake in the future.
 
  To compile, just go into the src directory, run make, and copy ipchat
  somewhere in your $PATH. The only needed library is ncurses. You must
  have the developement packages for your distribution installed, something
  like libncurses-dev. You may also compile and install ncurses yourself.


Usage
=====

  Run ipchat.
  Set your nick with the /nick command.
  Use online help with /help.
  Want to chat with your friend X at host Y? Just write:

    /add X Y

  Now X is in your list of contacts, and when he/she opens IPChat you will
  also be added to his/her list of contacts. So only one of the two friends
  has to run the /add command.

  Connected contacts appear on the top of the list of contacts (on the
  right). If more than one contact is connected, you use function keys
  (F1, F2, ..., F12), or /1, /2, /3 (in case some function key does not
  work) to switch among their windows. You see in the contact list which
  key is attached to each contact.

  When a contact disconnects, you may close its window with the /close
  command. It closes the current window or the window of the contact
  specified as parameter.

  Other interesting commands are:
  /delete:   Removes a contact.
  /info:     Shows network information about a contact.
  /set:      Shows or changes configuration parameters.
  /quit:     Finishes the program.

  Commands may be abbreviated (write /d or /del instead of /delete).

  While writing, use \b for bold, and \u for underline. The same sequence
  removes it. Eg: "\b\uThis is bold and underline.\b This is only underline."
  You see the result as you type! Colors are \1 to \7, and \0 resets any
  formatting.

  Use /help for more information!


Network problems
================

  Dynamic IP address
  ------------------
  If your IP address is not fixed, you can still use IPChat, just use some
  of the free dynamic DNS services available, like http://www.dyndns.org.
  That's useful for other things too, like running a web server. There are
  many programs which automatically update your DNS configuration when your
  IP changes, like ddclient or ipcheck.

  Routers
  -------
  If you use a router to connect to Internet (an ADSL router, for example),
  you need to configure it properly so incomming connection requests go to
  your computer. As many other applications require this, you should
  already have it properly configured. In many routers, setting the private
  IP address of your computer as the "default host" will work. You may also
  use "port forwarding" or use the router as a modem by setting your public
  IP address in your computer. Please, check the documentation of your
  router. Anyway, you don't need to fix this if your contacts do not have
  the same problem, as it's enough for one of the two peers to be able to
  receive connections. Note most routers are firewalls as well, so you may
  need to read the next section.

  Firewalls
  ---------
  You should configure your firewall so it allows incomming and outgoing
  connections to the TCP port IPChat is listening on, which is 47928 by
  default. It may be changed using the "/set port" command. You can also
  set the port your contacts use, using the optional third parameter of the
  "/add" command, but this is not normally needed because this information
  is propagated the first time two clients connect.

  Remember that only one of the two clients needs to be able to contact the
  other, because IPChat not only waits for connections, but it also tries
  to connect with contacts every 60 seconds (this will be configurable in
  the future).

  Private IP address
  ------------------
  If you don't have a public Internet IP address in your computer, and want
  to chat with people on Internet, and your router/firewall is doing NAT
  (this is very common in corporate networks), everything should work OK as
  long as your contacts DO have public IP addresses. If they don't, you or
  them (or both) must configure the router/firewall to do port forwarding
  (redirect incomming IPChat packets to your machine). Another, harder
  solution is to set up an IP tunnel, with some software like VTun.


Known bugs
==========

  - Only 12 contacts may be connected at the same time (we need to find out
    how to handle Shift+F1, Alt+F1... so we can attach more keys to
    contacts).
  - Nicknames get duplicated if some contact changes it to the nick of
    another contact.
  - Contacts are created automatically when they connect for the first
    time. The user should be able to reject/ban it. Otherwise, a DoS attack
    could be performed. Moreover, if the user deletes a connected contact,
    this contact will appear again in a few seconds.
  - One should be able to disable text formatting, just in case he/she
    wants to paste lines containing backslashes.
  - There should be a manpage.
  - There should be a command for modifying a contact's host and port.
  - Two contacts with the same IP address are not supported (the connection
    will jump from one to the other). This will be fixed when OpenSSL is
    used, because then we'll ignore the IP address of incomming
    connections, and identify contacts by their public key.


Contributing
============

Add bug reports, suggestions and patches to our savannah project at:

    http://savannah.gnu.org/projects/ipchat

Or contact us directly (see file AUTHORS).

See doc/HACKING if you want to adapt IPChat to your needs or you want to
contribute seriously.


Distribution
============

  CVS repository and new releases may be found at:

    http://savannah.gnu.org/projects/ipchat


Copyright
=========

  Copyright (C) 2004 Maximiliano Pin
  Copyright (C) 2004 Julio A. Becerra

  IPChat is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

