
Jungle Monkey TODO
------------------

If you have any feature requests or want to help out, write
jm-dev@junglemonkey.net.  Please read this file first though.

I am more interested in the low-level stuff than the GUI.  If you're a
GUI coder and are interested in helping out in the GUI code, please
email me.


Before next unstable (odd numbered) release
==========================================


Before next stable (even numbered) release
==========================================

  - Improve GUI
      Improve error messages, tooltips
      Tabs should change color on change
      Insert files into files list in order
      Add option to convert /amd paths to /n paths (so as to trick the
        automounter).  Or fix gmc so it doesn't follow symlinks like
        it does.
      Fix messed-up sensitivity in Network interface option menu
      Ask for confirmation before removing your own channel
      Ask for confirmation before quiting if you are offering files or
	have channels.
      Chat scroll bar shouldn't move if scrolled up and someone
	types something.  I don't know how to fix this.

  - Improve GNOME support
      Improve gui_activate.  There doesn't seem to be an
	easy way to launch a file via Gnome.

  - Improve JMLite
      Add more features: support chat, search, download
      Check for "ok" filenames when adding

  - Internal improvements
      Add garbage to BTP names to fix namespaces.  Or, make BTP
	strict about the protocol name.
      Mirror based on SHA or look at MTP namespace issues
      Enforce channels-only policy internally
	(Problem is when not fully connected to channel and you send
	announcements.)  [I don't remember what this means - DAH]
      Files should appear immediately.  If jmchannels switch to 
	proposed XML protocol, this may be moot.
      MTP should download from multiple mirrors if it can.  This
	requires extra bookkeeping in MTP (most of the code is there)
	and changing the recv function to pass an offset (then recv
	implementations must support random write access).
      MTP should download files to temp files, then move.  Or, move
	incomplete files to an incomplete directory?
      MTP get_file_rendezvous

  - Documentation
      Do another pass at docs
      Redo screenshots

  - Add end-to-end measurements for experiments

  - Fix known bugs in BUGS


  - Features lost with rewrite:
      Get directory (seemed too prone to user error)
      Auto-mirroring
      Create channel from directory (need GUI)
      SHA mirroring (?)



Long term: (none of these are definite)
=======================================

GUI
===

  - Add a --geometry option.

  - Allow the user to add links from one channel to another.
	(Internally, this should be easy, as JM objects are ref
	counted.)

  - Add a popup menu on right-click DND.  It should allow you to
	either "Add" or "Create channel and Add".

  - Add comprehensive channel creation dialog.  Features:
	Create empty channels, channels from directories
	Set channels-only flag
	Set channel message-of-the-day (?)
	Set what other channels the channel is announced on	
	  (ie, add links)
	Set save flag

  - Make more configurable:
	Allow option to save everything in one directory
	Make sorting an option
	Don't follow static links on drop-and-drag?

  - Add more features to chat.  Especially, a graphical interface.

  - Allow multiple windows?

	This was in 0.0.8.  There are some static variables, so this
        will require a bit of clean up.  There might be issues with
        libglade too.

  - Add drop-and-drag out?



General
=======

  - Add 'short message' as a file type

	This would let me put up a message like "Welcome to David's
	Channel!  Check out the latest version of Jungle Monkey".
	File/channel descriptions might be enough.

  - Add channel descriptions.  This would be part of the comprehensive
	channel creation dialog.

  - Add a message board

  - Write a better man page 

	I'm using help2man right now and it's ok - I'd like to include
	more information though.

  - Compose and record a Jungle Monkey theme song that will play when
      JM is started.  It should have light, whimsical lyrics and
      catchy pop hooks.


Documenation
============

  - SGMLizing README, COPYING, and INSTALL


Internal improvements
=====================

  - Improve SHA cache

	Make the SHA cache a binary file.  It's too big now.

	Ideally, a daemon would compute the SHA's of all files, store
	this in one place, and a program could be run to get the
	(cached?) SHA of a given file.  (This would need to be setuid
	so it could SHA all files).

  - Allow user to limit bandwidth (up and down)



Jungle Monkey Protocol
======================

  - Make remove announcements secure

	Currently, anyone can send a remove message for any file, even
	files they did not add.  Our application does not allow the
	user to do this, but the code could be modified to allow it.
	Annoying people could abused this.
	
	However, there is a simple solution using crypo.  Using a
	symmetric key function F and a random key K, encrypt some
	random data M to cyphertext C.  The the user first announces a
	file, he chooses K and M, computes C, and sends the
	announcement with M and C.  K is kept secret.

	If the user wants to remove the file, he sends a remove
	announcement with K.  Other users (who saved M and C) compute
	F(M, K) and if the result is C, they know that the remove
	announcement is from the user who announced the file and they
	can remove the announcment.  Otherwise, they know the remove
	was forged and do not remove the file.

	F can be Blowfish using K as the key, or a hash of K and M
	concatenated, or something else.  M does not need to be random
	- it could be a SHA hash of the announcement.

	[See Fu's email revocation paper, section 5, in OSDI 2000]

  - Gzip index files.  Smaller files good.

  - Use SDP (RFC 2327)


Searching
=========

  - Clean up jmmsp_reply_matches.  This determines if a file matches a
      keyword.  Ideas:

      * Have spaces act as implicit and's
      * Use regex's (GLib 1.4 will have a regular expression support, 
	  I think)
