This document describes a protocol for a distributed-server communication system, tentatively called FMTP (Flexible Message Transfer Protocol). The name will probably change to something about post office or whatever.

Ok, this is me scratchboarding again, so there may be some contradictions until everything gets stabilized. I'll probably end up writing a reference implementation before things really get stable.

I'm thinking the primary tasks of an FMTP system will be to cache objects and to answer requests for objects. There should be a routing system similar to TCP/IP. So for example users that match *@splitreflection.com might go through one gateway, while *@* will go through another.

When you want an object, you should look for it in this order:

  1. Local cache
  2. Object owner
  3. MX server for object
  4. gateway for object

There are 4 possible outcomes when you look for an object.

  1. Failure
    • Could not connect to node. Applies to 2, 3, and 4.
  2. Object does not exist
    • For 1, proceed to 2. For 2, 3, or 4, give up.
  3. I have object
    • Store object in local cache, and stop looking.
  4. I will look for the object
    • Applies to 3 and 4. Wait for a response, and do not look further. If you are asking by proxy, you may consider the request closed.

A request looks like this:

Data Structures

Identity

Object

FMTP has the following design goals:

Authenticity

Unsolicited Messages

Routing

Delivery Methods

Message Refusal


The core of the FMTP protocol is made up of three components:

Nodes

Envelopes

Objects


Here is a list of supported features. It should be simple to add more in the future


Old stuff: will be rewritten


FMTP has a few distinct architectural components:

The types of messaging this protocol could support include:

Architecture

Objects

Route negotiation

Messages

Public Objects

Abuse Prevention

Threads, or object relation

Example conversation (in plain english)

  1. Poe.net checks its cache for lost@lenore.org, but does not find it.

  2. Poe.net looks up the MX record for lenore.org, and finds mail.lenore.org
  3. Poe.net looks up fmtpkey.lenore.org, and caches the public key
  4. Poe.net connects to mail.lenore.org
    • Poe: Hi, I'm poe.net. Here's my hash.
    • Lenore checks its cache for a poe.net public key, but does not find it.
    • Lenore looks up fmtpkey.poe.net, and gets the public key.
    • Lenore verifies the hash
    • Lenore: Nice to meet you, poe.net. I am lenore.org. Here's my hash.
    • Poe verifies the hash
    • Poe: Do you know lost@lenore.org?

    • Lenore: This is lost@lenore.org. Connect to lost.lenore.org, port 8000 tcp

  5. Poe now has lost@lenore.org, and attempts to connect to lost.lenore.org

  6. Poe cannot reach lost.lenore.org, so reconnects to mail.lenore.org
    • Perhaps connections could be left open, either for a time period or until a connection limit is reached.
  7. Lenore uses an existing logged-in connection from lost@lenore.org

FlexibleMessageTransferProtocol (last edited 2007-01-20 01:31:58 by calin)