dls_upnp_t *dls_upnp_new(dleyna_connector_id_t connection, const dleyna_connector_dispatch_cb_t *dispatch_table, dls_upnp_callback_t found_server, dls_upnp_callback_t lost_server, void *user_data) { dls_upnp_t *upnp = g_new0(dls_upnp_t, 1); upnp->connection = connection; upnp->interface_info = dispatch_table; upnp->user_data = user_data; upnp->found_server = found_server; upnp->lost_server = lost_server; upnp->server_udn_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, dls_device_delete); upnp->server_uc_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); dls_prop_maps_new(&upnp->property_map, &upnp->filter_map); upnp->context_manager = gupnp_context_manager_create(0); g_signal_connect(upnp->context_manager, "context-available", G_CALLBACK(prv_on_context_available), upnp); return upnp; }
msu_upnp_t *msu_upnp_new(GDBusConnection *connection, msu_interface_info_t *interface_info, msu_upnp_callback_t found_server, msu_upnp_callback_t lost_server, void *user_data) { msu_upnp_t *upnp = g_new0(msu_upnp_t, 1); upnp->connection = connection; upnp->interface_info = interface_info; upnp->user_data = user_data; upnp->found_server = found_server; upnp->lost_server = lost_server; upnp->server_udn_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, msu_device_delete); upnp->server_uc_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); msu_prop_maps_new(&upnp->property_map, &upnp->filter_map); upnp->context_manager = gupnp_context_manager_create(0); g_signal_connect(upnp->context_manager, "context-available", G_CALLBACK(prv_on_context_available), upnp); return upnp; }
dlr_upnp_t *dlr_upnp_new(dleyna_connector_id_t connection, guint port, guint push_host_port, const dleyna_connector_dispatch_cb_t *dispatch_table, dlr_upnp_callback_t found_server, dlr_upnp_callback_t lost_server) { dlr_upnp_t *upnp = g_new0(dlr_upnp_t, 1); upnp->connection = connection; upnp->interface_info = dispatch_table; upnp->found_server = found_server; upnp->lost_server = lost_server; upnp->server_udn_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, dlr_device_delete); upnp->server_uc_map = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); upnp->context_manager = gupnp_context_manager_create(port); g_signal_connect(upnp->context_manager, "context-available", G_CALLBACK(prv_on_context_available), upnp); dlr_host_service_new(&upnp->host_service, push_host_port); return upnp; }
UPNPRouter() { //TODO: Map UPnP port std::thread m([=](){ GUPnPContextManager* mngr = gupnp_context_manager_create(0); g_signal_connect(mngr,"context-available",G_CALLBACK(context_found),0); igdContext = gupnp_simple_igd_new(); gtk_main(); }); m.detach(); }
static void gupnp_simple_igd_constructed (GObject *object) { GUPnPSimpleIgd *self = GUPNP_SIMPLE_IGD_CAST (object); SoupSession *session; self->priv->main_context = g_main_context_get_thread_default (); if (!self->priv->main_context) self->priv->main_context = g_main_context_default (); g_main_context_ref (self->priv->main_context); self->priv->gupnp_context_manager = gupnp_context_manager_create (0); g_signal_connect (self->priv->gupnp_context_manager, "context-available", G_CALLBACK (_context_available), self); if (G_OBJECT_CLASS (gupnp_simple_igd_parent_class)->constructed) G_OBJECT_CLASS (gupnp_simple_igd_parent_class)->constructed (object); }