ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/modules/m_topic.c
(Generate patch)

Comparing:
ircd-hybrid-7.3/modules/m_topic.c (file contents), Revision 1029 by michael, Sun Nov 8 13:10:50 2009 UTC vs.
ircd-hybrid/trunk/modules/m_topic.c (file contents), Revision 1799 by michael, Sun Mar 31 17:12:07 2013 UTC

# Line 24 | Line 24
24  
25   #include "stdinc.h"
26   #include "list.h"
27 – #include "handlers.h"
27   #include "channel.h"
28   #include "channel_mode.h"
29   #include "client.h"
30   #include "hash.h"
31   #include "irc_string.h"
33 – #include "sprintf_irc.h"
32   #include "ircd.h"
33   #include "numeric.h"
34   #include "send.h"
37 – #include "s_conf.h"
35   #include "s_serv.h"
39 – #include "msg.h"
36   #include "parse.h"
37   #include "modules.h"
38   #include "packet.h"
39  
44 – static void m_topic(struct Client *, struct Client *, int, char *[]);
45 –
46 – struct Message topic_msgtab = {
47 –  "TOPIC", 0, 0, 2, 0, MFLG_SLOW, 0,
48 –  {m_unregistered, m_topic, m_topic, m_ignore, m_topic, m_ignore}
49 – };
50 –
51 – #ifndef STATIC_MODULES
52 – void
53 – _modinit(void)
54 – {
55 –  mod_add_cmd(&topic_msgtab);
56 – }
57 –
58 – void
59 – _moddeinit(void)
60 – {
61 –  mod_del_cmd(&topic_msgtab);
62 – }
63 –
64 – const char *_version = "$Revision$";
65 – #endif
40  
41   /* m_topic()
42   *  parv[0] = sender prefix
# Line 74 | Line 48 | m_topic(struct Client *client_p, struct
48          int parc, char *parv[])
49   {
50    struct Channel *chptr = NULL;
77 –  const char *from, *to;
78 –
79 –  if (!MyClient(source_p) && IsCapable(source_p->from, CAP_TS6) && HasID(source_p))
80 –  {
81 –    from = me.id;
82 –    to = source_p->id;
83 –  }
84 –  else
85 –  {
86 –    from = me.name;
87 –    to = source_p->name;
88 –  }
51  
52    if (EmptyString(parv[1]))
53    {
54      sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
55 <               from, to, "TOPIC");
55 >               me.name, source_p->name, "TOPIC");
56      return;
57    }
58  
59 <  if (MyClient(source_p) && !IsFloodDone(source_p))
59 >  if (!IsFloodDone(source_p))
60      flood_endgrace(source_p);
61  
62    if ((chptr = hash_find_channel(parv[1])) == NULL)
63    {
64      sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
65 <               from, to, parv[1]);
65 >               me.name, source_p->name, parv[1]);
66      return;
67    }
68  
# Line 111 | Line 73 | m_topic(struct Client *client_p, struct
73  
74      if ((ms = find_channel_link(source_p, chptr)) == NULL)
75      {
76 <      sendto_one(source_p, form_str(ERR_NOTONCHANNEL), from,
77 <                 to, parv[1]);
76 >      sendto_one(source_p, form_str(ERR_NOTONCHANNEL), me.name,
77 >                 source_p->name, parv[1]);
78        return;
79      }
80  
# Line 121 | Line 83 | m_topic(struct Client *client_p, struct
83      {
84        char topic_info[USERHOST_REPLYLEN];
85  
86 <      ircsprintf(topic_info, "%s!%s@%s", source_p->name,
87 <                 source_p->username, source_p->host);
88 <      set_channel_topic(chptr, parv[2], topic_info, CurrentTime);
86 >      snprintf(topic_info, sizeof(topic_info), "%s!%s@%s", source_p->name,
87 >               source_p->username, source_p->host);
88 >      set_channel_topic(chptr, parv[2], topic_info, CurrentTime, 1);
89  
90 <      sendto_server(client_p, chptr, CAP_TS6, NOCAPS,
90 >      sendto_server(client_p, CAP_TS6, NOCAPS,
91                      ":%s TOPIC %s :%s",
92                      ID(source_p), chptr->chname,
93 <                    chptr->topic == NULL ? "" : chptr->topic);
94 <      sendto_server(client_p, chptr, NOCAPS, CAP_TS6,
93 >                    chptr->topic);
94 >      sendto_server(client_p, NOCAPS, CAP_TS6,
95                      ":%s TOPIC %s :%s",
96                      source_p->name, chptr->chname,
97 <                    chptr->topic == NULL ? "" : chptr->topic);
97 >                    chptr->topic);
98        sendto_channel_local(ALL_MEMBERS, 0,
99                             chptr, ":%s!%s@%s TOPIC %s :%s",
100                             source_p->name,
101                             source_p->username,
102                             source_p->host,
103 <                           chptr->chname, chptr->topic == NULL ?
142 <                           "" : chptr->topic);
103 >                           chptr->chname, chptr->topic);
104      }
105      else
106        sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
107 <                 from, to, chptr->chname);
107 >                 me.name, source_p->name, chptr->chname);
108    }
109    else /* only asking for topic */
110    {
111      if (!SecretChannel(chptr) || IsMember(source_p, chptr))
112      {
113 <      if (chptr->topic == NULL)
113 >      if (chptr->topic[0] == '\0')
114          sendto_one(source_p, form_str(RPL_NOTOPIC),
115 <                   from, to, chptr->chname);
115 >                   me.name, source_p->name, chptr->chname);
116        else
117        {
118          sendto_one(source_p, form_str(RPL_TOPIC),
119 <                   from, to,
119 >                   me.name, source_p->name,
120                     chptr->chname, chptr->topic);
121          sendto_one(source_p, form_str(RPL_TOPICWHOTIME),
122 <                   from, to, chptr->chname,
122 >                   me.name, source_p->name, chptr->chname,
123                     chptr->topic_info,
124                     chptr->topic_time);
125        }
126      }
127      else
128        sendto_one(source_p, form_str(ERR_NOTONCHANNEL),
129 <                 from, to, chptr->chname);
129 >                 me.name, source_p->name, chptr->chname);
130 >  }
131 > }
132 >
133 > static void
134 > ms_topic(struct Client *client_p, struct Client *source_p,
135 >         int parc, char *parv[])
136 > {
137 >  struct Channel *chptr = NULL;
138 >  const char *from, *to;
139 >  char topic_info[USERHOST_REPLYLEN];
140 >
141 >  if (IsCapable(source_p->from, CAP_TS6) && HasID(source_p))
142 >  {
143 >    from = me.id;
144 >    to = source_p->id;
145    }
146 +
147 +  if (EmptyString(parv[1]))
148 +  {
149 +    sendto_one(source_p, form_str(ERR_NEEDMOREPARAMS),
150 +               from, to, "TOPIC");
151 +    return;
152 +  }
153 +
154 +  if ((chptr = hash_find_channel(parv[1])) == NULL)
155 +  {
156 +    sendto_one(source_p, form_str(ERR_NOSUCHCHANNEL),
157 +               from, to, parv[1]);
158 +    return;
159 +  }
160 +
161 +  if (!IsClient(source_p))
162 +    strlcpy(topic_info, source_p->name, sizeof(topic_info));
163 +  else
164 +    snprintf(topic_info, sizeof(topic_info), "%s!%s@%s", source_p->name,
165 +             source_p->username, source_p->host);
166 +  set_channel_topic(chptr, parv[2], topic_info, CurrentTime, 0);
167 +
168 +  sendto_server(client_p, CAP_TS6, NOCAPS, ":%s TOPIC %s :%s",
169 +                ID(source_p), chptr->chname,
170 +                chptr->topic);
171 +  sendto_server(client_p, NOCAPS, CAP_TS6, ":%s TOPIC %s :%s",
172 +                source_p->name, chptr->chname,
173 +                chptr->topic);
174 +
175 +  if (!IsClient(source_p))
176 +    sendto_channel_local(ALL_MEMBERS, 0, chptr, ":%s TOPIC %s :%s",
177 +                         source_p->name,
178 +                         chptr->chname, chptr->topic);
179 +
180 +  else
181 +    sendto_channel_local(ALL_MEMBERS, 0, chptr, ":%s!%s@%s TOPIC %s :%s",
182 +                         source_p->name,
183 +                         source_p->username,
184 +                         source_p->host,
185 +                         chptr->chname, chptr->topic);
186 + }
187 +
188 +
189 + static struct Message topic_msgtab = {
190 +  "TOPIC", 0, 0, 2, MAXPARA, MFLG_SLOW, 0,
191 +  {m_unregistered, m_topic, ms_topic, m_ignore, m_topic, m_ignore}
192 + };
193 +
194 + static void
195 + module_init(void)
196 + {
197 +  mod_add_cmd(&topic_msgtab);
198 + }
199 +
200 + static void
201 + module_exit(void)
202 + {
203 +  mod_del_cmd(&topic_msgtab);
204   }
205 +
206 + struct module module_entry = {
207 +  .node    = { NULL, NULL, NULL },
208 +  .name    = NULL,
209 +  .version = "$Revision$",
210 +  .handle  = NULL,
211 +  .modinit = module_init,
212 +  .modexit = module_exit,
213 +  .flags   = 0
214 + };

Diff Legend

– Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)