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]] |