#include #include #include #include #include #include #include"schemaparser.h" struct vstring32 { unsigned int length; unsigned int offset; unsigned int reserved; }; struct thpt{ unsigned long long int TS; unsigned long long int e_RAB_ID; unsigned long long int UE_ID; vstring32 GNB_ID; double measurement_interval; unsigned long long int active_throughput; unsigned long long int average_throughput; unsigned long long int min_throughput; unsigned long long int max_throughput; }; using namespace std; using namespace mc_schema; int main(int argc, char **argv){ // Get the nib.json file string directory = "."; if(argc>1){ directory = argv[1]; } string inflnm = directory + "/" + string("nib.json"); ifstream infl(inflnm); if(!infl){ cerr << "Error, can't open " << inflnm << endl; exit(1); } string line; string nib_str; while(getline(infl, line)){ nib_str += line; } infl.close(); // Load the schemas mc_schemas *mcs = new_mc_schemas(nib_str); if(mcs->has_errors()){ fprintf(stderr, "Errors loading the schemas:\n%s\n",mcs->get_errors().c_str()); }else{ vector streams = mcs->get_streams(); printf("Loaded %ld streams:\n", streams.size()); for(int i=0;iget_query_rep(streams[i])->to_string(); printf("\t%s\n",str_rep.c_str()); } } // Load a sample record char buf[150]; thpt *t = (thpt *)buf; t->TS = 10001; t->e_RAB_ID = 2; t->UE_ID = 3; t->GNB_ID.length = 6; t->GNB_ID.offset = sizeof(thpt); string foobar("foobar"); strncpy(buf+sizeof(thpt), foobar.c_str(), 6); t->measurement_interval = 10.1; t->active_throughput = 4; t->average_throughput = 5; t->min_throughput = 6; t->max_throughput = 7; int t_len = sizeof(thpt)+6; // Get the throughput_ue schema query_rep *qr = mcs->get_query_rep("throughput_ue"); // Extract stuff by various methods int ts_idx = qr->get_index_of_field("TS"); int ts_type = qr->get_type(ts_idx); int ts_offset = qr->get_offset(ts_idx); field_handle ts_handle = qr->get_handle(ts_idx); string ts_s = get_field_string(ts_handle, buf, t_len); unsigned long long int ts_lu = get_field_ullong(ts_handle, buf, t_len); unsigned int ts_u = get_field_uint(ts_handle, buf, t_len); printf("ts string=%s, ullong=%lld, uint = %d\n",ts_s.c_str(), ts_lu, ts_u); field_handle erab_handle = qr->get_handle(1); access_result erab_ar = get_field_by_handle(erab_handle, buf, t_len); printf("erab = %lld\n", erab_ar.r.l); access_result ue_ar = get_field_by_index(qr, 2, buf, t_len); printf("ue = %lld\n", ue_ar.r.l); int gnb_idx = qr->get_index_of_field("GNB_ID"); field_handle gnb_handle = qr->get_handle(gnb_idx); string gnb = get_field_string(gnb_handle, buf, t_len); printf("gnb=%s\n",gnb.c_str()); access_result mt_ar = get_field_by_index(qr, 8, buf, t_len); printf("mt = %lld, type=%d\n", mt_ar.r.l, mt_ar.field_data_type); access_result none_ar = get_field_by_index(qr, 9, buf, t_len); printf("none = %lld, type=%d\n", none_ar.r.l, none_ar.field_data_type); }