Exemple #1
0
/* variable_new_deserialize_buffer */
Variable * variable_new_deserialize_buffer(size_t * size, Buffer const * buffer)
{
	char const * data;

	data = buffer_get_data(buffer);
	return variable_new_deserialize(size, data);
}
Exemple #2
0
static AppMessage * _new_deserialize_call(AppMessage * message,
		char const * data, const size_t size, size_t pos)
{
	size_t s;
	Variable * v;
	size_t i;
	AppMessageCallArgument * p;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif
	if(_new_deserialize_id(message, data, size, &pos) == NULL)
		return NULL;
	message->t.call.method = NULL;
	message->t.call.args = NULL;
	message->t.call.args_cnt = 0;
	s = size;
	if((v = variable_new_deserialize_type(VT_STRING, &s, &data[pos]))
			== NULL)
	{
		error_set_code(1, "%s", "Could not obtain the AppMessage call"
				" method");
		appmessage_delete(message);
		return NULL;
	}
	pos += s;
	/* XXX may fail */
	variable_get_as(v, VT_STRING, &message->t.call.method);
	variable_delete(v);
#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s() \"%s\"\n", __func__,
			message->t.call.method);
#endif
	/* deserialize the arguments */
	for(i = 0; pos < size; i++)
	{
#ifdef DEBUG
		fprintf(stderr, "DEBUG: %s() %lu\n", __func__, i);
#endif
		if((p = realloc(message->t.call.args, sizeof(*p) * (i + 1)))
				== NULL)
		{
			appmessage_delete(message);
			return NULL;
		}
		message->t.call.args = p;
		s = size - pos;
		if((v = variable_new_deserialize(&s, &data[pos])) == NULL)
		{
			appmessage_delete(message);
			return NULL;
		}
#ifdef DEBUG
		fprintf(stderr, "DEBUG: %s() %lu (%u)\n", __func__, i,
				variable_get_type(v));
#endif
		pos += s;
		message->t.call.args[i].direction = AMCD_IN; /* XXX */
		message->t.call.args[i].arg = v;
		message->t.call.args_cnt = i + 1;
	}
	return message;
}