1 /* pckt_vmke.c
2 *
3 * copyright (c) 2000-2003 SeaD
4 * see GPL for copying info
5 *
6 */
7
8 #include <string.h>
9 #include <unistd.h>
10 #include "echat.h"
11 #include "pckt_vpak.h"
12
make_vhead(void)13 char *make_vhead(void) {
14 static char head[HEADER_LEN];
15 register int n;
16
17 if (config->packet_qchat) { *head = '\0'; return (head); }
18 if (config->packet_xor) *head = PACKET_VYPRESSXOR;
19 else *head = PACKET_VYPRESS;
20 for (n = 1; n < HEADER_LEN; n++)
21 #ifdef FREEBSD
22 head[n] = 'a' + ((char) random() & 0x0f);
23 #else /* FREEBSD */
24 head[n] = 'a' + ((char) rand() & 0x0f);
25 #endif /* FREEBSD */
26 return (head);
27 }
28
make_vherewho(void)29 void make_vherewho(void) {
30 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c",
31 make_vhead(), MSG_VHEREWHO,
32 config->nick, MSG_SPLIT);
33 }
34
make_vhereim(void)35 void make_vhereim(void) {
36 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u%u",
37 make_vhead(), MSG_VHEREIM,
38 status->nick, MSG_SPLIT,
39 config->nick, MSG_SPLIT,
40 config->mode, config->active);
41 }
42
make_vchat(void)43 void make_vchat(void) {
44 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c",
45 make_vhead(), MSG_VCHAT,
46 status->room->name, MSG_SPLIT,
47 config->nick, MSG_SPLIT,
48 buf, MSG_SPLIT);
49 }
50
make_vnick(void)51 void make_vnick(void) {
52 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u",
53 make_vhead(), MSG_VNICK,
54 status->nick, MSG_SPLIT,
55 config->nick, MSG_SPLIT,
56 config->gender);
57 }
58
make_qnick(void)59 void make_qnick(void) {
60 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c",
61 make_vhead(), MSG_VNICK,
62 status->nick, MSG_SPLIT,
63 config->nick, MSG_SPLIT);
64 }
65
make_vjoin(void)66 void make_vjoin(void) {
67 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u%u",
68 make_vhead(), MSG_VJOIN,
69 config->nick, MSG_SPLIT,
70 status->channel, MSG_SPLIT,
71 config->mode, config->gender);
72 }
73
make_qjoin(void)74 void make_qjoin(void) {
75 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u",
76 make_vhead(), MSG_VJOIN,
77 config->nick, MSG_SPLIT,
78 status->channel, MSG_SPLIT,
79 config->mode);
80 }
81
make_vleave(void)82 void make_vleave(void) {
83 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%u",
84 make_vhead(), MSG_VLEAVE,
85 config->nick, MSG_SPLIT,
86 status->channel, MSG_SPLIT,
87 config->gender);
88 }
89
make_qleave(void)90 void make_qleave(void) {
91 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c",
92 make_vhead(), MSG_VLEAVE,
93 config->nick, MSG_SPLIT,
94 status->channel, MSG_SPLIT);
95 }
96
make_vmesg(void)97 void make_vmesg(void) {
98 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c",
99 make_vhead(), MSG_VMESG,
100 config->nick, MSG_SPLIT,
101 status->nick, MSG_SPLIT,
102 buf, MSG_SPLIT);
103 }
104
make_vmass(void)105 void make_vmass(void) {
106 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c",
107 make_vhead(), MSG_VMASS,
108 config->nick, MSG_SPLIT,
109 status->nick, MSG_SPLIT,
110 buf, MSG_SPLIT);
111 }
112
make_vmesgack(void)113 void make_vmesgack(void) {
114 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%u%s%s%s%c",
115 make_vhead(), MSG_VMESGACK,
116 config->mode,
117 status->nick, MSG_SPLIT,
118 config->nick, MSG_SPLIT,
119 config->gender,
120 (config->mode == MOD_DND) ? config->answer_dnd : "",
121 (config->mode == MOD_AWAY) ? config->answer_away : "",
122 (config->mode == MOD_OFF) ? config->answer_off : "",
123 MSG_SPLIT);
124 }
125
make_qmesgack(void)126 void make_qmesgack(void) {
127 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c",
128 make_vhead(), MSG_VMESGACK,
129 config->mode,
130 status->nick, MSG_SPLIT,
131 config->nick, MSG_SPLIT);
132 }
133
make_vexec(void)134 void make_vexec(void) {
135 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c%s%c",
136 make_vhead(), MSG_VEXEC,
137 config->nick, MSG_SPLIT,
138 status->nick, MSG_SPLIT,
139 buf, MSG_SPLIT,
140 "", MSG_SPLIT); /* FIXME: no passwords */
141 }
142
make_vexecack(void)143 void make_vexecack(void) {
144 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c",
145 make_vhead(), MSG_VEXECACK,
146 status->nick, MSG_SPLIT,
147 config->nick, MSG_SPLIT,
148 "Get out!!!", MSG_SPLIT);
149 }
150
make_vme(void)151 void make_vme(void) {
152 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c",
153 make_vhead(), MSG_VME,
154 status->room->name, MSG_SPLIT,
155 config->nick, MSG_SPLIT,
156 buf, MSG_SPLIT);
157 }
158
make_vtopicnew(void)159 void make_vtopicnew(void) {
160 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c",
161 make_vhead(), MSG_VTOPICNEW,
162 status->room->name, MSG_SPLIT,
163 status->room->topic, MSG_SPLIT);
164 }
165
make_qtopicnew(void)166 void make_qtopicnew(void) {
167 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c",
168 make_vhead(), MSG_VTOPICNEW,
169 status->chnl[0].topic, MSG_SPLIT);
170 }
171
make_vtopic(void)172 void make_vtopic(void) {
173 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c",
174 make_vhead(), MSG_VTOPIC,
175 status->nick, MSG_SPLIT,
176 status->channel, MSG_SPLIT,
177 status->chnl[chnl_getnum()].topic, MSG_SPLIT);
178 }
179
make_qtopic(void)180 void make_qtopic(void) {
181 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c",
182 make_vhead(), MSG_VTOPIC,
183 status->nick, MSG_SPLIT,
184 status->chnl[0].topic, MSG_SPLIT);
185 }
186
make_vmode(void)187 void make_vmode(void) {
188 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%u%u%s%s%s%c",
189 make_vhead(), MSG_VMODE,
190 config->nick, MSG_SPLIT,
191 config->mode, config->gender,
192 (config->mode == MOD_DND) ? config->answer_dnd : "",
193 (config->mode == MOD_AWAY) ? config->answer_away : "",
194 (config->mode == MOD_OFF) ? config->answer_off : "",
195 MSG_SPLIT);
196 }
197
make_qmode(void)198 void make_qmode(void) {
199 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%u",
200 make_vhead(), MSG_VMODE,
201 config->nick, MSG_SPLIT,
202 config->mode);
203 }
204
make_vinfo(void)205 void make_vinfo(void) {
206 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c",
207 make_vhead(), MSG_VINFO,
208 status->nick, MSG_SPLIT,
209 config->nick, MSG_SPLIT);
210 }
211
make_vinform(void)212 void make_vinform(void) {
213 char host[STR_SIZE];
214 char addr[ADDR_SIZE+1];
215 char chnlslist[STR_SIZE];
216 register int n;
217
218 gethostname(host, STR_SIZE);
219 for (n = 0; n < status->users; n++)
220 if (!strncmp(status->user[n].nick, config->nick, NICK_MAXLEN)) break;
221 if (n == status->users) *addr = '\0';
222 else strncpy(addr, status->user[n].addr, ADDR_SIZE);
223 strncpy(chnlslist, status->chnl[0].name, CHANNEL_MAXLEN);
224 for (n = 1; n < status->channels; n++)
225 if (status->chnl[n].name[0] == CHR_CHNL)
226 strncat(chnlslist, status->chnl[n].name, CHANNEL_MAXLEN);
227 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c%s%c%s%c%s#%c%s%s%s%c",
228 make_vhead(), MSG_VINFORM,
229 status->nick, MSG_SPLIT,
230 config->nick, MSG_SPLIT,
231 host, MSG_SPLIT,
232 config->nick, MSG_SPLIT,
233 addr, MSG_SPLIT,
234 chnlslist, MSG_SPLIT,
235 (config->mode == MOD_DND) ? config->answer_dnd : "",
236 (config->mode == MOD_AWAY) ? config->answer_away : "",
237 (config->mode == MOD_OFF) ? config->answer_off : "",
238 MSG_SPLIT);
239 }
240
make_qinform(void)241 void make_qinform(void) {
242 char host[STR_SIZE];
243 /* char addr[ADDR_SIZE]; */
244 char chnlslist[STR_SIZE];
245 register int n;
246
247 gethostname(host, STR_SIZE);
248 /* for (n = 0; n < status->users; n++)
249 if (!strncmp(status->user[n].nick, config->nick, NICK_MAXLEN)) break;
250 if (n == status->users) *addr = '\0';
251 else strncpy(addr, status->user[n].addr, ADDR_SIZE); */
252 strncpy(chnlslist, status->chnl[0].name, CHANNEL_MAXLEN);
253 for (n = 1; n < status->channels; n++)
254 if (status->chnl[n].name[0] == CHR_CHNL)
255 strncat(chnlslist, status->chnl[n].name, CHANNEL_MAXLEN); /* FIXME */
256 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c%s%cN/A%cN/A%c%s#%c",
257 make_vhead(), MSG_VINFORM,
258 status->nick, MSG_SPLIT,
259 config->nick, MSG_SPLIT,
260 host, MSG_SPLIT,
261 config->nick, MSG_SPLIT,
262 MSG_SPLIT, MSG_SPLIT,
263 chnlslist, MSG_SPLIT);
264 }
265
make_vbeepbeep(void)266 void make_vbeepbeep(void) {
267 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c",
268 make_vhead(), MSG_VBEEP, MSG_VBEEPBEEP,
269 status->nick, MSG_SPLIT,
270 config->nick, MSG_SPLIT);
271 }
272
make_vbeepack(void)273 void make_vbeepack(void) {
274 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%u",
275 make_vhead(), MSG_VBEEP, MSG_VBEEPACK,
276 status->nick, MSG_SPLIT,
277 config->nick, MSG_SPLIT, config->gender);
278 }
279
make_qbeepack(void)280 void make_qbeepack(void) {
281 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c",
282 make_vhead(), MSG_VBEEP, MSG_VBEEPACK,
283 status->nick, MSG_SPLIT,
284 config->nick, MSG_SPLIT);
285 }
286
make_vbeepreq(void)287 void make_vbeepreq(void) { /* FIXME: dont implemented */
288 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c",
289 make_vhead(), MSG_VBEEPREQ,
290 config->nick, MSG_SPLIT,
291 buf, MSG_SPLIT,
292 status->room->name, MSG_SPLIT);
293 }
294
make_vprivatjoin(void)295 void make_vprivatjoin(void) {
296 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%u",
297 make_vhead(), MSG_VPRIVAT, MSG_VPRIVATJOIN,
298 config->nick, MSG_SPLIT,
299 status->channel, MSG_SPLIT,
300 config->gender);
301 }
302
make_qprivatjoin(void)303 void make_qprivatjoin(void) {
304 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c",
305 make_vhead(), MSG_VPRIVAT, MSG_VPRIVATJOIN,
306 config->nick, MSG_SPLIT,
307 status->channel, MSG_SPLIT);
308 }
309
make_vprivatleave(void)310 void make_vprivatleave(void) {
311 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%u",
312 make_vhead(), MSG_VPRIVAT, MSG_VPRIVATLEAVE,
313 config->nick, MSG_SPLIT,
314 status->channel, MSG_SPLIT,
315 config->gender);
316 }
317
make_qprivatleave(void)318 void make_qprivatleave(void) {
319 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c",
320 make_vhead(), MSG_VPRIVAT, MSG_VPRIVATLEAVE,
321 config->nick, MSG_SPLIT,
322 status->channel, MSG_SPLIT);
323 }
324
make_vprivatchat(void)325 void make_vprivatchat(void) {
326 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%s%c",
327 make_vhead(), MSG_VPRIVAT, MSG_VPRIVATCHAT,
328 config->nick, MSG_SPLIT,
329 status->channel, MSG_SPLIT,
330 buf, MSG_SPLIT);
331 }
332
make_vprivatme(void)333 void make_vprivatme(void) {
334 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%u%s%c%s%c%s%c",
335 make_vhead(), MSG_VPRIVAT, MSG_VPRIVATME,
336 config->nick, MSG_SPLIT,
337 status->channel, MSG_SPLIT,
338 buf, MSG_SPLIT);
339 }
340
make_vhere(void)341 void make_vhere(void) {
342 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c",
343 make_vhead(), MSG_VHERE,
344 config->nick, MSG_SPLIT,
345 status->channel, MSG_SPLIT);
346 }
347
make_vherewe(void)348 void make_vherewe(void) {
349 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s%c%s%c%u",
350 make_vhead(), MSG_VHEREWE,
351 status->nick, MSG_SPLIT,
352 status->channel, MSG_SPLIT,
353 config->nick, MSG_SPLIT, config->active);
354 }
355
make_vactive(void)356 void make_vactive(void) {
357 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%u",
358 make_vhead(), MSG_VACTIVE,
359 config->nick, MSG_SPLIT, config->active);
360 }
361
make_vuserchnls(void)362 void make_vuserchnls(void) {
363 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c",
364 make_vhead(), MSG_VUSERCHNLS,
365 config->nick, MSG_SPLIT);
366 }
367
make_vuserchnlslist(void)368 void make_vuserchnlslist(void) {
369 status->packet_len = snprintf(packet, MSG_SIZE, "%s%c%s%c%s#%c",
370 make_vhead(), MSG_VUSERCHNLSLIST,
371 status->nick, MSG_SPLIT,
372 status->info.chnlslist, MSG_SPLIT);
373 }
374