(incomplete, see also
http://old.gale.org/gag/proto )
Messages are composed of fragments. The order of fragments in a message doesn't matter. Unknown fragments should be ignored; this will allow the format to be extended without sacrificing compatibility.
Fragment Data Types
ID Type
0 UCS-2 text.
1 Arbitrary binary data.
2 128-bit date/time stamp: 64-bit seconds since epoch, 64-bit second fraction.
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| sec. high | sec. low | frac. hi. | frac. low |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
3 32-bit signed integer.
4 Nested fragment list.
Current fragments:
- message/sender - real name of person sending puff
- message/body - contents of puff
- id/class - identifies the type of sending client; should be client name and version number, separated with a slash. Examples:
- gsend/0.99egg
- vtFugu/1.2.1
- yammer.net/1.0pre.2161
- id/instance - identifies the particular sending client process; in gsend, follows this form, which should be replicated as closely as possible:
- $GALE_DOMAIN/$HOSTNAME/$USER/$TTY/$PID
Fragments in key requests and responses:
- question.key - used in an AKD request; supercedes question/key; the local part of the key name must not be reversed
- answer/key - response to old-style or new-style AKD request
- answer.key - some key responses use this instead of answer/key
- answer/key/error - error result for AKD request (old or new)
Fragments in a return receipt:
- question.receipt - supercedes question/receipt; must be set to the location to which receipts should be sent
- answer.receipt - supercedes answer/receipt; set to Gale ID of user sending receipt
- notice/presence - presence status, such as "in.present"
deprecated/obsolete fragments:
- message/recipient - deprecated; used to set a friendly name for the recipient of the message whether a puff is a return receipt or not
- question/key - used in an AKD request; obsolete; the local part of the key name must be reversed
custom fragments
- _ginsu.timestamp - time message was recieved by ginsu, set on incoming puffs for default sorting method of time recieved
- _ginsu.spumbuster - sha1 digest of raw message, useful for busting spum. text fragment consisting of hexadecimal representation of digest.
experimental fragments
- received/server-id - contains a unique (per process) server-id of the server that this message passed through, such as "Jgaled-0.1/192.168.0.102/Windows XP-5.1-x86/30426707"; there will be one of these fragments for each server the message passes through (if that server supports this fragment); (compatibility: jgaled)
- message.id - arbitrary text fragment to be copied into return receipts
- receipt.id - message.id of puff this is a return reciept for.
- followup.id - message.id of puff this is a followup puff too.
- reply.id - message.id of puff this is a reply too.
- status.presence - string to be combined with notice.idle in IdleTimeProtocol
- status.idle - time representing the last know nonidle time (see IdleTimeProtocol)