diff options
author | FreeArtMan <dos21h@gmail.com> | 2017-06-04 00:22:40 +0100 |
---|---|---|
committer | FreeArtMan <dos21h@gmail.com> | 2017-06-04 00:22:40 +0100 |
commit | 4f92c65203dcb5adeca73bb66e9d887cb201a55f (patch) | |
tree | 242d5c0bdb3ca39f018445eeaf0c0d2d3cc2a165 /extlibs/netbytes.h | |
parent | 43c0c201b7e581feed4486271ea78a0e8e2afb0c (diff) | |
download | agni-4f92c65203dcb5adeca73bb66e9d887cb201a55f.tar.gz agni-4f92c65203dcb5adeca73bb66e9d887cb201a55f.zip |
added netstring like library
Diffstat (limited to 'extlibs/netbytes.h')
-rw-r--r-- | extlibs/netbytes.h | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/extlibs/netbytes.h b/extlibs/netbytes.h new file mode 100644 index 0000000..3960142 --- /dev/null +++ b/extlibs/netbytes.h @@ -0,0 +1,191 @@ +#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 __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; + + +/*-----------------*/ +typedef struct nb_u16 +{ + __NBT_TYPED type; + uint16_t val; +} nb_u16; + +typedef struct nb_u16arr +{ + __NBT_TYPED type; + __NBT_U16ARR_LEN len; + uint16_t *val; +} nb_u16arr; + + +/*-----------------*/ +typedef struct nb_u32 +{ + __NBT_TYPED type; + uint32_t val; +} nb_u32; + +typedef struct nb_u32arr +{ + __NBT_TYPED type; + __NBT_U32ARR_LEN len; + uint32_t *val; +} nb_u32arr; + + +/*------------------*/ +typedef struct nb_u64 +{ + __NBT_TYPED type; + uint64_t val; +} nb_u64; + +typedef struct nb_u64arr +{ + __NBT_TYPED type; + __NBT_U64ARR_LEN len; + uint64_t *val; +} nb_u64arr; + +//loading/parsing netbyte structure +typedef struct 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
\ No newline at end of file |