blob: 2d00d6e37eb9e8229105ff869814736ead9e0099 [file] [log] [blame]
Richard Hughes02c90d82018-08-09 12:13:03 +01001/*
Richard Hughes9945edb2017-06-19 10:03:55 +01002 * Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
3 *
Mario Limonciello51308e62018-05-28 20:05:46 -05004 * SPDX-License-Identifier: LGPL-2.1+
Richard Hughes9945edb2017-06-19 10:03:55 +01005 */
6
Richard Hughesbfd946e2019-02-09 08:21:40 +00007#pragma once
Richard Hughes9945edb2017-06-19 10:03:55 +01008
Richard Hughes481aa2a2018-09-18 20:51:46 +01009#include <xmlb.h>
Richard Hughes9945edb2017-06-19 10:03:55 +010010#include <glib-object.h>
Richard Hughesd5aab652020-02-25 12:47:50 +000011#include <jcat.h>
Richard Hughes9945edb2017-06-19 10:03:55 +010012
Richard Hughes80893e22017-09-15 16:09:22 +010013#include "fwupd-device.h"
Richard Hughes9945edb2017-06-19 10:03:55 +010014#include "fwupd-enums.h"
15
Richard Hughes5b5f6552018-05-18 10:22:39 +010016#include "fu-common.h"
Richard Hughesb333e002021-04-01 10:40:02 +010017#include "fu-context.h"
Richard Hughesdf89cd52020-06-26 20:25:18 +010018#include "fu-engine-request.h"
Richard Hughes1d1f5cf2018-05-19 23:06:03 +010019#include "fu-install-task.h"
Richard Hughes7769fb82017-09-17 21:14:48 +010020#include "fu-plugin.h"
Richard Hughesf58ac732020-05-12 15:23:44 +010021#include "fu-security-attrs.h"
Richard Hughes7769fb82017-09-17 21:14:48 +010022
Richard Hughes9945edb2017-06-19 10:03:55 +010023#define FU_TYPE_ENGINE (fu_engine_get_type ())
24G_DECLARE_FINAL_TYPE (FuEngine, fu_engine, FU, ENGINE, GObject)
25
Mario Limonciello39602652019-04-29 21:08:58 -050026/**
27 * FuEngineLoadFlags:
28 * @FU_ENGINE_LOAD_FLAG_NONE: No flags set
Richard Hughesc7d870a2020-12-10 10:05:35 +000029 * @FU_ENGINE_LOAD_FLAG_READONLY: Ignore readonly filesystem errors
30 * @FU_ENGINE_LOAD_FLAG_COLDPLUG: Enumerate devices
31 * @FU_ENGINE_LOAD_FLAG_REMOTES: Enumerate remotes
32 * @FU_ENGINE_LOAD_FLAG_HWINFO: Load details about the hardware
Mario Limonciello39602652019-04-29 21:08:58 -050033 *
34 * The flags to use when loading the engine.
35 **/
Richard Hughesc8cc77c2019-03-07 11:57:24 +000036typedef enum {
37 FU_ENGINE_LOAD_FLAG_NONE = 0,
Richard Hughesc7d870a2020-12-10 10:05:35 +000038 FU_ENGINE_LOAD_FLAG_READONLY = 1 << 0,
39 FU_ENGINE_LOAD_FLAG_COLDPLUG = 1 << 1,
40 FU_ENGINE_LOAD_FLAG_REMOTES = 1 << 2,
41 FU_ENGINE_LOAD_FLAG_HWINFO = 1 << 3,
Mario Limonciello39602652019-04-29 21:08:58 -050042 /*< private >*/
Richard Hughesc8cc77c2019-03-07 11:57:24 +000043 FU_ENGINE_LOAD_FLAG_LAST
44} FuEngineLoadFlags;
45
Richard Hughes5b5f6552018-05-18 10:22:39 +010046FuEngine *fu_engine_new (FuAppFlags app_flags);
Richard Hughesf517c9a2019-03-22 19:50:35 +000047void fu_engine_add_app_flag (FuEngine *self,
48 FuAppFlags app_flags);
Richard Hughesc02ee4d2018-05-22 15:46:03 +010049void fu_engine_add_plugin_filter (FuEngine *self,
50 const gchar *plugin_glob);
Richard Hughes75b965d2018-11-15 13:51:21 +000051void fu_engine_idle_reset (FuEngine *self);
Richard Hughes9945edb2017-06-19 10:03:55 +010052gboolean fu_engine_load (FuEngine *self,
Richard Hughesc8cc77c2019-03-07 11:57:24 +000053 FuEngineLoadFlags flags,
Richard Hughes9945edb2017-06-19 10:03:55 +010054 GError **error);
Richard Hughes8c71a3f2018-05-22 19:19:52 +010055gboolean fu_engine_load_plugins (FuEngine *self,
56 GError **error);
Richard Hughesf425d292019-01-18 17:57:39 +000057gboolean fu_engine_get_tainted (FuEngine *self);
Richard Hughes0c6efe22020-05-20 18:31:48 +010058const gchar *fu_engine_get_host_product (FuEngine *self);
59const gchar *fu_engine_get_host_machine_id (FuEngine *self);
Richard Hughes196c6c62020-05-11 19:42:47 +010060const gchar *fu_engine_get_host_security_id (FuEngine *self);
Richard Hughes9945edb2017-06-19 10:03:55 +010061FwupdStatus fu_engine_get_status (FuEngine *self);
Richard Hughes481aa2a2018-09-18 20:51:46 +010062XbSilo *fu_engine_get_silo_from_blob (FuEngine *self,
Richard Hughes4eada342017-10-03 21:20:32 +010063 GBytes *blob_cab,
Richard Hughes9945edb2017-06-19 10:03:55 +010064 GError **error);
Richard Hughesc7bbbc22018-01-02 22:22:25 +000065guint64 fu_engine_get_archive_size_max (FuEngine *self);
Richard Hughes8c71a3f2018-05-22 19:19:52 +010066GPtrArray *fu_engine_get_plugins (FuEngine *self);
Richard Hughes9945edb2017-06-19 10:03:55 +010067GPtrArray *fu_engine_get_devices (FuEngine *self,
68 GError **error);
Richard Hughes4ad41f02018-05-08 14:35:36 +010069FuDevice *fu_engine_get_device (FuEngine *self,
70 const gchar *device_id,
71 GError **error);
Richard Hughes3aaf53c2020-04-20 09:39:46 +010072GPtrArray *fu_engine_get_devices_by_guid (FuEngine *self,
73 const gchar *guid,
74 GError **error);
Richard Hughes63bc42e2021-04-22 09:32:07 +010075GPtrArray *fu_engine_get_devices_by_composite_id (FuEngine *self,
76 const gchar *composite_id,
77 GError **error);
Richard Hughes476363a2018-01-11 10:08:58 +000078GPtrArray *fu_engine_get_history (FuEngine *self,
79 GError **error);
Mario Limonciello46aaee82019-01-10 12:58:00 -060080FwupdRemote *fu_engine_get_remote_by_id (FuEngine *self,
81 const gchar *remote_id,
82 GError **error);
Richard Hughes9945edb2017-06-19 10:03:55 +010083GPtrArray *fu_engine_get_remotes (FuEngine *self,
84 GError **error);
85GPtrArray *fu_engine_get_releases (FuEngine *self,
Richard Hughesdf89cd52020-06-26 20:25:18 +010086 FuEngineRequest *request,
Richard Hughes9945edb2017-06-19 10:03:55 +010087 const gchar *device_id,
88 GError **error);
Richard Hughes97284b12017-09-13 17:07:58 +010089GPtrArray *fu_engine_get_downgrades (FuEngine *self,
Richard Hughesdf89cd52020-06-26 20:25:18 +010090 FuEngineRequest *request,
Richard Hughes97284b12017-09-13 17:07:58 +010091 const gchar *device_id,
92 GError **error);
Richard Hughesa96413a2017-09-13 17:19:59 +010093GPtrArray *fu_engine_get_upgrades (FuEngine *self,
Richard Hughesdf89cd52020-06-26 20:25:18 +010094 FuEngineRequest *request,
Richard Hughesa96413a2017-09-13 17:19:59 +010095 const gchar *device_id,
96 GError **error);
Richard Hughes93b15762017-09-15 11:05:23 +010097FwupdDevice *fu_engine_get_results (FuEngine *self,
Richard Hughes9945edb2017-06-19 10:03:55 +010098 const gchar *device_id,
99 GError **error);
Richard Hughes56e7ae52020-05-17 21:00:23 +0100100FuSecurityAttrs *fu_engine_get_host_security_attrs (FuEngine *self);
Richard Hughes6ecc4ca2020-05-20 18:42:46 +0100101GHashTable *fu_engine_get_report_metadata (FuEngine *self,
102 GError **error);
Richard Hughes9945edb2017-06-19 10:03:55 +0100103gboolean fu_engine_clear_results (FuEngine *self,
104 const gchar *device_id,
105 GError **error);
106gboolean fu_engine_update_metadata (FuEngine *self,
107 const gchar *remote_id,
108 gint fd,
109 gint fd_sig,
110 GError **error);
Richard Hughesbe5b0192020-01-17 14:32:23 +0000111gboolean fu_engine_update_metadata_bytes (FuEngine *self,
112 const gchar *remote_id,
113 GBytes *bytes_raw,
114 GBytes *bytes_sig,
115 GError **error);
Richard Hughes9945edb2017-06-19 10:03:55 +0100116gboolean fu_engine_unlock (FuEngine *self,
117 const gchar *device_id,
118 GError **error);
119gboolean fu_engine_verify (FuEngine *self,
120 const gchar *device_id,
121 GError **error);
122gboolean fu_engine_verify_update (FuEngine *self,
123 const gchar *device_id,
124 GError **error);
Richard Hughesfbd8b5d2020-09-24 11:48:59 +0100125GBytes *fu_engine_firmware_dump (FuEngine *self,
Richard Hughesa58510b2019-10-30 10:03:12 +0000126 FuDevice *device,
127 FwupdInstallFlags flags,
128 GError **error);
Richard Hughesa6bd5582017-09-07 14:32:22 +0100129gboolean fu_engine_modify_remote (FuEngine *self,
130 const gchar *remote_id,
131 const gchar *key,
132 const gchar *value,
133 GError **error);
Richard Hughes6b222952018-01-11 10:20:48 +0000134gboolean fu_engine_modify_device (FuEngine *self,
135 const gchar *device_id,
136 const gchar *key,
137 const gchar *value,
138 GError **error);
Richard Hughesdbd8c762018-06-15 20:31:40 +0100139gboolean fu_engine_composite_prepare (FuEngine *self,
140 GPtrArray *devices,
141 GError **error);
142gboolean fu_engine_composite_cleanup (FuEngine *self,
143 GPtrArray *devices,
144 GError **error);
Richard Hughes9945edb2017-06-19 10:03:55 +0100145gboolean fu_engine_install (FuEngine *self,
Richard Hughes1d1f5cf2018-05-19 23:06:03 +0100146 FuInstallTask *task,
Richard Hughes9945edb2017-06-19 10:03:55 +0100147 GBytes *blob_cab,
148 FwupdInstallFlags flags,
149 GError **error);
Richard Hughes6e7419d2018-05-18 10:11:36 +0100150gboolean fu_engine_install_blob (FuEngine *self,
151 FuDevice *device,
Richard Hughes6e7419d2018-05-18 10:11:36 +0100152 GBytes *blob_fw,
Richard Hughes6e7419d2018-05-18 10:11:36 +0100153 FwupdInstallFlags flags,
154 GError **error);
Richard Hughesdbd8c762018-06-15 20:31:40 +0100155gboolean fu_engine_install_tasks (FuEngine *self,
Richard Hughesdf89cd52020-06-26 20:25:18 +0100156 FuEngineRequest *request,
Richard Hughesdbd8c762018-06-15 20:31:40 +0100157 GPtrArray *install_tasks,
158 GBytes *blob_cab,
159 FwupdInstallFlags flags,
160 GError **error);
Richard Hughes07f963a2017-09-15 14:28:47 +0100161GPtrArray *fu_engine_get_details (FuEngine *self,
Richard Hughesdf89cd52020-06-26 20:25:18 +0100162 FuEngineRequest *request,
Richard Hughes9945edb2017-06-19 10:03:55 +0100163 gint fd,
164 GError **error);
Mario Limonciello96a0dd52019-02-25 13:50:03 -0600165gboolean fu_engine_activate (FuEngine *self,
166 const gchar *device_id,
167 GError **error);
Richard Hughes8dd4c1c2019-03-03 18:27:57 +0000168GPtrArray *fu_engine_get_approved_firmware (FuEngine *self);
169void fu_engine_add_approved_firmware (FuEngine *self,
170 const gchar *checksum);
Richard Hughes31206832020-07-27 15:31:11 +0100171void fu_engine_set_approved_firmware (FuEngine *self,
172 GPtrArray *checksums);
173GPtrArray *fu_engine_get_blocked_firmware (FuEngine *self);
174void fu_engine_add_blocked_firmware (FuEngine *self,
175 const gchar *checksum);
176gboolean fu_engine_set_blocked_firmware (FuEngine *self,
177 GPtrArray *checksums,
178 GError **error);
Richard Hughes3d607622019-03-07 16:59:27 +0000179gchar *fu_engine_self_sign (FuEngine *self,
180 const gchar *value,
Richard Hughesd5aab652020-02-25 12:47:50 +0000181 JcatSignFlags flags,
Richard Hughes3d607622019-03-07 16:59:27 +0000182 GError **error);
Mario Limonciellobfcf75b2019-04-17 15:05:39 +0100183gboolean fu_engine_modify_config (FuEngine *self,
184 const gchar *key,
185 const gchar *value,
186 GError **error);
Richard Hughesb333e002021-04-01 10:40:02 +0100187FuContext *fu_engine_get_context (FuEngine *engine);
Mario Limonciello537da0e2020-03-09 15:38:17 -0500188void fu_engine_md_refresh_device_from_component (FuEngine *self,
189 FuDevice *device,
190 XbNode *component);
Filipe LaĆ­nsd3a4fd32020-03-30 21:05:14 +0100191GPtrArray *fu_engine_get_releases_for_device (FuEngine *self,
Richard Hughesdf89cd52020-06-26 20:25:18 +0100192 FuEngineRequest *request,
193 FuDevice *device,
194 GError **error);
Richard Hughes9945edb2017-06-19 10:03:55 +0100195
Richard Hughes7769fb82017-09-17 21:14:48 +0100196/* for the self tests */
197void fu_engine_add_device (FuEngine *self,
Richard Hughes7769fb82017-09-17 21:14:48 +0100198 FuDevice *device);
Richard Hughes34834102017-11-21 21:55:00 +0000199void fu_engine_add_plugin (FuEngine *self,
200 FuPlugin *plugin);
Richard Hughes0eb123b2018-04-19 12:00:04 +0100201void fu_engine_add_runtime_version (FuEngine *self,
202 const gchar *component_id,
203 const gchar *version);
Mario Limonciello381c27c2020-10-23 16:32:26 -0500204gboolean fu_engine_check_trust (FuInstallTask *task,
205 GError **error);
Richard Hughes0eb123b2018-04-19 12:00:04 +0100206gboolean fu_engine_check_requirements (FuEngine *self,
Richard Hughesdf89cd52020-06-26 20:25:18 +0100207 FuEngineRequest *request,
Richard Hughes1d1f5cf2018-05-19 23:06:03 +0100208 FuInstallTask *task,
209 FwupdInstallFlags flags,
Richard Hughes0eb123b2018-04-19 12:00:04 +0100210 GError **error);
Richard Hughes481aa2a2018-09-18 20:51:46 +0100211void fu_engine_set_silo (FuEngine *self,
212 XbSilo *silo);
Mario Limonciello4f24d0b2019-01-26 01:19:59 -0600213XbNode *fu_engine_get_component_by_guids (FuEngine *self,
214 FuDevice *device);
Richard Hughes019a1bc2019-11-26 10:19:33 +0000215gboolean fu_engine_schedule_update (FuEngine *self,
216 FuDevice *device,
217 FwupdRelease *release,
218 GBytes *blob_cab,
219 FwupdInstallFlags flags,
220 GError **error);