static void client_connected_cb (GServer *server, GConn *conn, gpointer user_data) { OdccmDeviceManager *self = ODCCM_DEVICE_MANAGER (user_data); OdccmDeviceManagerPrivate *priv = ODCCM_DEVICE_MANAGER_GET_PRIVATE (self); struct in_addr addr; OdccmDevice *dev = NULL; GSList *cur; if (conn == NULL) { g_warning ("%s: an error occurred", G_STRFUNC); return; } gnet_inetaddr_get_bytes (gnet_tcp_socket_get_remote_inetaddr (conn->socket), (gchar *) &(addr.s_addr)); for (cur = priv->devices; cur != NULL && dev == NULL; cur = cur->next) { guint32 cur_addr; g_object_get (cur->data, "ip-address", &cur_addr, NULL); if (cur_addr == addr.s_addr) { dev = cur->data; } } if (dev != NULL) { _odccm_device_client_connected (dev, conn); } else { #ifdef ENABLE_LEGACY_SUPPORT GInetAddr *local_inet_addr = gnet_tcp_socket_get_local_inetaddr (conn->socket); if (gnet_inetaddr_get_port(local_inet_addr) == 5679) { dev = g_object_new (ODCCM_TYPE_DEVICE_LEGACY, "connection", conn, NULL); g_signal_connect(dev, "device-legacy-noping", G_CALLBACK(legacy_device_noping_cb), self); } else dev = g_object_new (ODCCM_TYPE_DEVICE, "connection", conn, NULL); gnet_inetaddr_unref(local_inet_addr); #else dev = g_object_new (ODCCM_TYPE_DEVICE, "connection", conn, NULL); #endif priv->devices = g_slist_append (priv->devices, dev); g_signal_connect (dev, "notify::object-path", (GCallback) device_obj_path_changed_cb, self); gnet_conn_unref (conn); } }
static void odccm_connection_broker_dispose (GObject *obj) { OdccmConnectionBroker *self = ODCCM_CONNECTION_BROKER (obj); OdccmConnectionBrokerPrivate *priv = ODCCM_CONNECTION_BROKER_GET_PRIVATE (self); if (priv->dispose_has_run) return; priv->dispose_has_run = TRUE; if (priv->conn != NULL) gnet_conn_unref (priv->conn); if (priv->server != NULL) gnet_unix_socket_unref (priv->server); if (G_OBJECT_CLASS (odccm_connection_broker_parent_class)->dispose) G_OBJECT_CLASS (odccm_connection_broker_parent_class)->dispose (obj); }