GNU libmicrohttpd  0.9.29
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
internal.c
Go to the documentation of this file.
1 /*
2  This file is part of libmicrohttpd
3  (C) 2007 Daniel Pittman and Christian Grothoff
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License as published by the Free Software Foundation; either
8  version 2.1 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public
16  License along with this library; if not, write to the Free Software
17  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19 
27 #include "internal.h"
28 
29 #if HAVE_MESSAGES
30 #if DEBUG_STATES
31 
34 const char *
35 MHD_state_to_string (enum MHD_CONNECTION_STATE state)
36 {
37  switch (state)
38  {
40  return "connection init";
42  return "connection url received";
44  return "header partially received";
46  return "headers received";
48  return "headers processed";
50  return "continue sending";
52  return "continue sent";
54  return "body received";
56  return "footer partially received";
58  return "footers received";
60  return "headers sending";
62  return "headers sent";
64  return "normal body ready";
66  return "normal body unready";
68  return "chunked body ready";
70  return "chunked body unready";
72  return "body sent";
74  return "footers sending";
76  return "footers sent";
78  return "closed";
80  return "secure connection init";
81  default:
82  return "unrecognized connection state";
83  }
84 }
85 #endif
86 #endif
87 
88 #if HAVE_MESSAGES
89 
93 void
94 MHD_DLOG (const struct MHD_Daemon *daemon, const char *format, ...)
95 {
96  va_list va;
97 
98  if (0 == (daemon->options & MHD_USE_DEBUG))
99  return;
100  va_start (va, format);
101  daemon->custom_error_log (daemon->custom_error_log_cls, format, va);
102  va_end (va);
103 }
104 #endif
105 
106 
112 void
113 MHD_unescape_plus (char *arg)
114 {
115  char *p;
116 
117  for (p=strchr (arg, '+'); NULL != p; p = strchr (p + 1, '+'))
118  *p = ' ';
119 }
120 
121 
131 size_t
132 MHD_http_unescape (char *val)
133 {
134  char *rpos = val;
135  char *wpos = val;
136  char *end;
137  unsigned int num;
138  char buf3[3];
139 
140  while ('\0' != *rpos)
141  {
142  switch (*rpos)
143  {
144  case '%':
145  if ( ('\0' == rpos[1]) ||
146  ('\0' == rpos[2]) )
147  {
148  *wpos = '\0';
149  return wpos - val;
150  }
151  buf3[0] = rpos[1];
152  buf3[1] = rpos[2];
153  buf3[2] = '\0';
154  num = strtoul (buf3, &end, 16);
155  if ('\0' == *end)
156  {
157  *wpos = (char)((unsigned char) num);
158  wpos++;
159  rpos += 3;
160  break;
161  }
162  /* intentional fall through! */
163  default:
164  *wpos = *rpos;
165  wpos++;
166  rpos++;
167  }
168  }
169  *wpos = '\0'; /* add 0-terminator */
170  return wpos - val; /* = strlen(val) */
171 }
172 
173 
181 time_t
183 {
184 #ifdef HAVE_CLOCK_GETTIME
185 #ifdef CLOCK_MONOTONIC
186  struct timespec ts;
187 
188  if (0 == clock_gettime (CLOCK_MONOTONIC, &ts))
189  return ts.tv_sec;
190 #endif
191 #endif
192  return time (NULL);
193 }
194 
195 /* end of internal.c */
void MHD_unescape_plus(char *arg)
Definition: internal.c:113
MHD_CONNECTION_STATE
Definition: internal.h:344
return NULL
Definition: tsearch.c:32
internal shared structures
time_t MHD_monotonic_time(void)
Definition: internal.c:182
enum MHD_OPTION options
Definition: internal.h:1160
_MHD_EXTERN size_t MHD_http_unescape(char *val)
Definition: internal.c:132