1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
/*******************************************************************************
* shroudBNC - an object-oriented framework for IRC *
* Copyright (C) 2005-2014 Gunnar Beutner *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
*******************************************************************************/
#ifndef CHANNEL_H
#define CHANNEL_H
/**
* chanmode_s
*
* A channel mode and its parameter.
*/
typedef struct chanmode_s {
char Mode; /**< the channel mode */
char *Parameter; /**< the associated parameter, or NULL if there is none */
} chanmode_t;
typedef struct backlog_s {
time_t Time; /**< the time this message was received */
char *Source; /**< message source, i.e. nick!ident@host */
char *Message; /**< the message */
} backlog_t;
/* Forward declaration of some required classes */
class CNick;
class CBanlist;
class CIRCConnection;
#ifndef SWIG
int ChannelTSCompare(const void *p1, const void *p2);
int ChannelNameCompare(const void *p1, const void *p2);
#endif /* SWIG */
/**
* CChannel
*
* Represents an IRC channel.
*/
class SBNCAPI CChannel : public CObject<CChannel, CIRCConnection> {
private:
char *m_Name; /**< the name of the channel */
time_t m_Creation; /**< the time when the channel was created */
time_t m_Timestamp; /**< when the user joined the channel */
CVector<chanmode_t> m_Modes; /**< the channel modes */
bool m_ModesValid; /**< indicates whether the channelmodes are known */
char *m_TempModes; /**< string-representation of the channel modes, used
by GetChannelModes() */
char *m_Topic; /**< the channel's topic */
char *m_TopicNick; /**< the nick of the user who set the topic */
time_t m_TopicStamp; /**< the time when the topic was set */
int m_HasTopic; /**< indicates whether there is actually a topic */
CHashtable<CNick *, false> m_Nicks; /**< a list of nicks who are on this channel */
bool m_HasNames; /**< indicates whether m_Nicks is valid */
bool m_KeepNicklist; /**< whether to keep the nicklist in memory */
CBanlist *m_Banlist; /**< a list of bans for this channel */
bool m_HasBans; /**< indicates whether the banlist is known */
CList<backlog_t> m_Backlog; /** the backlog for this channel */
int m_BacklogCount; /** the number of backlog lines we've stored for this channel */
chanmode_t *AllocSlot(void);
chanmode_t *FindSlot(char Mode);
public:
#ifndef SWIG
CChannel(const char *Name, CIRCConnection *Owner);
virtual ~CChannel(void);
#endif /* SWIG */
const char *GetName(void) const;
RESULT<const char *> GetChannelModes(void);
void ParseModeChange(const char *source, const char *modes, int pargc, const char **pargv);
time_t GetCreationTime(void) const;
void SetCreationTime(time_t T);
const char *GetTopic(void) const;
void SetTopic(const char *Topic);
const char *GetTopicNick(void) const;
void SetTopicNick(const char *Nick);
time_t GetTopicStamp(void) const;
void SetTopicStamp(time_t TS);
int HasTopic(void) const;
void SetNoTopic(void);
void AddUser(const char *Nick, const char *ModeChar);
void RemoveUser(const char *Nick);
void RenameUser(const char *Nick, const char *NewNick);
bool HasNames(void) const;
void SetHasNames(void);
const CHashtable<CNick *, false> *GetNames(void) const;
void ClearModes(void);
bool AreModesValid(void) const;
void SetModesValid(bool Valid);
CBanlist *GetBanlist(void);
void SetHasBans(void);
bool HasBans(void) const;
bool SendWhoReply(CClientConnection *Client, bool Simulate) const;
time_t GetJoinTimestamp(void) const;
void AddBacklogLine(const char *Source, const char *Message);
void PlayBacklog(CClientConnection *Client);
void EraseBacklog(void);
};
#endif /* CHANNEL_H */
|