StreetPass: Difference between revisions
| Meleemeister (talk | contribs) |  Fill in structs for streetpass messages | ||
| Line 500: | Line 500: | ||
| The body is expected to contain binary data with the same structure as the spr-slotXX files in the request. The order of these must be the same as the reponse header order. | The body is expected to contain binary data with the same structure as the spr-slotXX files in the request. The order of these must be the same as the reponse header order. | ||
| == Structs, Data Types == | |||
| Streetpass uses multiple different structs and data types for storing and transporting data. | |||
| === MessageId === | |||
| This datatype holds a per-console-per-title unique message id. | |||
| {| class="wikitable" border="1" | |||
| ! Type | |||
| ! Description | |||
| |- | |||
| | u8[8] | |||
| | The message id | |||
| |} | |||
| === Timestamp12 === | |||
| This holds a timestamp in 12 bytes | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| |- | |||
| | 0x0 | |||
| | 0x4 | |||
| | u32 | |||
| | Year | |||
| |- | |||
| | 0x4 | |||
| | 0x1 | |||
| | u8 | |||
| | Month | |||
| |- | |||
| | 0x5 | |||
| | 0x1 | |||
| | u8 | |||
| | Day | |||
| |- | |||
| | 0x6 | |||
| | 0x1 | |||
| | u8 | |||
| | Weekday | |||
| |- | |||
| | 0x7 | |||
| | 0x1 | |||
| | u8 | |||
| | Hour | |||
| |- | |||
| | 0x8 | |||
| | 0x1 | |||
| | u8 | |||
| | Minute | |||
| |- | |||
| | 0x9 | |||
| | 0x1 | |||
| | u8 | |||
| | Second | |||
| |- | |||
| | 0xA | |||
| | 0x2 | |||
| | u16 | |||
| | Millisecond | |||
| |} | |||
| === Message (0x6060) === | |||
| MessageHeader: | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x2 | |||
| | u16 | |||
| | magic | |||
| | Equals 0x6060 (<code>``</code>) | |||
| |- | |||
| | 0x02 | |||
| | 0x2 | |||
| | u16 | |||
| | Padding | |||
| | | |||
| |- | |||
| | 0x04 | |||
| | 0x04 | |||
| | u32 | |||
| | message_size | |||
| | The size in bytes of the entire message, including all headers and hmac | |||
| |- | |||
| | 0x08 | |||
| | 0x04 | |||
| | u32 | |||
| | total_header_size | |||
| | The size in bytes of all headers, including the extra headers | |||
| |- | |||
| | 0x0C | |||
| | 0x04 | |||
| | u32 | |||
| | body_size | |||
| | The size in bytes of the body of the message | |||
| |- | |||
| | 0x10 | |||
| | 0x04 | |||
| | u32 | |||
| | title_id | |||
| | The title id of the message | |||
| |- | |||
| | 0x14 | |||
| | 0x04 | |||
| | u32 | |||
| | title_id2 | |||
| | ??? | |||
| |- | |||
| | 0x18 | |||
| | 0x04 | |||
| | u32 | |||
| | batch_id | |||
| | The sending client sets an ID here if multiple messages should be batched together into one transaction | |||
| |- | |||
| | 0x1C | |||
| | 0x04 | |||
| | u32 | |||
| | transfer_id | |||
| | ??? | |||
| |- | |||
| | 0x20 | |||
| | 0x08 | |||
| | MessageId | |||
| | message_id | |||
| | The ID of the sending message | |||
| |- | |||
| | 0x28 | |||
| | 0x04 | |||
| | u32 | |||
| | message_version | |||
| | ??? | |||
| |- | |||
| | 0x2C | |||
| | 0x08 | |||
| | MessageId | |||
| | message_id_2 | |||
| | The message ID that this message is referring to, e.g. the individual responses in Streetpass Mii Plaza | |||
| |- | |||
| | 0x34 | |||
| | 0x01 | |||
| | u8 | |||
| | flags | |||
| | ??? | |||
| |- | |||
| | 0x35 | |||
| | 0x01 | |||
| | SendMethod | |||
| | send_method | |||
| | | |||
| |- | |||
| | 0x36 | |||
| | 0x01 | |||
| | bool | |||
| | unopened | |||
| | Set if the message hasn't been opened yet | |||
| |- | |||
| | 0x37 | |||
| | 0x01 | |||
| | bool | |||
| | is_new | |||
| | Set if the message is new | |||
| |- | |||
| | 0x38 | |||
| | 0x08 | |||
| | u64 | |||
| | sender_id | |||
| | | |||
| |- | |||
| | 0x40 | |||
| | 0x08 | |||
| | u64 | |||
| | sender_id_2 | |||
| | | |||
| |- | |||
| | 0x48 | |||
| | 0x0C | |||
| | Timestamp12 | |||
| | sent | |||
| | | |||
| |- | |||
| | 0x54 | |||
| | 0x0C | |||
| | Timestamp12 | |||
| | received | |||
| | | |||
| |- | |||
| | 0x60 | |||
| | 0x0C | |||
| | Timestamp12 | |||
| | created | |||
| | | |||
| |- | |||
| | 0x6C | |||
| | 0x01 | |||
| | u8 | |||
| | send_count | |||
| | How often this message can be sent | |||
| |- | |||
| | 0x6D | |||
| | 0x01 | |||
| | u8 | |||
| | forward_count | |||
| | How often this message can be forwarded | |||
| |- | |||
| | 0x6E | |||
| | 0x02 | |||
| | u16 | |||
| | user_data | |||
| | ??? | |||
| |} | |||
| ExtMessageHeader: | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x04 | |||
| | u32 | |||
| | type | |||
| | The type of the extra header | |||
| |- | |||
| | 0x04 | |||
| | 0x04 | |||
| | u32 | |||
| | size | |||
| | Size, in bytes, of the extra header | |||
| |- | |||
| | 0x08 | |||
| | | |||
| | | |||
| | body | |||
| | The body of the extra header | |||
| |} | |||
| Message: | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x70 | |||
| | MessageHeader | |||
| | header | |||
| | The header of the message | |||
| |- | |||
| | 0x70 | |||
| | | |||
| | ExtMessageHeader[] | |||
| | ext_headers | |||
| | An array of the extra headers for the message. The array keeps filling until the length no more until <code>header.total_header_size</code> | |||
| |- | |||
| | | |||
| | | |||
| | | |||
| | body | |||
| | The actual body/payload of the message | |||
| |- | |||
| | | |||
| | 0x20 | |||
| | u8[0x20] | |||
| | hmac | |||
| | The hmac over the body with the hmac_key | |||
| |} | |||
| === Slot (0x6161) === | |||
| The slot groups multiple messages of one title id together into a single struct | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x02 | |||
| | u16 | |||
| | magic | |||
| | Equals 0x6161 (<code>aa</code>) | |||
| |- | |||
| | 0x02 | |||
| | 0x02 | |||
| | u16 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x04 | |||
| | 0x04 | |||
| | u32 | |||
| | size | |||
| | The size of bytes of the entire slot, including the header and all messages it contains | |||
| |- | |||
| | 0x08 | |||
| | 0x04 | |||
| | u32 | |||
| | title_id | |||
| | The title id of the slot | |||
| |- | |||
| | 0x0C | |||
| | 0x04 | |||
| | u32 | |||
| | batch_id | |||
| | If the slot contains batched messages, the batch id is set to the same one as those messages | |||
| |- | |||
| | 0x10 | |||
| | 0x04 | |||
| | u32 | |||
| | message_count | |||
| | The total number of messages in this slot | |||
| |- | |||
| | 0x14 | |||
| | | |||
| | Message[] | |||
| | messages | |||
| | An array of length <code>message_count</code> all the messages of this slot | |||
| |} | |||
| === BoxInfo (0x6262) === | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x02 | |||
| | u16 | |||
| | magic | |||
| | Equals 0x6262 (<code>bb</code>) | |||
| |- | |||
| | 0x02 | |||
| | 0x02 | |||
| | u16 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x04 | |||
| | 0x04 | |||
| | u32 | |||
| | file_size | |||
| | The size of the box info in bytes | |||
| |- | |||
| | 0x08 | |||
| | 0x04 | |||
| | u32 | |||
| | max_box_size | |||
| | The maximum allowed size of the box in bytes | |||
| |- | |||
| | 0x0C | |||
| | 0x04 | |||
| | u32 | |||
| | box_size | |||
| | The current size of the box in bytes | |||
| |- | |||
| | 0x10 | |||
| | 0x04 | |||
| | u32 | |||
| | max_num_messages | |||
| | The maximum number of messages that the box can hold | |||
| |- | |||
| | 0x14 | |||
| | 0x04 | |||
| | u32 | |||
| | num_messages | |||
| | The current number of messages in the box | |||
| |- | |||
| | 0x18 | |||
| | 0x04 | |||
| | u32 | |||
| | max_batch_size | |||
| | The maximum size of a bach, in number of messages | |||
| |- | |||
| | 0x1C | |||
| | 0x04 | |||
| | u32 | |||
| | max_message_size | |||
| | The maximum size of a message, in bytes | |||
| |- | |||
| | 0x20 | |||
| | | |||
| | MessageHeader[] | |||
| | message_headers | |||
| | An array of all message headers in this box of length <code>num_messages</code> | |||
| |} | |||
| === MBoxInfo (0x6363) === | |||
| This holds information on the message box, including both inbox and outbox | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x02 | |||
| | u16 | |||
| | magic | |||
| | Equals 0x6363 (<code>cc</code>) | |||
| |- | |||
| | 0x02 | |||
| | 0x02 | |||
| | u16 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x04 | |||
| | 0x04 | |||
| | u32 | |||
| | title_id | |||
| | The title id for this mbox | |||
| |- | |||
| | 0x08 | |||
| | 0x04 | |||
| | u32 | |||
| | private_id | |||
| | ??? | |||
| |- | |||
| | 0x0C | |||
| | 0x01 | |||
| | u8 | |||
| | mbox_type_flags | |||
| | 0x01: normal programs, 0x06: system programs, 0x80: silent notif | |||
| |- | |||
| | 0x0D | |||
| | 0x01 | |||
| | bool | |||
| | enabled | |||
| | Weather this message box is enabled | |||
| |- | |||
| | 0x0E | |||
| | 0x02 | |||
| | u16 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x10 | |||
| | 0x20 | |||
| | u8[0x20] | |||
| | hmac_key | |||
| | The hmac key to make hmacs for messages. These are unique per title, however they are the same for all consoles. | |||
| |- | |||
| | 0x30 | |||
| | 0x04 | |||
| | u32 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x34 | |||
| | 0x0C | |||
| | Timestamp12 | |||
| | last_accessed | |||
| | | |||
| |- | |||
| | 0x40 | |||
| | 0x01 | |||
| | bool | |||
| | flag_unread | |||
| | Does this message box contain unread messages? | |||
| |- | |||
| | 0x41 | |||
| | 0x01 | |||
| | bool | |||
| | flag_new | |||
| | Does this message box contain new messages? | |||
| |- | |||
| | 0x42 | |||
| | 0x01 | |||
| | bool | |||
| | flag_unknown | |||
| | ??? | |||
| |- | |||
| | 0x43 | |||
| | 0x01 | |||
| | bool | |||
| | flag_unknown | |||
| | ??? | |||
| |- | |||
| | 0x44 | |||
| | 0x0C | |||
| | Timestamp12 | |||
| | last_received | |||
| | | |||
| |- | |||
| | 0x50 | |||
| | 0x04 | |||
| | u32 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x54 | |||
| | 0x0C | |||
| | Timestamp12 | |||
| | unknown_timestamp | |||
| | ??? | |||
| |} | |||
| === 0x6565 === | |||
| SlotMetadata: | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x04 | |||
| | u32 | |||
| | title_id | |||
| | The title id of the slot | |||
| |- | |||
| | 0x04 | |||
| | 0x04 | |||
| | SendMethod | |||
| | send_method | |||
| | The send method for the slot | |||
| |- | |||
| | 0x08 | |||
| | 0x04 | |||
| | u32 | |||
| | body_size | |||
| | The size of the slot body in bytes | |||
| |- | |||
| | 0x0C | |||
| | 0x04 | |||
| | u32 | |||
| | count | |||
| | Number of messages | |||
| |- | |||
| | 0x10 | |||
| | 0x14 | |||
| | '''unknown''' | |||
| | '''unknown''' | |||
| | | |||
| |} | |||
| Struct: | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Length | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x02 | |||
| | u16 | |||
| | magic | |||
| | Equals 0x6565 (<code>ee</code>) | |||
| |- | |||
| | 0x02 | |||
| | 0x02 | |||
| | u16 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x04 | |||
| | 0x28 | |||
| | '''unknown''' | |||
| | '''unknown''' | |||
| | | |||
| |- | |||
| | 0x2C | |||
| | 0x360 | |||
| | SlotMetadata[0x18] | |||
| | slots | |||
| | Metadata of all slots | |||
| |} | |||
| === OBIndex (0x6767) === | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x02 | |||
| | u16 | |||
| | magic | |||
| | Equals 0x6767 (<code>gg</code>) | |||
| |- | |||
| | 0x02 | |||
| | 0x02 | |||
| | u16 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x04 | |||
| | 0x04 | |||
| | u32 | |||
| | num_messages | |||
| | The number of messages in the outbox | |||
| |- | |||
| | 0x08 | |||
| | | |||
| | MessageId[] | |||
| | message_ids | |||
| | An array of the message IDs in the outbox, of length <code>num_messages</code> | |||
| |} | |||
| === MBoxList (0x6868) === | |||
| {| class="wikitable" border="1" | |||
| ! Offset | |||
| ! Size | |||
| ! Type | |||
| ! Name | |||
| ! Description | |||
| |- | |||
| | 0x00 | |||
| | 0x02 | |||
| | u16 | |||
| | magic | |||
| | Equals 0x6868 (<code>hh</code>) | |||
| |- | |||
| | 0x02 | |||
| | 0x02 | |||
| | u16 | |||
| | padding | |||
| | | |||
| |- | |||
| | 0x04 | |||
| | 0x04 | |||
| | u32 | |||
| | version | |||
| | | |||
| |- | |||
| | 0x08 | |||
| | 0x04 | |||
| | u32 | |||
| | num_boxes | |||
| | The number of boxes (= games with streetpass enabled) | |||
| |- | |||
| | 0x0C | |||
| | 0x180 | |||
| | char[0x18][0x10] | |||
| | box_names | |||
| | A 0x18-long array of all the box names (= hex encoded title ids) of games with streetpass enabled | |||
| |} | |||
| [[Category:Nintendo Software]] | [[Category:Nintendo Software]] | ||