+/**
+ * Policy flags for a channel.
+ */
+enum GNUNET_PSYC_ChannelFlags
+{
+ /**
+ * Admission must be confirmed by the master.
+ */
+ GNUNET_PSYC_CHANNEL_ADMISSION_CONTROL = 1 << 0,
+
+ /**
+ * Past messages are only available to slaves who were admitted at the time
+ * they were sent to the channel.
+ */
+ GNUNET_PSYC_CHANNEL_RESTRICTED_HISTORY = 1 << 1,
+};
+
+/**
+ * PSYC channel policies.
+ */
+enum GNUNET_PSYC_Policy
+{
+ /**
+ * Anyone can join the channel, without announcing his presence;
+ * all messages are always public and can be distributed freely.
+ * Joins may be announced, but this is not required.
+ */
+ GNUNET_PSYC_CHANNEL_ANONYMOUS = 0,
+
+ /**
+ * The master must approve membership to the channel, messages must only be
+ * distributed to current channel slaves. This includes the channel
+ * state as well as transient messages.
+ */
+ GNUNET_PSYC_CHANNEL_PRIVATE
+ = GNUNET_PSYC_CHANNEL_ADMISSION_CONTROL
+ | GNUNET_PSYC_CHANNEL_RESTRICTED_HISTORY,
+
+#if IDEAS_FOR_FUTURE
+ /**
+ * Anyone can freely join the channel (no approval required);
+ * however, messages must only be distributed to current channel
+ * slaves, so the master must still acknowledge that the slave
+ * joined before transient messages are delivered. As approval is
+ * guaranteed, the presistent channel state can be synchronized freely
+ * immediately, prior to master confirmation.
+ */
+ GNUNET_PSYC_CHANNEL_OPEN
+ = GNUNET_PSYC_CHANNEL_RESTRICTED_HISTORY,
+
+ /**
+ * The master must approve joins to the channel, but past messages can be
+ * freely distributed to slaves.
+ */
+ GNUNET_PSYC_CHANNEL_CLOSED
+ = GNUNET_PSYC_CHANNEL_ADMISSION_CONTROL,
+,
+#endif
+
+};
+
+