summaryrefslogtreecommitdiff
path: root/extlibs/netbytes.h
diff options
context:
space:
mode:
authorFreeArtMan <dos21h@gmail.com>2017-06-04 00:22:40 +0100
committerFreeArtMan <dos21h@gmail.com>2017-06-04 00:22:40 +0100
commit4f92c65203dcb5adeca73bb66e9d887cb201a55f (patch)
tree242d5c0bdb3ca39f018445eeaf0c0d2d3cc2a165 /extlibs/netbytes.h
parent43c0c201b7e581feed4486271ea78a0e8e2afb0c (diff)
downloadagni-4f92c65203dcb5adeca73bb66e9d887cb201a55f.tar.gz
agni-4f92c65203dcb5adeca73bb66e9d887cb201a55f.zip
added netstring like library
Diffstat (limited to 'extlibs/netbytes.h')
-rw-r--r--extlibs/netbytes.h191
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