]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - include/users.h
Fixed gentoo (mainly) compatibility -- missing strlcat in this implementation:
[user/henk/code/inspircd.git] / include / users.h
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
6  *                       E-mail:
7  *                <brain@chatspike.net>
8  *                <Craig@chatspike.net>
9  *     
10  * Written by Craig Edwards, Craig McLure, and others.
11  * This program is free but copyrighted software; see
12  *            the file COPYING for details.
13  *
14  * ---------------------------------------------------
15  */
16
17 #include "inspircd_config.h" 
18 #include "channels.h"
19 #include "connection.h"
20 #include "inspstring.h"
21 #include <string>
22  
23 #ifndef __USERS_H__ 
24 #define __USERS_H__ 
25  
26 #define STATUS_OP       4
27 #define STATUS_HOP      2
28 #define STATUS_VOICE    1
29 #define STATUS_NORMAL   0
30
31 #define CC_ALLOW        0
32 #define CC_DENY         1
33
34 /** Holds a channel name to which a user has been invited.
35  */
36 class Invited : public classbase
37 {
38  public:
39         char channel[CHANMAX];
40 };
41
42
43 /** Holds information relevent to &lt;connect allow&gt; and &lt;connect deny&gt; tags in the config file.
44  */
45 class ConnectClass : public classbase
46 {
47  public:
48         /** Type of line, either CC_ALLOW or CC_DENY
49          */
50         int type;
51         /** Max time to register the connection in seconds
52          */
53         int registration_timeout;
54         /** Number of lines in buffer before excess flood is triggered
55          */
56         int flood;
57         /** Host mask for this line
58          */
59         char host[MAXBUF];
60         /** (Optional) Password for this line
61          */
62         char pass[MAXBUF];
63         
64         ConnectClass()
65         {
66                 registration_timeout = 0;
67                 flood = 0;
68                 strlcpy(host,"",MAXBUF);
69                 strlcpy(pass,"",MAXBUF);
70         }
71 };
72
73 /** Holds a complete list of all channels to which a user has been invited and has not yet joined.
74  */
75 typedef std::vector<Invited> InvitedList;
76
77
78
79 /** Holds a complete list of all allow and deny tags from the configuration file (connection classes)
80  */
81 typedef std::vector<ConnectClass> ClassVector;
82
83 /** Holds all information about a user
84  * This class stores all information about a user connected to the irc server. Everything about a
85  * connection is stored here primarily, from the user's socket ID (file descriptor) through to the
86  * user's nickname and hostname. Use the Find method of the server class to locate a specific user
87  * by nickname.
88  */
89 class userrec : public connection
90 {
91  private:
92
93         /** A list of channels the user has a pending invite to.
94          */
95         InvitedList invites;
96  public:
97         
98         /** The users nickname.
99          * An invalid nickname indicates an unregistered connection prior to the NICK command.
100          */
101         
102         char nick[NICKMAX];
103         
104         /** The users ident reply.
105          */
106         char ident[64];
107
108         /** The host displayed to non-opers (used for cloaking etc).
109          * This usually matches the value of userrec::host.
110          */
111         char dhost[256];
112         
113         /** The users full name.
114          */
115         char fullname[128];
116         
117         /** The user's mode string.
118          * This may contain any of the following RFC characters: o, w, s, i
119          * Your module may define other mode characters as it sees fit.
120          */
121         char modes[MAXBUF];
122         
123         ucrec chans[MAXCHANS];
124         
125         /** The server the user is connected to.
126          */
127         char server[256];
128         
129         /** The user's away message.
130          * If this string is empty, the user is not marked as away.
131          */
132         char awaymsg[512];
133         
134         /** Stores the result of the last GetFullHost or GetRealHost call.
135          * You may use this to increase the speed of use of this class.
136          */
137         char result[256];
138         
139         /** Number of lines the user can place into the buffer
140          * (up to the global NetBufferSize bytes) before they
141          * are disconnected for excess flood
142          */
143         int flood;
144         
145         /** Number of seconds this user is given to send USER/NICK
146          * If they do not send their details in this time limit they
147          * will be disconnected
148          */
149         unsigned long timeout;
150         
151         /** The oper type they logged in as, if they are an oper.
152          * This is used to check permissions in operclasses, so that
153          * we can say 'yay' or 'nay' to any commands they issue.
154          * The value of this is the value of a valid 'type name=' tag.
155          */
156         char oper[NICKMAX];
157
158         userrec();
159         
160         virtual ~userrec() {  }
161         
162         /** Returns the full displayed host of the user
163          * This member function returns the hostname of the user as seen by other users
164          * on the server, in nick!ident&at;host form.
165          */
166         virtual char* GetFullHost();
167         
168         /** Returns the full real host of the user
169          * This member function returns the hostname of the user as seen by other users
170          * on the server, in nick!ident&at;host form. If any form of hostname cloaking is in operation,
171          * e.g. through a module, then this method will ignore it and return the true hostname.
172          */
173         virtual char* GetFullRealHost();
174         
175         /** Returns true if a user is invited to a channel.
176          */
177         virtual bool IsInvited(char* channel);
178         
179         /** Adds a channel to a users invite list (invites them to a channel)
180          */
181         virtual void InviteTo(char* channel);
182         
183         /** Removes a channel from a users invite list.
184          * This member function is called on successfully joining an invite only channel
185          * to which the user has previously been invited, to clear the invitation.
186          */
187         virtual void RemoveInvite(char* channel);
188         
189         /** Returns true or false for if a user can execute a privilaged oper command.
190          * This is done by looking up their oper type from userrec::oper, then referencing
191          * this to their oper classes and checking the commands they can execute.
192          */
193         bool HasPermission(char* command);
194         
195 };
196
197
198 #endif