Obtaining the method for remote calls

This commit is contained in:
Pierre Pronchery 2013-01-08 03:43:09 +01:00
parent b8db50354e
commit 658c03d984
2 changed files with 27 additions and 3 deletions

View File

@ -81,6 +81,7 @@ AppMessage * appmessage_new_deserialize(Buffer * buffer)
AppMessage * message;
char const * data = buffer_get_data(buffer);
size_t size = buffer_get_size(buffer);
size_t pos = 0;
size_t s;
Variable * v;
uint32_t u32;
@ -91,11 +92,14 @@ AppMessage * appmessage_new_deserialize(Buffer * buffer)
if((message = object_new(sizeof(*message))) == NULL)
return NULL;
s = size;
if((v = variable_new_deserialize_type(VT_UINT32, &s, data)) == NULL)
if((v = variable_new_deserialize_type(VT_UINT32, &s, &data[pos]))
== NULL)
{
object_delete(message);
return NULL;
}
pos += s;
size -= s;
/* XXX may fail */
variable_get_as(v, VT_UINT32, &u32);
variable_delete(v);
@ -105,8 +109,19 @@ AppMessage * appmessage_new_deserialize(Buffer * buffer)
#ifdef DEBUG
fprintf(stderr, "DEBUG: %s() AMT_CALL\n", __func__);
#endif
s = size;
v = variable_new_deserialize_type(VT_STRING, &s,
&data[pos]);
if(v == NULL)
{
error_set_code(1, "%s%u", "Unknown method ");
object_delete(message);
return NULL;
}
/* XXX may fail */
variable_get_as(v, VT_STRING, &message->t.call.method);
variable_delete(v);
/* FIXME really implement */
message->t.call.method = NULL;
message->t.call.var = NULL;
message->t.call.var_cnt = 0;
break;

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2012 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2012-2013 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS System libApp */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -15,8 +15,12 @@
#ifdef DEBUG
# include <stdio.h>
#endif
#include <string.h>
#include <System.h>
#include "App/appmessage.h"
#include "apptransport.h"
#include "../config.h"
@ -105,6 +109,11 @@ void apptransport_delete(AppTransport * transport)
static int _apptransport_helper_client_receive(AppTransport * transport,
AppTransportClient * client, AppMessage * message)
{
#ifdef DEBUG
fprintf(stderr, "DEBUG: %s() %u \"%s\"\n", __func__,
appmessage_get_type(message),
appmessage_get_method(message));
#endif
/* FIXME implement */
return 0;
}