2 using System.Collections.Generic;
12 private static string urlEncodedHeader =
"application/x-www-form-urlencoded";
13 private static string multipartHeader =
"multipart/form-data";
15 public event EventHandler<Dictionary<string, string>> FormReceived;
17 #region Private Methods 18 private Dictionary<string, string> ParseFormUrlEncoded(
HttpMessage request)
26 Dictionary<string, string> formData =
new Dictionary<string, string>();
27 int length =
int.Parse(request[
HttpMessage.EntityHeadersEnum.ContentLength]);
28 int step = 0, parsedLength = 0;
29 StringBuilder fieldBuilder =
new StringBuilder();
30 StringBuilder valueBuilder =
new StringBuilder();
35 for (
int i = 0; i < request.Body.Length; i++)
37 if(request.Body[i] ==
'\n')
44 if(request.Body[i] ==
'=')
50 fieldBuilder.Append((
char)request.Body[i]);
56 if(request.Body[i] ==
'&')
59 formData[fieldBuilder.ToString()] = valueBuilder.ToString();
65 valueBuilder.Append((
char)request.Body[i]);
66 if(parsedLength == length)
68 formData[fieldBuilder.ToString()] = valueBuilder.ToString();
77 private Dictionary<string, string> ParseFormMultipart(
HttpMessage request)
79 throw new NotImplementedException(
"Multipart form parsing not implemented yet.");
83 #region Interface Implementation 89 if (request[
HttpMessage.EntityHeadersEnum.ContentType].Contains(urlEncodedHeader))
91 Dictionary<string, string> form = ParseFormUrlEncoded(request);
92 FormReceived?.Invoke(
this, form);
93 server.LogDebug(
"Received POST form of " + form.Keys.Count +
" keys!");
96 else if (request[
HttpMessage.EntityHeadersEnum.ContentType].Contains(multipartHeader))
98 Dictionary<string, string> form = ParseFormMultipart(request);
99 FormReceived?.Invoke(
this, form);
100 server.LogDebug(
"Received POST form of " + form.Keys.Count +
" keys!");
void Tick(Server.Server server, HttpHandler handler)
Perform periodic operations.
Structure containing client information.
Handler for handling server http requests.
Server()
Creates an instance of server with default values.
Basic server class to handle TCP connections.
Exception for invalid post forms.
bool ContainsHeader(ResponseHeadersEnum header)
Check if the message contains a header.
bool HandleRequest(Server.Server server, HttpHandler handler, ClientData client, HttpMessage request, ref HttpMessage response)
Handle the received request.
Interface for Http modules used by the server http handler.