"Fossies" - the Fresh Open Source Software Archive

Member "sarg-2.4.0/include/defs.h" (24 Dec 2019, 15100 Bytes) of package /linux/privat/sarg-2.4.0.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "defs.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 2.3.11_vs_2.4.0.

    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     //! First date to include in the report. The format is year*10000+month+100+day.
  136     int StartDate;
  137     //! Last date to include in the report. The format is year*10000+month+100+day.
  138     int EndDate;
  139     //! \c True to filter on hosts.
  140     bool HostFilter;
  141     //! \c True to filter on users.
  142     bool UserFilter;
  143     //! Maximum elpased time allowed. Any time greater than this value is set to zero.
  144     long int max_elapsed;
  145     //! \c True to restrict the log to the system users.
  146     bool SysUsers;
  147     //! The start time to include in the report(H*100+M). Set to -1 to disable.
  148     int StartTime;
  149     //! The end time to include in the report(H*100+M). Set to -1 to disable.
  150     int EndTime;
  151 };
  152 
  153 /*!
  154 \brief How to handle the per_user_limit file creation.
  155 */
  156 enum PerUserFileCreationEnum
  157 {
  158     //! Purge the file if it exists or create an empty file.
  159     PUFC_Always,
  160     //! Delete old files and don't create a new file unless necessary.
  161     PUFC_AsRequired
  162 };
  163 
  164 /*!
  165 \brief What to write into the per_user_limit file.
  166 */
  167 enum PerUserOutputEnum
  168 {
  169     PUOE_UserId,
  170     PUOE_UserIp
  171 };
  172 
  173 /*!
  174 \brief How to log every user crossing the download limit.
  175 */
  176 struct PerUserLimitStruct
  177 {
  178     //! File to save the user's IP or ID to.
  179     char File[255];
  180     //! Limit above which the user is reported.
  181     int Limit;
  182     //! What to write into the file.
  183     enum PerUserOutputEnum Output;
  184 };
  185 
  186 // auth.c
  187 void htaccess(const struct userinfostruct *uinfo);
  188 
  189 // authfail.c
  190 void authfail_open(void);
  191 void authfail_write(const struct ReadLogStruct *log_entry);
  192 void authfail_close(void);
  193 bool is_authfail(void);
  194 void authfail_report(void);
  195 void authfail_cleanup(void);
  196 
  197 // convlog.c
  198 void convlog(const char* arq, char df, const struct ReadLogDataStruct *ReadFilter);
  199 
  200 // css.c
  201 void css_content(FILE *fp_css);
  202 void css(FILE *fp_css);
  203 
  204 // dansguardian_log.c
  205 void dansguardian_log(const struct ReadLogDataStruct *ReadFilter);
  206 
  207 // dansguardian_report.c
  208 void dansguardian_report(void);
  209 
  210 // datafile.c
  211 void data_file(char *tmp);
  212 
  213 // decomp.c
  214 FileObject *decomp(const char *arq);
  215 
  216 // denied.c
  217 void denied_open(void);
  218 void denied_write(const struct ReadLogStruct *log_entry);
  219 void denied_close(void);
  220 bool is_denied(void);
  221 void gen_denied_report(void);
  222 void denied_cleanup(void);
  223 
  224 // download.c
  225 void download_open(void);
  226 void download_write(const struct ReadLogStruct *log_entry,const char *url);
  227 void download_close(void);
  228 bool is_download(void);
  229 void download_report(void);
  230 void free_download(void);
  231 void set_download_suffix(const char *list);
  232 bool is_download_suffix(const char *url);
  233 void download_cleanup(void);
  234 
  235 // email.c
  236 FILE *Email_OutputFile(const char *Module);
  237 void Email_Send(FILE *fp,const char *Subject);
  238 
  239 // exclude.c
  240 void gethexclude(const char *hexfile, int debug);
  241 void getuexclude(const char *uexfile, int debug);
  242 int vhexclude(const char *url);
  243 int vuexclude(const char *user);
  244 bool is_indexonly(void);
  245 void free_exclude(void);
  246 
  247 #ifndef HAVE_FNMATCH
  248 // fnmtach.c
  249 int fnmatch(const char *pattern,const char *string,int flags);
  250 #endif
  251 
  252 // getconf.c
  253 void getconf(const char *File);
  254 
  255 // grepday.c
  256 void greport_prepare(void);
  257 void greport_day(const struct userinfostruct *user);
  258 void greport_cleanup(void);
  259 
  260 // html.c
  261 void htmlrel(void);
  262 
  263 // indexonly.c
  264 void index_only(const char *dirname,int debug);
  265 
  266 // ip2name.c
  267 int ip2name_config(const char *param);
  268 void ip2name_forcedns(void);
  269 void ip2name(char *ip,int ip_len);
  270 void ip2name_cleanup(void);
  271 void name2ip(char *name,int name_size);
  272 
  273 // lastlog.c
  274 void mklastlog(const char *outdir);
  275 
  276 // longline.c
  277 __attribute__((warn_unused_result)) /*@null@*//*@only@*/longline longline_create(void);
  278 void longline_reset(longline line);
  279 /*@null@*/char *longline_read(FileObject *fp_in,/*@null@*/longline line);
  280 void longline_destroy(/*@out@*//*@only@*//*@null@*/longline *line_ptr);
  281 
  282 // index.c
  283 void make_index(void);
  284 
  285 // readlog.c
  286 int ReadLogFile(struct ReadLogDataStruct *Filter);
  287 bool GetLogPeriod(struct tm *Start,struct tm *End);
  288 
  289 // realtime.c
  290 void realtime(void);
  291 
  292 // redirector.c
  293 void redirector_log(const struct ReadLogDataStruct *ReadFilter);
  294 void redirector_report(void);
  295 
  296 // repday.c
  297 void report_day(const struct userinfostruct *user);
  298 
  299 // report.c
  300 void gerarel(const struct ReadLogDataStruct *ReadFilter);
  301 int ger_read(char *buffer,struct generalitemstruct *item,const char *filename);
  302 void totalger(FILE *fp_gen,const char *filename);
  303 
  304 // siteuser.c
  305 void siteuser(void);
  306 
  307 // smartfilter.c
  308 void smartfilter_report(void);
  309 
  310 // sort.c
  311 void sort_users_log(const char *tmp, int debug,struct userinfostruct *uinfo);
  312 void tmpsort(const struct userinfostruct *uinfo);
  313 void sort_labels(const char **label,const char **order);
  314 
  315 // splitlog.c
  316 void splitlog(const char *arq, char df, const struct ReadLogDataStruct *ReadFilter, int convert, const char *splitprefix);
  317 
  318 // topsites.c
  319 void topsites(void);
  320 
  321 // topuser.c
  322 void topuser(void);
  323 
  324 // totday.c
  325 DayObject day_prepare(void);
  326 void day_cleanup(DayObject ddata);
  327 void day_newuser(DayObject ddata);
  328 void day_addpoint(DayObject ddata,const char *date, const char *time, long long int elap, long long int bytes);
  329 void day_totalize(DayObject ddata,const char *tmp, const struct userinfostruct *uinfo);
  330 void day_deletefile(const struct userinfostruct *uinfo);
  331 
  332 // url.c
  333 void read_hostalias(const char *Filename);
  334 void free_hostalias(void);
  335 const char *skip_scheme(const char *url);
  336 const char *process_url(const char *url,bool full_url);
  337 void url_hostname(const char *url,char *hostname,int hostsize);
  338 
  339 // usage.c
  340 void usage(const char *prog);
  341 
  342 // useragent.c
  343 FILE *UserAgent_Open(void);
  344 void UserAgent_Write(FILE *fp,const struct tm *Time,const char *Ip,const char *User,const char *Agent);
  345 void UserAgent_Readlog(const struct ReadLogDataStruct *ReadFilter);
  346 void UserAgent(void);
  347 
  348 // userinfo.c
  349 /*@shared@*/struct userinfostruct *userinfo_create(const char *userid, const char *ip);
  350 void userinfo_free(void);
  351 void userinfo_label(struct userinfostruct *uinfo,const char *label);
  352 /*@shared@*/struct userinfostruct *userinfo_find_from_file(const char *filename);
  353 /*@shared@*/struct userinfostruct *userinfo_find_from_id(const char *id);
  354 /*@shared@*/struct userinfostruct *userinfo_find_from_ip(const char *ip);
  355 userscan userinfo_startscan(void);
  356 void userinfo_stopscan(userscan uscan);
  357 struct userinfostruct *userinfo_advancescan(userscan uscan);
  358 void userinfo_clearflag(void);
  359 void read_useralias(const char *Filename);
  360 void free_useralias(void);
  361 enum UserProcessError process_user(const char **UserPtr,const char *IpAddress,bool *IsIp);
  362 
  363 // usertab.c
  364 void init_usertab(const char *UserTabFile);
  365 void user_find(char *mappedname, int namelen, const char *userlogin);
  366 void close_usertab(void);
  367 
  368 // util.c
  369 void getword_start(/*@out@*/struct getwordstruct *gwarea, const char *line);
  370 void getword_restart(struct getwordstruct *gwarea);
  371 __attribute__((warn_unused_result)) int getword(/*@out@*/char *word, int limit, struct getwordstruct *gwarea, char stop);
  372 __attribute__((warn_unused_result)) int getword_limit(/*@out@*/char *word, int limit, struct getwordstruct *gwarea, char stop);
  373 __attribute__((warn_unused_result)) int getword_multisep(/*@out@*/char *word, int limit, struct getwordstruct *gwarea, char stop);
  374 __attribute__((warn_unused_result)) int getword_skip(int limit, struct getwordstruct *gwarea, char stop);
  375 __attribute__((warn_unused_result)) int getword_atoll(/*@out@*/long long int *number, struct getwordstruct *gwarea, char stop);
  376 __attribute__((warn_unused_result)) int getword_atoi(/*@out@*/int *number, struct getwordstruct *gwarea, char stop);
  377 __attribute__((warn_unused_result)) int getword_atol(long int *number, struct getwordstruct *gwarea, char stop);
  378 __attribute__((warn_unused_result)) int getword_atolu(unsigned long int *number, struct getwordstruct *gwarea, char stop);
  379 __attribute__((warn_unused_result)) int getword_ptr(char *orig_line,/*@out@*/char **word, struct getwordstruct *gwarea, char stop);
  380 long long int my_atoll (const char *nptr);
  381 int is_absolute(const char *path);
  382 void getnumlist(const char *paramname, const char *buffer, int *list, int maxvalue);
  383 bool numlistcontains(const int *list, int maxvalue, int value);
  384 int conv_month(const char *month);
  385 const char *conv_month_name(int month);
  386 void buildymd(const char *dia, const char *mes, const char *ano, char *wdata,int wdata_size);
  387 void date_from(struct ReadLogDataStruct *ReadFilter);
  388 char *fixnum(long long int value, int n);
  389 char *fixnum2(long long int value, int n);
  390 void fixnone(char *str);
  391 char *fixtime(long long int elap);
  392 void fixendofline(char *str);
  393 void show_info(FILE *fp_ou);
  394 void show_sarg(FILE *fp_ou, int depth);
  395 void write_logo_image(FILE *fp_ou);
  396 void write_html_head(FILE *fp_ou, int depth, const char *page_title,int javascript);
  397 void write_html_header(FILE *fp_ou, int depth, const char *title,int javascript);
  398 void close_html_header(FILE *fp_ou);
  399 void write_html_trailer(FILE *fp_ou);
  400 void output_html_string(FILE *fp_ou,const char *str,int maxlen);
  401 void output_html_url(FILE *fp_ou,const char *url);
  402 void output_html_link(FILE *fp_ou,const char *url,int maxlen);
  403 void debuga(const char *File, int Line, const char *msg,...) __attribute__((format(printf,3,4)));
  404 void debuga_more(const char *msg,...) __attribute__((format(printf,1,2)));
  405 void debugaz(const char *File,int Line,const char *msg,...) __attribute__((format(printf,3,4)));
  406 void my_lltoa(unsigned long long int n, char *s, int ssize, int len);
  407 void url_module(const char *url, char *w2);
  408 void url_to_anchor(const char *url,char *anchor,int size);
  409 void safe_strcpy(char *dest,const char *src,int length);
  410 void strip_latin(char *line);
  411 char *buildtime(long long int elap);
  412 int obtdate(const char *dirname, const char *name, char *data);
  413 void formatdate(char *date,int date_size,int year,int month,int day,int hour,int minute,int second,int dst);
  414 void computedate(int year,int month,int day,struct tm *t);
  415 int obtuser(const char *dirname, const char *name);
  416 void obttotal(const char *dirname, const char *name, int nuser, long long int *tbytes, long long int *media);
  417 void version(void);
  418 int vercode(const char *code);
  419 void load_excludecodes(const char *ExcludeCodes);
  420 void free_excludecodes(void);
  421 int PortableMkDir(const char *path,int mode);
  422 bool my_mkdir(const char *name);
  423 void makeTmpDir(const char *tmp);
  424 int testvaliduserchar(const char *user);
  425 char *strlow(char *string);
  426 char *strup(char *string);
  427 int month2num(const char *month);
  428 int builddia(int day, int month, int year);
  429 int compare_date(const struct tm *date1,const struct tm *date2);
  430 bool IsTreeFileDirName(const char *Name);
  431 bool IsTreeYearFileName(const char *Name);
  432 bool IsTreeMonthFileName(const char *Name);
  433 bool IsTreeDayFileName(const char *Name);
  434 int vrfydir(const struct periodstruct *per1, const char *addr, const char *site, const char *us);
  435 int getperiod_fromsarglog(const char *arqtt,struct periodstruct *period);
  436 void getperiod_fromrange(struct periodstruct *period,const struct ReadLogDataStruct *ReadFilter);
  437 void getperiod_torange(const struct periodstruct *period,int *dfrom,int *duntil);
  438 void getperiod_merge(struct periodstruct *main,struct periodstruct *candidate);
  439 int getperiod_buildtext(struct periodstruct *period);
  440 void removetmp(const char *outdir);
  441 void zdate(char *ftime,int ftimesize, char DateFormat);
  442 char *get_param_value(const char *param,char *line);
  443 int compar( const void *, const void * );
  444 void unlinkdir(const char *dir,bool contentonly);
  445 void emptytmpdir(const char *dir);
  446 int extract_address_mask(const char *buf,const char **text,unsigned char *ipv4,unsigned short int *ipv6,int *nbits,const char **next);
  447 int format_path(const char *file, int line, char *output_buffer, int buffer_size, const char *format,...);
  448 void append_to_path(char *base_path, int base_path_size, const char *append);