Riferimenti per il file channel.c

Responsible for managing channels, members, bans and topics. Continua...

#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 Channelmake_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 Membershipfind_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 }
BlockHeapban_heap
static BlockHeaptopic_heap = NULL
static BlockHeapmember_heap = NULL
static BlockHeapchannel_heap = NULL
static char buf [IRCD_BUFSIZE]
static char modebuf [MODEBUFLEN]
static char parabuf [MODEBUFLEN]


Descrizione dettagliata

Responsible for managing channels, members, bans and topics.

Versione:
Id
channel.c 675 2006-06-13 16:51:10Z adx

Definizione nel file channel.c.


Documentazione delle funzioni

void add_invite ( struct Channel chptr,
struct Client who 
)

adds client to invite list

Parametri:
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.

Parametri:
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.

Parametri:
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().

int can_join ( struct Client source_p,
struct Channel chptr,
const char *  key 
)

Parametri:
source_p pointer to client attempting to join
chptr pointer to channel
key key sent by client attempting to join if present
Restituisce:
ERR_BANNEDFROMCHAN, ERR_INVITEONLYCHAN, ERR_CHANNELISFULL or 0 if allowed to join.

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 
)

Parametri:
chptr pointer to Channel struct
source_p pointer to Client struct
ms pointer to Membership struct (can be NULL)
Restituisce:
CAN_SEND_OPV if op or voiced on channel
CAN_SEND_NONOP if can send to channel but is not an op
CAN_SEND_NO if they cannot send to channel

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().

void channel_member_names ( struct Client source_p,
struct Channel chptr,
int  show_eon 
)

lists all names on given channel

Parametri:
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]

Parametri:
chptr pointer to channel
Restituisce:
string pointer "=" if public, "@" if secret else "*"

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

Parametri:
name pointer to channel name string
local indicates whether it's a local or remote creation
Restituisce:
0 if invalid, 1 otherwise

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.

Parametri:
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  ) 

void del_invite ( struct Channel chptr,
struct Client who 
)

Delete Invite block from channel invite list and client invite list.

Parametri:
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  ) 

static int find_bmask ( const struct Client who,
const dlink_list *const   list 
) [static]

Parametri:
who pointer to Client to check
list pointer to ban list to search
Restituisce:
1 if ban found for given n!u@h mask, 0 otherwise

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]

void free_channel_list ( dlink_list list  ) 

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 
)

int has_member_flags ( struct Membership ms,
unsigned int  flags 
)

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().

int is_banned ( struct Channel chptr,
struct Client who 
)

Parametri:
chptr pointer to channel block
who pointer to client to check access fo
Restituisce:
0 if not banned, 1 otherwise

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).

Parametri:
chname channel name
Restituisce:
channel block

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 
)

void remove_user_from_channel ( struct Membership member  ) 

deletes an user from a channel by removing a link in the channels member chain.

Parametri:
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().

void send_channel_modes ( struct Client client_p,
struct Channel chptr 
)

send "client_p" a full list of the modes for channel chptr

Parametri:
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]

static void send_mode_list ( struct Client client_p,
struct Channel chptr,
dlink_list top,
char  flag 
) [static]

sends +b/+e/+I

Parametri:
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.

Parametri:
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().


Documentazione delle variabili

Definizione alla linea 51 del file channel.c.

Referenziato da add_id().

char buf[IRCD_BUFSIZE] [static]

Definizione alla linea 57 del file channel.c.

BlockHeap* channel_heap = NULL [static]

Definizione alla linea 55 del file channel.c.

dlink_list global_channel_list = { NULL, NULL, 0 }

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]

Definizione alla linea 54 del file channel.c.

char modebuf[MODEBUFLEN] [static]

Definizione alla linea 58 del file channel.c.

char parabuf[MODEBUFLEN] [static]

Definizione alla linea 59 del file channel.c.

BlockHeap* topic_heap = NULL [static]

Da fare:
ban_heap shouldn't be a global var

Definizione alla linea 53 del file channel.c.


Generato il Wed Apr 15 00:19:20 2009 per ircd-hybrid da  doxygen 1.5.6