libtransistor
A userland library for the Nintendo Switch
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
parcel.h
Go to the documentation of this file.
1 
6 #pragma once
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #include<libtransistor/types.h>
13 
21 typedef struct {
22  struct {
23  uint32_t data_size;
24  uint32_t data_offset;
25  uint32_t objects_size;
26  uint32_t objects_offset;
27  uint8_t payload[0x200];
28  } contents;
29  size_t read_head;
30  size_t write_head;
31 
32  bool writing_finalized;
33 } parcel_t;
34 
35 struct binder_t;
36 
42 void parcel_initialize(parcel_t *parcel);
43 
50 result_t parcel_load(parcel_t *parcel, uint8_t *flattened);
51 
58 uint8_t *parcel_finalize_writing(parcel_t *parcel, size_t *length);
59 
65 size_t parcel_read_remaining(parcel_t *parcel);
66 
73 void *parcel_read_inplace(parcel_t *parcel, size_t length);
74 
81 result_t parcel_read_binder(parcel_t *parcel, struct binder_t *binder);
82 
88 uint32_t parcel_read_u32(parcel_t *parcel);
89 
95 const char *parcel_read_string16(parcel_t *parcel); // proper char16 support isn't worth my time
96 
102 size_t parcel_write_remaining(parcel_t *parcel);
103 
110 void *parcel_write_inplace(parcel_t *parcel, size_t length);
111 
118 void parcel_write_u32(parcel_t *parcel, uint32_t value);
119 
126 void parcel_write_string16(parcel_t *parcel, const char *string);
127 
134 void parcel_write_interface_token(parcel_t *parcel, const char *token);
135 
136 #ifdef __cplusplus
137 }
138 #endif
Various system types.
Represents a parcel.
Definition: parcel.h:21
size_t parcel_write_remaining(parcel_t *parcel)
Query how much space is left for writing.
const char * parcel_read_string16(parcel_t *parcel)
Read a string16 from the Parcel.
uint32_t result_t
Function result.
Definition: types.h:51
void * parcel_write_inplace(parcel_t *parcel, size_t length)
Returns a pointer to the write head, them bumps it length bytes.
void parcel_initialize(parcel_t *parcel)
Initialize an empty Parcel.
uint32_t parcel_read_u32(parcel_t *parcel)
Read a uint32 from the Parcel.
void parcel_write_string16(parcel_t *parcel, const char *string)
Write a string16 to the Parcel.
Represents a remote interface.
Definition: binder.h:19
result_t parcel_load(parcel_t *parcel, uint8_t *flattened)
Load a Parcel.
uint8_t * parcel_finalize_writing(parcel_t *parcel, size_t *length)
Finalize writing a Parcel.
void parcel_write_u32(parcel_t *parcel, uint32_t value)
Write a uint32 to the Parcel.
result_t parcel_read_binder(parcel_t *parcel, struct binder_t *binder)
Read a binder_t from the Parcel.
size_t parcel_read_remaining(parcel_t *parcel)
Query how much data is left that can be read.
void * parcel_read_inplace(parcel_t *parcel, size_t length)
Returns a pointer to the read head, then bumps it length bytes.
void parcel_write_interface_token(parcel_t *parcel, const char *token)
Write an interface token to the Parcel.