]> git.ipfire.org Git - thirdparty/sarg.git/blob - include/defs.h
Limit the useragent log period to the same period as the access log
[thirdparty/sarg.git] / include / defs.h
1 /*!\file
2 \brief Declaration of the structures and functions.
3 */
4
5 #ifdef __MINGW32__
6 #define __attribute__(a)
7 #endif
8
9 #include "include/fileobject.h"
10
11 //! \brief Constants to compare the log level to display messages
12 enum DebugLogLevel
13 {
14 //! Process informational messages.
15 LogLevel_Process=1,
16 //! Debug level messages.
17 LogLevel_Debug,
18 //! Display the source file name and line number along with the message.
19 LogLevel_Source,
20 //! Display data about what is processed
21 LogLevel_Data
22 };
23
24 struct ReadLogStruct;//forward declaration
25
26 struct getwordstruct
27 {
28 const char *current;
29 const char *beginning;
30 int modified;
31 };
32
33 typedef struct longlinestruct *longline;
34
35 struct generalitemstruct
36 {
37 //! \c True if the entry is for the total of the file or \c false if it is a single line.
38 int total;
39 //! The user to which the entry apply. The length is limited to ::MAX_USER_LEN.
40 char *user;
41 //! The number of accesses performed by the user.
42 long long nacc;
43 //! The number of bytes transfered.
44 long long nbytes;
45 //! The URL accessed by the user. The length is not limited.
46 char *url;
47 //! The source IP address of the user. The length is limited to ::MAX_IP_LEN.
48 char *ip;
49 //! The time of the access. The length is limited to ::MAX_DATETIME_LEN.
50 char *time;
51 //! The date of the access. The length is limited to ::MAX_DATETIME_LEN.
52 char *date;
53 //! The number of milliseconds spend processing the request.
54 long long nelap;
55 //! The number of bytes fetched from the cache of the proxy (cache hit).
56 long long incache;
57 //! The number of bytes fetched from the site (cache miss).
58 long long oucache;
59 };
60
61 /*!
62 * \brief Error codes returned by process_user.
63 */
64 enum UserProcessError
65 {
66 USERERR_NoError,
67 USERERR_NameTooLong,
68 USERERR_Excluded,
69 USERERR_InvalidChar,
70 USERERR_EmptyUser,
71 USERERR_SysUser,
72 USERERR_Ignored,
73 USERERR_Untracked,
74 };
75
76 /*! \brief What is known about a user.
77 */
78 struct userinfostruct
79 {
80 //! The ID of the user as found in the input file.
81 const char *id;
82 //! The user's IP address.
83 const char *ip;
84 //! \c True if the ID is in fact the IP address from which the user connected.
85 bool id_is_ip;
86 //! \c True if the user doesn't have a report file.
87 bool no_report;
88 //! The name of the user to display in the report.
89 const char *label;
90 //! The mangled name to use in file names of that user.
91 const char *filename;
92 //! \c True if this user is in the topuser list.
93 int topuser;
94 //! A general purpose flag that can be set when scanning the user's list.
95 int flag;
96 #ifdef ENABLE_DOUBLE_CHECK_DATA
97 //! Total number of bytes.
98 long long int nbytes;
99 //! Total time spent processing the requests.
100 long long int elap;
101 #endif
102 };
103
104 //! Scan through the known users.
105 typedef struct userscanstruct *userscan;
106
107 /*! \brief Global statistics
108 */
109 struct globalstatstruct
110 {
111 //! Total number of accesses.
112 long long int nacc;
113 //! Total number of bytes.
114 long long int nbytes;
115 //! Total time spent processing the requests.
116 long long int elap;
117 //! Amount of data fetched from the cache.
118 long long int incache;
119 //! Amount of data not fetched from the cache.
120 long long int oucache;
121 //! The number of users in the topuser list.
122 int totuser;
123 };
124
125 //! The object to store the daily statistics.
126 typedef struct DayStruct *DayObject;
127
128 /*!
129 \brief Log filtering criterion.
130 */
131 struct ReadLogDataStruct
132 {
133 //! The filtering date range.
134 char DateRange[255];
135 //! \c True to filter on hosts.
136 bool HostFilter;
137 //! \c True to filter on users.
138 bool UserFilter;
139 //! Maximum elpased time allowed. Any time greater than this value is set to zero.
140 long int max_elapsed;
141 //! \c True to restrict the log to the system users.
142 bool SysUsers;
143 //! The start time to include in the report(H*100+M). Set to -1 to disable.
144 int StartTime;
145 //! The end time to include in the report(H*100+M). Set to -1 to disable.
146 int EndTime;
147 };
148
149 /*!
150 \brief How to handle the per_user_limit file creation.
151 */
152 enum PerUserFileCreationEnum
153 {
154 //! Purge the file if it exists or create an empty file.
155 PUFC_Always,
156 //! Delete old files and don't create a new file unless necessary.
157 PUFC_AsRequired
158 };
159
160 /*!
161 \brief What to write into the per_user_limit file.
162 */
163 enum PerUserOutputEnum
164 {
165 PUOE_UserId,
166 PUOE_UserIp
167 };
168
169 /*!
170 \brief How to log every user crossing the download limit.
171 */
172 struct PerUserLimitStruct
173 {
174 //! File to save the user's IP or ID to.
175 char File[255];
176 //! Limit above which the user is reported.
177 int Limit;
178 //! What to write into the file.
179 enum PerUserOutputEnum Output;
180 };
181
182 // auth.c
183 void htaccess(const struct userinfostruct *uinfo);
184
185 // authfail.c
186 void authfail_open(void);
187 void authfail_write(const struct ReadLogStruct *log_entry);
188 void authfail_close(void);
189 bool is_authfail(void);
190 void authfail_report(void);
191 void authfail_cleanup(void);
192
193 // convlog.c
194 void convlog(const char* arq, char df, int dfrom, int duntil);
195
196 // css.c
197 void css_content(FILE *fp_css);
198 void css(FILE *fp_css);
199
200 // dansguardian_log.c
201 void dansguardian_log(void);
202
203 // dansguardian_report.c
204 void dansguardian_report(void);
205
206 // datafile.c
207 void data_file(char *tmp);
208
209 // decomp.c
210 FileObject *decomp(const char *arq);
211
212 // denied.c
213 void denied_open(void);
214 void denied_write(const struct ReadLogStruct *log_entry);
215 void denied_close(void);
216 bool is_denied(void);
217 void gen_denied_report(void);
218 void denied_cleanup(void);
219
220 // download.c
221 void download_open(void);
222 void download_write(const struct ReadLogStruct *log_entry,const char *url);
223 void download_close(void);
224 bool is_download(void);
225 void download_report(void);
226 void free_download(void);
227 void set_download_suffix(const char *list);
228 bool is_download_suffix(const char *url);
229 void download_cleanup(void);
230
231 // email.c
232 FILE *Email_OutputFile(const char *Module);
233 void Email_Send(FILE *fp,const char *Subject);
234
235 // exclude.c
236 void gethexclude(const char *hexfile, int debug);
237 void getuexclude(const char *uexfile, int debug);
238 int vhexclude(const char *url);
239 int vuexclude(const char *user);
240 bool is_indexonly(void);
241 void free_exclude(void);
242
243 #ifndef HAVE_FNMATCH
244 // fnmtach.c
245 int fnmatch(const char *pattern,const char *string,int flags);
246 #endif
247
248 // getconf.c
249 void getconf(const char *File);
250
251 // grepday.c
252 void greport_prepare(void);
253 void greport_day(const struct userinfostruct *user);
254 void greport_cleanup(void);
255
256 // html.c
257 void htmlrel(void);
258
259 // indexonly.c
260 void index_only(const char *dirname,int debug);
261
262 // ip2name.c
263 int ip2name_config(const char *param);
264 void ip2name_forcedns(void);
265 void ip2name(char *ip,int ip_len);
266 void ip2name_cleanup(void);
267 void name2ip(char *name,int name_size);
268
269 // lastlog.c
270 void mklastlog(const char *outdir);
271
272 // longline.c
273 __attribute__((warn_unused_result)) /*@null@*//*@only@*/longline longline_create(void);
274 void longline_reset(longline line);
275 /*@null@*/char *longline_read(FileObject *fp_in,/*@null@*/longline line);
276 void longline_destroy(/*@out@*//*@only@*//*@null@*/longline *line_ptr);
277
278 // index.c
279 void make_index(void);
280
281 // readlog.c
282 int ReadLogFile(struct ReadLogDataStruct *Filter);
283 bool GetLogPeriod(struct tm *Start,struct tm *End);
284
285 // realtime.c
286 void realtime(void);
287
288 // redirector.c
289 void redirector_log(void);
290 void redirector_report(void);
291
292 // repday.c
293 void report_day(const struct userinfostruct *user);
294
295 // report.c
296 void gerarel(void);
297 int ger_read(char *buffer,struct generalitemstruct *item,const char *filename);
298 void totalger(FILE *fp_gen,const char *filename);
299
300 // siteuser.c
301 void siteuser(void);
302
303 // smartfilter.c
304 void smartfilter_report(void);
305
306 // sort.c
307 void sort_users_log(const char *tmp, int debug,struct userinfostruct *uinfo);
308 void tmpsort(const struct userinfostruct *uinfo);
309 void sort_labels(const char **label,const char **order);
310
311 // splitlog.c
312 void splitlog(const char *arq, char df, int dfrom, int duntil, int convert, const char *splitprefix);
313
314 // topsites.c
315 void topsites(void);
316
317 // topuser.c
318 void topuser(void);
319
320 // totday.c
321 DayObject day_prepare(void);
322 void day_cleanup(DayObject ddata);
323 void day_newuser(DayObject ddata);
324 void day_addpoint(DayObject ddata,const char *date, const char *time, long long int elap, long long int bytes);
325 void day_totalize(DayObject ddata,const char *tmp, const struct userinfostruct *uinfo);
326 void day_deletefile(const struct userinfostruct *uinfo);
327
328 // url.c
329 void read_hostalias(const char *Filename);
330 void free_hostalias(void);
331 const char *skip_scheme(const char *url);
332 const char *process_url(const char *url,bool full_url);
333 void url_hostname(const char *url,char *hostname,int hostsize);
334
335 // usage.c
336 void usage(const char *prog);
337
338 // useragent.c
339 FILE *UserAgent_Open(void);
340 void UserAgent_Write(FILE *fp,const char *Ip,const char *User,const char *Agent);
341 void UserAgent_Readlog(void);
342 void UserAgent(void);
343
344 // userinfo.c
345 /*@shared@*/struct userinfostruct *userinfo_create(const char *userid, const char *ip);
346 void userinfo_free(void);
347 void userinfo_label(struct userinfostruct *uinfo,const char *label);
348 /*@shared@*/struct userinfostruct *userinfo_find_from_file(const char *filename);
349 /*@shared@*/struct userinfostruct *userinfo_find_from_id(const char *id);
350 /*@shared@*/struct userinfostruct *userinfo_find_from_ip(const char *ip);
351 userscan userinfo_startscan(void);
352 void userinfo_stopscan(userscan uscan);
353 struct userinfostruct *userinfo_advancescan(userscan uscan);
354 void userinfo_clearflag(void);
355 void read_useralias(const char *Filename);
356 void free_useralias(void);
357 enum UserProcessError process_user(const char **UserPtr,const char *IpAddress,bool *IsIp);
358
359 // usertab.c
360 void init_usertab(const char *UserTabFile);
361 void user_find(char *mappedname, int namelen, const char *userlogin);
362 void close_usertab(void);
363
364 // util.c
365 void getword_start(/*@out@*/struct getwordstruct *gwarea, const char *line);
366 void getword_restart(struct getwordstruct *gwarea);
367 __attribute__((warn_unused_result)) int getword(/*@out@*/char *word, int limit, struct getwordstruct *gwarea, char stop);
368 __attribute__((warn_unused_result)) int getword_limit(/*@out@*/char *word, int limit, struct getwordstruct *gwarea, char stop);
369 __attribute__((warn_unused_result)) int getword_multisep(/*@out@*/char *word, int limit, struct getwordstruct *gwarea, char stop);
370 __attribute__((warn_unused_result)) int getword_skip(int limit, struct getwordstruct *gwarea, char stop);
371 __attribute__((warn_unused_result)) int getword_atoll(/*@out@*/long long int *number, struct getwordstruct *gwarea, char stop);
372 __attribute__((warn_unused_result)) int getword_atoi(/*@out@*/int *number, struct getwordstruct *gwarea, char stop);
373 __attribute__((warn_unused_result)) int getword_atol(long int *number, struct getwordstruct *gwarea, char stop);
374 __attribute__((warn_unused_result)) int getword_atolu(unsigned long int *number, struct getwordstruct *gwarea, char stop);
375 __attribute__((warn_unused_result)) int getword_ptr(char *orig_line,/*@out@*/char **word, struct getwordstruct *gwarea, char stop);
376 long long int my_atoll (const char *nptr);
377 int is_absolute(const char *path);
378 int getnumlist(char *, numlist *, const int, const int);
379 int conv_month(const char *month);
380 const char *conv_month_name(int month);
381 void buildymd(const char *dia, const char *mes, const char *ano, char *wdata,int wdata_size);
382 void date_from(char *date,int date_size, int *dfrom, int *duntil);
383 char *fixnum(long long int value, int n);
384 char *fixnum2(long long int value, int n);
385 void fixnone(char *str);
386 char *fixtime(long long int elap);
387 void fixendofline(char *str);
388 void show_info(FILE *fp_ou);
389 void show_sarg(FILE *fp_ou, int depth);
390 void write_logo_image(FILE *fp_ou);
391 void write_html_head(FILE *fp_ou, int depth, const char *page_title,int javascript);
392 void write_html_header(FILE *fp_ou, int depth, const char *title,int javascript);
393 void close_html_header(FILE *fp_ou);
394 void write_html_trailer(FILE *fp_ou);
395 void output_html_string(FILE *fp_ou,const char *str,int maxlen);
396 void output_html_url(FILE *fp_ou,const char *url);
397 void output_html_link(FILE *fp_ou,const char *url,int maxlen);
398 void debuga(const char *File, int Line, const char *msg,...) __attribute__((format(printf,3,4)));
399 void debuga_more(const char *msg,...) __attribute__((format(printf,1,2)));
400 void debugaz(const char *File,int Line,const char *msg,...) __attribute__((format(printf,3,4)));
401 void my_lltoa(unsigned long long int n, char *s, int ssize, int len);
402 void url_module(const char *url, char *w2);
403 void url_to_anchor(const char *url,char *anchor,int size);
404 void safe_strcpy(char *dest,const char *src,int length);
405 void strip_latin(char *line);
406 char *buildtime(long long int elap);
407 int obtdate(const char *dirname, const char *name, char *data);
408 void formatdate(char *date,int date_size,int year,int month,int day,int hour,int minute,int second,int dst);
409 void computedate(int year,int month,int day,struct tm *t);
410 int obtuser(const char *dirname, const char *name);
411 void obttotal(const char *dirname, const char *name, int nuser, long long int *tbytes, long long int *media);
412 void version(void);
413 int vercode(const char *code);
414 void load_excludecodes(const char *ExcludeCodes);
415 void free_excludecodes(void);
416 int PortableMkDir(const char *path,int mode);
417 void my_mkdir(const char *name);
418 int testvaliduserchar(const char *user);
419 char *strlow(char *string);
420 char *strup(char *string);
421 int month2num(const char *month);
422 int builddia(int day, int month, int year);
423 int compare_date(struct tm *date1,struct tm *date2);
424 bool IsTreeFileDirName(const char *Name);
425 bool IsTreeYearFileName(const char *Name);
426 bool IsTreeMonthFileName(const char *Name);
427 bool IsTreeDayFileName(const char *Name);
428 int vrfydir(const struct periodstruct *per1, const char *addr, const char *site, const char *us);
429 int getperiod_fromsarglog(const char *arqtt,struct periodstruct *period);
430 void getperiod_fromrange(struct periodstruct *period,int dfrom,int duntil);
431 void getperiod_torange(const struct periodstruct *period,int *dfrom,int *duntil);
432 void getperiod_merge(struct periodstruct *main,struct periodstruct *candidate);
433 int getperiod_buildtext(struct periodstruct *period);
434 void removetmp(const char *outdir);
435 void zdate(char *ftime,int ftimesize, char DateFormat);
436 char *get_param_value(const char *param,char *line);
437 int compar( const void *, const void * );
438 void unlinkdir(const char *dir,bool contentonly);
439 void emptytmpdir(const char *dir);
440 int extract_address_mask(const char *buf,const char **text,unsigned char *ipv4,unsigned short int *ipv6,int *nbits,const char **next);