[Delta] Iris Roadmap

Justin Karneges justin-psi2 at affinix.com
Sat Sep 15 14:40:11 PDT 2007


Folks,

I hope to resume development on Iris very soon, and so I figured I'd jot down 
some plans.  First, I should say that I've been looking forward to this for a 
*long* time.  Many of the ideas below have been in my notes for years.

There are 3 major areas of Iris:
  1) networking (dns, tcp, etc)
  2) low-level xmpp (c2s, stanzas, etc)
  3) high-level xmpp (rosters, pep, etc)

I intend to focus on areas 1 & 2 for the time being.  I might eventually work 
on area 3, but that mostly depends on how well the other Psi developers 
maintain that area.  If it looks like things get stale or there's no 
innovation, then I may step in.  Otherwise, area 3 has seen a lot of action 
lately with 0.11 so I'll stay out of it.

Networking (irisnet)
-----
The goal for this area is to create a toolbox that makes implementing network 
protocols easier.  In some ways it is "cutestuff/network next-gen".  Classes 
in here won't be specific to XMPP.  Lots of code and concepts that were once 
the domain of iris/xmpp-core (e.g. auth, sasl, proxying, certificate 
handling, parsing) will probably be moved into here for reuse by all of the 
protocols we support.  Also notable will be expanded support for DNS 
(including DNS-SD) and UDP.  I'd like to also add SOCKS4, since we seem to 
get a request about that every so often.  Finally, I'll have "legacy" 
wrappers to assist in porting.  For example, there's already a drop-in 
replacement for NDns which calls NameResolver internally.

Low-level XMPP
-----
XMPP::Stream will finally have subclasses besides ClientStream.  I'm not sure 
about the class naming yet, but we essentially need subclasses for c2s, s2s, 
xmpp-over-bosh, and c2c (link-local).  I'd then like to extend the Router 
concept used in Ambrosia (and many other XMPP server implementations) to 
clients.  Instead of writing a stanza to a specific stream (currently, 
stanzas are written to a specific XMPP::Client instance which is associated 
with a single XMPP::ClientStream instance), stanzas will be sent to a Router 
object, which will then send the stanza out on the appropriate stream, 
possibly even creating the stream on demand (s2s, c2c).  XMPP::Stream objects 
may become invalid, but Router objects will never become invalid.  Router 
objects will always be operational, regardless of the connection state 
(similar to XMPP::Client), and if there is no stream to write to (or none can 
be made on demand, if appropriate) then the Router would bounce the stanza.  
It should even be conceivable to use a single Router to operate multiple 
jabber accounts, although I don't expect Psi to be written this way.  The 
Router concept will make the most sense with Link-local chat, where you 
really don't want to be thinking in terms of streams.

Phase 1
-----
The first phase of my Iris work will target the lowest levels of area 1:
  - dns
    - lookups, unicast and multicast (seems to be done)
    - service resolver abstraction (blends dns-sd and internet srv)
    - jdns (done)
    - mDNSResponder plugin (need this for dns-sd support on mac platform)
    - libidn/punycode/nameprep?  (Qt has some stuff, need to investigate)
  - network interface detection (somewhat done)
  - abstractions: ByteStream (for tcp-ish) and PacketStream (for udp-ish)
  - tcp
    - client and server
    - ack tracking for operating systems that support it
  - udp
    - client and server, 1-to-1 only
  - legacy wrappers

If anyone has a suggestion of something else that should be put at this level, 
let me know.  A couple that I'm unsure about are operating system proxy 
server detection and UPnP, but I'm thinking maybe these should be a layer 
higher.

-Justin


More information about the Delta mailing list