X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=include%2Fmotd.h;h=6de178eb01b3005d3021ac143f94041e67e4fc30;hb=refs%2Fheads%2Fupstream-ssl;hp=f77c176659f384e99a55c36db620953d2c2a5aa6;hpb=be881c33c0fe811dacd19e89862c091f053d0ac2;p=ircu2.10.12-pk.git diff --git a/include/motd.h b/include/motd.h index f77c176..6de178e 100644 --- a/include/motd.h +++ b/include/motd.h @@ -19,28 +19,92 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ */ -#ifndef INCLUDED_config_h -#include "config.h" +/** @file + * @brief Message-of-the-day manipulation interface and declarations. + * @version $Id$ + */ + +#ifndef INCLUDED_time_h +#include /* struct tm */ +#define INCLUDED_time_h #endif #ifndef INCLUDED_sys_types_h #include #define INCLUDED_sys_types_h #endif - +#ifndef INCLUDED_res_H +#include "res.h" +#endif struct Client; struct TRecord; +struct StatDesc; + +/** Type of MOTD. */ +enum MotdType { + MOTD_UNIVERSAL, /**< MOTD for all users */ + MOTD_HOSTMASK, /**< MOTD selected by hostmask */ + MOTD_IPMASK, /**< MOTD selected by IP mask */ + MOTD_CLASS /**< MOTD selected by connection class */ +}; + +/** Entry for a single Message Of The Day (MOTD). */ +struct Motd { + struct Motd* next; /**< Next MOTD in the linked list. */ + enum MotdType type; /**< Type of MOTD. */ + char* hostmask; /**< Hostmask if type==MOTD_HOSTMASK, + class name if type==MOTD_CLASS, + text IP mask if type==MOTD_IPMASK. */ + struct irc_in_addr address; /**< Address if type==MOTD_IPMASK. */ + unsigned char addrbits; /**< Number of bits checked in Motd::address. */ + char* path; /**< Pathname of MOTD file. */ + int maxcount; /**< Number of lines for MOTD. */ + struct MotdCache* cache; /**< MOTD cache entry. */ +}; -/* motd_find is used to find a matching T-line if any */ -struct TRecord *motd_find(struct Client* cptr); +/** Length of one MOTD line(80 chars + '\\0'). */ +#define MOTD_LINESIZE 81 +/** Maximum number of lines for local MOTD */ +#define MOTD_MAXLINES 100 +/** Maximum number of lines for remote MOTD */ +#define MOTD_MAXREMOTE 3 + +/** Cache entry for the contents of a MOTD file. */ +struct MotdCache { + struct MotdCache* next; /**< Next MotdCache in list. */ + struct MotdCache** prev_p; /**< Pointer to previous node's next pointer. */ + int ref; /**< Number of references to this entry. */ + char* path; /**< Pathname of file. */ + int maxcount; /**< Number of lines allocated for message. */ + struct tm modtime; /**< Last modification time from file. */ + int count; /**< Actual number of lines used in message. */ + char motd[1][MOTD_LINESIZE]; /**< Message body. */ +}; /* motd_send sends a MOTD off to a user */ -int motd_send(struct Client* cptr, struct TRecord* trec); +int motd_send(struct Client* cptr); /* motd_signon sends a MOTD off to a newly-registered user */ void motd_signon(struct Client* cptr); +/* motd_recache causes all the MOTD caches to be cleared */ +void motd_recache(void); + +/* motd_init initializes the MOTD routines, including reading the + * ircd.motd and remote.motd files into cache + */ +void motd_init(void); + +/* This routine adds a MOTD */ +void motd_add(const char *hostmask, const char *path); + +/* This routine clears the list of MOTDs */ +void motd_clear(void); + +/* This is called to report T-lines */ +void motd_report(struct Client *to, const struct StatDesc *sd, + char *param); +void motd_memory_count(struct Client *cptr); + #endif /* INCLUDED_motd_h */