#include "stdinc.h"
#include "tools.h"
#include "channel.h"
#include "channel_mode.h"
#include "client.h"
#include "common.h"
#include "hash.h"
#include "hostmask.h"
#include "irc_string.h"
#include "sprintf_irc.h"
#include "ircd.h"
#include "list.h"
#include "numeric.h"
#include "s_serv.h"
#include "s_user.h"
#include "send.h"
#include "s_conf.h"
#include "event.h"
#include "memory.h"
#include "balloc.h"
Vai al codice sorgente di questo file.
Funzioni | |
void | init_channels (void) |
Initializes the channel blockheap, adds known channel CAPAB. | |
void | add_user_to_channel (struct Channel *chptr, struct Client *who, unsigned int flags, int flood_ctrl) |
adds a user to a channel by adding another link to the channels member chain. | |
void | remove_user_from_channel (struct Membership *member) |
deletes an user from a channel by removing a link in the channels member chain. | |
static void | send_members (struct Client *client_p, struct Channel *chptr, char *lmodebuf, char *lparabuf) |
static void | send_mode_list (struct Client *client_p, struct Channel *chptr, dlink_list *top, char flag) |
sends +b/+e/+I | |
void | send_channel_modes (struct Client *client_p, struct Channel *chptr) |
send "client_p" a full list of the modes for channel chptr | |
int | check_channel_name (const char *name, int local) |
check channel name for invalid characters | |
void | remove_ban (struct Ban *bptr, dlink_list *list) |
void | free_channel_list (dlink_list *list) |
struct Channel * | make_channel (const char *chname) |
Get Channel block for chname (and allocate a new channel block, if it didn't exist before). | |
void | destroy_channel (struct Channel *chptr) |
walk through this channel, and destroy it. | |
static const char * | channel_pub_or_secret (struct Channel *chptr) |
void | channel_member_names (struct Client *source_p, struct Channel *chptr, int show_eon) |
lists all names on given channel | |
void | add_invite (struct Channel *chptr, struct Client *who) |
adds client to invite list | |
void | del_invite (struct Channel *chptr, struct Client *who) |
Delete Invite block from channel invite list and client invite list. | |
const char * | get_member_status (const struct Membership *ms, int combine) |
static int | find_bmask (const struct Client *who, const dlink_list *const list) |
int | is_banned (struct Channel *chptr, struct Client *who) |
int | can_join (struct Client *source_p, struct Channel *chptr, const char *key) |
int | has_member_flags (struct Membership *ms, unsigned int flags) |
struct Membership * | find_channel_link (struct Client *client_p, struct Channel *chptr) |
int | can_send (struct Channel *chptr, struct Client *source_p, struct Membership *ms) |
void | check_spambot_warning (struct Client *source_p, const char *name) |
Updates the client's oper_warn_count_down, warns the IRC operators if necessary, and updates join_leave_countdown as needed. | |
void | check_splitmode (void *unused) |
compares usercount and servercount against their split values and adjusts splitmode accordingly | |
static void | allocate_topic (struct Channel *chptr) |
Allocates a new topic. | |
void | free_topic (struct Channel *chptr) |
void | set_channel_topic (struct Channel *chptr, const char *topic, const char *topic_info, time_t topicts) |
Sets the channel topic for chptr. | |
Variabili | |
struct config_channel_entry | ConfigChannel |
dlink_list | global_channel_list = { NULL, NULL, 0 } |
dlink_list | lazylink_channels = { NULL, NULL, 0 } |
BlockHeap * | ban_heap |
static BlockHeap * | topic_heap = NULL |
static BlockHeap * | member_heap = NULL |
static BlockHeap * | channel_heap = NULL |
static char | buf [IRCD_BUFSIZE] |
static char | modebuf [MODEBUFLEN] |
static char | parabuf [MODEBUFLEN] |
Definizione nel file channel.c.
adds client to invite list
chptr | pointer to channel block | |
who | pointer to client to add invite to |
Definizione alla linea 519 del file channel.c.
Riferimenti ConfigChannel, _dlink_node::data, del_invite(), dlink_list_length, dlinkAdd(), LocalUser::invited, Channel::invites, Client::localClient, make_dlink_node(), config_channel_entry::max_chans_per_user, e _dlink_list::tail.
Referenziato da m_invite().
void add_user_to_channel | ( | struct Channel * | chptr, | |
struct Client * | who, | |||
unsigned int | flags, | |||
int | flood_ctrl | |||
) |
adds a user to a channel by adding another link to the channels member chain.
chptr | pointer to channel to add client to | |
who | pointer to client (who) to add | |
flags | flags for chanops etc | |
flood_ctrl | whether to count this join in flood calculations |
Definizione alla linea 85 del file channel.c.
Riferimenti BlockHeapAlloc(), Client::channel, Membership::channode, Channel::chname, Membership::chptr, ClearJoinFloodNoticed, Membership::client_p, CurrentTime, dlinkAdd(), Membership::flags, get_client_name(), GlobalSetOptions, HIDE_IP, IsSetJoinFloodNoticed, SetOptions::joinfloodcount, SetOptions::joinfloodtime, L_ALL, Channel::last_join_time, Channel::members, Client::name, Channel::number_joined, sendto_realops_flags(), Client::servptr, SetJoinFloodNoticed, UMODE_BOTS, e Membership::usernode.
Referenziato da kick_list(), m_join(), mo_forcejoin(), mo_ojoin(), ms_join(), ms_lljoin(), ms_sjoin(), e operspy_names().
static void allocate_topic | ( | struct Channel * | chptr | ) | [static] |
Allocates a new topic.
chptr | Channel to allocate a new topic for |
Definizione alla linea 859 del file channel.c.
Riferimenti BlockHeapAlloc(), Channel::topic, Channel::topic_info, e TOPICLEN.
Referenziato da set_channel_topic().
source_p | pointer to client attempting to join | |
chptr | pointer to channel | |
key | key sent by client attempting to join if present |
Definizione alla linea 665 del file channel.c.
Riferimenti ConfigChannel, dlink_list_length, dlinkFind(), ERR_BADCHANNELKEY, ERR_BANNEDFROMCHAN, ERR_CHANNELISFULL, ERR_INVITEONLYCHAN, find_bmask(), Channel::invexlist, LocalUser::invited, irccmp(), is_banned(), Mode::key, Mode::limit, Client::localClient, Channel::members, Mode::mode, Channel::mode, MODE_INVITEONLY, e config_channel_entry::use_invex.
Referenziato da m_join(), e ms_lljoin().
int can_send | ( | struct Channel * | chptr, | |
struct Client * | source_p, | |||
struct Membership * | ms | |||
) |
chptr | pointer to Channel struct | |
source_p | pointer to Client struct | |
ms | pointer to Membership struct (can be NULL) |
Definizione alla linea 717 del file channel.c.
Riferimenti CAN_SEND_NO, CAN_SEND_NONOP, CAN_SEND_OPV, CHFL_BAN_CHECKED, CHFL_BAN_SILENCED, CHFL_CHANOP, CHFL_HALFOP, CHFL_VOICE, Channel::chname, ConfigChannel, ConfigFileEntry, find_channel_link(), Membership::flags, hash_find_resv(), is_banned(), IsExemptResv, IsOper, IsServer, Mode::mode, Channel::mode, MODE_MODERATED, MODE_NOPRIVMSGS, MyClient, config_file_entry::oper_pass_resv, config_channel_entry::quiet_on_ban, e config_channel_entry::restrict_channels.
Referenziato da msg_channel(), e part_one_client().
lists all names on given channel
source_p | pointer to client struct requesting names | |
chptr | pointer to channel block | |
show_eon | show ENDOFNAMES numeric or not (don't want it with /names with no params) |
Definizione alla linea 446 del file channel.c.
Riferimenti LocalUser::cap_active, CAP_MULTI_PREFIX, channel_pub_or_secret(), CHFL_CHANOP, CHFL_HALFOP, CHFL_VOICE, Channel::chname, Membership::client_p, _dlink_node::data, DLINK_FOREACH, Membership::flags, form_str(), get_member_status(), _dlink_list::head, IRCD_BUFSIZE, ircsprintf(), IsInvisible, IsMember, Client::localClient, me, Channel::members, Client::name, PubChannel, RPL_ENDOFNAMES, RPL_NAMREPLY, e sendto_one().
Referenziato da kick_list(), m_join(), m_names(), mo_forcejoin(), mo_ojoin(), ms_lljoin(), names_all_visible_channels(), e operspy_names().
static const char* channel_pub_or_secret | ( | struct Channel * | chptr | ) | [static] |
chptr | pointer to channel |
Definizione alla linea 430 del file channel.c.
Riferimenti PrivateChannel, e SecretChannel.
Referenziato da channel_member_names().
int check_channel_name | ( | const char * | name, | |
int | local | |||
) |
check channel name for invalid characters
name | pointer to channel name string | |
local | indicates whether it's a local or remote creation |
Definizione alla linea 315 del file channel.c.
Riferimenti CHANNELLEN, ConfigChannel, config_channel_entry::disable_fake_channels, IsChanChar, IsChanPrefix, IsVisibleChanChar, e LOCAL_CHANNELLEN.
Referenziato da m_join(), m_mode(), mo_forcejoin(), ms_cburst(), ms_join(), ms_lljoin(), e ms_sjoin().
void check_spambot_warning | ( | struct Client * | source_p, | |
const char * | name | |||
) |
Updates the client's oper_warn_count_down, warns the IRC operators if necessary, and updates join_leave_countdown as needed.
source_p | pointer to struct Client to check | |
name | channel name or NULL if this is a part. |
Definizione alla linea 766 del file channel.c.
Riferimenti CurrentTime, GlobalSetOptions, Client::host, LocalUser::join_leave_count, JOIN_LEAVE_COUNT_EXPIRE_TIME, L_ALL, LocalUser::last_join_time, LocalUser::last_leave_time, Client::localClient, Client::name, OPER_SPAM_COUNTDOWN, LocalUser::oper_warn_count_down, sendto_realops_flags(), SetOptions::spam_num, SetOptions::spam_time, UMODE_BOTS, e Client::username.
Referenziato da do_join_0(), m_join(), e part_one_client().
void check_splitmode | ( | void * | unused | ) |
compares usercount and servercount against their split values and adjusts splitmode accordingly
unused | Unused address pointer |
Definizione alla linea 829 del file channel.c.
Riferimenti check_splitmode(), ConfigChannel, Count, dlink_list_length, eventAddIsh(), eventDelete(), global_serv_list, L_ALL, config_channel_entry::no_create_on_split, config_channel_entry::no_join_on_split, sendto_realops_flags(), split_servers, split_users, splitchecking, splitmode, Counter::total, e UMODE_ALL.
Referenziato da check_splitmode(), main(), quote_splitmode(), quote_splitnum(), quote_splitusers(), e update_client_exit_stats().
Delete Invite block from channel invite list and client invite list.
chptr | pointer to Channel struct | |
who | pointer to client to remove invites from |
Definizione alla linea 543 del file channel.c.
Riferimenti dlinkFindDelete(), free_dlink_node(), LocalUser::invited, Channel::invites, e Client::localClient.
Referenziato da add_invite(), destroy_channel(), exit_one_client(), e m_join().
void destroy_channel | ( | struct Channel * | chptr | ) |
walk through this channel, and destroy it.
chptr | channel pointer |
Definizione alla linea 400 del file channel.c.
Riferimenti Channel::banlist, BlockHeapFree(), _dlink_node::data, del_invite(), DLINK_FOREACH_SAFE, dlinkDelete(), dlinkFindDelete(), Channel::exceptlist, free_channel_list(), free_dlink_node(), free_topic(), hash_del_channel(), _dlink_list::head, server_info::hub, Channel::invexlist, Channel::invites, Channel::node, e ServerInfo.
Referenziato da ms_sjoin(), e remove_user_from_channel().
static int find_bmask | ( | const struct Client * | who, | |
const dlink_list *const | list | |||
) | [static] |
who | pointer to Client to check | |
list | pointer to ban list to search |
Definizione alla linea 605 del file channel.c.
Riferimenti Ban::addr, LocalUser::aftype, Ban::bits, _dlink_node::data, DLINK_FOREACH, _dlink_list::head, HM_HOST, HM_IPV4, HM_IPV6, Client::host, Ban::host, LocalUser::ip, Client::localClient, match(), match_ipv4(), match_ipv6(), Client::name, Ban::name, Client::sockhost, Ban::type, Client::username, e Ban::username.
Referenziato da can_join(), e is_banned().
struct Membership* find_channel_link | ( | struct Client * | client_p, | |
struct Channel * | chptr | |||
) | [read] |
Definizione alla linea 694 del file channel.c.
Riferimenti Client::channel, _dlink_node::data, DLINK_FOREACH, _dlink_list::head, e IsClient.
Referenziato da build_target_list(), can_send(), chm_op(), chm_voice(), m_invite(), m_kick(), m_mode(), m_topic(), mo_forcepart(), mo_opme(), ms_tmode(), operspy_names(), e part_one_client().
void free_channel_list | ( | dlink_list * | list | ) |
Definizione alla linea 360 del file channel.c.
Riferimenti _dlink_node::data, DLINK_FOREACH_SAFE, _dlink_list::head, remove_ban(), e _dlink_list::tail.
Referenziato da destroy_channel(), e remove_our_modes().
void free_topic | ( | struct Channel * | chptr | ) |
Definizione alla linea 879 del file channel.c.
Riferimenti BlockHeapFree(), Channel::topic, e Channel::topic_info.
Referenziato da destroy_channel(), mo_clearchan(), e set_channel_topic().
const char* get_member_status | ( | const struct Membership * | ms, | |
int | combine | |||
) |
Definizione alla linea 566 del file channel.c.
Riferimenti buffer, CHFL_CHANOP, CHFL_HALFOP, CHFL_VOICE, e Membership::flags.
Referenziato da channel_member_names(), do_who_on_channel(), m_who(), operspy_who(), operspy_whois(), who_global(), e whois_person().
int has_member_flags | ( | struct Membership * | ms, | |
unsigned int | flags | |||
) |
Definizione alla linea 686 del file channel.c.
Riferimenti Membership::flags.
Referenziato da build_target_list(), chm_op(), chm_voice(), get_channel_access(), m_invite(), m_kick(), m_mode(), m_topic(), e ms_tmode().
void init_channels | ( | void | ) |
Initializes the channel blockheap, adds known channel CAPAB.
Definizione alla linea 65 del file channel.c.
Riferimenti add_capability(), BAN_HEAP_SIZE, BlockHeapCreate(), CAP_CHW, CAP_EX, CAP_IE, CHANNEL_HEAP_SIZE, TOPIC_HEAP_SIZE, TOPICLEN, e USERHOST_REPLYLEN.
Referenziato da main().
chptr | pointer to channel block | |
who | pointer to client to check access fo |
Definizione alla linea 648 del file channel.c.
Riferimenti Channel::banlist, ConfigChannel, Channel::exceptlist, find_bmask(), e config_channel_entry::use_except.
Referenziato da can_join(), can_send(), e parse_knock_local().
struct Channel* make_channel | ( | const char * | chname | ) | [read] |
Get Channel block for chname (and allocate a new channel block, if it didn't exist before).
chname | channel name |
Definizione alla linea 376 del file channel.c.
Riferimenti BlockHeapAlloc(), Channel::channelts, Channel::chname, CurrentTime, dlinkAdd(), EmptyString, hash_add_channel(), Channel::last_join_time, Channel::node, e strlcpy().
Referenziato da m_join(), mo_forcejoin(), ms_cburst(), ms_join(), ms_lljoin(), e ms_sjoin().
void remove_ban | ( | struct Ban * | bptr, | |
dlink_list * | list | |||
) |
Definizione alla linea 341 del file channel.c.
Riferimenti BlockHeapFree(), dlinkDelete(), Ban::host, MyFree(), Ban::name, Ban::node, Ban::username, e Ban::who.
Referenziato da del_id(), free_channel_list(), e remove_ban_list().
void remove_user_from_channel | ( | struct Membership * | member | ) |
deletes an user from a channel by removing a link in the channels member chain.
member | pointer to Membership struct |
Definizione alla linea 135 del file channel.c.
Riferimenti BlockHeapFree(), Client::channel, Membership::channode, Membership::chptr, Membership::client_p, destroy_channel(), dlink_list_length, dlinkDelete(), Channel::members, e Membership::usernode.
Referenziato da do_join_0(), exit_one_client(), kick_list(), m_kick(), mo_forcepart(), operspy_names(), e part_one_client().
send "client_p" a full list of the modes for channel chptr
client_p | pointer to client client_p | |
chptr | pointer to channel pointer |
Definizione alla linea 292 del file channel.c.
Riferimenti Channel::banlist, CAP_EX, CAP_IE, channel_modes(), Channel::chname, Channel::exceptlist, Channel::invexlist, IsCapable, modebuf, parabuf, send_members(), e send_mode_list().
Referenziato da burst_all(), e burst_channel().
static void send_members | ( | struct Client * | client_p, | |
struct Channel * | chptr, | |||
char * | lmodebuf, | |||
char * | lparabuf | |||
) | [static] |
Definizione alla linea 156 del file channel.c.
Riferimenti buf, CAP_HOPS, CAP_TS6, Channel::channelts, CHFL_CHANOP, CHFL_HALFOP, CHFL_VOICE, Channel::chname, Membership::client_p, _dlink_node::data, DLINK_FOREACH, Membership::flags, _dlink_list::head, ID, ID_or_name, ircsprintf(), IsCapable, me, Channel::members, Client::name, e sendto_one().
Referenziato da send_channel_modes().
static void send_mode_list | ( | struct Client * | client_p, | |
struct Channel * | chptr, | |||
dlink_list * | top, | |||
char | flag | |||
) | [static] |
sends +b/+e/+I
client_p | client pointer to server | |
chptr | pointer to channel | |
top | pointer to top of mode link list to send | |
flag | char flag flagging type of mode. Currently this can be 'b', e' or 'I' |
Definizione alla linea 223 del file channel.c.
Riferimenti buf, CAP_TS6, Channel::channelts, Channel::chname, _dlink_node::data, DLINK_FOREACH, _dlink_list::head, Ban::host, Client::id, IRCD_BUFSIZE, ircsprintf(), IsCapable, Ban::len, _dlink_list::length, MAXMODEPARAMS, me, MODEBUFLEN, Ban::name, Client::name, sendto_one(), e Ban::username.
Referenziato da send_channel_modes().
void set_channel_topic | ( | struct Channel * | chptr, | |
const char * | topic, | |||
const char * | topic_info, | |||
time_t | topicts | |||
) |
Sets the channel topic for chptr.
chptr | Pointer to struct Channel | |
topic | The topic string | |
topic_info | n!u@h formatted string of the topic setter | |
topicts | timestamp on the topic |
Definizione alla linea 902 del file channel.c.
Riferimenti allocate_topic(), EmptyString, free_topic(), strlcpy(), Channel::topic, Channel::topic_info, Channel::topic_time, TOPICLEN, e USERHOST_REPLYLEN.
Referenziato da m_topic(), ms_tburst(), ms_topic(), e set_topic().
BlockHeap* channel_heap = NULL [static] |
Definizione alla linea 48 del file channel.c.
Referenziato da add_id(), add_invite(), can_join(), can_send(), check_channel_name(), check_splitmode(), chm_except(), chm_invex(), confopts(), initialize_global_set_options(), is_banned(), m_join(), m_knock(), mo_forcejoin(), ms_lljoin(), parse_knock_local(), read_conf_files(), send_knock(), send_tb(), e set_default_conf().
dlink_list global_channel_list = { NULL, NULL, 0 } |
Definizione alla linea 49 del file channel.c.
Referenziato da burst_all(), cjoin_all(), count_memory(), names_all_visible_channels(), operspy_list(), e show_lusers().
dlink_list lazylink_channels = { NULL, NULL, 0 } |
Definizione alla linea 50 del file channel.c.
Referenziato da add_lazylinkchannel(), e remove_lazylink_flags().
BlockHeap* member_heap = NULL [static] |
BlockHeap* topic_heap = NULL [static] |