Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals  

loaders.h File Reference

Functions to load and unload the various configuration files. More...

Go to the source code of this file.

Defines

#define LOADERS_H_VERSION   "$Id: loaders.h,v 2.1 2002/06/04 17:22:37 jongfoster Exp $"
#define NEWLINE_UNKNOWN   0
#define NEWLINE_UNIX   1
#define NEWLINE_DOS   2
#define NEWLINE_MAC   3
#define NEWLINE(style)

Functions

void sweep (void)
char * read_config_line (char *buf, size_t buflen, FILE *fp, unsigned long *linenum)
int check_file_changed (const struct file_list *current, const char *filename, struct file_list **newfl)
jb_err edit_read_line (FILE *fp, char **raw_out, char **prefix_out, char **data_out, int *newline, unsigned long *line_number)
jb_err simple_read_line (FILE *fp, char **dest, int *newline)
int load_actions_file (struct client_state *csp)
int load_re_filterfile (struct client_state *csp)
void add_loader (int(*loader)(struct client_state *), struct configuration_spec *config)
int run_loader (struct client_state *csp)

Variables

short int MustReload
const char loaders_rcs []
const char loaders_h_rcs []


Detailed Description

Functions to load and unload the various configuration files.

Also contains code to manage the list of active loaders, and to automatically unload files that are no longer in use.

Log:
loaders.h,v
Revision 2.1 2002/06/04 17:22:37 jongfoster Adding comments

Revision 2.0 2002/06/04 14:34:21 jongfoster Moving source files to src/

Revision 1.19 2002/03/26 22:29:55 swa we have a new homepage!

Revision 1.18 2002/03/24 13:25:43 swa name change related issues

Revision 1.17 2002/03/16 23:54:06 jongfoster Adding graceful termination feature, to help look for memory leaks. If you enable this (which, by design, has to be done by hand editing config.h) and then go to http://i.j.b/die, then the program will exit cleanly after the *next* request. It should free all the memory that was used.

Revision 1.16 2002/03/07 03:46:17 oes Fixed compiler warnings

Revision 1.15 2002/01/22 23:46:18 jongfoster Moving edit_read_line() and simple_read_line() to loaders.c, and extending them to support reading MS-DOS, Mac and UNIX style files on all platforms.

