ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/include/parse.h
Revision: 9378
Committed: Sat May 9 21:50:05 2020 UTC (6 years, 2 months ago) by michael
Content type: text/x-chdr
File size: 3622 byte(s)
Log Message:
- Track how many times a command has been issued via ENCAP in Message::ecount. Can be seen in /stats m now.

File Contents

# User Rev Content
1 adx 30 /*
2 michael 2865 * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd)
3 adx 30 *
4 michael 9101 * Copyright (c) 1997-2020 ircd-hybrid development team
5 adx 30 *
6     * This program is free software; you can redistribute it and/or modify
7     * it under the terms of the GNU General Public License as published by
8     * the Free Software Foundation; either version 2 of the License, or
9     * (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18 michael 4565 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
19 adx 30 * USA
20     */
21    
22 michael 2865 /*! \file parse.h
23     * \brief A header for the message parser.
24     * \version $Id$
25     */
26    
27 adx 30 #ifndef INCLUDED_parse_h
28     #define INCLUDED_parse_h
29    
30     struct Client;
31    
32 michael 1243
33     /*
34     * m_functions execute protocol messages on this server:
35 michael 3159 * int m_func(struct Client *source_p, int parc, char *parv[]);
36 michael 1243 *
37 michael 3159 * source_p is the source of the message, defined by the
38     * prefix part of the message if present. If not
39     * then it is the client of the physical connection.
40     * Note that prefixes are only taken from servers.
41 michael 1243 *
42 michael 3159 * parc number of variable parameter strings (if zero,
43     * parv is allowed to be NULL)
44 michael 1243 *
45 michael 3159 * parv a NULL terminated list of parameter pointers,
46 michael 1243 *
47 michael 3159 * parv[0] command
48     * parv[1]...parv[parc - 1] pointers to additional parameters
49     * parv[parc] == NULL, *always*
50 michael 1243 *
51 michael 3159 * note: it is guaranteed that parv[0]..parv[parc - 1] are all
52     * non-NULL pointers.
53 michael 1243 */
54    
55     /*
56     * MessageHandler
57     */
58 michael 3159 typedef enum HandlerType
59     {
60 michael 1243 UNREGISTERED_HANDLER,
61     CLIENT_HANDLER,
62     SERVER_HANDLER,
63     ENCAP_HANDLER,
64     OPER_HANDLER,
65     LAST_HANDLER_TYPE
66     } HandlerType;
67    
68 michael 9374 struct MessageHandler
69     {
70     bool empty_last_arg; /**< Last argument is allowed to be empty / NUL */
71 michael 9375 unsigned int args_min; /**< At least this many args must be passed or an error will
72     be sent to the user before the m_func is even called */
73     unsigned int args_max; /**< Maximum permitted parameters. If reached, the rest
74     of the message will be put into this last parameter */
75 michael 9374 void (*handler)(struct Client *, int, char *[]);
76     };
77    
78 michael 2865 /*
79     * Message table structure
80 michael 1243 */
81     struct Message
82     {
83 michael 9378 const char *cmd; /**< The actual command string */
84 michael 4549 void *extra;
85 michael 9375 unsigned int count; /**< Number of times command used */
86     unsigned int rcount; /**< Number of times command used by server */
87 michael 9378 unsigned int ecount; /**< Number of times command has been issued via ENCAP */
88 michael 5881 unsigned int flags;
89 michael 9375 uintmax_t bytes; /**< Bytes received for this message */
90 michael 1243
91     /* handlers:
92 michael 5881 * UNREGISTERED, CLIENT, SERVER, ENCAP, OPER, LAST
93 michael 1243 */
94 michael 9374 struct MessageHandler handlers[LAST_HANDLER_TYPE];
95 michael 1243 };
96    
97 michael 9375 /** See 2.3 Messages in RFC1459 */
98     enum { MAXPARA = 15 };
99 michael 1243
100 michael 8715 enum
101     {
102     MFLG_EXTRA = 1 << 0,
103     MFLG_ENDGRACE = 1 << 1
104     };
105    
106 adx 30 extern void parse(struct Client *, char *, char *);
107     extern void mod_add_cmd(struct Message *);
108     extern void mod_del_cmd(struct Message *);
109     extern struct Message *find_command(const char *);
110     extern void report_messages(struct Client *);
111    
112 michael 1243 /* generic handlers */
113 michael 9077 extern void m_ignore(struct Client *, int, char *[]);
114     extern void m_not_oper(struct Client *, int, char *[]);
115     extern void m_registered(struct Client *, int, char *[]);
116     extern void m_unregistered(struct Client *, int, char *[]);
117 michael 8479 #endif /* INCLUDED_parse_h */

Properties

Name Value
svn:eol-style native
svn:keywords Id