summaryrefslogtreecommitdiff
path: root/apps/netutils/thttpd/thttpd_strings.c
blob: 5795e3754cf054a488bc419587a0b8076dc25f0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/****************************************************************************
 * netutils/thttpd/thttpd_strings.c
 * HTTP strings
 *
 *   Copyright (C) 2009 Gregory Nutt. All rights reserved.
 *   Author: Gregory Nutt <gnutt@nuttx.org>
 *
 * Derived from the file of the same name in the original THTTPD package:
 *
 *   Copyright � 1995,1998,1999,2000,2001 by Jef Poskanzer <jef@mail.acme.com>.
 *   All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 ****************************************************************************/

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <nuttx/config.h>

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include "config.h"
#include "thttpd_strings.h"

#ifdef CONFIG_THTTPD

/****************************************************************************
 * Public Data
 ****************************************************************************/

/* This is the 'root' of the Filesystem as seen by the HTTP client */

const char httpd_root[] = CONFIG_THTTPD_PATH;

/* HTPP status */

const char ok200title[]  = "OK";
const char ok206title[]  = "Partial Content";

const char err302title[] = "Found";
const char err302form[]  = "The actual URL is '%s'.\n";

const char err304title[] = "Not Modified";

const char httpd_err400title[]  = "Bad Request";
const char httpd_err400form[]   = "Your request has bad syntax or is inherently impossible to satisfy.\n";

#ifdef CONFIG_THTTPD_AUTH_FILE
const char err401title[] = "Unauthorized";
const char err401form[]  = "Authorization required for the URL '%s'.\n";
#endif

const char err403title[] = "Forbidden";
#ifndef EXPLICIT_ERROR_PAGES
const char err403form[]  = "You do not have permission to get URL '%s' from this server.\n";
#endif

const char err404title[] = "Not Found";
const char err404form[]  = "The requested URL '%s' was not found on this server.\n";

const char httpd_err408title[]  = "Request Timeout";
const char httpd_err408form[]   = "No request appeared within a reasonable time period.\n";

const char err500title[] = "Internal Error";
const char err500form[]  = "There was an unusual problem serving the requested URL '%s'.\n";

const char err501title[] = "Not Implemented";
const char err501form[]  = "The requested method '%s' is not implemented by this server.\n";

const char httpd_err503title[] = "Service Temporarily Overloaded";
const char httpd_err503form[]  = "The requested URL '%s' is temporarily overloaded.  Please try again later.\n";

/* HTML strings */

const char html_crlf[]      = "\r\n";
const char html_html[]      = "<HTML>\r\n";
const char html_endhtml[]   = "</HTML>\r\n";
const char html_hdtitle[]   = "<HEAD><TITLE>";
const char html_titlehd[]   = "</TITLE></HEAD>\r\n";
const char html_body[]      = "<BODY BGCOLOR=\"#99cc99\" TEXT=\"#000000\" LINK=\"#2020ff\" VLINK=\"#4040cc\">\r\n";
const char html_endbody[]   = "</BODY>\r\n";
const char html_hdr2[]      = "<H2>";
const char html_endhdr2[]   = "</H2>";

/****************************************************************************
 * Private Functions
 ****************************************************************************/

static int hexit(char nibble)
{
  if (nibble >= '0' && nibble <= '9')
    {
      return nibble - '0';
    }
  else if (nibble >= 'a' && nibble <= 'f')
    {
      return nibble - 'a' + 10;
    }
  else if (nibble >= 'A' && nibble <= 'F')
    {
      return nibble - 'A' + 10;
    }
  return 0;
}

/****************************************************************************
 * Public Functions
 ****************************************************************************/

/* Copies and decodes a string.  It's ok for from and to to be the same string. */

void httpd_strdecode(char *to, char *from)
{
  for (; *from != '\0'; ++to, ++from)
    {
      if (from[0] == '%' && isxdigit(from[1]) && isxdigit(from[2]))
        {
          *to = hexit(from[1]) * 16 + hexit(from[2]);
          from += 2;
        }
      else
        {
          *to = *from;
        }
    }
  *to = '\0';
}

/* Copies and encodes a string. */

#ifdef CONFIG_THTTPD_GENERATE_INDICES
static void httpd_strencode(char *to, int tosize, char *from)
{
  int tolen;

  for (tolen = 0; *from != '\0' && tolen + 4 < tosize; ++from)
    {
      if (isalnum(*from) || strchr("/_.-~", *from) != NULL)
        {
          *to = *from;
          ++to;
          ++tolen;
        }
      else
        {
          (void)sprintf(to, "%%%02x", (int)*from & 0xff);
          to += 3;
          tolen += 3;
        }
    }
  *to = '\0';
}
#endif /* CONFIG_THTTPD_GENERATE_INDICES */
#endif /* CONFIG_THTTPD */