[go: up one dir, main page]

File: Channel.h

package info (click to toggle)
sbnc 1.3.9-3
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 8,156 kB
  • ctags: 4,719
  • sloc: ansic: 20,379; cpp: 14,175; sh: 12,783; tcl: 6,025; php: 448; makefile: 430; perl: 46; awk: 25
file content (134 lines) | stat: -rw-r--r-- 4,833 bytes parent folder | download
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 */