summaryrefslogtreecommitdiff
path: root/netbytes.h
blob: cab61f670381e5f3411ab7e28e36596a132af3ab (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#ifndef __NETBYTES_H
#define __NETBYTES_H

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

/* types that are supported */
#define NBT_NONE	0x00 /* maybe not yet prepared type */
#define NBT_U8		0x01 /* single unsigned 8 bits */
#define NBT_U8ARRAY	0x02 /* u8 array */
#define NBT_U16 	0x03 /**/
#define NBT_U16ARRAY	0x04 /**/
#define NBT_U32 	0x05 /**/
#define NBT_U32ARRAY	0x06 /**/
#define NBT_U64 	0x07 /**/
#define NBT_U64ARRAY 	0x08 /**/
#define NBT_I8 		0x09 /**/
#define NBT_I8ARRAY	0x0A /**/
#define NBT_I16 	0x0B /**/
#define NBT_I16ARRAY	0x0C /**/
#define NBT_I32 	0x0D /**/
#define NBT_I32ARRAY 	0x0E /**/
#define NBT_I64 	0x0F /**/
#define NBT_I64ARRAY 	0x10 /**/
#define NBT_F16		0x11 /**/
#define NBT_F32 	0x12 /**/
#define NBT_F64		0x13 /**/
#define NBT_F80		0x14 /**/
#define NBT_NULL	0x15 /* official empty type */
#define NBT_LIST	0x16 /* list of data */


/* data typed used */
#define __NBT_SIZE		uint32_t
#define __NBT_TYPED		uint8_t
#define __NBT_U8ARR_LEN		uint16_t

#define __NBT_MINIMAL_SIZE	(sizeof(__NBT_SIZE))
#define __NBT_MAX_TYPES         (256)

//creating netbyte structure
typedef struct __nb_type {
	__NBT_TYPED	type;
	uint8_t		*nb_val;
} __nb_type;

typedef struct netbyte_store
{
	__NBT_SIZE 	size;
	int		count;
	__nb_type	types[__NBT_MAX_TYPES];
} netbyte_store;

typedef struct nb_u8
{
	__NBT_TYPED   type;
	uint8_t       val;
} nb_u8;

typedef struct nb_u8arr
{
	__NBT_TYPED     type;
	__NBT_U8ARR_LEN len;
	uint8_t         *val;
} nb_u8arr;

//loading/parsing netbyte structure
typedef struct netbyte_load
{
	__NBT_SIZE size;
	uint8_t    *buf;
} netbyte_load;

int nb_u8_create(    nb_u8 *s,    uint8_t val );
int nb_u8arr_create( nb_u8arr *s, __NBT_U8ARR_LEN len, uint8_t *val );

int nb_init( netbyte_store *store );

int nb_add_u8( netbyte_store *store, nb_u8 *u8 );
int nb_add_u8arr( netbyte_store *store, nb_u8arr *u8arr );
uint8_t *nb_create( netbyte_store *store );

int nb_load( netbyte_store *store, uint8_t *data );
int nb_count( netbyte_store *store );
int nb_type( netbyte_store *store, int count, __NBT_TYPED **type );
int nb_val( netbyte_store *store, int count, uint8_t **val );
int nb_fread( netbyte_store *store, int fd);

#endif