From c0ed0b4cb5c777eb66a2117a47bdc798ba64458a Mon Sep 17 00:00:00 2001 From: prozacx Date: Sun, 10 Jul 2005 17:56:51 +0000 Subject: [PATCH] Fixed bug in POST by keeping track of buffer in member var git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@425 726aef4b-f618-498e-8847-2d620e286838 --- HTTPSock.cpp | 21 +++++++++++++++------ HTTPSock.h | 2 ++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/HTTPSock.cpp b/HTTPSock.cpp index 6ddcc30f..5c64dde4 100644 --- a/HTTPSock.cpp +++ b/HTTPSock.cpp @@ -23,11 +23,16 @@ CHTTPSock::~CHTTPSock() {} void CHTTPSock::ReadData(const char* data, int len) { if (m_bGotHeader && m_bPost) { - const CString& sBuf = GetInternalBuffer(); - if (sBuf.size() >= m_uPostLen) { - ParseParams(sBuf); - GetPage(); - } + m_sPostData.append(data, len); + CheckPost(); + } +} + +void CHTTPSock::CheckPost() { + if (m_sPostData.size() >= m_uPostLen) { + ParseParams(m_sPostData.Left(m_uPostLen)); + GetPage(); + m_sPostData.clear(); } } @@ -59,8 +64,12 @@ void CHTTPSock::ReadLine(const CString& sData) { m_uPostLen = sLine.Token(1).ToULong(); } else if (sLine.empty()) { m_bGotHeader = true; + DisableReadLine(); - if (!m_bPost) { + if (m_bPost) { + m_sPostData = GetInternalBuffer(); + CheckPost(); + } else { GetPage(); } } diff --git a/HTTPSock.h b/HTTPSock.h index aae0e1d0..7fbfc9fa 100644 --- a/HTTPSock.h +++ b/HTTPSock.h @@ -27,6 +27,7 @@ public: virtual bool OnLogin(const CString& sUser, const CString& sPass); // !Hooks + void CheckPost(); bool SentHeader() const; bool PrintHeader(unsigned long uContentLength, const CString& sContentType = "text/html", unsigned int uStatusId = 200, const CString& sStatusMsg = "OK"); void AddHeader(const CString& sName, const CString& sValue); @@ -56,6 +57,7 @@ protected: bool m_bLoggedIn; bool m_bPost; unsigned long m_uPostLen; + CString m_sPostData; CString m_sURI; CString m_sUser; CString m_sPass;