# Added copyright notices for Steve. Reformatted the source code to

better match the existing tinyproxy practise.  Included a few bug
  fixes from Steve.
This commit is contained in:
Robert James Kaes 2003-03-14 22:45:59 +00:00
parent cc90414b29
commit 5faa0879ec
2 changed files with 62 additions and 24 deletions

View File

@ -1,8 +1,21 @@
/* $Id: htmlerror.c,v 1.1 2003-03-13 21:25:06 rjkaes Exp $ /* $Id: htmlerror.c,v 1.2 2003-03-14 22:45:59 rjkaes Exp $
* *
* This file contains source code for the handling and display of * This file contains source code for the handling and display of
* HTML error pages with variable substitution. * HTML error pages with variable substitution.
*
* Copyright (C) 2003 Steven Young <sdyoung@well.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/ */
#include "tinyproxy.h" #include "tinyproxy.h"
#include "common.h" #include "common.h"
@ -13,8 +26,11 @@
#include "network.h" #include "network.h"
#include "utils.h" #include "utils.h"
/* Add an error number -> filename mapping to the errorpages list. */ /*
int add_new_errorpage(char *filepath, unsigned int errornum) { * Add an error number -> filename mapping to the errorpages list.
*/
int
add_new_errorpage(char *filepath, unsigned int errornum) {
static int errorpage_count = 1; static int errorpage_count = 1;
/* First, add space for another pointer to the errorpages array. */ /* First, add space for another pointer to the errorpages array. */
@ -41,8 +57,11 @@ int add_new_errorpage(char *filepath, unsigned int errornum) {
return(0); return(0);
} }
/* Get the file appropriate for a given error. */ /*
char *get_html_file(int errornum) { * Get the file appropriate for a given error.
*/
char*
get_html_file(int errornum) {
int i; int i;
if(!config.errorpages) return(config.errorpage_undef); if(!config.errorpages) return(config.errorpage_undef);
@ -55,8 +74,11 @@ char *get_html_file(int errornum) {
return(config.errorpage_undef); return(config.errorpage_undef);
} }
/* Look up the value for a variable. */ /*
char *lookup_variable(struct conn_s *connptr, char *varname) { * Look up the value for a variable.
*/
char*
lookup_variable(struct conn_s *connptr, char *varname) {
int i; int i;
for(i = 0; i<connptr->error_variable_count; i++) { for(i = 0; i<connptr->error_variable_count; i++) {
@ -69,9 +91,11 @@ char *lookup_variable(struct conn_s *connptr, char *varname) {
#define HTML_BUFSIZE 4096 #define HTML_BUFSIZE 4096
/* Send an already-opened file to the client with /*
* variable substitution. */ * Send an already-opened file to the client with variable substitution.
int send_html_file(FILE *infile, struct conn_s *connptr) { */
int
send_html_file(FILE *infile, struct conn_s *connptr) {
char inbuf[HTML_BUFSIZE], *varstart = NULL, *p; char inbuf[HTML_BUFSIZE], *varstart = NULL, *p;
char *varval; char *varval;
int in_variable = 0, writeret; int in_variable = 0, writeret;
@ -88,14 +112,11 @@ int send_html_file(FILE *infile, struct conn_s *connptr) {
varval); varval);
if(writeret) return(writeret); if(writeret) return(writeret);
in_variable = 0; in_variable = 0;
break; } else {
writeret = write_message(connptr->client_fd, "%c", *p);
if (writeret) return(writeret);
} }
/* If we are not in a variable, then break;
* we fallthrough. the code for { will
* not do anything if in_variable is set to
* 0. it will end up in the default
* handler which will send the }.
*/
case '{': case '{':
/* a {{ will print a single {. If we are NOT /* a {{ will print a single {. If we are NOT
* already in a { variable, then proceed with * already in a { variable, then proceed with
@ -106,7 +127,8 @@ int send_html_file(FILE *infile, struct conn_s *connptr) {
if(!in_variable) { if(!in_variable) {
varstart = p+1; varstart = p+1;
in_variable++; in_variable++;
} } else
in_variable = 0;
default: default:
if(!in_variable) { if(!in_variable) {
writeret = write_message(connptr->client_fd, "%c", writeret = write_message(connptr->client_fd, "%c",
@ -121,7 +143,8 @@ int send_html_file(FILE *infile, struct conn_s *connptr) {
return(0); return(0);
} }
int send_http_headers(struct conn_s *connptr, int code, char *message) { int
send_http_headers(struct conn_s *connptr, int code, char *message) {
char *headers = \ char *headers = \
"HTTP/1.0 %d %s\r\n" \ "HTTP/1.0 %d %s\r\n" \
"Server: %s/%s\r\n" \ "Server: %s/%s\r\n" \
@ -199,8 +222,11 @@ add_error_variable(struct conn_s *connptr, char *key, char *val)
#define ADD_VAR_RET(x, y) if(y) { if(add_error_variable(connptr, x, y) == -1) return(-1); } #define ADD_VAR_RET(x, y) if(y) { if(add_error_variable(connptr, x, y) == -1) return(-1); }
/* Set some standard variables used by all HTML pages */ /*
int add_standard_vars(struct conn_s *connptr) { * Set some standard variables used by all HTML pages
*/
int
add_standard_vars(struct conn_s *connptr) {
char timebuf[30]; char timebuf[30];
time_t global_time = time(NULL); time_t global_time = time(NULL);
@ -239,4 +265,3 @@ indicate_http_error(struct conn_s* connptr, int number, char *message, ...)
return(add_standard_vars(connptr)); return(add_standard_vars(connptr));
} }

View File

@ -1,6 +1,19 @@
/* $Id: htmlerror.h,v 1.1 2003-03-13 21:25:04 rjkaes Exp $ /* $Id: htmlerror.h,v 1.2 2003-03-14 22:45:59 rjkaes Exp $
* *
* Contains header declarations for the HTML error functions in htmlerror.c * Contains header declarations for the HTML error functions in
* htmlerror.c
*
* Copyright (C) 2003 Steven Young <sdyoung@well.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/ */
#ifndef TINYPROXY_HTMLERROR_H #ifndef TINYPROXY_HTMLERROR_H