NAME
Palm::Treo680MessagesDBformat - record format for the Palm Treo 680 SMS messages database
CREATOR
MsSt
TYPE
MsDb
DATA TYPES and INDEXES
In the following, all values are assumed to be big-endian unless otherwise specified, and indexes start at 0. So the first byte in a record is byte 0x00, and the 4th byte is byte 0x03. Human-readable text is generally in ASCIIZ format - that is a sequence of 8 bit characters terminated by an ASCII NUL character (hex 0x00). OK, so it's really some kind of Latin-N encoding.
RECORD TYPES
The database can contain several record types. The record type is a 16-bit number at offset 0x0A. The structure varies from one record type to another.
TYPE 0x400C (and maybe 0x4009)
This represents an inbound message. It is possible, that type 0x4009 may have the same structure but for outbound messages, as that has appeared in message databases from the Treo 650.
Message data starts at offset 0x22, with an ASCIIZ phone number for the other party, followed by an ASCIIZ name, and optionally some more 0x00 bytes.
After the name and its trailing zeroes come four more bytes whose function is unknown, then the ASCIIZ message test.
There are two more unknown bytes, then a 32-bit timestamp, a number of seconds since the Palm epoch. 0 is in 1904, so substract 2082844800 to get the Unix epoch. We don't believe that the timezone is stored in the database.
TYPE 0x0002
This represents an outbound message.
The timestamp is at offset 0x24.
Message data starts at offset 0x46 with an ASCIIZ number immediately followed by an ASCIIZ name and some optional trailing zeroes. The name is truncated to 31 characters. There then follows some gibberish including the string 'Trsm', four more bytes, and the ASCIIZ message.
'Trsm' is the creator ID of the Treo 650's messages database. Coincidence? I THINK NOT!
EXCEPTION
Decoding records as above will sometimes give as the message text the sequence 0x01 0x4E 0x40. These records' actual format is unknown.
TYPE 0x0001
This represents an outbound message.
The timestamp is at offset 0x24.
Message data starts at offset 0x4C. There is first some *optional* leading zeroes, then an ASCIIZ phone number, immediately followed by an ASCIIZ name. There is then some unknown data, followed by the sequence 0x20 0x02, a 16-bit length word, and an ASCIIZ message.
EXCEPTION
Decoding records as above will sometimes give an empty phone number. These records' actual format is unknown.
TYPE 0x0000
There appear to be two distinct record types both with type 0x0000. Both are for outbound messages.
SUBTYPE 1
The first can be recognised by having a non-NULL character in position 0x40.
The message text is preceded by 0x20 0x02 and a 16-bit length, and is ASCIIZ. The timestamp is preceded by 0x80 0x00.
It's not clear how to find the number and name. A heuristic that seems to work is to find the *last* sequence of six or more digits preceded by an optional + sign. This should be an ASCIIZ phone number, followed by an ASCIIZ name.
SUBTYPE 2
The timestamp is at index 0x24.
The number field starts at 0x4C and is ASCIIZ, but may be preceded by some extra NULs. The number is immediately followed by the ASCIIZ name.
The message is preceded by 0x20 0x02 and a 16-bit length word, and is ASCIIZ.
BUGS, LIMITATIONS and FEEDBACK
This documentation has been produced by reverse-engineering data stored on a limited number of phones. Consequently it probably doesn't cover all the possibilities and may contain errors. If you find any errors or omissions, blame Palm for not documenting it in the first place, and then please send a patch and some sample data either by email or using http://rt.cpan.org/.
SEE ALSO
Palm::Treo680MessagesDB, code implenting this documentation.
Palm::SMS, which handles SMS messages databases on some other models of Treo.
AUTHOR, LICENCE and COPYRIGHT
Copyright 2008 David Cantrell <david@cantrell.org.uk>
This documentation is free-as-in-speech. It may be used, distributed and modified under the terms of the Creative Commons Attribution-Share Alike 2.0 UK: England & Wales License, whose text you may read at http://creativecommons.org/licenses/by-sa/2.0/uk/.
CONSPIRACY
This is also free-as-in-mason documentation.