/* * SCPD URL downloaded. */ static void got_scpd_url (G_GNUC_UNUSED SoupSession *session, SoupMessage *msg, GetSCPDURLData *data) { GUPnPServiceIntrospection *introspection; GError *error; GUPnPServiceInfoPrivate *priv; introspection = NULL; error = NULL; if (msg->status_code == SOUP_STATUS_CANCELLED) return; if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) { xmlDoc *scpd; scpd = xmlRecoverMemory (msg->response_body->data, msg->response_body->length); if (scpd) { introspection = gupnp_service_introspection_new (scpd); xmlFreeDoc (scpd); } if (!introspection) { error = g_error_new (GUPNP_SERVER_ERROR, GUPNP_SERVER_ERROR_INVALID_RESPONSE, "Could not parse SCPD"); } } else error = _gupnp_error_new_server_error (msg); /* prevent the callback from canceling the cancellable * (and so freeing data just before we do) */ if (data->cancellable) g_cancellable_disconnect (data->cancellable, data->cancelled_id); priv = gupnp_service_info_get_instance_private (data->info); priv->pending_gets = g_list_remove (priv->pending_gets, data); data->callback (data->info, introspection, error, data->user_data); if (error) g_error_free (error); get_scpd_url_data_free (data); }
/* * SCPD URL downloaded. */ static void got_scpd_url (SoupSession *session, SoupMessage *msg, GetSCPDURLData *data) { GUPnPServiceIntrospection *introspection; GError *error; introspection = NULL; error = NULL; if (msg->status_code == SOUP_STATUS_CANCELLED) return; if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) { xmlDoc *scpd; scpd = xmlRecoverMemory (msg->response_body->data, msg->response_body->length); if (scpd) { introspection = gupnp_service_introspection_new (scpd); xmlFreeDoc (scpd); } if (!introspection) { error = g_error_new (GUPNP_SERVER_ERROR, GUPNP_SERVER_ERROR_INVALID_RESPONSE, "Could not parse SCPD"); } } else error = _gupnp_error_new_server_error (msg); data->info->priv->pending_gets = g_list_remove (data->info->priv->pending_gets, data); data->callback (data->info, introspection, error, data->user_data); if (error) g_error_free (error); get_scpd_url_data_free (data); }