adm_stat_msg_t *msg_deserialize_stat_msg(uint8_t *cursor, uint32_t size, uint32_t *bytes_used) { adm_stat_msg_t *result = NULL; uint32_t bytes = 0; DTNMP_DEBUG_ENTRY("msg_deserialize_stat_msg","(0x%x, %d, 0x%x)", (unsigned long)cursor, size, (unsigned long) bytes_used); /* Step 0: Sanity Checks. */ if((cursor == NULL) || (bytes_used == 0)) { DTNMP_DEBUG_ERR("msg_deserialize_stat_msg","Bad Args.",NULL); DTNMP_DEBUG_EXIT("msg_deserialize_stat_msg","->NULL",NULL); return NULL; } /* Step 1: Allocate the new message structure. */ if((result = (adm_stat_msg_t*)MTAKE(sizeof(adm_stat_msg_t))) == NULL) { DTNMP_DEBUG_ERR("msg_deserialize_stat_msg","Can't Alloc %d Bytes.", sizeof(adm_stat_msg_t)); *bytes_used = 0; DTNMP_DEBUG_EXIT("msg_deserialize_stat_msg","->NULL",NULL); return NULL; } else { memset(result,0,sizeof(adm_stat_msg_t)); } /* Step 2: Deserialize the message. */ /* Grab the mask */ if((result->code = mid_deserialize(cursor,size,&bytes)) == NULL) { DTNMP_DEBUG_ERR("msg_deserialize_stat_msg","Can't get code MID.",NULL); *bytes_used = 0; msg_release_stat_msg(result); DTNMP_DEBUG_EXIT("msg_deserialize_stat_msg","->NULL",NULL); return NULL; } else { cursor += bytes; size -= bytes; *bytes_used += bytes; } /* Grab the timestamp */ uvast val = 0; if((bytes = utils_grab_sdnv(cursor, size, &val)) == 0) { DTNMP_DEBUG_ERR("msg_deserialize_stat_msg","Can't get timestamp.",NULL); *bytes_used = 0; msg_release_stat_msg(result); DTNMP_DEBUG_EXIT("msg_deserialize_stat_msg","->NULL",NULL); return NULL; } else { cursor += bytes; size -= bytes; *bytes_used += bytes; result->time = val; } /* Grab the Lyst. */ if((result->generators = midcol_deserialize(cursor,size,&bytes)) == NULL) { DTNMP_DEBUG_ERR("msg_deserialize_stat_msg","Can't get generators.",NULL); *bytes_used = 0; msg_release_stat_msg(result); DTNMP_DEBUG_EXIT("msg_deserialize_stat_msg","->NULL",NULL); return NULL; } DTNMP_DEBUG_EXIT("msg_deserialize_stat_msg","->0x%x", (unsigned long)result); return result; }
void ui_print_val(uint8_t type, uint8_t *data, uint32_t length) { uint32_t bytes = 0; if(data == NULL) { printf("NULL"); return; } switch(type) { case AMP_TYPE_VAR: { var_t *cd = var_deserialize(data, length, &bytes); char *str = var_to_string(cd); printf("%s", str); SRELEASE(str); var_release(cd); } break; case AMP_TYPE_INT: printf("%d", utils_deserialize_int(data, length, &bytes)); break; case AMP_TYPE_TS: case AMP_TYPE_UINT: printf("%d", utils_deserialize_uint(data, length, &bytes)); break; case AMP_TYPE_VAST: printf(VAST_FIELDSPEC, utils_deserialize_vast(data, length, &bytes)); break; case AMP_TYPE_SDNV: case AMP_TYPE_UVAST: printf(UVAST_FIELDSPEC, utils_deserialize_uvast(data, length, &bytes)); break; case AMP_TYPE_REAL32: printf("%f", utils_deserialize_real32(data, length, &bytes)); break; case AMP_TYPE_REAL64: printf("%f", utils_deserialize_real64(data, length, &bytes)); break; case AMP_TYPE_STRING: { char* tmp = NULL; tmp = utils_deserialize_string(data, length, &bytes); printf("%s", tmp); SRELEASE(tmp); } break; case AMP_TYPE_BLOB: { blob_t *blob = blob_deserialize(data, length, &bytes); char *str = blob_to_str(blob); printf("%s", str); SRELEASE(str); SRELEASE(blob); } break; case AMP_TYPE_DC: { uint32_t bytes = 0; Lyst dc = dc_deserialize(data, length, &bytes); ui_print_dc(dc); dc_destroy(&dc); } break; case AMP_TYPE_MID: { uint32_t bytes = 0; mid_t *mid = mid_deserialize(data, length, &bytes); ui_print_mid(mid); mid_release(mid); } break; case AMP_TYPE_MC: { uint32_t bytes = 0; Lyst mc = midcol_deserialize(data, length, &bytes); ui_print_mc(mc); midcol_destroy(&mc); } break; // \todo: Expression has no priority. Need to re-think priority. case AMP_TYPE_EXPR: { uint32_t bytes = 0; expr_t *expr = expr_deserialize(data, length, &bytes); ui_print_expr(expr); expr_release(expr); } break; /* case DTNMP_TYPE_DEF: { uint32_t bytes = 0; def_gen_t *def = def_deserialize_gen(data, length, &bytes); ui_print_def(def); def_release_gen(def); } break; */ case AMP_TYPE_TRL: { uint32_t bytes = 0; trl_t *trl = trl_deserialize(data, length, &bytes); ui_print_trl(trl); trl_release(trl); } break; case AMP_TYPE_TABLE: { uint32_t bytes = 0; table_t *table = table_deserialize(data, length, &bytes); ui_print_table(table); table_destroy(table, 1); } break; case AMP_TYPE_SRL: { uint32_t bytes = 0; srl_t *srl = srl_deserialize(data, length, &bytes); ui_print_srl(srl); srl_release(srl); } break; default: printf("Unknown."); } }