2 nterfacer spamscan2 module
3 Copyright (C) 2005 Chris Porter.
7 #include "../localuser/localuserchannel.h"
8 #include "../channel/channel.h"
9 #include "../lib/version.h"
11 #include "../spamscan2/spamscan2.h"
14 #include "nterfacer.h"
16 MODULE_VERSION("$Id: nterfacer_spamscan2.c 663 2006-05-16 17:27:36Z newserv $")
18 #define ERR_TARGET_NOT_FOUND 0x01
19 #define ERR_CHANNEL_NOT_REGISTERED 0x02
20 #define ERR_PROFILE_DOES_NOT_EXIST 0x03
21 #define ERR_BAD_FLAGS 0x04
22 #define ERR_MEMORY_ERROR 0x05
23 #define ERR_CHANNEL_ALREADY_REGISTERED 0x06
25 int handle_getprofile(struct rline
*li
, int argc
, char **argv
);
26 int handle_setprofile(struct rline
*li
, int argc
, char **argv
);
27 int handle_delchan(struct rline
*li
, int argc
, char **argv
);
28 int handle_addchan(struct rline
*li
, int argc
, char **argv
);
30 struct service_node
*s_node
;
33 s_node
= register_service("S2");
37 register_handler(s_node
, "getprofile", 1, handle_getprofile
);
38 register_handler(s_node
, "setprofile", 3, handle_setprofile
);
39 register_handler(s_node
, "delchan", 1, handle_delchan
);
40 register_handler(s_node
, "addchan", 2, handle_addchan
);
45 deregister_service(s_node
);
48 int handle_getprofile(struct rline
*li
, int argc
, char **argv
) {
49 spamscan_channelsettings
*cs
;
52 return ri_error(li
, ERR_TARGET_NOT_FOUND
, "Channel not found");
54 cs
= spamscan_getchannelsettings(argv
[0], 0);
56 return ri_error(li
, ERR_CHANNEL_NOT_REGISTERED
, "Channel not registered");
58 ri_append(li
, "%s", cs
->cp
?cs
->cp
->profilename
:"unknown");
59 ri_append(li
, "%s", printflags(cs
->flags
, s_cfflags
));
63 int handle_setprofile(struct rline
*li
, int argc
, char **argv
) {
64 spamscan_channelsettings
*cs
;
65 spamscan_channelprofile
*cp
;
68 return ri_error(li
, ERR_TARGET_NOT_FOUND
, "Channel not found");
70 cs
= spamscan_getchannelsettings(argv
[0], 0);
72 return ri_error(li
, ERR_CHANNEL_NOT_REGISTERED
, "Channel not registered");
74 cp
= spamscan_getchannelprofile(argv
[1], 0);
76 return ri_error(li
, ERR_PROFILE_DOES_NOT_EXIST
, "Profile does not exist");
78 if(setflags(&cs
->flags
, SPAMSCAN_CF_ALL
, argv
[2], s_cfflags
, REJECT_UNKNOWN
) != REJECT_NONE
)
79 return ri_error(li
, ERR_BAD_FLAGS
, "Bad flags");
81 /* TODO: beat Cruicky till he refactors this functionality */
82 spamscan_checkchannelpresence(findchannel(cs
->channelname
)); /* what if findchannel returns NULL? */
84 cs
->modified
= time(NULL
);
85 cs
->modifiedby
= spamscan_getaccountsettings("nterfacer", 0); /* ugly hack, should be 1... */
86 spamscan_updatechanneldb(cs
);
88 ri_append(li
, "Done.");
92 int handle_delchan(struct rline
*li
, int argc
, char **argv
) {
94 return ri_error(li
, ERR_TARGET_NOT_FOUND
, "Channel not found");
96 if(spamscan_deletechannelsettings(argv
[0]))
97 return ri_error(li
, ERR_CHANNEL_NOT_REGISTERED
, "Channel not registered");
99 ri_append(li
, "Done");
103 int handle_addchan(struct rline
*li
, int argc
, char **argv
) {
104 spamscan_channelsettings
*cs
;
105 spamscan_channelprofile
*cp
;
109 if(argv
[0][0] != '#')
110 return ri_error(li
, ERR_TARGET_NOT_FOUND
, "Channel not found");
112 if(spamscan_getchannelsettings(argv
[0], 0))
113 return ri_error(li
, ERR_CHANNEL_ALREADY_REGISTERED
, "Channel already registered");
115 if((argc
> 2) && (setflags(&flags
, SPAMSCAN_CF_ALL
, argv
[2], s_cfflags
, REJECT_UNKNOWN
) != REJECT_NONE
))
116 return ri_error(li
, ERR_BAD_FLAGS
, "Bad flags");
118 cp
= spamscan_getchannelprofile(argv
[1], 0);
120 return ri_error(li
, ERR_PROFILE_DOES_NOT_EXIST
, "Profile does not exist");
122 cs
= spamscan_getchannelsettings(argv
[0], 1);
124 return ri_error(li
, ERR_MEMORY_ERROR
, "Memory allocation error");
128 cs
->modified
= cs
->added
= time(NULL
);
129 cs
->modifiedby
= cs
->addedby
= spamscan_getaccountsettings("nterfacer", 0); /* ugly hack, should be 1... */
131 sc_index
= findorcreatechanindex(argv
[0]);
133 spamscan_channelext
*ce
= spamscan_getchanext(sc_index
, 1);
136 if (s_nickname
&& !CFIsSuspended(cs
) && sc_index
->channel
) {
138 localjoinchannel(s_nickname
, sc_index
->channel
);
139 localgetops(s_nickname
, sc_index
->channel
);
143 spamscan_insertchanneldb(cs
);
144 spamscan_log("ADDCHAN: %s added %s with flags %s", "nterfacer", argv
[0], printflags(cs
->flags
, s_cfflags
));
146 ri_append(li
, "Done");