Skip to content

Commit

Permalink
Added user_data parameter to instproxy_status_cb and related functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
bryanforbes committed Mar 31, 2010
1 parent b80bd77 commit 7759562
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 26 deletions.
14 changes: 7 additions & 7 deletions include/libimobiledevice/installation_proxy.h
Expand Up @@ -49,21 +49,21 @@ typedef struct instproxy_client_private instproxy_client_private;
typedef instproxy_client_private *instproxy_client_t; /**< The client handle. */

/** Reports the status of the given operation */
typedef void (*instproxy_status_cb_t) (const char *operation, plist_t status);
typedef void (*instproxy_status_cb_t) (const char *operation, plist_t status, void *user_data);

/* Interface */
instproxy_error_t instproxy_client_new(idevice_t device, uint16_t port, instproxy_client_t *client);
instproxy_error_t instproxy_client_free(instproxy_client_t client);

instproxy_error_t instproxy_browse(instproxy_client_t client, plist_t client_options, plist_t *result);
instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb);
instproxy_error_t instproxy_upgrade(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb);
instproxy_error_t instproxy_uninstall(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb);
instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);
instproxy_error_t instproxy_upgrade(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);
instproxy_error_t instproxy_uninstall(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);

instproxy_error_t instproxy_lookup_archives(instproxy_client_t client, plist_t client_options, plist_t *result);
instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb);
instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb);
instproxy_error_t instproxy_remove_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb);
instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);
instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);
instproxy_error_t instproxy_remove_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data);

plist_t instproxy_client_options_new();
void instproxy_client_options_add(plist_t client_options, ...) G_GNUC_NULL_TERMINATED;
Expand Down
40 changes: 21 additions & 19 deletions src/installation_proxy.c
Expand Up @@ -33,6 +33,7 @@ struct instproxy_status_data {
instproxy_client_t client;
instproxy_status_cb_t cbfunc;
char *operation;
void *user_data;
};

