]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Using macros and inline function for quick lookup of channel state.
authorrl1987 <rl1987@sdf.lonestar.org>
Sun, 23 Nov 2014 18:52:24 +0000 (20:52 +0200)
committerNick Mathewson <nickm@torproject.org>
Sun, 21 Dec 2014 19:48:38 +0000 (14:48 -0500)
src/or/channel.h

index 4cd8f4391e4bb27a49d9773753916114044ce217..5a2431b30adca5f904c548283ceb543a85d2c795 100644 (file)
@@ -430,6 +430,39 @@ channel_t * channel_find_by_remote_digest(const char *identity_digest);
  */
 channel_t * channel_next_with_digest(channel_t *chan);
 
+/*
+ * Helper macros to lookup state of given channel.
+ */
+
+#define CHANNEL_IS_CLOSED(chan) (channel_is_in_state((chan), \
+                                 CHANNEL_STATE_CLOSED))
+#define CHANNEL_IS_OPENING(chan) (channel_is_in_state((chan), \
+                                  CHANNEL_STATE_OPENING))
+#define CHANNEL_IS_OPEN(chan) (channel_is_in_state((chan), \
+                               CHANNEL_STATE_OPEN))
+#define CHANNEL_IS_MAINT(chan) (channel_is_in_state((chan), \
+                                CHANNEL_STATE_MAINT))
+#define CHANNEL_IS_CLOSING(chan) (channel_is_in_state((chan), \
+                                  CHANNEL_STATE_CLOSING))
+#define CHANNEL_IS_ERROR(chan) (channel_is_in_state((chan), \
+                                CHANNEL_STATE_ERROR))
+
+#define CHANNEL_FINISHED(chan) (CHANNEL_IS_CLOSED(chan) || \
+                                CHANNEL_IS_ERROR(chan))
+
+#define CHANNEL_CONDEMNED(chan) (CHANNEL_IS_CLOSING(chan) || \
+                                 CHANNEL_FINISHED(chan))
+
+#define CHANNEL_CAN_HANDLE_CELLS(chan) (CHANNEL_IS_OPENING(chan) || \
+                                        CHANNEL_IS_OPEN(chan) || \
+                                        CHANNEL_IS_MAINT(chan))
+
+static INLINE int
+channel_is_in_state(channel_t *chan, channel_state_t state)
+{
+  return chan->state == state;
+}
+
 /*
  * Metadata queries/updates
  */