SonicHANDY archive file format (v9.x)

SonicHANDY archive file (.shya extension) is a UTF-16 encoded XML file.

Here is the overall file syntax:

    <?xml version="1.0" encoding="UTF-16"?>
    <SonicHANDY>
        <Version>version</Version>
        <Data>data</Data>
        <Hash>hash</Hash>
    </SonicHANDY>

<SonicHANDY> is a root element for the whole file.
version designates a version of program which created the file. Example: 9.0.0
hash is the SHA-256 hash value for the data field.

data field contains actual data:

    ...

    <Data>
        <Phonebook>phonebook1</Phonebook>
        <Phonebook>phonebook2</Phonebook>
        ...
        <Message>message1</Message>
        <Message>message2</Message>
        <Message>message3</Message>
        ...
        <Call>call1</Call>
        <Call>call2</Call>
        ...
    </Data>

    ...
Order of the sub-elements in the data field is not strict.

<Phonebook> element

phonebook contains phonebook contacts list for a particular device

    ...
    
    <Phonebook>
        <DeviceID>deviceid</DeviceID>
        <Contact>contact1</Contact>
        <Contact>contact2</Contact>
        ...
    </Phonebook>
    
    ...
deviceid is the SHA-256 hash value representing the ID of the device which owns this phonebook.
    ...
    
    <Contact>
        <Name>name</Name>
        <Number>number</Number>
        <Location>location</Location>
        <Index>index</Index>
    </Contact>
    
    ...
name is the name for the contact, and number is the number associated with the name.
location is the phonebook storage name, and index is the index of the entry inside the storage.
Multiple numbers for a contact are created by means of multiple <Contact> elements with the same name field.

<Message> element

<Message> element contains a single SMS message:

    ...
    
    <Message>
        <DeviceID>deviceid</DeviceID>
        <Status>status</Status>
        <Time>time</Time>
        <TimeOfSave>timeofsave</TimeOfSave>
        <PDU>pdu</PDU>
        <PDUHash>pduhash</PDUHash>

        <Timestamp>timestamp</Timestamp>
        <Type>type</Type>
        <From>from</From>
        <To>to</To>
        <Body>body</Body>
    </Message>
    
    ...
deviceid is the SHA-256 hash value representing the ID of the device which owns this message.
status indicates status of the message: new or normal.
time is a timestamp of the message, eg. when the message was received. For outgoing messages sent from the device this is usually zeroed out. Same as timestamp field, but in different format:
    ...
    
    <Time>
        <Year>year</Year>
        <Month>month</Month>
        <Day>day</Day>
        <Hour>hour</Hour>
        <Minute>minute</Minute>
        <Second>second</Second>
    </Time>
    
    ...
timeofsave is a timestamp of the moment when the message was saved. Useful when other timestamps are zeroed out, to indicate approximate date/time when the message was sent (for outgoing messages sent from the device). Same format as the time field.
pdu contains PDU of the message.
pduhash contains SHA-256 hash for the pdu field of this message.

timestamp is a timestamp of the message, eg. when the message was received. For outgoing messages sent from the device this is usually zeroed out. Same as time field, but in different format. Example: 2008-08-01 15:48:20.
type indicates whether message is ingoing or outgoing: in or out.
from field is only for ingoing messages, and indicates a phone number from which this message was sent.
to field is only for outgoing messages, and indicates a phone number to which this message was sent.
body contains text of the message.

Note: Fields below pduhash field are present only when Verbose data saving mode was enabled in the program during the saving process.

<Call> element

<Call> element contains a single incoming call ring:

    ...
    
    <Call>
        <Type>type</Type>
        <From>from</From>
        <DeviceID>deviceid</DeviceID>
        <Time>time</Time>
        <TimeEnd>timeend</TimeEnd>
        <TimeOfSave>timeofsave</TimeOfSave>

        <Timestamp>timestamp</Timestamp>
    </Call>
    
    ...
type indicates whether call is incoming or outgoing: in or out. Currently, only incoming calls are supported.
from field is only for incoming calls, and indicates a phone number from which the call was initiated. This field can be empty to indicate an unknown number. Currently, only incoming calls are supported.
deviceid is the SHA-256 hash value representing the ID of the device which owns this call.
time is a timestamp of the moment the call was received, and has the following format:
    ...
    
    <Time>
        <Year>year</Year>
        <Month>month</Month>
        <Day>day</Day>
        <Hour>hour</Hour>
        <Minute>minute</Minute>
        <Second>second</Second>
    </Time>
    
    ...
timeend is a timestamp of the moment the call stopped ringing. Same format as the time field.
timeofsave is a timestamp of the moment when the call was saved. Same format as the time field.
timestamp is a timestamp of the moment the call was received. Same as time field, but in different format. Example: 2008-08-01 15:48:20.

Note: timestamp field is present only when Verbose data saving mode was enabled in the program during the saving process.


© 2009 Sublimis Solutions. Last modified: 08 January 2009.