X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0eba78b86232bf8c2ef886e0a35808ab09df25f..24bcaec36746abeeb9e2023d03e3ab4289006fc3:/src/common/protocol.cpp diff --git a/src/common/protocol.cpp b/src/common/protocol.cpp index 542752e318..9deef928f6 100644 --- a/src/common/protocol.cpp +++ b/src/common/protocol.cpp @@ -20,6 +20,8 @@ #pragma hdrstop #endif +#if wxUSE_PROTOCOL + #include "wx/protocol/protocol.h" #include "wx/url.h" #include "wx/module.h" @@ -43,8 +45,8 @@ wxProtoInfo::wxProtoInfo(const wxChar *name, const wxChar *serv, m_servname = serv; m_cinfo = info; m_needhost = need_host1; - next = wxURL::g_protocols; - wxURL::g_protocols = this; + next = wxURL::ms_protocols; + wxURL::ms_protocols = this; } ///////////////////////////////////////////////////////////////// @@ -64,7 +66,6 @@ wxProtocol::wxProtocol() { } -#if wxUSE_SOCKETS bool wxProtocol::Reconnect() { wxIPV4address addr; @@ -82,6 +83,56 @@ bool wxProtocol::Reconnect() return TRUE; } +// ---------------------------------------------------------------------------- +// Read a line from socket +// ---------------------------------------------------------------------------- + +// TODO ReadLine() should use buffers private to wxProtocol for efficiency! + +// static +wxProtocolError wxProtocol::ReadLine(wxSocketBase *socket, wxString& result) +{ + result.Empty(); + char ch, chLast = '\0'; + while ( !socket->Read(&ch, sizeof(ch)).Error() ) + { + switch ( ch ) + { + case '\r': + // remember it, if the following is '\n', we're done + chLast = '\r'; + break; + + case '\n': + // only ends line if the previous character was '\r' + if ( chLast == '\r' ) + { + // EOL found + return wxPROTO_NOERR; + } + //else: fall through + + default: + // normal char + if ( chLast ) + { + result += chLast; + chLast = '\0'; + } + + result += ch; + } + } + + return wxPROTO_NETERR; +} + +wxProtocolError wxProtocol::ReadLine(wxString& result) +{ + return ReadLine(this, result); +} + +// old function which only chops '\n' and not '\r\n' wxProtocolError GetLine(wxSocketBase *sock, wxString& result) { #define PROTO_BSIZE 2048 size_t avail, size; @@ -116,43 +167,6 @@ wxProtocolError GetLine(wxSocketBase *sock, wxString& result) { return wxPROTO_NOERR; #undef PROTO_BSIZE } -#endif - -// ---------------------------------------------------------------------- -// Module -// ---------------------------------------------------------------------- -class wxProtocolModule: public wxModule { - DECLARE_DYNAMIC_CLASS(wxProtocolModule) -public: - wxProtocolModule() {} - bool OnInit(); - void OnExit(); -}; - -IMPLEMENT_DYNAMIC_CLASS(wxProtocolModule, wxModule) - -bool wxProtocolModule::OnInit() -{ -#if wxUSE_SOCKETS - char *env_http_prox; - - wxURL::g_proxy = NULL; - // Initialize the proxy when HTTP_PROXY is defined - env_http_prox = getenv("HTTP_PROXY"); - if (env_http_prox) - wxURL::SetDefaultProxy(env_http_prox); -#endif - - return TRUE; -} - -void wxProtocolModule::OnExit() -{ -#if wxUSE_SOCKETS - if (wxURL::g_proxy) - delete wxURL::g_proxy; - wxURL::g_proxy = NULL; -#endif -} +#endif // wxUSE_PROTOCOL