summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-09-14 11:15:39 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-09-14 11:15:39 +0000
commit663958cfd699855fede3704de5620e505a604d04 (patch)
tree09b4650d1ec4d7175c55e5386f6065f205e31907 /src
parent30f7b57e98d0f726d9e2bb896589b0e07a9a87d5 (diff)
Properly read POSTDATA
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5243 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r--src/modules/m_httpd.cpp39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/modules/m_httpd.cpp b/src/modules/m_httpd.cpp
index 8b7103adb..e12ca3f3d 100644
--- a/src/modules/m_httpd.cpp
+++ b/src/modules/m_httpd.cpp
@@ -49,6 +49,7 @@ class HttpSocket : public InspSocket
std::string uri;
std::string http_version;
int postsize;
+ int amount;
public:
@@ -205,12 +206,48 @@ class HttpSocket : public InspSocket
{
/* Do we need to fetch postdata? */
postdata = "";
+ amount = 0;
InternalState = HTTP_SERVE_RECV_POSTDATA;
- /* TODO: Get content length and store */
+ std::string header_item;
+ while (headers >> header_item)
+ {
+ if (header_item == "Content-Length:")
+ {
+ headers >> header_item;
+ postsize = atoi(header_item.c_str());
+ }
+ }
+ Instance->Log(DEBUG,"%d bytes to read for POST",postsize);
+ /* Get content length and store */
}
else if (InternalState == HTTP_SERVE_RECV_POSTDATA)
{
/* Add postdata, once we have it all, send the event */
+ amount += strlen(data);
+ postdata.append(data);
+ if (amount >= postsize)
+ {
+ InternalState = HTTP_SERVE_SEND_DATA;
+
+ if ((http_version != "HTTP/1.1") && (http_version != "HTTP/1.0"))
+ {
+ SendHeaders(0, 505, "");
+ }
+ else
+ {
+ claimed = false;
+ HTTPRequest httpr(request_type,uri,&headers,this,this->GetIP(),postdata);
+ Event e((char*)&httpr, (Module*)HttpModule, "httpd_url");
+ e.Send(this->Instance);
+
+ if (!claimed)
+ {
+ SendHeaders(0, 404, "");
+ Instance->Log(DEBUG,"Page not claimed, 404");
+ }
+
+ }
+ }
}
else
{