Commit df5bc9cf authored by Sven Gestegård Robertz's avatar Sven Gestegård Robertz
Browse files

started reviving experimental/sig-parser

parent 3ca451b1
...@@ -50,7 +50,10 @@ ifeq ($(LABCOMM_EXPERIMENTAL),true) ...@@ -50,7 +50,10 @@ ifeq ($(LABCOMM_EXPERIMENTAL),true)
experimental/labcomm_thr_reader_writer.o \ experimental/labcomm_thr_reader_writer.o \
experimental/ThrottleDrv/ethernet_drv.o \ experimental/ThrottleDrv/ethernet_drv.o \
experimental/ThrottleDrv/throttle_drv.o \ experimental/ThrottleDrv/throttle_drv.o \
experimental/labcomm_udp_reader_writer.o experimental/labcomm_udp_reader_writer.o\
experimental/labcomm_sig_parser.o \
experimental/test_sig_parser.o
endif endif
## Targets ## Targets
......
...@@ -155,7 +155,7 @@ int labcomm_sig_parser_init(labcomm_sig_parser_t *b, size_t buffer_size, ...@@ -155,7 +155,7 @@ int labcomm_sig_parser_init(labcomm_sig_parser_t *b, size_t buffer_size,
#ifdef STATIC_ALLOCATION #ifdef STATIC_ALLOCATION
printf("warning: labcomm_sig_parser_t_init: size params ignored, using defaults from .h file \n"); printf("warning: labcomm_sig_parser_t_init: size params ignored, using defaults from .h file \n");
#else #else
b->sig_ts=calloc(num_signatures, sizeof(labcomm_signature_t)); b->sig_ts=calloc(num_signatures, sizeof(struct labcomm_signature));
b->signatures_length=calloc(num_signatures, sizeof(int)); b->signatures_length=calloc(num_signatures, sizeof(int));
b->signatures_name_length=calloc(num_signatures, sizeof(int)); b->signatures_name_length=calloc(num_signatures, sizeof(int));
b->signatures_name=calloc(num_signatures, sizeof(void *)); //HERE BE DRAGONS: add range checks b->signatures_name=calloc(num_signatures, sizeof(void *)); //HERE BE DRAGONS: add range checks
...@@ -221,7 +221,7 @@ void getStr(labcomm_sig_parser_t *b, char *dest, size_t size) { ...@@ -221,7 +221,7 @@ void getStr(labcomm_sig_parser_t *b, char *dest, size_t size) {
b->idx += size; b->idx += size;
} }
labcomm_signature_t *get_sig_t(labcomm_sig_parser_t *p, unsigned int uid) struct labcomm_signature *get_sig_t(labcomm_sig_parser_t *p, unsigned int uid)
{ {
return &(p->sig_ts[uid-LABCOMM_USER]); return &(p->sig_ts[uid-LABCOMM_USER]);
} }
...@@ -310,13 +310,17 @@ static unsigned char labcomm_varint_sizeof(unsigned int i) ...@@ -310,13 +310,17 @@ static unsigned char labcomm_varint_sizeof(unsigned int i)
return res; return res;
} }
} }
int encoded_size_static(struct labcomm_signature *sig, void *unused)
int encoded_size_static(labcomm_signature_t *sig, void *unused)
{ {
#ifdef LABCOMM_EXPERIMENTAL_CACHED_ENCODED_SIZE
if(sig->cached_encoded_size == -1) { if(sig->cached_encoded_size == -1) {
error("encoded_size_static called for var_size sample or uninitialized signature"); error("encoded_size_static called for var_size sample or uninitialized signature");
} }
return sig->cached_encoded_size; return sig->cached_encoded_size;
#else
printf("Warning: encoded_size_static currently broken\n");
return -1;
#endif
} }
/* This function probably never will be implemented, as it would be /* This function probably never will be implemented, as it would be
...@@ -326,7 +330,7 @@ int encoded_size_static(labcomm_signature_t *sig, void *unused) ...@@ -326,7 +330,7 @@ int encoded_size_static(labcomm_signature_t *sig, void *unused)
on the receiver side, is to skip unhandled samples. on the receiver side, is to skip unhandled samples.
*/ */
int encoded_size_parse_sig(labcomm_signature_t *sig, void *sample) int encoded_size_parse_sig(struct labcomm_signature *sig, void *sample)
{ {
printf("Warning: encoded_size_parse_sig not implemented\n"); printf("Warning: encoded_size_parse_sig not implemented\n");
return -1; return -1;
...@@ -355,8 +359,8 @@ static int accept_signature(labcomm_sig_parser_t *d) ...@@ -355,8 +359,8 @@ static int accept_signature(labcomm_sig_parser_t *d)
unsigned int end = d->idx; unsigned int end = d->idx;
unsigned int len = end-start; unsigned int len = end-start;
labcomm_signature_t *newsig = get_sig_t(d, uid); struct labcomm_signature *newsig = get_sig_t(d, uid);
newsig->type = type; // newsig->type = type;
if(len <= d->max_sig_len) { if(len <= d->max_sig_len) {
d->signatures_length[uid-LABCOMM_USER] = len; d->signatures_length[uid-LABCOMM_USER] = len;
memcpy(d->signatures[uid-LABCOMM_USER], &d->c[start], len); memcpy(d->signatures[uid-LABCOMM_USER], &d->c[start], len);
...@@ -376,6 +380,7 @@ static int accept_signature(labcomm_sig_parser_t *d) ...@@ -376,6 +380,7 @@ static int accept_signature(labcomm_sig_parser_t *d)
} }
VERBOSE_PRINTF("signature for uid %x: %s (start=%x,end=%x, nlen=%d,len=%d)\n", uid, get_signature_name(d, uid), start,end, nlen, len); VERBOSE_PRINTF("signature for uid %x: %s (start=%x,end=%x, nlen=%d,len=%d)\n", uid, get_signature_name(d, uid), start,end, nlen, len);
INFO_PRINTF("SIG: %s\n", newsig->name); INFO_PRINTF("SIG: %s\n", newsig->name);
#ifdef LABCOMM_EXPERIMENTAL_CACHED_ENCODED_SIZE
if(! d->current_decl_is_varsize) { if(! d->current_decl_is_varsize) {
newsig->cached_encoded_size = enc_size; newsig->cached_encoded_size = enc_size;
newsig->encoded_size = encoded_size_static; newsig->encoded_size = encoded_size_static;
...@@ -385,6 +390,7 @@ static int accept_signature(labcomm_sig_parser_t *d) ...@@ -385,6 +390,7 @@ static int accept_signature(labcomm_sig_parser_t *d)
newsig->encoded_size = encoded_size_parse_sig; newsig->encoded_size = encoded_size_parse_sig;
INFO_PRINTF(".... is variable size\n"); INFO_PRINTF(".... is variable size\n");
} }
#endif
return TRUE; return TRUE;
} else { } else {
error("sample_decl with uid < LABCOMM_USER"); error("sample_decl with uid < LABCOMM_USER");
...@@ -606,10 +612,10 @@ static int accept_sample_data(labcomm_sig_parser_t *d){ ...@@ -606,10 +612,10 @@ static int accept_sample_data(labcomm_sig_parser_t *d){
#ifdef DEBUG #ifdef DEBUG
dump_signature(d, uid); dump_signature(d, uid);
#endif #endif
labcomm_signature_t *sigt = get_sig_t(d, uid); struct labcomm_signature *sigt = get_sig_t(d, uid);
int encoded_size = sigt->encoded_size(sigt, NULL); int encoded_size = sigt->encoded_size(NULL);
INFO_PRINTF("encoded_size from sig: %d\n", encoded_size); INFO_PRINTF("encoded_size from sig: %d\n", encoded_size);
labcomm_signature_t *sig = get_sig_t(d, uid); struct labcomm_signature *sig = get_sig_t(d, uid);
skip_packed_sample_data(d, sig); skip_packed_sample_data(d, sig);
return TRUE; return TRUE;
} }
...@@ -801,7 +807,7 @@ int skip_type(unsigned int type, labcomm_sig_parser_t *d, ...@@ -801,7 +807,7 @@ int skip_type(unsigned int type, labcomm_sig_parser_t *d,
/* parse signature and skip the corresponding bytes in the labcomm_sig_parser_t /* parse signature and skip the corresponding bytes in the labcomm_sig_parser_t
*/ */
int skip_packed_sample_data(labcomm_sig_parser_t *d, labcomm_signature_t *sig) { int skip_packed_sample_data(labcomm_sig_parser_t *d, struct labcomm_signature *sig) {
unsigned int pos = 0; //current position in signature unsigned int pos = 0; //current position in signature
unsigned int skipped = 0; //skipped byte counter unsigned int skipped = 0; //skipped byte counter
while(pos < sig->size) { while(pos < sig->size) {
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
/* internal type: stack &c. for the parser */ /* internal type: stack &c. for the parser */
typedef struct { typedef struct {
unsigned char* c; char* c;
size_t size; size_t size;
size_t capacity; size_t capacity;
unsigned int idx; unsigned int idx;
...@@ -44,14 +44,14 @@ typedef struct { ...@@ -44,14 +44,14 @@ typedef struct {
size_t max_name_len; size_t max_name_len;
size_t max_sig_len; size_t max_sig_len;
#ifdef STATIC_ALLOCATION #ifdef STATIC_ALLOCATION
labcomm_signature_t sig_ts[MAX_SIGNATURES]; struct labcomm_signature sig_ts[MAX_SIGNATURES];
unsigned int signatures_length[MAX_SIGNATURES]; unsigned int signatures_length[MAX_SIGNATURES];
unsigned int signatures_name_length[MAX_SIGNATURES]; unsigned int signatures_name_length[MAX_SIGNATURES];
unsigned char signatures_name[MAX_SIGNATURES][MAX_NAME_LEN]; unsigned char signatures_name[MAX_SIGNATURES][MAX_NAME_LEN];
unsigned char signatures[MAX_SIGNATURES][MAX_SIG_LEN]; unsigned char signatures[MAX_SIGNATURES][MAX_SIG_LEN];
#else #else
labcomm_signature_t *sig_ts; // [MAX_SIGNATURES] struct labcomm_signature *sig_ts; // [MAX_SIGNATURES]
unsigned int *signatures_length; // [MAX_SIGNATURES] unsigned int *signatures_length; // [MAX_SIGNATURES]
unsigned char **signatures; // [MAX_SIGNATURES][MAX_SIG_LEN]; unsigned char **signatures; // [MAX_SIGNATURES][MAX_SIG_LEN];
...@@ -70,7 +70,7 @@ int labcomm_sig_parser_read_file(labcomm_sig_parser_t *p, FILE *f); ...@@ -70,7 +70,7 @@ int labcomm_sig_parser_read_file(labcomm_sig_parser_t *p, FILE *f);
int accept_packet(labcomm_sig_parser_t *p); int accept_packet(labcomm_sig_parser_t *p);
labcomm_signature_t *get_sig_t(labcomm_sig_parser_t *p,unsigned int uid); struct labcomm_signature *get_sig_t(labcomm_sig_parser_t *p,unsigned int uid);
unsigned int get_signature_len(labcomm_sig_parser_t *p,unsigned int uid); unsigned int get_signature_len(labcomm_sig_parser_t *p,unsigned int uid);
unsigned char* get_signature_name(labcomm_sig_parser_t *p,unsigned int uid); unsigned char* get_signature_name(labcomm_sig_parser_t *p,unsigned int uid);
...@@ -78,9 +78,12 @@ unsigned char* get_signature(labcomm_sig_parser_t *p,unsigned int uid); ...@@ -78,9 +78,12 @@ unsigned char* get_signature(labcomm_sig_parser_t *p,unsigned int uid);
void dump_signature(labcomm_sig_parser_t *p,unsigned int uid); void dump_signature(labcomm_sig_parser_t *p,unsigned int uid);
int more(labcomm_sig_parser_t *b);
/* parse signature and skip the corresponding bytes in the labcomm_sig_parser /* parse signature and skip the corresponding bytes in the labcomm_sig_parser
*/ */
int skip_packed_sample_data(labcomm_sig_parser_t *p, labcomm_signature_t *sig); int skip_packed_sample_data(labcomm_sig_parser_t *p, struct labcomm_signature *sig);
#ifdef QUIET #ifdef QUIET
#define INFO_PRINTF(format, args...) #define INFO_PRINTF(format, args...)
...@@ -110,7 +113,7 @@ int skip_packed_sample_data(labcomm_sig_parser_t *p, labcomm_signature_t *sig); ...@@ -110,7 +113,7 @@ int skip_packed_sample_data(labcomm_sig_parser_t *p, labcomm_signature_t *sig);
typedef enum{ typedef enum{
TYPE_DECL = LABCOMM_TYPEDEF, TYPE_DECL = LABCOMM_TYPEDEF,
SAMPLE_DECL = LABCOMM_SAMPLE, SAMPLE_DECL = LABCOMM_SAMPLE_DEF,
ARRAY_DECL = LABCOMM_ARRAY, ARRAY_DECL = LABCOMM_ARRAY,
STRUCT_DECL = LABCOMM_STRUCT, STRUCT_DECL = LABCOMM_STRUCT,
......
...@@ -3,10 +3,11 @@ ...@@ -3,10 +3,11 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include "labcomm_sig_parser.h" #include "labcomm_sig_parser.h"
#undef DEBUG_READ #define DEBUG_READ
#define BUF_SIZE 1024 #define BUF_SIZE 1024
#define STACK_SIZE 16 #define STACK_SIZE 16
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment