[JDEV] Jabber Transports - New Architecture
Chris Chen
ckchris at idream.net
Fri Mar 8 11:27:04 CST 2002
How about this?
Consider the scenario where the Jabber Server still retains all its current
functionality without change. What we have now is this (in a short form
relevant to my argument):
1) Distributed "email server like" architecture. Let's define it as being
able to query for a "service" (ie. for emails, through DNS's MX records)
through another "service" (ie. DNS server in this case), and then routing
messages through that server.
2) Ability to talk to multiple protocols at the same time (ICQ, MSN, Yahoo,
etc).
So our current problem domain -- To "distribute" the communication with
other protocols/services through Jabber.
Proposals:
1) Have clients implement the protocol -- not sound, goes against Jabber
philosophy, too tedious to implement a client, etc etc.
2) Have server send plugin codes -- not sounds and difficult to send a
language/platform-free data unless you're willing to create a C# CLI/Java
CLASS -type file definitions and get every client to implement the compiler
for it.
3) Have server send XML protocol definitions -- it's not very possible to
be defining the protocol definitions for everything out there and parsing
out the info to have working code with it.
My proposal:
Rather than try to have "distribute" the communication with other protocols
to the clients or have it reside on the server, let's take a more "middle"
approach. Jabber already supports forwarding of messages based on the host
part of the JID. Thus, it supports a string that may also look something
like "blahblah%hotmail.com at non.jabber.org" when I am connected to
jabber.org. It should allow for forwarding of messages to MSN to be routed
to a server that supports such service (and if not, it should be fairly
easy to implement as it's just an extension of the current Jabber
implementation anyways).
Now imagine a set of servers that support, for instance, working AIM
transports that is more than one Jabber server but fewer than the number of
total Jabber clients out there. The non-AIM-working Jabber Servers (call
them "AIM Ignorants") will know how to route the AIM messages to such a set
of servers (call them "AIM Forwarders" in this situation).
So what we get is a solution for our problem domain:
Let's reiterate -- Problem Domain -- To "distribute" the communication with
other protocols/services through Jabber.
Solution Advantages:
*) Effectively eliminating the clients to code for protocol
implementations, so clients stay the same as now.
*) Jabber servers can forward service-related messages to those that can
handle them. Those AIM Ignorant servers (be it disabled or blocked) will
route the messages to the AIM Forwarders (server that hasn't been blocked yet).
*) Scalibility and Efficiency like the "email-style" routing.
*) Uses the current Jabber server implementations without much change, so
less coding on the server as well.
Of course, every solution comes with a few little "perks". Let me
demonstrate with a scenario that will explain it better:
Imagine a world where the Jabber Server implements the solution. The
workflow of the message that is being sent by a client is as follows
(including implementation suggestions and details):
1) Client is connected to jabber.org that is AIM Ignorant (because it is
blocked).
2) Client sends a message to an AIM user user%aol.com at aim.jabber.org.
3*) jabber.org sends an UDDI query to the UDDI Registry, asking for AIM
Forwarders.
4) A set of results come back from the registry. Jabber.org picks out
aim.noonecanblockme.org, connects to it through s2s connection, and sends
the message through the AIM Forwarder.
5) aim.noonecanblockme.org sends the message.
In this scenario, I've marked the step that is additional to the current
Jabber implementation. However, UDDI queries and registries should be very
easy to implement. In fact, it doesn't even have to be UDDI. It simply
needs to be a registry that contains the set of servers for it.
Now the additional thing to change is also the working of service
registration for the user and other parts.
I know there are more things to change than what I suggested. However, the
gist of the solution is that there is a "centralized" (or decentralized
since the registry can work like the DNS servers) place to query for AIM
Forwarders (but in a broader sense).
The biggest issues with this problem:
AOL comes over and decides to be a cheater and signs on as a
user/server. Then it queries the registry directly for the list of servers
and kaboom, all the Smart Forwarders just became Dumb Ignorant Idiots..
:) Thus I think a certificate-based authorization is required to connect
to the registry. The certificates are only issued to those that are
approved. Bigger overhead, but it will lead to better interoperability.
What do you all think?
Chris
PGP at ldap://certserver.pgp.com/
More information about the JDev
mailing list