From: rl1987 Date: Sun, 23 Nov 2014 18:52:24 +0000 (+0200) Subject: Using macros and inline function for quick lookup of channel state. X-Git-Tag: tor-0.2.6.2-alpha~46^2~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b884ae6d98d0fd684bc93aa48a0da656ea1849b7;p=thirdparty%2Ftor.git Using macros and inline function for quick lookup of channel state. --- diff --git a/src/or/channel.h b/src/or/channel.h index 4cd8f4391e..5a2431b30a 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -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 */