コード例 #1
0
ファイル: msg_admin.c プロジェクト: brnrc/ion-dtn
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;
}
コード例 #2
0
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.");
	}
}