G_MODULE_EXPORT void on_device_treeview_row_activate (GtkMenuItem *menuitem, gpointer user_data) { GUPnPServiceProxy *proxy; GUPnPServiceIntrospection *introspection; /* See if a service is selected */ proxy = get_selected_service (); if (proxy != NULL) { gboolean subscribed; subscribed = gupnp_service_proxy_get_subscribed (proxy); gupnp_service_proxy_set_subscribed (proxy, !subscribed); } else { GUPnPServiceActionInfo *action_info; /* See if an action is selected */ action_info = get_selected_action (&proxy, &introspection); if (action_info != NULL) { run_action_dialog (action_info, proxy, introspection); g_object_unref (introspection); } } if (proxy != NULL) g_object_unref (proxy); }
static void got_introspection (GUPnPServiceInfo *info, GUPnPServiceIntrospection *introspection, const GError *error, gpointer user_data) { GtkTreeModel *model; GtkTreeIter *service_iter; service_iter = (GtkTreeIter *) user_data; model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)); g_assert (model != NULL); append_introspection (GUPNP_SERVICE_PROXY (info), introspection, GTK_TREE_STORE (model), service_iter); g_slice_free (GtkTreeIter, service_iter); if (introspection != NULL) { g_object_unref (introspection); /* Services are subscribed to by default */ gupnp_service_proxy_set_subscribed (GUPNP_SERVICE_PROXY (info), TRUE); } }
static void gupnp_simple_igd_gather (GUPnPSimpleIgd *self, struct Proxy *prox) { prox->external_ip_action = gupnp_service_proxy_begin_action (prox->proxy, "GetExternalIPAddress", _service_proxy_got_external_ip_address, prox, NULL); gupnp_service_proxy_add_notify (prox->proxy, "ExternalIPAddress", G_TYPE_STRING, _external_ip_address_changed, prox); gupnp_service_proxy_set_subscribed (prox->proxy, TRUE); }
static void service_proxy_available_cb (G_GNUC_UNUSED GUPnPControlPoint *cp, GUPnPServiceProxy *proxy) { const char *location; char *result = NULL; guint count, total; GError *error = NULL; location = gupnp_service_info_get_location (GUPNP_SERVICE_INFO (proxy)); g_print ("ContentDirectory available:\n"); g_print ("\tlocation: %s\n", location); /* We want to be notified whenever SystemUpdateID (of type uint) * changes */ gupnp_service_proxy_add_notify (proxy, "SystemUpdateID", G_TYPE_UINT, notify_cb, (gpointer) "Test"); /* Subscribe */ g_signal_connect (proxy, "subscription-lost", G_CALLBACK (subscription_lost_cb), NULL); gupnp_service_proxy_set_subscribed (proxy, TRUE); /* And test action IO */ gupnp_service_proxy_send_action (proxy, "Browse", &error, /* IN args */ "ObjectID", G_TYPE_STRING, "0", "BrowseFlag", G_TYPE_STRING, "BrowseDirectChildren", "Filter", G_TYPE_STRING, "*", "StartingIndex", G_TYPE_UINT, 0, "RequestedCount", G_TYPE_UINT, 0, "SortCriteria", G_TYPE_STRING, "", NULL, /* OUT args */ "Result", G_TYPE_STRING, &result, "NumberReturned", G_TYPE_UINT, &count, "TotalMatches", G_TYPE_UINT, &total, NULL); if (error) { g_printerr ("Error: %s\n", error->message); g_error_free (error); return; } g_print ("Browse returned:\n"); g_print ("\tResult: %s\n", result); g_print ("\tNumberReturned: %u\n", count); g_print ("\tTotalMatches: %u\n", total); g_free (result); }