bool hfp_gw_register(struct hfp_gw *hfp, hfp_result_func_t callback, const char *prefix, void *user_data, hfp_destroy_func_t destroy) { struct cmd_handler *handler; handler = new0(struct cmd_handler, 1); if (!handler) return false; handler->callback = callback; handler->user_data = user_data; handler->prefix = strdup(prefix); if (!handler->prefix) { free(handler); return false; } if (queue_find(hfp->cmd_handlers, match_handler_prefix, handler->prefix)) { destroy_cmd_handler(handler); return false; } handler->destroy = destroy; return queue_push_tail(hfp->cmd_handlers, handler); }
void purple_perl_cmd_clear_for_plugin(PurplePlugin *plugin) { PurplePerlCmdHandler *handler; GSList *l, *l_next; for (l = cmd_handlers; l != NULL; l = l_next) { handler = l->data; l_next = l->next; if (handler->plugin == plugin) destroy_cmd_handler(handler); } }
void purple_perl_cmd_unregister(PurpleCmdId id) { PurplePerlCmdHandler *handler; handler = find_cmd_handler(id); if (handler == NULL) { croak("Invalid command id in removing a perl command handler.\n"); return; } destroy_cmd_handler(handler); }
bool hfp_gw_unregister(struct hfp_gw *hfp, const char *prefix) { struct cmd_handler *handler; char *lookup_prefix; lookup_prefix = strdup(prefix); if (!lookup_prefix) return false; handler = queue_remove_if(hfp->cmd_handlers, match_handler_prefix, lookup_prefix); free(lookup_prefix); if (!handler) return false; destroy_cmd_handler(handler); return true; }