123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*-
- * Copyright 2016 Vsevolod Stakhov
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef RSPAMD_ASYNC_SESSION_H
- #define RSPAMD_ASYNC_SESSION_H
-
- #include "config.h"
- #include "mem_pool.h"
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- struct rspamd_async_event;
- struct rspamd_async_session;
-
- typedef void (*event_finalizer_t)(gpointer ud);
-
- typedef gboolean (*session_finalizer_t)(gpointer user_data);
-
- /**
- * Make new async session
- * @param pool pool to alloc memory from
- * @param fin a callback called when no events are found in session
- * @param restore a callback is called to restore processing of session
- * @param cleanup a callback called when session is forcefully destroyed
- * @param user_data abstract user data
- * @return
- */
- struct rspamd_async_session *rspamd_session_create(rspamd_mempool_t *pool,
- session_finalizer_t fin, event_finalizer_t restore,
- event_finalizer_t cleanup, gpointer user_data);
-
- /**
- * Insert new event to the session
- * @param session session object
- * @param fin finalizer callback
- * @param user_data abstract user_data
- * @param forced unused
- */
- struct rspamd_async_event *
- rspamd_session_add_event_full(struct rspamd_async_session *session,
- event_finalizer_t fin,
- gpointer user_data,
- const char *subsystem,
- const char *event_source);
-
- #define rspamd_session_add_event(session, fin, user_data, subsystem) \
- rspamd_session_add_event_full(session, fin, user_data, subsystem, G_STRLOC)
-
- /**
- * Remove normal event
- * @param session session object
- * @param fin final callback
- * @param ud user data object
- */
- void rspamd_session_remove_event_full(struct rspamd_async_session *session,
- event_finalizer_t fin,
- gpointer ud,
- const char *event_source);
-
- #define rspamd_session_remove_event(session, fin, user_data) \
- rspamd_session_remove_event_full(session, fin, user_data, G_STRLOC)
-
- /**
- * Must be called at the end of session, it calls fin functions for all non-forced callbacks
- * @return true if the whole session was destroyed and false if there are forced events
- */
- gboolean rspamd_session_destroy(struct rspamd_async_session *session);
-
- /**
- * Try to remove all events pending
- */
- void rspamd_session_cleanup(struct rspamd_async_session *session, bool forced_cleanup);
-
- /**
- * Returns mempool associated with async session
- * @param session
- * @return
- */
- rspamd_mempool_t *rspamd_session_mempool(struct rspamd_async_session *session);
-
- /**
- * Check session for events pending and call fin callback if no events are pending
- * @param session session object
- * @return TRUE if session has pending events
- */
- gboolean rspamd_session_pending(struct rspamd_async_session *session);
-
- /**
- * Returns number of events pending
- * @param session
- * @return
- */
- unsigned int rspamd_session_events_pending(struct rspamd_async_session *session);
-
-
- /**
- * Returns TRUE if an async session is currently destroying
- * @param s
- * @return
- */
- gboolean rspamd_session_blocked(struct rspamd_async_session *s);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /*RSPAMD_ASYNC_SESSION_H*/
|