GObject * start_upnp_server (void) { GUPnPContext *context; GUPnPRootDevice *dev; GUPnPServiceInfo *service; GUPnPDeviceInfo *subdev1; GUPnPDeviceInfo *subdev2; context = gupnp_context_new (NULL, NULL, 0, NULL); ts_fail_if (context == NULL, "Can't get gupnp context"); if (g_getenv ("UPNP_XML_PATH")) { gchar **paths = g_strsplit (g_getenv ("UPNP_XML_PATH"), ":", 0); gint i; for (i=0; paths[i]; i++) { gupnp_context_host_path (context, paths[i], ""); } g_strfreev (paths); } else { gupnp_context_host_path (context, "upnp/InternetGatewayDevice.xml", "/InternetGatewayDevice.xml"); gupnp_context_host_path (context, "upnp/WANIPConnection.xml", "/WANIPConnection.xml"); } dev = gupnp_root_device_new (context, "/InternetGatewayDevice.xml"); ts_fail_if (dev == NULL, "could not get root dev"); subdev1 = gupnp_device_info_get_device (GUPNP_DEVICE_INFO (dev), "urn:schemas-upnp-org:device:WANDevice:1"); ts_fail_if (subdev1 == NULL, "Could not get WANDevice"); subdev2 = gupnp_device_info_get_device (subdev1, "urn:schemas-upnp-org:device:WANConnectionDevice:1"); ts_fail_if (subdev2 == NULL, "Could not get WANConnectionDevice"); g_object_unref (subdev1); service = gupnp_device_info_get_service (subdev2, "urn:schemas-upnp-org:service:WANIPConnection:1"); ts_fail_if (service == NULL, "Could not get WANIPConnection"); g_object_unref (subdev2); g_signal_connect (service, "action-invoked::GetExternalIPAddress", G_CALLBACK (get_external_ip_address_cb), NULL); g_signal_connect (service, "action-invoked::AddPortMapping", G_CALLBACK (add_port_mapping_cb), NULL); g_signal_connect (service, "action-invoked::DeletePortMapping", G_CALLBACK (delete_port_mapping_cb), NULL); gupnp_root_device_set_available (dev, TRUE); return G_OBJECT (context); }
void start_transfer (const char *file_path, const char *dest_uri, GUPnPServiceProxy *cds_proxy, GUPnPContext *context) { char *source_uri; char *file_name; if (!g_path_is_absolute (file_path)) { g_critical ("Given file path '%s' is not absolute.", file_path); transfer_completed (); return; } /* Time to host the file */ gupnp_context_host_path (context, file_path, file_path); source_uri = g_strdup_printf ("http://%s:%u%s", gssdp_client_get_host_ip (GSSDP_CLIENT (context)), gupnp_context_get_port (context), file_path); file_name = g_path_get_basename (file_path); gupnp_service_proxy_begin_action (cds_proxy, "ImportResource", import_resource_cb, file_name, "SourceURI", G_TYPE_STRING, source_uri, "DestinationURI", G_TYPE_STRING, dest_uri, NULL); g_free (source_uri); }
static void run_gupnp_simple_igd_test (GMainContext *mainctx, GUPnPSimpleIgd *igd, guint requested_port) { GUPnPContext *context; GUPnPRootDevice *dev; GUPnPDeviceInfo *subdev1; GUPnPDeviceInfo *subdev2; const gchar *xml_path = "."; if (mainctx) g_main_context_push_thread_default (mainctx); context = gupnp_context_new (NULL, NULL, 0, NULL); g_assert (context); if (g_getenv ("XML_PATH")) xml_path = g_getenv ("XML_PATH"); gupnp_context_host_path (context, xml_path, ""); /* gupnp_context_host_path (context, "InternetGatewayDevice.xml", "/InternetGatewayDevice.xml"); gupnp_context_host_path (context, "WANIPConnection.xml", "/WANIPConnection.xml"); gupnp_context_host_path (context, "WANPPPConnection.xml", "/WANPPPConnection.xml"); */ dev = gupnp_root_device_new (context, "InternetGatewayDevice.xml", xml_path); g_assert (dev); subdev1 = gupnp_device_info_get_device (GUPNP_DEVICE_INFO (dev), "urn:schemas-upnp-org:device:WANDevice:1"); g_assert (subdev1); subdev2 = gupnp_device_info_get_device (subdev1, "urn:schemas-upnp-org:device:WANConnectionDevice:1"); g_assert (subdev2); g_object_unref (subdev1); ipservice = gupnp_device_info_get_service (subdev2, "urn:schemas-upnp-org:service:WANIPConnection:1"); g_assert (ipservice); pppservice = gupnp_device_info_get_service (subdev2, "urn:schemas-upnp-org:service:WANPPPConnection:1"); g_assert (pppservice); g_object_unref (subdev2); g_signal_connect (ipservice, "action-invoked::GetExternalIPAddress", G_CALLBACK (get_external_ip_address_cb), GINT_TO_POINTER (CONNECTION_IP)); g_signal_connect (ipservice, "action-invoked::AddPortMapping", G_CALLBACK (add_port_mapping_cb), GUINT_TO_POINTER (requested_port));; g_signal_connect (ipservice, "action-invoked::DeletePortMapping", G_CALLBACK (delete_port_mapping_cb), GUINT_TO_POINTER (requested_port)); g_signal_connect (pppservice, "action-invoked::GetExternalIPAddress", G_CALLBACK (get_external_ip_address_cb), GINT_TO_POINTER (CONNECTION_PPP)); g_signal_connect (pppservice, "action-invoked::AddPortMapping", G_CALLBACK (add_port_mapping_cb), GUINT_TO_POINTER (requested_port)); g_signal_connect (pppservice, "action-invoked::DeletePortMapping", G_CALLBACK (delete_port_mapping_cb), GUINT_TO_POINTER (requested_port)); gupnp_root_device_set_available (dev, TRUE); g_signal_connect (igd, "mapped-external-port", G_CALLBACK (mapped_external_port_cb), GUINT_TO_POINTER (requested_port)); g_signal_connect (igd, "error-mapping-port", G_CALLBACK (error_mapping_port_cb), NULL); gupnp_simple_igd_add_port (igd, "UDP", requested_port, "192.168.4.22", INTERNAL_PORT, 10, "GUPnP Simple IGD test"); loop = g_main_loop_new (mainctx, FALSE); g_main_loop_run (loop); g_main_loop_unref (loop); gupnp_root_device_set_available (dev, FALSE); g_object_unref (dev); if (mainctx) g_main_context_pop_thread_default (mainctx); g_object_unref (context); }