![]() |
![]() |
![]() |
GUPnP Reference Manual | ![]() |
---|
gupnp-binding-toolgupnp-binding-tool — create C convenience wrappers for calling UPnP actions |
gupnp-binding-tool
{SCPD file}
gupnp-binding-tool takes a SCPD file and generates C functions which call the action using GUPnP.
These generated function are less verbose than direct calls to
gupnp_service_proxy_send_call()
because they have the
correct argument types.
For example, this action:
<action> <name>DeletePortMapping</name> <argumentList> <argument> <name>NewRemoteHost</name> <direction>in</direction> <relatedStateVariable>RemoteHost</relatedStateVariable> </argument> <argument> <name>NewExternalPort</name> <direction>in</direction> <relatedStateVariable>ExternalPort</relatedStateVariable> </argument> <argument> <name>NewProtocol</name> <direction>in</direction> <relatedStateVariable>PortMappingProtocol</relatedStateVariable> </argument> </argumentList> </action>
Will generate the following prototype:
static inline gboolean DeletePortMapping (GUPnPServiceProxy *proxy, char * in_NewRemoteHost, unsigned int in_NewExternalPort, char * in_NewProtocol, GError **error);
As can be seen, the arguments have the correct types and are prefixed with the argument direction.
gupnp-binding-tool generates both synchronous and
asynchronous wrappers. The DeletePortMapping
example
above is the synchronous form, the asynchronous form is as follows:
typedef void (*DeletePortMapping_reply) (GUPnPServiceProxy *proxy, GError *error, gpointer userdata); static inline GUPnPServiceProxyAction * DeletePortMapping_async (GUPnPServiceProxy *proxy, char * in_NewRemoteHost, unsigned int in_NewExternalPort, char * in_NewProtocol, DeletePortMapping_reply callback, gpointer userdata);
The asynchronous form (implemented using
gupnp_service_proxy_begin_action()
and
gupnp_service_proxy_end_action()
) will return without
blocking and later invoke the callback from the main loop when the reply
is received.