eolib 0.6.1
A core C library for writing applications related to Endless Online
Loading...
Searching...
No Matches
data.h
Go to the documentation of this file.
1#ifndef EOLIB_EO_DATA_H
2#define EOLIB_EO_DATA_H
3
4#include <stddef.h>
5
6#include "eo_compat.h"
7#include "result.h"
8
10#define EO_CHAR_MAX 253
12#define EO_SHORT_MAX 64009
14#define EO_THREE_MAX 16194277
16#define EO_INT_MAX 4097152081
18#define EO_NUMBER_PADDING 0xFE
20#define EO_BREAK_BYTE 0xFF
21
30
32typedef struct EoReader
33{
34 const uint8_t *data;
35 size_t length;
36 size_t offset;
38 size_t chunk_offset;
41
53EoResult eo_string_to_windows_1252(const char *value, char **out_value);
54
60
67
74void eo_writer_free(EoWriter *writer);
75
86EoResult eo_writer_ensure_capacity(EoWriter *writer, size_t additional);
87
98EoResult eo_encode_number(int32_t number, uint8_t out_bytes[4]);
99
109int32_t eo_decode_number(const uint8_t *bytes, size_t length);
110
120void eo_decode_string(uint8_t *buf, size_t length);
121
131void eo_encode_string(uint8_t *buf, size_t length);
132
144void eo_writer_set_string_sanitization_mode(EoWriter *writer, bool enabled);
145
153
161
169
177
189
196EoResult eo_writer_add_string(EoWriter *writer, const char *value);
197
204EoResult eo_writer_add_encoded_string(EoWriter *writer, const char *value);
205
216EoResult eo_writer_add_fixed_string(EoWriter *writer, const char *value, size_t length, bool padded);
217
228EoResult eo_writer_add_fixed_encoded_string(EoWriter *writer, const char *value, size_t length, bool padded);
229
237EoResult eo_writer_add_bytes(EoWriter *writer, const uint8_t *data, size_t length);
238
246EoReader eo_reader_init(const uint8_t *data, size_t length);
247
254
260
266size_t eo_reader_remaining(const EoReader *reader);
267
275
286EoResult eo_reader_get_byte(EoReader *reader, uint8_t *out_value);
287
298EoResult eo_reader_get_char(EoReader *reader, int32_t *out_value);
299
310EoResult eo_reader_get_short(EoReader *reader, int32_t *out_value);
311
322EoResult eo_reader_get_three(EoReader *reader, int32_t *out_value);
323
334EoResult eo_reader_get_int(EoReader *reader, int32_t *out_value);
335
343EoResult eo_reader_get_string(EoReader *reader, char **out_value);
344
352EoResult eo_reader_get_encoded_string(EoReader *reader, char **out_value);
353
363EoResult eo_reader_get_fixed_string(EoReader *reader, size_t length, char **out_value);
364
374EoResult eo_reader_get_fixed_encoded_string(EoReader *reader, size_t length, char **out_value);
375
385EoResult eo_reader_get_bytes(EoReader *reader, size_t length, uint8_t **out_value);
386
391
392typedef struct
393{
395 EoResult (*serialize)(const EoSerialize *self, EoWriter *writer);
396 size_t (*get_size)(const EoSerialize *self);
397 void (*free)(EoSerialize *self);
399
401{
403};
404
412static EoResult eo_deserialize(EoSerialize *serialize, EoReader *reader)
413{
414 if (!serialize || !reader)
415 return EO_NULL_PTR;
416 return serialize->vtable->deserialize(serialize, reader);
417}
418
426static EoResult eo_serialize(const EoSerialize *serialize, EoWriter *writer)
427{
428 if (!serialize || !writer)
429 return EO_NULL_PTR;
430 return serialize->vtable->serialize(serialize, writer);
431}
432
438static size_t eo_get_size(const EoSerialize *serialize)
439{
440 if (!serialize)
441 return 0;
442 return serialize->vtable->get_size(serialize);
443}
444
450static void eo_free(EoSerialize *serialize)
451{
452 if (!serialize || !serialize->vtable || !serialize->vtable->free)
453 return;
454 serialize->vtable->free(serialize);
455}
456
460typedef struct EoPacket EoPacket;
461typedef struct
462{
463 uint8_t (*get_family)(const EoPacket *self);
464 uint8_t (*get_action)(const EoPacket *self);
466
472
479{
480 if (!packet)
481 return 0;
482 return packet->vtable->get_family(packet);
483}
484
491{
492 if (!packet)
493 return 0;
494 return packet->vtable->get_action(packet);
495}
496
497#endif
EoResult eo_writer_add_string(EoWriter *writer, const char *value)
Definition data.c:594
EoResult eo_string_to_windows_1252(const char *value, char **out_value)
Definition data.c:164
EoResult eo_reader_get_fixed_encoded_string(EoReader *reader, size_t length, char **out_value)
Definition data.c:1216
bool eo_reader_get_chunked_reading_mode(const EoReader *reader)
Definition data.c:912
static EoResult eo_serialize(const EoSerialize *serialize, EoWriter *writer)
Definition data.h:426
EoResult eo_reader_get_string(EoReader *reader, char **out_value)
Definition data.c:1147
static size_t eo_get_size(const EoSerialize *serialize)
Definition data.h:438
void eo_reader_activate_chunked_reading(EoReader *reader)
Definition data.c:917
EoResult eo_reader_get_encoded_string(EoReader *reader, char **out_value)
Definition data.c:1166
EoResult eo_writer_add_encoded_string(EoWriter *writer, const char *value)
Definition data.c:646
EoResult eo_writer_add_fixed_string(EoWriter *writer, const char *value, size_t length, bool padded)
Definition data.c:711
EoResult eo_reader_get_int(EoReader *reader, int32_t *out_value)
Definition data.c:1115
int32_t eo_decode_number(const uint8_t *bytes, size_t length)
Definition data.c:334
EoResult eo_writer_add_byte(EoWriter *writer, uint8_t value)
Definition data.c:451
EoWriter eo_writer_init_with_capacity(size_t capacity)
Definition data.c:234
EoResult eo_reader_get_short(EoReader *reader, int32_t *out_value)
Definition data.c:1054
EoResult eo_reader_next_chunk(EoReader *reader)
Definition data.c:952
EoResult eo_reader_get_char(EoReader *reader, int32_t *out_value)
Definition data.c:1025
EoResult eo_writer_add_short(EoWriter *writer, int32_t value)
Definition data.c:499
void eo_encode_string(uint8_t *buf, size_t length)
Definition data.c:400
EoResult eo_writer_add_bytes(EoWriter *writer, const uint8_t *data, size_t length)
Definition data.c:880
bool eo_writer_get_string_sanitization_mode(const EoWriter *writer)
Definition data.c:438
EoResult eo_writer_add_char(EoWriter *writer, int32_t value)
Definition data.c:469
EoResult eo_writer_ensure_capacity(EoWriter *writer, size_t additional)
Definition data.c:256
static uint8_t eo_packet_get_action(const EoPacket *packet)
Gets the action of an EO packet.
Definition data.h:490
EoWriter eo_writer_init(void)
Definition data.c:229
EoResult eo_reader_get_three(EoReader *reader, int32_t *out_value)
Definition data.c:1084
EoResult eo_writer_add_three(EoWriter *writer, int32_t value)
Definition data.c:530
EoResult eo_writer_add_int(EoWriter *writer, int32_t value)
Definition data.c:561
EoResult eo_writer_add_fixed_encoded_string(EoWriter *writer, const char *value, size_t length, bool padded)
Definition data.c:789
void eo_writer_free(EoWriter *writer)
Definition data.c:244
EoReader eo_reader_init(const uint8_t *data, size_t length)
Definition data.c:900
void eo_decode_string(uint8_t *buf, size_t length)
Definition data.c:362
EoResult eo_reader_get_bytes(EoReader *reader, size_t length, uint8_t **out_value)
Definition data.c:1247
void eo_writer_set_string_sanitization_mode(EoWriter *writer, bool enabled)
Definition data.c:443
size_t eo_reader_remaining(const EoReader *reader)
Definition data.c:926
static EoResult eo_deserialize(EoSerialize *serialize, EoReader *reader)
Definition data.h:412
EoResult eo_reader_get_fixed_string(EoReader *reader, size_t length, char **out_value)
Definition data.c:1185
EoResult eo_encode_number(int32_t number, uint8_t out_bytes[4])
Definition data.c:290
static uint8_t eo_packet_get_family(const EoPacket *packet)
Gets the family of an EO packet.
Definition data.h:478
static void eo_free(EoSerialize *serialize)
Definition data.h:450
EoResult eo_reader_get_byte(EoReader *reader, uint8_t *out_value)
Definition data.c:996
EoResult
Definition result.h:12
@ EO_NULL_PTR
Definition result.h:22
signed int int32_t
Definition stdint.h:77
unsigned char uint8_t
Definition stdint.h:78
uint8_t(* get_family)(const EoPacket *self)
Definition data.h:463
uint8_t(* get_action)(const EoPacket *self)
Definition data.h:464
EoSerialize base
Definition data.h:469
const EoPacketVTable * vtable
Definition data.h:470
size_t next_chunk_offset
Definition data.h:39
size_t offset
Definition data.h:36
size_t chunk_offset
Definition data.h:38
const uint8_t * data
Definition data.h:34
size_t length
Definition data.h:35
bool chunked_reading_mode
Definition data.h:37
EoResult(* deserialize)(EoSerialize *self, EoReader *reader)
Definition data.h:394
EoResult(* serialize)(const EoSerialize *self, EoWriter *writer)
Definition data.h:395
void(* free)(EoSerialize *self)
Definition data.h:397
size_t(* get_size)(const EoSerialize *self)
Definition data.h:396
const EoSerializeVTable * vtable
Definition data.h:402
bool string_sanitization_mode
Definition data.h:27
size_t length
Definition data.h:26
size_t capacity
Definition data.h:28
uint8_t * data
Definition data.h:25