
GNet TODO
---------

Below are features we are interested in adding.  Please see HACKING if
you can help.


Features
--------

- Include more protocols

    The goal here is to add basic implementations of popular file
    transfer protocols (eg, HTTP, FTP).  Just the basics - nothing
    fancy.

    I'm hesitant to include more complex protocols (eg, NNTP, SMTP,
    IRC) because they are more application-focused and have limited
    use outside their specific application.  For example, someone who
    wants NNTP is probably implementing a new reader and would be
    better off implementing it from scratch for finer control
    of the protocol.  On the other hand, if someone had a good
    implementation of NNTP with a good interface and there were demand
    for it, I would probably accept it.  (An alternative would be
    start a gnet-protocol library which would include more complex
    protocols).

    I would also be more inclined to accept implementations that are
    in existing, working programs as opposed to from-scratch
    implementations (for complex protocols).  This is because existing
    implementations have been tested both in functionality and in
    interface design.  Moreover, we would be guaranteed at least one
    user.

- Bindings for other languages

    The GTK doc folks are working on a new standard for describing
    interfaces.  Use this when it's done.

- Add gnet_tcp_socket_sendfile(GTcpSocket*, GIOChannel*).  sendfile is
    available on Linux and Windows, but I'm sure the semantics are
    different (that's why having this function would be handy).

- Consider adding gnet_io_channel_{readv/writev}.  This is on most
    systems, but should support systems without.


Internal Improvements
---------------------

- 64-bit MDA/SHA.  These modules cannot handle buffers longer than 4G.

- Better asynchronous DNS
    * Add option to use GNU ADNS? (and update license)
    * Consider modifying glibc/BIND code?

- use thread pools for async DNS stuff?

- gnet_inetaddr_new will give you localhost if you give it an hostname
    of "" in Linux.  Is this true on all systems?  If not, we should
    do a return-on-fail when we get an empty string.


Other
-----

- More documentation and examples

    Add a beginners guide/tutorial.  Show more code examples.


Undecided (things discussed, but not decided on)
---------

- Add more error types

- Clean up GIOChannel usage.  

    Seeking on a socket should raise an error.  Reading/writing to a
    UDP socket should raise an error.  Etc.

    We'd also like to support UDP/Mcast better.  We use a channel for
    a UDP socket, though it's not really a channel.  One solution
    would be to add a GIOMessageSource which supports descrete
    messages and has all the functions GIOChannel has.  Another
    solution is to add a send_msg and recv_msg function to GIOChannel
    (or replace the vtable in GIOChannel with one that also includes
    these functions).

- Support out-of-band data.  How useful is this?  How portable?


Never (things that will probably never become part of GNet)
-----

- Raw or low-level IP (use libpcap, libnet)
