本文整理汇总了C++中MyClient函数的典型用法代码示例。如果您正苦于以下问题:C++ MyClient函数的具体用法?C++ MyClient怎么用?C++ MyClient使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MyClient函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: m_okick
/*
** m_okick
** parv[0] = sender prefix
** parv[1] = channel
** parv[2] = client to kick
** parv[3] = kick comment
*/
static void m_okick(struct Client *client_p,
struct Client *source_p,
int parc,
char *parv[])
{
struct Client *who;
struct Channel *chptr;
int chasing = 0;
char *comment;
char *name;
char *p = NULL;
char *user;
static char buf[BUFSIZE];
if (*parv[2] == '\0')
{
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "KICK");
return;
}
if(MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
comment = (EmptyString(parv[3])) ? parv[2] : parv[3];
if (strlen(comment) > (size_t) TOPICLEN)
comment[TOPICLEN] = '\0';
*buf = '\0';
if( (p = strchr(parv[1],',')) )
*p = '\0';
name = parv[1];
chptr = hash_find_channel(name);
if (!chptr)
{
sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
me.name, parv[0], name);
return;
}
if( (p = strchr(parv[2],',')) )
*p = '\0';
user = parv[2]; /* strtoken(&p2, parv[2], ","); */
if (!(who = find_chasing(source_p, user, &chasing)))
{
return;
}
if (IsMember(who, chptr))
{
sendto_channel_local(ALL_MEMBERS, chptr, ":%s KICK %s %s :%s",
me.name, chptr->chname, who->name, comment);
sendto_server(&me, chptr, NOCAPS, NOCAPS,
":%s KICK %s %s :%s",
me.name, chptr->chname,
who->name, comment);
remove_user_from_channel(chptr, who);
}
}
开发者ID:Cloudxtreme,项目名称:ircd-ratbox,代码行数:71,代码来源:m_okick.c
示例2: ms_lljoin
/*
* m_lljoin
* parv[0] = sender prefix
* parv[1] = channel
* parv[2] = nick ("!nick" == cjoin)
* parv[3] = key (optional)
*
* If a lljoin is received, from our uplink, join
* the requested client to the given channel, or ignore it
* if there is an error.
*
* Ok, the way this works. Leaf client tries to join a channel,
* it doesn't exist so the join does a cburst request on behalf of the
* client, and aborts that join. The cburst sjoin's the channel if it
* exists on the hub, and sends back an LLJOIN to the leaf. Thats where
* this is now..
*
*/
static void
ms_lljoin(struct Client *client_p, struct Client *source_p,
int parc, char *parv[])
{
char *chname = NULL;
char *nick = NULL;
char *key = NULL;
int flags;
int i;
struct Client *target_p;
struct Channel *chptr;
if (uplink && !IsCapable(uplink,CAP_LL))
{
sendto_realops_flags(UMODE_ALL, L_ALL,
"*** LLJOIN requested from non LL server %s",
client_p->name);
return;
}
chname = parv[1];
if(chname == NULL)
return;
nick = parv[2];
if(nick == NULL)
return;
if (parc >3)
key = parv[3];
flags = 0;
target_p = find_person(client_p, nick);
if (!target_p)
return;
if (!MyClient(target_p))
return;
if (!check_channel_name(chname, 0))
{
sendto_gnotice_flags(UMODE_DEBUG, L_ALL, me.name, &me, NULL,
"*** Too long or invalid channel name from %s: %s",
target_p->name, chname);
return;
}
chptr = make_channel(chname);
flags = CHFL_CHANOP;
if(!chptr)
return;
if (dlink_list_length(&chptr->members) == 0)
flags = CHFL_CHANOP;
else
flags = 0;
/* XXX in m_join.c :( */
/* check_spambot_warning(target_p, chname); */
/* They _could_ join a channel twice due to lag */
if(chptr)
{
if (IsMember(target_p, chptr)) /* already a member, ignore this */
return;
}
else
{
sendto_one(target_p, form_str(ERR_UNAVAILRESOURCE),
me.name, nick, chptr->chname);
return;
}
if ((i = can_join(target_p, chptr, key)))
{
sendto_one(target_p, form_str(i),
me.name, nick, chptr->chname);
return;
}
//.........这里部分代码省略.........
开发者ID:Adam-,项目名称:oftc-hybrid,代码行数:101,代码来源:m_lljoin.c
示例3: parse_resv
/* parse_resv()
*
* inputs - source_p, NULL supported
* - thing to resv
* - time_t if tkline
* - reason
* outputs - none
* side effects - parse resv, create if valid
*/
static void
parse_resv(struct Client *source_p, char *name, int tkline_time, char *reason)
{
if (IsChanPrefix(*name))
{
struct MaskItem *conf = NULL;
if ((conf = create_resv(name, reason, NULL)) == NULL)
{
if (IsClient(source_p))
sendto_one_notice(source_p, &me, ":A RESV has already been placed on channel: %s", name);
return;
}
conf->setat = CurrentTime;
SetConfDatabase(conf);
if (tkline_time)
{
if (IsClient(source_p))
sendto_one_notice(source_p, &me, ":A %d minute %s RESV has been placed on channel: %s",
tkline_time/60, (MyClient(source_p) ? "local" : "remote"), name);
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE,
"%s has placed a %d minute %s RESV on channel: %s [%s]",
get_oper_name(source_p),
tkline_time/60,
(MyClient(source_p) ? "local" : "remote"),
conf->name, conf->reason);
ilog(LOG_TYPE_RESV, "%s added temporary %d min. RESV for [%s] [%s]",
get_oper_name(source_p), (int)tkline_time/60,
conf->name, conf->reason);
conf->until = CurrentTime + tkline_time;
}
else
{
if (IsClient(source_p))
sendto_one_notice(source_p, &me, ":A %s RESV has been placed on channel %s",
(MyClient(source_p) ? "local" : "remote"), name);
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE,
"%s has placed a %s RESV on channel %s : [%s]",
get_oper_name(source_p),
(MyClient(source_p) ? "local" : "remote"),
conf->name, conf->reason);
ilog(LOG_TYPE_RESV, "%s added RESV for [%s] [%s]",
get_oper_name(source_p), conf->name, conf->reason);
}
}
else
{
struct MaskItem *conf = NULL;
if (!valid_wild_card_simple(name))
{
if (IsClient(source_p))
sendto_one_notice(source_p, &me, ":Please include at least %u non-wildcard characters with the resv",
ConfigGeneral.min_nonwildcard_simple);
return;
}
if (!HasUMode(source_p, UMODE_ADMIN) && has_wildcards(name))
{
if (IsClient(source_p))
sendto_one_notice(source_p, &me, ":You must be an admin to perform a wildcard RESV");
return;
}
if ((conf = create_resv(name, reason, NULL)) == NULL)
{
if (IsClient(source_p))
sendto_one_notice(source_p, &me, ":A RESV has already been placed on nick %s", name);
return;
}
conf->setat = CurrentTime;
SetConfDatabase(conf);
if (tkline_time)
{
if (IsClient(source_p))
sendto_one_notice(source_p, &me, ":A %d minute %s RESV has been placed on nick %s : [%s]",
tkline_time/60, (MyClient(source_p) ? "local" : "remote"),
conf->name, conf->reason);
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE,
"%s has placed a %d minute %s RESV on nick %s : [%s]",
//.........这里部分代码省略.........
开发者ID:codemstr,项目名称:eircd-hybrid-8,代码行数:101,代码来源:m_resv.c
示例4: m_topic
/* m_topic()
* parv[0] = sender prefix
* parv[1] = channel name
* parv[2] = new topic, if setting topic
*/
static void
m_topic(struct Client *client_p, struct Client *source_p,
int parc, char *parv[])
{
struct Channel *chptr = NULL;
char *p;
struct Membership *ms;
const char *from, *to;
if (!MyClient(source_p) && IsCapable(source_p->from, CAP_TS6) && HasID(source_p))
{
from = me.id;
to = source_p->id;
}
else
{
from = me.name;
to = source_p->name;
}
if ((p = strchr(parv[1], ',')) != NULL)
*p = '\0';
if (EmptyString(parv[1]))
{
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
from, to, "TOPIC");
return;
}
if (MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
if (IsChanPrefix(*parv[1]))
{
if ((chptr = hash_find_channel(parv[1])) == NULL)
{
sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
from, to, parv[1]);
return;
}
/* setting topic */
if (parc > 2)
{
if ((ms = find_channel_link(source_p, chptr)) == NULL && !IsService(source_p))
{
sendto_one(source_p, form_str(ERR_NOTONCHANNEL), me.name,
source_p->name, parv[1]);
return;
}
if ((chptr->mode.mode & MODE_TOPICLIMIT) == 0 ||
has_member_flags(ms, CHFL_CHANOP|CHFL_HALFOP) || IsGod(source_p) ||
IsService(source_p))
{
char topic_info[USERHOST_REPLYLEN];
if(!has_member_flags(ms, CHFL_CHANOP|CHFL_HALFOP) &&
IsGod(source_p) && MyClient(source_p) &&
(chptr->mode.mode & MODE_TOPICLIMIT) != 0)
{
char tmp[IRCD_BUFSIZE];
ircsprintf(tmp, "%s is using God mode: TOPIC %s %s", source_p->name,
chptr->chname, parv[2]);
sendto_gnotice_flags(UMODE_SERVNOTICE, L_ALL, me.name, &me, NULL,
tmp);
oftc_log(tmp);
}
ircsprintf(topic_info, "%s!%[email protected]%s",
source_p->name, source_p->username, source_p->host);
set_channel_topic(chptr, parv[2], topic_info, CurrentTime);
sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
":%s TOPIC %s :%s",
ID(source_p), chptr->chname,
chptr->topic == NULL ? "" : chptr->topic);
sendto_server(client_p, chptr, NOCAPS, CAP_TS6,
":%s TOPIC %s :%s",
source_p->name, chptr->chname,
chptr->topic == NULL ? "" : chptr->topic);
sendto_channel_local(ALL_MEMBERS, NO,
chptr, ":%s!%[email protected]%s TOPIC %s :%s",
source_p->name,
source_p->username,
source_p->host,
chptr->chname, chptr->topic == NULL ?
"" : chptr->topic);
}
else
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
from, to, chptr->chname);
}
else /* only asking for topic */
{
if (!SecretChannel(chptr) || IsMember(source_p, chptr))
//.........这里部分代码省略.........
开发者ID:KSoute,项目名称:oftc-hybrid,代码行数:101,代码来源:m_topic.c
示例5: m_invite
/*
** m_invite
** parv[0] - sender prefix
** parv[1] - user to invite
** parv[2] - channel name
** parv[3] - invite timestamp
*/
static void
m_invite(struct Client *client_p, struct Client *source_p,
int parc, char *parv[])
{
struct Client *target_p = NULL;
struct Channel *chptr = NULL;
struct Membership *ms = NULL;
if (IsServer(source_p))
return;
if (EmptyString(parv[2]))
{
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
me.name, source_p->name, "INVITE");
return;
}
if (MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
if ((target_p = find_person(client_p, parv[1])) == NULL)
{
sendto_one(source_p, form_str(ERR_NOSUCHNICK),
me.name, source_p->name, parv[1]);
return;
}
/* Do not send local channel invites to users if they are not on the
* same server as the person sending the INVITE message.
*/
/* Possibly should be an error sent to source_p */
/* done .. there should be no problem because MyConnect(source_p) should
* always be true if parse() and such is working correctly --is
*/
if (!MyConnect(target_p) && (*parv[2] == '&'))
{
if (ConfigServerHide.hide_servers == 0)
sendto_one(source_p, form_str(ERR_USERNOTONSERV),
me.name, source_p->name, target_p->name);
return;
}
if ((chptr = hash_find_channel(parv[2])) == NULL)
{
sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
me.name, source_p->name, parv[2]);
return;
}
if (MyConnect(source_p) && (ms = find_channel_link(source_p, chptr)) == NULL)
{
sendto_one(source_p, form_str(ERR_NOTONCHANNEL),
me.name, source_p->name, chptr->chname);
return;
}
if (MyConnect(source_p) && !has_member_flags(ms, CHFL_CHANOP|CHFL_HALFOP))
{
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
me.name, source_p->name, chptr->chname);
return;
}
if ((chptr->mode.mode & MODE_OPERONLY))
{
if (MyConnect(source_p) && !IsOper(source_p))
{
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
me.name, source_p->name, chptr->chname);
return;
}
}
if (IsMember(target_p, chptr))
{
sendto_one(source_p, form_str(ERR_USERONCHANNEL),
me.name, source_p->name, target_p->name, chptr->chname);
return;
}
if (MyConnect(source_p))
{
sendto_one(source_p, form_str(RPL_INVITING), me.name,
source_p->name, target_p->name, chptr->chname);
if (target_p->away)
sendto_one(source_p, form_str(RPL_AWAY),
me.name, source_p->name, target_p->name,
target_p->away);
}
else if (parc > 3 && IsDigit(*parv[3]))
if (atoi(parv[3]) > chptr->channelts)
//.........这里部分代码省略.........
开发者ID:mdharris,项目名称:ircd,代码行数:101,代码来源:m_invite.c
示例6: m_kick
/*
** m_kick
** parv[1] = channel
** parv[2] = client to kick
** parv[3] = kick comment
*/
static int
m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct membership *msptr;
struct Client *who;
struct Channel *chptr;
int chasing = 0;
char *comment;
const char *name;
char *p = NULL;
char text[10];
const char *user;
static char buf[BUFSIZE];
int is_override = 0;
if(MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
*buf = '\0';
if((p = strchr(parv[1], ',')))
*p = '\0';
name = parv[1];
chptr = find_channel(name);
if(chptr == NULL)
{
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL, form_str(ERR_NOSUCHCHANNEL), name);
return 0;
}
user = parv[2]; /* strtoken(&p2, parv[2], ","); */
if(!(who = find_chasing(source_p, user, &chasing)))
{
return 0;
}
if(!IsServer(source_p))
{
msptr = find_channel_membership(chptr, source_p);
if((msptr == NULL) && MyConnect(source_p))
{
sendto_one_numeric(source_p, ERR_NOTONCHANNEL,
form_str(ERR_NOTONCHANNEL), name);
return 0;
}
if(!can_kick_deop(msptr, find_channel_membership(chptr, who)))
{
if(MyConnect(source_p))
{
if(IsOverride(source_p))
is_override = 1;
else
{
sendto_one(source_p, ":%s 482 %s %s :You do not have the proper privileges to kick this user",
me.name, source_p->name, name);
return 0;
}
}
/* If its a TS 0 channel, do it the old way */
else if(chptr->channelts == 0)
{
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
get_id(&me, source_p), get_id(source_p, source_p), name);
return 0;
}
}
/* Its a user doing a kick, but is not showing as chanop locally
* its also not a user ON -my- server, and the channel has a TS.
* There are two cases we can get to this point then...
*
* 1) connect burst is happening, and for some reason a legit
* op has sent a KICK, but the SJOIN hasn't happened yet or
* been seen. (who knows.. due to lag...)
*
* 2) The channel is desynced. That can STILL happen with TS
*
* Now, the old code roger wrote, would allow the KICK to
* go through. Thats quite legit, but lets weird things like
* KICKS by users who appear not to be chanopped happen,
* or even neater, they appear not to be on the channel.
* This fits every definition of a desync, doesn't it? ;-)
* So I will allow the KICK, otherwise, things are MUCH worse.
* But I will warn it as a possible desync.
*
* -Dianora
*/
}
//.........这里部分代码省略.........
开发者ID:DrRenX,项目名称:shadowircd-ac,代码行数:101,代码来源:m_kick.c
示例7: m_scan_idle
int
m_scan_idle(struct Client *cptr, struct Client *sptr, int parc, char *parv[], char *varparv[])
{
struct Client *ptr, *target = NULL;
char *eptr, buffer[321];
int idle_time, check_time, len = 0, count = 0;
if(MyClient(sptr) && !HasUmode(sptr, UMODE_USER_AUSPEX))
{
if(SeesOperMessages(sptr))
sendto_one(sptr,":%s NOTICE %s :You have no a umode", me.name, parv[0]);
else
sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
return 0;
}
if(parc < 3)
{
if (!IsServer(sptr))
sendto_one(sptr, form_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "SCAN IDLE");
return 0;
}
idle_time = strtoul(parv[2], &eptr, 10);
if(eptr == parv[2])
return 0;
/* Store the timestamp which last_sent should be >= to save time */
check_time = CurrentTime - idle_time;
/* If the query is for another server, pass it on and return. */
if(parc > 3)
{
if(MyClient(sptr) && !HasUmode(sptr, UMODE_REMOTEINFO))
{
if(SeesOperMessages(sptr))
sendto_one(sptr,":%s NOTICE %s :You have no S umode(cannot send remote)", me.name, parv[0]);
else
sendto_one(sptr, form_str(ERR_NOPRIVILEGES), me.name, parv[0]);
return 0;
}
if(!irccmp(parv[3], "GLOBAL") || !irccmp(parv[3], "*"))
sendto_serv_butone(cptr, ":%s SCAN IDLE %d *", parv[0], idle_time);
else if((target = find_server(parv[3])) == NULL) {
sendto_one(sptr, form_str(ERR_NOSUCHSERVER),
me.name, parv[0], parv[3]);
return 0;
}else if(!IsMe(target)) { /* But only if the query is not on us... */
sendto_prefix_one(target, sptr, ":%s SCAN IDLE %d %s", parv[0],
idle_time, target->name);
return 0;
}
}
buffer[0] = '\0';
for(ptr = local_cptr_list; ptr; ptr = ptr->next_local_client)
{
if(ptr->user->last_sent < check_time)
continue;
if(len + strlen(ptr->name) > 319)
{
buffer[len - 1] = '\0'; /* Strip the trailing space */
send_markup(sptr, &me, "SCAN-IDLE", "%d %s", idle_time, buffer);
buffer[0] = '\0';
len = 0;
}
strcat(buffer, ptr->name);
strcat(buffer, " ");
len += strlen(ptr->name) + 1;
count++;
}
if(buffer[0])
{
buffer[len - 1] = '\0';
send_markup(sptr, &me, "SCAN-IDLE", "%d %s", idle_time, buffer);
}
send_markup(sptr, &me, "IDLE-END", "End of idle listing");
if(count > 0 || target || parc == 3) /* Don't give a summary for globals if no results matched */
send_markup(sptr, &me, "SCAN-SUMMARY", "%d matched", count);
return 0;
}
开发者ID:BackupTheBerlios,项目名称:phoenixfn-svn,代码行数:88,代码来源:m_scan.c
示例8: m_mode
/*
* m_mode - MODE command handler
* parv[1] - channel
*/
static int
m_mode(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct Channel *chptr = NULL;
struct membership *msptr;
int n = 2;
const char *dest;
int operspy = 0;
dest = parv[1];
if(IsOperSpy(source_p) && *dest == '!')
{
dest++;
operspy = 1;
if(EmptyString(dest))
{
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
me.name, source_p->name, "MODE");
return 0;
}
}
/* Now, try to find the channel in question */
if(!IsChanPrefix(*dest))
{
/* if here, it has to be a non-channel name */
user_mode(client_p, source_p, parc, parv);
return 0;
}
if(!check_channel_name(dest))
{
sendto_one_numeric(source_p, ERR_BADCHANNAME, form_str(ERR_BADCHANNAME), parv[1]);
return 0;
}
chptr = find_channel(dest);
if(chptr == NULL)
{
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
form_str(ERR_NOSUCHCHANNEL), parv[1]);
return 0;
}
/* Now know the channel exists */
if(parc < n + 1)
{
if(operspy)
report_operspy(source_p, "MODE", chptr->chname);
sendto_one(source_p, form_str(RPL_CHANNELMODEIS),
me.name, source_p->name, parv[1],
operspy ? channel_modes(chptr, &me) : channel_modes(chptr, source_p));
sendto_one(source_p, form_str(RPL_CREATIONTIME),
me.name, source_p->name, parv[1], chptr->channelts);
}
else
{
msptr = find_channel_membership(chptr, source_p);
/* Finish the flood grace period... */
if(MyClient(source_p) && !IsFloodDone(source_p))
{
if(!((parc == 3) && (parv[2][0] == 'b') && (parv[2][1] == '\0')))
flood_endgrace(source_p);
}
set_channel_mode(client_p, source_p, chptr, msptr, parc - n, parv + n);
}
return 0;
}
开发者ID:fgt-transit,项目名称:aFailIRCd,代码行数:80,代码来源:m_mode.c
示例9: msg_channel
/*
* msg_channel
*
* inputs - flag privmsg or notice
* - pointer to command "PRIVMSG" or "NOTICE"
* - pointer to client_p
* - pointer to source_p
* - pointer to channel
* output - NONE
* side effects - message given channel
*/
static void
msg_channel(int p_or_n, char *command,
struct Client *client_p,
struct Client *source_p, struct Channel *chptr, char *text)
{
struct Channel *vchan = NULL;
char *chname = NULL;
int result;
chname = RootChan(chptr)->chname;
#ifdef VCHANS
if (HasVchans(chptr))
vchan = map_vchan(chptr, source_p);
#endif
if (!vchan)
vchan = chptr;
if (MyClient(source_p))
{
/* idle time shouldnt be reset by notices --fl */
if ((p_or_n != NOTICE) && source_p->user)
source_p->user->last = CurrentTime;
}
/* chanops and voiced can flood their own channel with impunity */
if ((result = can_send(vchan, source_p)))
{
if (result == CAN_SEND_NOTREG)
{
if (p_or_n != NOTICE)
sendto_one(source_p, form_str(source_p,ERR_CANNOTSENDNOTREG),
me.name, source_p->name, chname);
return;
}
if (result == CAN_SEND_OPV ||
!flood_attack_channel(p_or_n, source_p, vchan, chname))
{
dlink_node *ptr;
struct Ban *banptr;
char strbuf[BUFSIZE+1], buf[TOPICLEN+1];
char *word, *subst, *p = buf;
int drop = 0;
if (MyClient(source_p) && IsPerson(source_p))
if (!is_chan_op(vchan, source_p) && NoRepeatChannel(vchan))
if (check_repeat(source_p, vchan, text)) {
sendto_one(source_p, form_str(source_p,ERR_NOREPEATING),
me.name, source_p->name, chname);
return;
}
if (NoColorChannel(vchan))
/*strip_color(text);*/
text = strip_color(text, 0);
strncpy(strbuf, text, BUFSIZE)[BUFSIZE] = 0;
if (MyClient(source_p) && IsPerson(source_p))
if (!is_chan_op(vchan, source_p))
for (ptr = vchan->substlist.head; ptr; ptr = ptr->next, p = buf) {
banptr = ptr->data;
strncpy(buf, banptr->banstr, TOPICLEN)[TOPICLEN] = 0;
while (*p)
if (*p++ == '$')
*(p-1) = ' ';
subst = strchr(buf, '/'); if (subst) {
*subst++ = 0; word = buf;
if (strstr(strbuf, word) && !irccmp(subst, "&"))
drop = 1;
replace(strbuf, word, subst, BUFSIZE);
strbuf[BUFSIZE] = 0;
}
}
if (!drop) {
if (PaceChannel(vchan) && (vchan->msgs < MAX_PACEMSG))
add_pace_msg(vchan, client_p, source_p, command, strbuf);
else
sendto_channel_butone(client_p, source_p, vchan, command, ":%s", strbuf);
}
}
}
else
{
if (p_or_n != NOTICE)
//.........这里部分代码省略.........
开发者ID:Cloudxtreme,项目名称:ircd-3,代码行数:101,代码来源:m_message.c
示例10: m_nick
/*! \brief NICK command handler
*
* \param source_p Pointer to allocated Client struct from which the message
* originally comes from. This can be a local or remote client.
* \param parc Integer holding the number of supplied arguments.
* \param parv Argument vector where parv[0] .. parv[parc-1] are non-NULL
* pointers.
* \note Valid arguments for this command are:
* - parv[0] = command
* - parv[1] = nickname
*/
static int
m_nick(struct Client *source_p, int parc, char *parv[])
{
char nick[NICKLEN + 1] = "";
struct Client *target_p = NULL;
struct MaskItem *conf = NULL;
assert(MyClient(source_p));
if (parc < 2 || EmptyString(parv[1]))
{
sendto_one_numeric(source_p, &me, ERR_NONICKNAMEGIVEN);
return 0;
}
/* Mark end of grace period, to prevent nickflooding */
if (!IsFloodDone(source_p))
flood_endgrace(source_p);
/* Terminate nick to NICKLEN */
strlcpy(nick, parv[1], IRCD_MIN(sizeof(nick), ConfigServerInfo.max_nick_length + 1));
/* Check the nickname is ok */
if (!valid_nickname(nick, 1))
{
sendto_one_numeric(source_p, &me, ERR_ERRONEUSNICKNAME, nick, "Erroneous Nickname");
return 0;
}
if (!HasFlag(source_p, FLAGS_EXEMPTRESV) &&
!(HasUMode(source_p, UMODE_OPER) && HasOFlag(source_p, OPER_FLAG_NICK_RESV)) &&
(conf = find_matching_name_conf(CONF_NRESV, nick, NULL, NULL, 0)))
{
++conf->count;
sendto_one_numeric(source_p, &me, ERR_ERRONEUSNICKNAME, nick, conf->reason);
sendto_realops_flags(UMODE_REJ, L_ALL, SEND_NOTICE,
"Forbidding reserved nick %s from user %s",
nick, get_client_name(source_p, HIDE_IP));
return 0;
}
if ((target_p = hash_find_client(nick)) == NULL)
change_local_nick(source_p, nick);
else if (target_p == source_p)
{
/*
* If (target_p == source_p) the client is changing nicks between
* equivalent nicknames ie: [nick] -> {nick}
*/
/* Check the nick isn't exactly the same */
if (strcmp(target_p->name, nick))
change_local_nick(source_p, nick);
}
else if (IsUnknown(target_p))
{
/*
* If the client that has the nick isn't registered yet (nick but no
* user) then drop the unregged client
*/
exit_client(target_p, "Overridden by other sign on");
change_local_nick(source_p, nick);
}
else
sendto_one_numeric(source_p, &me, ERR_NICKNAMEINUSE, target_p->name);
return 0;
}
开发者ID:qistchan,项目名称:ircd-hybrid,代码行数:79,代码来源:m_nick.c
示例11: m_topic
/*
* m_topic
* parv[1] = channel name
* parv[2] = new topic, if setting topic
*/
static int
m_topic(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
{
struct Channel *chptr = NULL;
struct membership *msptr;
char *p = NULL;
const char *name;
int operspy = 0;
if((p = strchr(parv[1], ',')))
*p = '\0';
name = parv[1];
if(IsOperAuspex(source_p) && parv[1][0] == '!')
{
name++;
operspy = 1;
if(EmptyString(name))
{
sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
me.name, source_p->name, "TOPIC");
return 0;
}
}
if(MyClient(source_p) && !IsFloodDone(source_p))
flood_endgrace(source_p);
if(!IsChannelName(name))
{
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
form_str(ERR_NOSUCHCHANNEL), name);
return 0;
}
chptr = find_channel(name);
if(chptr == NULL)
{
sendto_one_numeric(source_p, ERR_NOSUCHCHANNEL,
form_str(ERR_NOSUCHCHANNEL), name);
return 0;
}
/* setting topic */
if(parc > 2)
{
char topic_info[USERHOST_REPLYLEN];
char topic[BUFSIZE];
msptr = find_channel_membership(chptr, source_p);
if(msptr == NULL)
{
sendto_one_numeric(source_p, ERR_NOTONCHANNEL,
form_str(ERR_NOTONCHANNEL), name);
return 0;
}
if(MyClient(source_p) && !is_chanop_voiced(msptr) &&
!IsOper(source_p) &&
!add_channel_target(source_p, chptr))
{
sendto_one(source_p, form_str(ERR_TARGCHANGE),
me.name, source_p->name, chptr->chname);
return 0;
}
if(MyClient(source_p) && !(((chptr->mode.mode & MODE_TOPICLIMIT) == 0 ||
is_chanop(msptr)) &&
can_send(chptr, source_p, msptr)))
{
if(IsOverride(source_p))
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
"%s is overriding TOPIC on [%s]",
get_oper_name(source_p), chptr->chname);
else
{
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
get_id(&me, source_p),
get_id(source_p, source_p), name);
return 0;
}
}
rb_strlcpy(topic, parv[2], BUFSIZE);
strip_colour(topic);
rb_sprintf(topic_info, "%s!%[email protected]%s",
source_p->name, source_p->username, source_p->host);
set_channel_topic(chptr, topic, topic_info, rb_current_time());
sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
//.........这里部分代码省略.........
开发者ID:Cloudxtreme,项目名称:ircd-seven,代码行数:101,代码来源:m_topic.c
示例12: change_local_nick
/* change_local_nick()
*
* inputs - pointer to server
* - pointer to client
* - nick
* output -
* side effects - changes nick of a LOCAL user
*/
static void
change_local_nick(struct Client *source_p, const char *nick)
{
int samenick = 0;
assert(source_p->name[0] && !EmptyString(nick));
assert(MyClient(source_p));
/*
* Client just changing his/her nick. If he/she is
* on a channel, send note of change to all clients
* on that channel. Propagate notice to other servers.
*/
if ((source_p->connection->nick.last_attempt +
ConfigGeneral.max_nick_time) < CurrentTime)
source_p->connection->nick.count = 0;
if (ConfigGeneral.anti_nick_flood &&
!HasUMode(source_p, UMODE_OPER) &&
source_p->connection->nick.count >
ConfigGeneral.max_nick_changes)
{
sendto_one_numeric(source_p, &me, ERR_NICKTOOFAST, nick,
ConfigGeneral.max_nick_time);
return;
}
source_p->connection->nick.last_attempt = CurrentTime;
source_p->connection->nick.count++;
samenick = !irccmp(source_p->name, nick);
if (!samenick)
{
source_p->tsinfo = CurrentTime;
clear_ban_cache_client(source_p);
watch_check_hash(source_p, RPL_LOGOFF);
if (HasUMode(source_p, UMODE_REGISTERED))
{
unsigned int oldmodes = source_p->umodes;
char modebuf[IRCD_BUFSIZE] = "";
DelUMode(source_p, UMODE_REGISTERED);
send_umode(source_p, source_p, oldmodes, modebuf);
}
}
sendto_realops_flags(UMODE_NCHANGE, L_ALL, SEND_NOTICE,
"Nick change: From %s to %s [%[email protected]%s]",
source_p->name, nick, source_p->username, source_p->host);
sendto_common_channels_local(source_p, 1, 0, ":%s!%[email protected]%s NICK :%s",
source_p->name, source_p->username,
source_p->host, nick);
whowas_add_history(source_p, 1);
sendto_server(source_p, 0, 0, ":%s NICK %s :%lu",
source_p->id, nick, (unsigned long)source_p->tsinfo);
hash_del_client(source_p);
strlcpy(source_p->name, nick, sizeof(source_p->name));
hash_add_client(source_p);
if (!samenick)
watch_check_hash(source_p, RPL_LOGON);
/* fd_desc is long enough */
fd_note(&source_p->connection->fd, "Nick: %s", source_p->name);
}
开发者ID:qistchan,项目名称:ircd-hybrid,代码行数:77,代码来源:m_nick.c
示例13: m_message
//.........这里部分代码省略.........
sendto_one(acptr,
":%s NOTICE %s :*** Notice -- Server drone flood protection activated for %s",
me.name, acptr->name, acptr->name);
acptr->drone_noticed = 2;
}
}
if(DBufLength(&acptr->sendQ) <= (get_sendq(acptr)/4UL))
{
if(acptr->drone_noticed == 2)
{
sendto_one(acptr,
":%s NOTICE %s :*** Notice -- Server drone flood protection de-activated for %s",
me.name, acptr->name, acptr->name);
acptr->drone_noticed = 1;
}
}
if(acptr->drone_noticed > 1)
return 0;
}
else
acptr->received_number_of_privmsgs++;
}
}
#endif
/*
* Simple herustic here... If PRIVMSG is locked down via
* F:noidprivmsg:1, then act like every client is +E.
* Otherwise, assume the normal behaviour. All in a nice
* single if statement. --nenolod
*/
if (MyClient(sptr) && sptr != acptr &&
(GlobalSetOptions.noidprivmsg != 0 ||
HasUmode(acptr,UMODE_BLOCK_NOTID))
&& !HasUmode(sptr,UMODE_IDENTIFIED)
&& !sptr->user->servlogin[0]
&& !HasUmode(acptr,UMODE_DONTBLOCK)
&& !HasUmode(sptr,UMODE_DONTBLOCK))
{
/* Replace errbuf with either the default or custom message,
* then send the numeric on...
* --nenolod
*/
if (GlobalSetOptions.noidprivmsg != 0 &&
GlobalSetOptions.noidprivmsg_notice[0])
{
strncpy_irc(errbuf, GlobalSetOptions.noidprivmsg_notice, BUFSIZE);
}
else
{
ircsnprintf(errbuf, BUFSIZE, get_str(STR_NOTID_DEFAULT),
nick);
}
sendto_one(sptr, form_str(ERR_BLOCKING_NOTID),
me.name, parv[0], errbuf);
return 0;
}
#ifdef SILENCE
/* only check silence masks at the recipient's server -- jilles */
if (!MyConnect(acptr) || !is_silenced(sptr, acptr)) {
#endif
if (MyConnect(sptr) && acptr->user && (sptr != acptr))
开发者ID:BackupTheBerlios,项目名称:phoenixfn-svn,代码行数:67,代码来源:m_message.c
示例14: m_kill
/*
** m_kill
** parv[0] = sender prefix
** parv[1] = kill victim(s) - comma separated list
** parv[2] = kill path
*/
DLLFUNC int m_kill(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
aClient *acptr;
anUser *auser;
char inpath[HOSTLEN * 2 + USERLEN + 5];
char *oinpath = get_client_name(cptr, FALSE);
char *user, *path, *killer, *nick, *p, *s;
int chasing = 0, kcount = 0;
if (parc < 2 || *parv[1] == '\0')
{
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "KILL");
return 0;
}
user = parv[1];
path = parv[2]; /* Either defined or NULL (parc >= 2!!) */
strlcpy(inpath, oinpath, sizeof inpath);
#ifndef ROXnet
if (IsServer(cptr) && (s = (char *)index(inpath, '.')) != NULL)
*s = '\0'; /* Truncate at first "." */
#endif
if (!IsPrivileged(cptr))
{
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
return 0;
}
if (IsAnOper(cptr))
{
if (BadPtr(path))
{
sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS),
me.name, parv[0], "KILL");
return 0;
}
if (strlen(path) > (size_t)TOPICLEN)
path[TOPICLEN] = '\0';
}
if (MyClient(sptr))
user = (char *)canonize(user);
for (p = NULL, nick = strtoken(&p, user, ","); nick;
nick = strtoken(&p, NULL, ","))
{
chasing = 0;
if (!(acptr = find_client(nick, NULL)))
{
/*
** If the user has recently changed nick, we automaticly
** rewrite the KILL for this new nickname--this keeps
** servers in synch when nick change and kill collide
*/
if (!(acptr =
get_history(nick, (long)KILLCHASETIMELIMIT)))
{
sendto_one(sptr, err_str(ERR_NOSUCHNICK),
me.name, parv[0], nick);
continue;
}
sendto_one(sptr,
":%s %s %s :*** KILL changed from %s to %s",
me.name, IsWebTV(sptr) ? "PRIVMSG" : "NOTICE", parv[0], nick, acptr->name);
chasing = 1;
}
if ((!MyConnect(acptr) && MyClient(cptr) && !OPCanGKill(cptr))
|| (MyConnect(acptr) && MyClient(cptr)
&& !OPCanLKill(cptr)))
{
sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name,
parv[0]);
continue;
}
if (IsServer(acptr) || IsMe(acptr))
{
sendto_one(sptr, err_str(ERR_CANTKILLSERVER),
me.name, parv[0]);
continue;
}
if (!IsPerson(acptr))
{
/* Nick exists but user is not registered yet: IOTW "doesn't exist". -- Syzop */
sendto_one(sptr, err_str(ERR_NOSUCHNICK),
me.name, parv[0], nick);
continue;
}
//.........这里部分代码省略.........
开发者ID:cyocom,项目名称:Technokats-Website,代码行数:101,代码来源:m_kill.c
示例15: m_error
/*
* Note: At least at protocol level ERROR has only one parameter,
* although this is called internally from other functions
* --msa
*
* parv[0] = sender prefix
* parv[*] = parameters
*/
void m_error(struct Client *client_p, struct Client *source_p,
int parc, char *parv[])
{
if (MyClient(source_p))
exit_client(client_p, source_p, source_p, "ERROR");
}
开发者ID:Cloudxtreme,项目名称:ircd-3,代码行数:14,代码来源:m_error.c
示例16: msg_channel_flags
/*
* msg_channel_flags
*
* inputs - flag 0 if PRIVMSG 1 if NOTICE. RFC
* say NOTICE must not auto reply
* - pointer to command, "PRIVMSG" or "NOTICE"
* - pointer to client_p
* - pointer to source_p
* - pointer to channel
* - flags
* - pointer to text to send
* output - NONE
* side effects - message given channel either chanop or voice
*/
static void
msg_channel_flags(int p_or_n, char *command, struct Client *client_p,
struct Client *source_p, struct Channel *chptr,
int flags, char *text)
{
struct Channel *vchan = NULL;
char *chname = NULL;
int type;
char c;
if (flags & MODE_VOICE)
{
type = ONLY_CHANOPS_HALFOPS_VOICED;
c = '+';
}
else if (flags & MODE_HALFOP)
{
type = ONLY_CHANOPS_HALFOPS;
c = '%';
}
else
{
type = ONLY_CHANOPS;
c = '@';
}
chname = RootChan(chptr)->chname;
#ifdef VCHANS
if (HasVchans(chptr))
vchan = map_vchan(chptr, source_p);
#endif
if (!vchan)
vchan = chptr;
if (NoColorChannel(vchan))
/*strip_color(text);*/
text = strip_color(text, 0);
if (MyClient(source_p))
{
/* idletime shouldnt be reset by notice --fl */
if ((p_or_n != NOTICE) && source_p->user)
source_p->user->last = CurrentTime;
sendto_channel_local_butone(source_p, type, vchan, ":%s!%[email protected]%s %s %c%s :%s",
source_p->name, source_p->username,
source_p->host, command, c, chname, text);
}
else
{
/*
* another good catch, lee. we never would echo to remote clients anyway,
* so use slightly less intensive sendto_channel_local()
*/
sendto_channel_local(type, vchan, ":%s!%[email protected]%s %s %c%s :%s",
source_p->name, source_p->username,
source_p->host, command, c, chname, text);
}
if (chptr->chname[0] == '&')
return;
sendto_channel_remote(source_p, client_p, type, CAP_CHW, CAP_UID, vchan,
":%s %s %c%s :%s", source_p->name, command, c,
vchan->chname, text);
sendto_channel_remote(source_p, client_p, type, CAP_CHW|CAP_UID, NOCAPS, vchan,
":%s %s %c%s :%s", ID(source_p), command, c,
vchan->chname, text);
/* non CAP_CHW servers? */
}
开发者ID:Cloudxtreme,项目名称:ircd-3,代码行数:87,代码来源:m_message.c
示例17: do_svssno
/*
* do_svssno()
* parv[0] - sender
* parv[1] - username to change snomask for
* parv[2] - snomasks to change
* show_change determines whether to show the change to the user
*/
int do_svssno(aClient *cptr, aClient *sptr, int parc, char *parv[], int show_change)
{
char *p;
aClient *acptr;
int what = MODE_ADD, i;
if (!IsULine(sptr))
return 0;
if (parc < 2)
return 0;
if (parv[1][0] == '#')
return 0;
if (!(acptr = find_person(parv[1], NULL)))
return 0;
if (hunt_server_token(cptr, sptr,
show_change ? MSG_SVS2SNO : MSG_SVSSNO,
show_change ? TOK_SVS2SNO : TOK_SVSSNO,
"%s %s", 1, parc, parv) != HUNTED_ISME)
{
return 0;
}
if (MyClient(acptr))
{
if (parc == 2)
acptr->user->snomask = 0;
else
{
for (p = parv[2]; p && *p; p++) {
switch (*p) {
case '+':
what = MODE_ADD;
break;
case '-':
what = MODE_DEL;
break;
default:
for (i = 0; i <= Snomask_highest; i++)
{
if (!Snomask_Table[i].flag)
continue;
if (*p == Snomask_Table[i].flag)
{
if (what == MODE_ADD)
acptr->
|
请发表评论