Provide the AppServerClient in AppInterface calls
This commit is contained in:
parent
b922ec51fb
commit
6968cfd261
|
@ -244,7 +244,7 @@ static int _helper_message_call(AppClient * appclient, AppTransport * transport,
|
||||||
/* XXX report errors */
|
/* XXX report errors */
|
||||||
return -1;
|
return -1;
|
||||||
ret = appinterface_call_variablev(appclient->interface, appclient->app,
|
ret = appinterface_call_variablev(appclient->interface, appclient->app,
|
||||||
result, method, 0, NULL);
|
NULL, result, method, 0, NULL);
|
||||||
if(result != NULL)
|
if(result != NULL)
|
||||||
variable_delete(result);
|
variable_delete(result);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -168,8 +168,9 @@ static AppInterfaceCall * _appinterface_get_call(AppInterface * appinterface,
|
||||||
static Variable ** _appinterface_argv_new(AppInterfaceCall * call,
|
static Variable ** _appinterface_argv_new(AppInterfaceCall * call,
|
||||||
va_list ap);
|
va_list ap);
|
||||||
static void _appinterface_argv_free(Variable ** argv, size_t argc);
|
static void _appinterface_argv_free(Variable ** argv, size_t argc);
|
||||||
static int _appinterface_call(App * app, Variable * result,
|
static int _appinterface_call(App * app, AppServerClient * asc,
|
||||||
AppInterfaceCall * call, size_t argc, Variable ** argv);
|
Variable * result, AppInterfaceCall * call,
|
||||||
|
size_t argc, Variable ** argv);
|
||||||
static AppMessage * _appinterface_message(AppInterfaceCall * call,
|
static AppMessage * _appinterface_message(AppInterfaceCall * call,
|
||||||
size_t argc, Variable ** argv);
|
size_t argc, Variable ** argv);
|
||||||
|
|
||||||
|
@ -646,7 +647,8 @@ AppStatus * appinterface_get_status(AppInterface * appinterface)
|
||||||
|
|
||||||
/* useful */
|
/* useful */
|
||||||
/* appinterface_callv */
|
/* appinterface_callv */
|
||||||
int appinterface_callv(AppInterface * appinterface, App * app, void ** result,
|
int appinterface_callv(AppInterface * appinterface, App * app,
|
||||||
|
AppServerClient * asc, void ** result,
|
||||||
String const * method, va_list args)
|
String const * method, va_list args)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -667,7 +669,8 @@ int appinterface_callv(AppInterface * appinterface, App * app, void ** result,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(ret == 0)
|
if(ret == 0)
|
||||||
ret = _appinterface_call(app, r, call, call->args_cnt, argv);
|
ret = _appinterface_call(app, asc, r, call,
|
||||||
|
call->args_cnt, argv);
|
||||||
if(r != NULL)
|
if(r != NULL)
|
||||||
{
|
{
|
||||||
if(ret == 0 && result != NULL)
|
if(ret == 0 && result != NULL)
|
||||||
|
@ -683,14 +686,14 @@ int appinterface_callv(AppInterface * appinterface, App * app, void ** result,
|
||||||
|
|
||||||
/* appinterface_call_variablev */
|
/* appinterface_call_variablev */
|
||||||
int appinterface_call_variablev(AppInterface * appinterface, App * app,
|
int appinterface_call_variablev(AppInterface * appinterface, App * app,
|
||||||
Variable * result, char const * method,
|
AppServerClient * asc, Variable * result, char const * method,
|
||||||
size_t argc, Variable ** argv)
|
size_t argc, Variable ** argv)
|
||||||
{
|
{
|
||||||
AppInterfaceCall * call;
|
AppInterfaceCall * call;
|
||||||
|
|
||||||
if((call = _appinterface_get_call(appinterface, method)) == NULL)
|
if((call = _appinterface_get_call(appinterface, method)) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
return _appinterface_call(app, result, call, argc, argv);
|
return _appinterface_call(app, asc, result, call, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -981,8 +984,9 @@ static void _appinterface_argv_free(Variable ** argv, size_t argc)
|
||||||
|
|
||||||
|
|
||||||
/* appinterface_call */
|
/* appinterface_call */
|
||||||
static int _appinterface_call(App * app, Variable * result,
|
static int _appinterface_call(App * app, AppServerClient * asc,
|
||||||
AppInterfaceCall * call, size_t argc, Variable ** argv)
|
Variable * result, AppInterfaceCall * call,
|
||||||
|
size_t argc, Variable ** argv)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
Variable ** p;
|
Variable ** p;
|
||||||
|
@ -991,17 +995,23 @@ static int _appinterface_call(App * app, Variable * result,
|
||||||
if(argc != call->args_cnt)
|
if(argc != call->args_cnt)
|
||||||
/* XXX set the error */
|
/* XXX set the error */
|
||||||
return -1;
|
return -1;
|
||||||
if((p = object_new(sizeof(*p) * (argc + 1))) == NULL)
|
if((p = object_new(sizeof(*p) * (argc + 2))) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
/* XXX really is a VT_POINTER (void *) */
|
p[0] = variable_new(VT_POINTER, app);
|
||||||
if((p[0] = variable_new(VT_BUFFER, app)) == NULL)
|
p[1] = variable_new(VT_POINTER, asc);
|
||||||
|
if(p[0] == NULL || p[1] == NULL)
|
||||||
{
|
{
|
||||||
|
if(p[0] != NULL)
|
||||||
|
variable_delete(p[0]);
|
||||||
|
if(p[1] != NULL)
|
||||||
|
variable_delete(p[1]);
|
||||||
object_delete(p);
|
object_delete(p);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
for(i = 0; i < argc; i++)
|
for(i = 0; i < argc; i++)
|
||||||
p[i + 1] = argv[i];
|
p[i + 2] = argv[i];
|
||||||
ret = marshall_callp(result, call->call, argc, argv);
|
ret = marshall_callp(result, call->call, argc + 2, p);
|
||||||
|
variable_delete(p[1]);
|
||||||
variable_delete(p[0]);
|
variable_delete(p[0]);
|
||||||
object_delete(p);
|
object_delete(p);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
# include <stdarg.h>
|
# include <stdarg.h>
|
||||||
# include <System/variable.h>
|
# include <System/variable.h>
|
||||||
|
# include "App/appserver.h"
|
||||||
# include "App/appstatus.h"
|
# include "App/appstatus.h"
|
||||||
# include "App/apptransport.h"
|
# include "App/apptransport.h"
|
||||||
|
|
||||||
|
@ -45,10 +46,11 @@ int appinterface_get_args_count(AppInterface * appinterface, size_t * count,
|
||||||
AppStatus * appinterface_get_status(AppInterface * appinterface);
|
AppStatus * appinterface_get_status(AppInterface * appinterface);
|
||||||
|
|
||||||
/* useful */
|
/* useful */
|
||||||
int appinterface_callv(AppInterface * appinterface, App * app, void ** result,
|
int appinterface_callv(AppInterface * appinterface, App * app,
|
||||||
|
AppServerClient * asc, void ** result,
|
||||||
char const * method, va_list args);
|
char const * method, va_list args);
|
||||||
int appinterface_call_variablev(AppInterface * appinterface, App * app,
|
int appinterface_call_variablev(AppInterface * appinterface, App * app,
|
||||||
Variable * result, char const * method,
|
AppServerClient * asc, Variable * result, char const * method,
|
||||||
size_t argc, Variable ** argv);
|
size_t argc, Variable ** argv);
|
||||||
|
|
||||||
AppMessage * appinterface_messagev(AppInterface * appinterface,
|
AppMessage * appinterface_messagev(AppInterface * appinterface,
|
||||||
|
|
|
@ -183,8 +183,9 @@ static int _helper_message_call(AppServer * appserver, AppTransport * transport,
|
||||||
if(!appinterface_can_call(appserver->interface, method, name))
|
if(!appinterface_can_call(appserver->interface, method, name))
|
||||||
/* XXX report errors */
|
/* XXX report errors */
|
||||||
return -1;
|
return -1;
|
||||||
|
/* FIXME provide the actual AppServerClient */
|
||||||
ret = appinterface_call_variablev(appserver->interface, appserver->app,
|
ret = appinterface_call_variablev(appserver->interface, appserver->app,
|
||||||
result, method, 0, NULL);
|
NULL, result, method, 0, NULL);
|
||||||
if(result != NULL)
|
if(result != NULL)
|
||||||
variable_delete(result);
|
variable_delete(result);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user