Modifying read_config_line() (without changing it's prototype) to be a trivial wrapper for edit_read_line(). This means that we have one function to read a line and handle comments, which is common between the initialization code and the edit interface.

Revision 1.14 2002/01/17 21:03:08 jongfoster Moving all our URL and URL pattern parsing code to urlmatch.c.

Renaming free_url to free_url_spec, since it frees a struct url_spec.

Revision 1.13 2001/12/30 14:07:32 steudten

Revision 1.12 2001/11/07 00:02:13 steudten Add line number in error output for lineparsing for actionsfile and configfile. Special handling for CLF added.

Revision 1.11 2001/10/23 21:38:53 jongfoster Adding error-checking to create_url_spec()

Revision 1.10 2001/09/22 16:36:59 jongfoster Removing unused parameter fs from read_config_line()

Revision 1.9 2001/07/30 22:08:36 jongfoster Tidying up defines:

Revision 1.8 2001/07/29 18:58:15 jongfoster Removing nested includes, adding forward declarations for needed structures, and changing the define _FILENAME_H to FILENAME_H_INCLUDED.

Revision 1.7 2001/07/13 14:01:54 oes Removed all ifdef PCRS

Revision 1.6 2001/06/07 23:14:38 jongfoster Removing ACL and forward file loaders - these files have been merged into the config file.

Revision 1.5 2001/05/31 21:28:49 jongfoster Removed all permissionsfile code - it's now called the actions file, and (almost) all the code is in actions.c

Revision 1.4 2001/05/29 09:50:24 jongfoster Unified blocklist/imagelist/permissionslist. File format is still under discussion, but the internal changes are (mostly) done.

Also modified interceptor behaviour:

Revision 1.3 2001/05/26 00:28:36 jongfoster Automatic reloading of config file. Removed obsolete SIGHUP support (Unix) and Reload menu option (Win32). Most of the global variables have been moved to a new struct configuration_spec, accessed through csp->config->globalname Most of the globals remaining are used by the Win32 GUI.

Revision 1.2 2001/05/20 01:21:20 jongfoster Version 2.9.4 checkin.

Revision 1.1.1.1 2001/05/15 13:59:00 oes Initial import of version 2.9.3 source tree


Define Documentation

#define NEWLINE style   
 

Value:

((style)==NEWLINE_DOS ? "\r\n" : \
                        ((style)==NEWLINE_MAC ? "\r" : "\n"))
Types of newlines that a file may contain, as strings.

If you have an extremely wierd compiler that does not have '\r' == CR == ASCII 13 and '
' == LF == ASCII 10), then fix CHAR_CR and CHAR_LF in loaders.c as well as these definitions.

#define NEWLINE_DOS   2
 

Newline convention in file is '\r
' (ASCII 13,10).

#define NEWLINE_MAC   3
 

Newline convention in file is '\r' (ASCII 13).

#define NEWLINE_UNIX   1
 

Newline convention in file is '
' (ASCII 10).

#define NEWLINE_UNKNOWN   0
 

Newline convention in file is unknown.


Function Documentation

void add_loader int(*    loader)(struct client_state *),
struct configuration_spec   config
 

Called from `load_config'.

Called once for each input file found in config.

Parameters:
loader  pointer to a function that can parse and load the appropriate config file.
config  The configuration_spec to add the loader to.
Returns:
N/A

int check_file_changed const struct file_list   current,
const char *    filename,
struct file_list **    newfl
 

Helper function to check if a file needs reloading.

If "current" is still current, return it. Otherwise allocates a new (zeroed) "struct file_list", fills in the disk file name and timestamp, and returns it.

Parameters:
current  The file_list currently being used - will be checked to see if it is out of date. May be NULL (which is treated as out of date).
filename  Name of file to check.
newfl  New file list. [Output only] This will be set to NULL, OR a struct file_list newly allocated on the heap, with the filename and lastmodified fields filled, and all others zeroed.
Returns:
If file unchanged: 0 (and sets newfl == NULL) If file changed: 1 and sets newfl != NULL On error: 1 and sets newfl == NULL

jb_err edit_read_line FILE *    fp,
char **    raw_out,
char **    prefix_out,
char **    data_out,
int *    newline,
unsigned long *    line_number
 

Read a single non-empty line from a file and return it.

Trims comments, leading and trailing whitespace and respects escaping of newline and comment char. Provides the line in 2 alternative forms: raw and preprocessed.

  • raw is the raw data read from the file. If the line is not modified, then this should be written to the new file.
  • prefix is any comments and blank lines that were read from the file. If the line is modified, then this should be written out to the file followed by the modified data. (If this string is non-empty then it will have a newline at the end).
  • data is the actual data that will be parsed further by appropriate routines. On EOF, the 3 strings will all be set to NULL and 0 will be returned.
Parameters:
fp  File to read from
raw_out  destination for newly malloc'd pointer to raw line data. May be NULL if you don't want it.
prefix_out  destination for newly malloc'd pointer to comments. May be NULL if you don't want it.
data_out  destination for newly malloc'd pointer to line data with comments and leading/trailing spaces removed, and line continuation performed. May be NULL if you don't want it.
newline  Standard for newlines in the file. On input, set to value to use or NEWLINE_UNKNOWN. On output, may be changed from NEWLINE_UNKNOWN to actual convention in file. May be NULL if you don't want it.
line_number  Line number in file. In "lines" as reported by a text editor, not lines containing data.
Returns:
JB_ERR_OK on success JB_ERR_MEMORY on out-of-memory JB_ERR_FILE on EOF.

int load_actions_file struct client_state   csp
 

Read and parse all the action files and add to files list.

Parameters:
csp  Current client state (buffers, headers, etc...)
Returns:
0 => Ok, everything else is an error.

int load_re_filterfile struct client_state   csp
 

Load the re_filterfile.

Generate a chained list of re_filterfile_spec's from the "FILTER: " blocks, compiling all their substitutions into chained lists of pcrs_job structs.

Parameters:
csp  Current client state (buffers, headers, etc...)
Returns:
0 => Ok, everything else is an error.

char* read_config_line char *    buf,
size_t    buflen,
FILE *    fp,
unsigned long *    linenum
 

Read a single non-empty line from a file and return it.

Trims comments, leading and trailing whitespace and respects escaping of newline and comment char.

Parameters:
buf  Buffer to use.
buflen  Size of buffer in bytes.
fp  File to read from
linenum  linenumber in file
Returns:
NULL on EOF or error Otherwise, returns buf.

int run_loader struct client_state   csp
 

Called from `load_config' and `listen_loop'.

This function keeps the "csp" current with any file mods since the last loop. If a file is unchanged, the loader functions do NOT reload the file.

Parameters:
csp  Current client state (buffers, headers, etc...) Must be non-null. Reads: "csp->config"

Writes various data members.

Returns:
0 => Ok, everything else is an error.

jb_err simple_read_line FILE *    fp,
char **    dest,
int *    newline
 

Read a single line from a file and return it.

This is basically a version of fgets() that malloc()s it's own line buffer. Note that the buffer will always be a multiple of BUFFER_SIZE bytes long. Therefore if you are going to keep the string for an extended period of time, you should probably strdup() it and free() the original, to save memory.

Parameters:
dest  destination for newly malloc'd pointer to line data. Will be set to NULL on error.
fp  File to read from
newline  Standard for newlines in the file. Will be unchanged if it's value on input is not NEWLINE_UNKNOWN. On output, may be changed from NEWLINE_UNKNOWN to actual convention in file.
Returns:
JB_ERR_OK on success JB_ERR_MEMORY on out-of-memory JB_ERR_FILE on EOF.

void sweep void   
 

Basically a mark and sweep garbage collector, it is run (by the parent thread) every once in a while to reclaim memory.

It uses a mark and sweep strategy: 1) mark all files as inactive 2) check with each client: if it is active, mark its files as active if it is inactive, free its resources 3) free the resources of all of the files that are still marked as inactive (and are obsolete). N.B. files that are not obsolete don't have an unloader defined.

Returns:
N/A


Variable Documentation

const char loaders_h_rcs[]
 

Version information about loaders.h.

const char loaders_rcs[]
 

Version information about loaders.c.


Generated on Tue Jun 4 18:54:49 2002 for Privoxy 3.1.1 by doxygen1.2.15