static void infinoted_plugin_manager_add_session(InfinotedPluginManager* manager, InfinotedPluginInstance* instance, const InfBrowserIter* iter, InfSessionProxy* proxy) { gpointer plugin_info; gpointer hash; gpointer session_info; if(infinoted_plugin_manager_check_session_type(instance, proxy)) { plugin_info = instance+1; hash = infinoted_plugin_manager_hash(plugin_info, proxy); g_assert(g_hash_table_lookup(manager->sessions, hash) == NULL); if(instance->plugin->session_info_size > 0) { session_info = g_slice_alloc(instance->plugin->session_info_size); g_hash_table_insert(manager->sessions, hash, session_info); } if(instance->plugin->on_session_added != NULL) { instance->plugin->on_session_added( iter, proxy, plugin_info, session_info ); } } }
static void infinoted_plugin_manager_remove_session(InfinotedPluginManager* manager, InfinotedPluginInstance* instance, const InfBrowserIter* iter, InfSessionProxy* proxy) { InfinotedPluginManagerPrivate* priv; gpointer plugin_info; gpointer hash; gpointer session_info; priv = INFINOTED_PLUGIN_MANAGER_PRIVATE(manager); if(infinoted_plugin_manager_check_session_type(instance, proxy)) { plugin_info = instance+1; hash = infinoted_plugin_manager_hash(plugin_info, proxy); session_info = g_hash_table_lookup(priv->sessions, hash); g_assert( instance->plugin->session_info_size == 0 || session_info != NULL ); if(instance->plugin->on_session_removed != NULL) { instance->plugin->on_session_removed( iter, proxy, plugin_info, session_info ); } if(instance->plugin->session_info_size > 0) { g_hash_table_remove(priv->sessions, hash); g_slice_free1(instance->plugin->session_info_size, session_info); } } }