tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

mainloop_pubsub.h (2057B)


      1 /* Copyright (c) 2001, Matej Pfajfar.
      2 * Copyright (c) 2001-2004, Roger Dingledine.
      3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
      4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
      5 /* See LICENSE for licensing information */
      6 
      7 /**
      8 * @file mainloop_pubsub.h
      9 * @brief Header for mainloop_pubsub.c
     10 **/
     11 
     12 #ifndef TOR_MAINLOOP_PUBSUB_H
     13 #define TOR_MAINLOOP_PUBSUB_H
     14 
     15 struct pubsub_builder_t;
     16 
     17 /**
     18 * Describe when and how messages are delivered on message channel.
     19 *
     20 * Every message channel must be associated with one of these strategies.
     21 **/
     22 typedef enum {
     23   /**
     24    * Never deliver messages automatically.
     25    *
     26    * If a message channel uses this strategy, then no matter now many
     27    * messages are published on it, they are not delivered until something
     28    * manually calls dispatch_flush() for that channel
     29    **/
     30   DELIV_NEVER=0,
     31   /**
     32    * Deliver messages promptly, via the event loop.
     33    *
     34    * If a message channel uses this strategy, then publishing a messages
     35    * that channel activates an event that causes messages to be handled
     36    * later in the mainloop.  The messages will be processed at some point
     37    * very soon, delaying only for pending IO events and the like.
     38    *
     39    * Generally this is the best choice for a delivery strategy, since
     40    * it avoids stack explosion.
     41    **/
     42   DELIV_PROMPT,
     43   /**
     44    * Deliver messages immediately, skipping the event loop.
     45    *
     46    * Every event on this channel is flushed immediately after it is queued,
     47    * using the stack.
     48    *
     49    * This delivery type should be used with caution, since it can cause
     50    * unexpected call chains, resource starvation, and the like.
     51    **/
     52   DELIV_IMMEDIATE,
     53 } deliv_strategy_t;
     54 
     55 int tor_mainloop_connect_pubsub(struct pubsub_builder_t *builder);
     56 void tor_mainloop_connect_pubsub_events(void);
     57 int tor_mainloop_set_delivery_strategy(const char *msg_channel_name,
     58                                        deliv_strategy_t strategy);
     59 void tor_mainloop_disconnect_pubsub(void);
     60 
     61 #endif /* !defined(TOR_MAINLOOP_PUBSUB_H) */