[remote] Add generic command and pack system to simplify user code.
[vsc-common.git] / include / libvscremote / libvscremote.h
1 /*
2  * libvscremote.h: XML-RPC based remote extension for libvsccli
3  *
4  * Copyright (C) 2009 Matthias Bolte <matthias.bolte@googlemail.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
19  */
20
21 #ifndef __VSC_REMOTE_H__
22 #define __VSC_REMOTE_H__
23
24 #include <xmlrpc-c/base.h>
25
26 #include <libvsccli/types.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 typedef void (*VscRemotePackFunction)
33    (struct VscError *error, const struct VscCliCommandInfo *command_info,
34     const struct VscCliOption *option_list, const char *cookie,
35     xmlrpc_value *struct_value, void *user_data);
36
37 typedef void (*VscRemoteUnpackFunction)
38    (struct VscError *error, const struct VscCliCommandInfo *command_info,
39     const struct VscCliOption *option_list, int code, const char *message,
40     xmlrpc_value *value, void *user_data);
41
42 typedef const char * (*VscRemoteMethodLookupFunction)
43    (struct VscError *error, const char *command_name,
44     VscRemotePackFunction *pack_function,
45     VscRemoteUnpackFunction *unpack_function, void *user_data);
46
47 typedef const char * (*VscRemoteParameterNameLookupFunction)
48    (struct VscError *error, const char *command_name,
49     const char *option_long_name, void *user_data);
50
51 extern const struct VscCliCommandInfo vsc_remote_login_command_info;
52 extern const struct VscCliCommandInfo vsc_remote_logout_command_info;
53
54 void
55 vsc_remote_init (struct VscError *error, const char *name, const char *version,
56                  const char *remote_url,
57                  VscRemoteMethodLookupFunction method_lookup_function,
58                  VscRemoteParameterNameLookupFunction parameter_name_lookup_function);
59
60 void
61 vsc_remote_cleanup (void);
62
63 void
64 vsc_remote_check (struct VscError *error, int expected_login_state);
65
66 const char *
67 vsc_remote_get_cookie (struct VscError *error);
68
69 const char *
70 vsc_remote_get_username (struct VscError *error);
71
72 void
73 vsc_remote_default_pack (struct VscError *error,
74                          const struct VscCliCommandInfo *command_info,
75                          const struct VscCliOption *option_list,
76                          const char *cookie, xmlrpc_value *struct_value,
77                          void *user_data);
78
79 void
80 vsc_remote_default_command (struct VscError *error,
81                             const struct VscCliCommandInfo *command_info,
82                             const struct VscCliOption *option_list,
83                             void *user_data);
84
85 #ifdef __cplusplus
86 }
87 #endif
88
89 #endif /* __VSC_REMOTE_H__ */