/**
Expand Down Expand Up @@ -272,7 +273,7 @@ instproxy_error_t instproxy_browse(instproxy_client_t client, plist_t client_opt
* @param operation Operation name. Will be passed to the callback function
* in async mode or shown in debug messages in sync mode.
*/
static instproxy_error_t instproxy_perform_operation(instproxy_client_t client, instproxy_status_cb_t status_cb, const char *operation)
static instproxy_error_t instproxy_perform_operation(instproxy_client_t client, instproxy_status_cb_t status_cb, const char *operation, void *user_data)
{
instproxy_error_t res = INSTPROXY_E_UNKNOWN_ERROR;
int ok = 1;
Expand All @@ -289,7 +290,7 @@ static instproxy_error_t instproxy_perform_operation(instproxy_client_t client,
if (dict) {
/* invoke callback function */
if (status_cb) {
status_cb(operation, dict);
status_cb(operation, dict, user_data);
}
/* check for 'Error', so we can abort cleanly */
plist_t err = plist_dict_get_item(dict, "Error");
Expand Down Expand Up @@ -353,7 +354,7 @@ static gpointer instproxy_status_updater(gpointer arg)
struct instproxy_status_data *data = (struct instproxy_status_data*)arg;

/* run until the operation is complete or an error occurs */
(void)instproxy_perform_operation(data->client, data->cbfunc, data->operation);
(void)instproxy_perform_operation(data->client, data->cbfunc, data->operation, data->user_data);

/* cleanup */
instproxy_lock(data->client);
Expand Down Expand Up @@ -383,7 +384,7 @@ static gpointer instproxy_status_updater(gpointer arg)
* when the operation completed successfully (sync).
* An INSTPROXY_E_* error value is returned if an error occured.
*/
static instproxy_error_t instproxy_create_status_updater(instproxy_client_t client, instproxy_status_cb_t status_cb, const char *operation)
static instproxy_error_t instproxy_create_status_updater(instproxy_client_t client, instproxy_status_cb_t status_cb, const char *operation, void *user_data)
{
instproxy_error_t res = INSTPROXY_E_UNKNOWN_ERROR;
if (status_cb) {
Expand All @@ -393,6 +394,7 @@ static instproxy_error_t instproxy_create_status_updater(instproxy_client_t clie
data->client = client;
data->cbfunc = status_cb;
data->operation = strdup(operation);
data->user_data = user_data;

client->status_updater = g_thread_create(instproxy_status_updater, data, TRUE, NULL);
if (client->status_updater) {
Expand All @@ -401,7 +403,7 @@ static instproxy_error_t instproxy_create_status_updater(instproxy_client_t clie
}
} else {
/* sync mode */
res = instproxy_perform_operation(client, NULL, operation);
res = instproxy_perform_operation(client, NULL, operation, NULL);
}
return res;
}
Expand All @@ -420,7 +422,7 @@ static instproxy_error_t instproxy_create_status_updater(instproxy_client_t clie
* @return INSTPROXY_E_SUCCESS on success or an INSTPROXY_E_* error value if
* an error occured.
*/
static instproxy_error_t instproxy_install_or_upgrade(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, const char *command)
static instproxy_error_t instproxy_install_or_upgrade(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, const char *command, void *user_data)
{
if (!client || !client->parent || !pkg_path) {
return INSTPROXY_E_INVALID_ARG;
Expand All @@ -438,7 +440,7 @@ static instproxy_error_t instproxy_install_or_upgrade(instproxy_client_t client,
return res;
}

return instproxy_create_status_updater(client, status_cb, command);
return instproxy_create_status_updater(client, status_cb, command, user_data);
}

/**
Expand All @@ -464,9 +466,9 @@ static instproxy_error_t instproxy_install_or_upgrade(instproxy_client_t client,
* created successfully; any error occuring during the operation has to be
* handled inside the specified callback function.
*/
instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb)
instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data)
{
return instproxy_install_or_upgrade(client, pkg_path, client_options, status_cb, "Install");
return instproxy_install_or_upgrade(client, pkg_path, client_options, status_cb, "Install", user_data);
}

/**
Expand Down Expand Up @@ -494,9 +496,9 @@ instproxy_error_t instproxy_install(instproxy_client_t client, const char *pkg_p
* created successfully; any error occuring during the operation has to be
* handled inside the specified callback function.
*/
instproxy_error_t instproxy_upgrade(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb)
instproxy_error_t instproxy_upgrade(instproxy_client_t client, const char *pkg_path, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data)
{
return instproxy_install_or_upgrade(client, pkg_path, client_options, status_cb, "Upgrade");
return instproxy_install_or_upgrade(client, pkg_path, client_options, status_cb, "Upgrade", user_data);
}

/**
Expand All @@ -517,7 +519,7 @@ instproxy_error_t instproxy_upgrade(instproxy_client_t client, const char *pkg_p
* created successfully; any error occuring during the operation has to be
* handled inside the specified callback function.
*/
instproxy_error_t instproxy_uninstall(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb)
instproxy_error_t instproxy_uninstall(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data)
{
if (!client || !client->parent || !appid) {
return INSTPROXY_E_INVALID_ARG;
Expand All @@ -543,7 +545,7 @@ instproxy_error_t instproxy_uninstall(instproxy_client_t client, const char *app
return res;
}

return instproxy_create_status_updater(client, status_cb, "Uninstall");
return instproxy_create_status_updater(client, status_cb, "Uninstall", user_data);
}

/**
Expand Down Expand Up @@ -609,7 +611,7 @@ instproxy_error_t instproxy_lookup_archives(instproxy_client_t client, plist_t c
* created successfully; any error occuring during the operation has to be
* handled inside the specified callback function.
*/
instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb)
instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data)
{
if (!client || !client->parent || !appid)
return INSTPROXY_E_INVALID_ARG;
Expand All @@ -626,7 +628,7 @@ instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid
debug_info("could not send plist, error %d", res);
return res;
}
return instproxy_create_status_updater(client, status_cb, "Archive");
return instproxy_create_status_updater(client, status_cb, "Archive", user_data);
}

/**
Expand All @@ -649,7 +651,7 @@ instproxy_error_t instproxy_archive(instproxy_client_t client, const char *appid
* created successfully; any error occuring during the operation has to be
* handled inside the specified callback function.
*/
instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb)
instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data)
{
if (!client || !client->parent || !appid)
return INSTPROXY_E_INVALID_ARG;
Expand All @@ -666,7 +668,7 @@ instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid
debug_info("could not send plist, error %d", res);
return res;
}
return instproxy_create_status_updater(client, status_cb, "Restore");
return instproxy_create_status_updater(client, status_cb, "Restore", user_data);
}

/**
Expand All @@ -689,7 +691,7 @@ instproxy_error_t instproxy_restore(instproxy_client_t client, const char *appid
* created successfully; any error occuring during the operation has to be
* handled inside the specified callback function.
*/
instproxy_error_t instproxy_remove_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb)
instproxy_error_t instproxy_remove_archive(instproxy_client_t client, const char *appid, plist_t client_options, instproxy_status_cb_t status_cb, void *user_data)
{
if (!client || !client->parent || !appid)
return INSTPROXY_E_INVALID_ARG;
Expand All @@ -706,7 +708,7 @@ instproxy_error_t instproxy_remove_archive(instproxy_client_t client, const char
debug_info("could not send plist, error %d", res);
return res;
}
return instproxy_create_status_updater(client, status_cb, "RemoveArchive");
return instproxy_create_status_updater(client, status_cb, "RemoveArchive", user_data);
}

/**
Expand Down

0 comments on commit 7759562

Please sign in to comment.