ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/src/svsignore.C
Revision: 1.5
Committed: Sun Sep 16 18:54:45 2007 UTC (16 years, 8 months ago) by pippijn
Content type: text/plain
Branch: MAIN
Changes since 1.4: +7 -2 lines
Log Message:
#defines to enum

File Contents

# User Rev Content
1 pippijn 1.1 /*
2     * svsignore.C: Services ignore list management.
3 pippijn 1.5 *
4     * Copyright © 2007 Pippijn van Steenhoven / The Ermyth Team
5     * Rights to this code are as documented in COPYING.
6     *
7     *
8     * Portions of this file were derived from sources bearing the following license:
9 pippijn 1.2 * Rights to this code are documented in doc/pod/license.pod.
10 pippijn 1.4 * Copyright © 2005-2007 Atheme Project (http://www.atheme.org)
11 pippijn 1.1 */
12    
13 pippijn 1.5 static char const rcsid[] = "$Id: svsignore.C,v 1.4 2007-08-28 17:08:12 pippijn Exp $";
14 pippijn 1.1
15     #include "atheme.h"
16     #include <account/svsignore.h>
17    
18     svsignore_vector svs_ignore_list;
19    
20     /*
21     * svsignore_add(char *mask, char *reason)
22     *
23     * Services ignore factory.
24     *
25     * Inputs:
26     * - mask to ignore
27     * - reason for ignore
28     *
29     * Outputs:
30     * - on success, a new svsignore object
31     *
32     * Side Effects:
33     * - a services ignore is added
34     *
35     * Bugs:
36     * - this function does not check for dupes
37     */
38     svsignore_t *
39     svsignore_add (char *mask, char *reason)
40     {
41     svsignore_t *svsignore;
42    
43 pippijn 1.4 svsignore = new svsignore_t;
44 pippijn 1.1
45     svs_ignore_list.push_back (svsignore);
46    
47     svsignore->mask = sstrdup (mask);
48     svsignore->settime = NOW;
49     svsignore->reason = sstrdup (reason);
50     cnt.svsignore++;
51    
52     return svsignore;
53     }
54    
55     /*
56     * svsignore_find(user_t *source)
57     *
58     * Finds any services ignores that affect a user.
59     *
60     * Inputs:
61     * - user object to check
62     *
63     * Outputs:
64     * - if any ignores match, the ignore that matches
65     * - if none match, NULL
66     *
67     * Side Effects:
68     * - none
69     */
70     svsignore_t *
71     svsignore_find (user_t *source)
72     {
73     svsignore_t *svsignore;
74 pippijn 1.4 svsignore_vector::iterator it = svs_ignore_list.begin ();
75     svsignore_vector::iterator et = svs_ignore_list.end ();
76 pippijn 1.1 char host[BUFSIZE];
77    
78     if (!use_svsignore)
79     return NULL;
80    
81     *host = '\0';
82     strlcpy (host, source->nick, BUFSIZE);
83     strlcat (host, "!", BUFSIZE);
84     strlcat (host, source->user, BUFSIZE);
85     strlcat (host, "@", BUFSIZE);
86     strlcat (host, source->host, BUFSIZE);
87    
88 pippijn 1.4 while (it != et)
89 pippijn 1.1 {
90     svsignore = *it;
91    
92     if (!match (svsignore->mask, host))
93     return svsignore;
94 pippijn 1.4
95     ++it;
96 pippijn 1.1 }
97    
98     return NULL;
99     }
100    
101     /*
102     * svsignore_delete(svsignore_t *svsignore)
103     *
104     * Destroys a services ignore.
105     *
106     * Inputs:
107     * - svsignore to destroy
108     *
109     * Outputs:
110     * - nothing
111     *
112     * Side Effects:
113     * - a services ignore is destroyed and removed from the list
114     */
115     void
116     svsignore_delete (svsignore_t *svsignore)
117     {
118     svs_ignore_list.erase (svsignore);
119    
120 pippijn 1.4 sfree (svsignore->mask);
121     sfree (svsignore->reason);
122     delete svsignore;
123 pippijn 1.1 }