aboutsummaryrefslogblamecommitdiffstats
path: root/extlibs/netbytes.h
blob: 6e008bc73b3feec5c5496d627b63a589cb70d08c (plain) (tree)
















































                                                              
                                                  

                                
             
 
                                                    





                                               
                                            




                           
                                               







                             
                                             




                            
                                                







                               
                                             




                            
                                                







                               
                                             




                            
                                                






                                   
                                                   




























                                                                          



                                                           
                                                             
                                                          
                                                             
                                                          





                                                             
                                                    
                                     

                                                                    






















                                                                            
#ifndef __NETBYTES_H
#define __NETBYTES_H

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <ctype.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 /* unsigned 16 bit */
#define NBT_U16ARRAY	0x04 /* u16 array */
#define NBT_U32 	0x05 /* unsigned 32 bit */
#define NBT_U32ARRAY	0x06 /* u32 array */
#define NBT_U64 	0x07 /* unsigned 64 bit */
#define NBT_U64ARRAY 	0x08 /* u64 array */
#define NBT_I8 		0x09 /* signed 8 bits */
#define NBT_I8ARRAY	0x0A /* i8 array */
#define NBT_I16 	0x0B /* signed 16bits */
#define NBT_I16ARRAY	0x0C /* i16 array */
#define NBT_I32 	0x0D /* signed 32 bits */
#define NBT_I32ARRAY 	0x0E /* i32 array */
#define NBT_I64 	0x0F /* signed 64 bits */
#define NBT_I64ARRAY 	0x10 /* i64 array */
#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_U16ARR_LEN	uint16_t
#define __NBT_U32ARR_LEN	uint16_t
#define __NBT_U64ARR_LEN	uint16_t

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

//creating netbyte structure
typedef struct __attribute__((packed)) __nb_type {
	__NBT_TYPED	 type;
	uint8_t		*nb_val;
} __nb_type ;

typedef struct __attribute__((packed)) netbyte_store
{
	__NBT_SIZE 	size;
	int		count;
	__nb_type	types[__NBT_MAX_TYPES];
} netbyte_store;

typedef struct __attribute__((packed)) nb_u8
{
	__NBT_TYPED   type;
	uint8_t       val;
} nb_u8;

typedef struct __attribute__((packed)) nb_u8arr
{
	__NBT_TYPED     type;
	__NBT_U8ARR_LEN len;
	uint8_t         *val;
} nb_u8arr;


/*-----------------*/
typedef struct __attribute__((packed)) nb_u16
{
	__NBT_TYPED    type;
	uint16_t       val;
} nb_u16;

typedef struct __attribute__((packed)) nb_u16arr
{
	__NBT_TYPED       type;
	__NBT_U16ARR_LEN  len;
	uint16_t         *val;
} nb_u16arr;


/*-----------------*/
typedef struct __attribute__((packed)) nb_u32
{
	__NBT_TYPED    type;
	uint32_t       val;
} nb_u32;

typedef struct __attribute__((packed)) nb_u32arr
{
	__NBT_TYPED       type;
	__NBT_U32ARR_LEN  len;
	uint32_t         *val;
} nb_u32arr;


/*------------------*/
typedef struct __attribute__((packed)) nb_u64
{
	__NBT_TYPED    type;
	uint64_t       val;
} nb_u64;

typedef struct __attribute__((packed)) nb_u64arr
{
	__NBT_TYPED       type;
	__NBT_U64ARR_LEN  len;
	uint64_t         *val;
} nb_u64arr;

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

typedef struct nb_tok
{
	int sign;
	int type_size;
	int len;
	int arr;
} nb_tok;

typedef struct nb_tok_arr
{
	int     size;
	int     len;
	nb_tok *tok;
} nb_tok_arr;

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_u16_create(    nb_u16 *s,    uint16_t val );
int nb_u16arr_create( nb_u16arr *s, __NBT_U16ARR_LEN len, uint16_t *val );
int nb_u32_create(    nb_u32 *s,    uint32_t val );
int nb_u32arr_create( nb_u32arr *s, __NBT_U32ARR_LEN len, uint32_t *val );
int nb_u64_create(    nb_u64 *s,    uint64_t val );
int nb_u64arr_create( nb_u64arr *s, __NBT_U64ARR_LEN len, uint64_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 );
int nb_add_u16(    netbyte_store *store, nb_u16    *u16 );
int nb_add_u16arr( netbyte_store *store, nb_u16arr *u16arr );
int nb_add_u32(    netbyte_store *store, nb_u32    *u32 );
int nb_add_u32arr( netbyte_store *store, nb_u32arr *u32arr );
int nb_add_u64(    netbyte_store *store, nb_u64    *u64 );
int nb_add_u64arr( netbyte_store *store, nb_u64arr *u64arr );

uint8_t *nb_create( netbyte_store *store );
int nb_free(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, __nb_type **type );
int nb_fread( netbyte_store *store, int fd);

//print all all values in netbyte string
int nb_print(netbyte_store *store);

/*
check if netbyte matches particular format
-1 err
1 not match
0 match
*/
int nb_match(netbyte_store *store, nb_tok_arr *pattern);

#define SIGN_UNSIGNED 1
#define SIGN_SIGNED   2

nb_tok_arr *nb_tok_create(int size);
int nb_tok_add(nb_tok_arr *arr, int sign, int type_size, int len, int farr);
void nb_tok_destroy(nb_tok_arr *arr);

int nb_parse(char *str, nb_tok_arr *arr);

#endif