+// ----------------------------------------------------------------------------
+// wxProtocol: abstract base class for all protocols
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_NET wxProtocol
+#if wxUSE_SOCKETS
+ : public wxSocketClient
+#else
+ : public wxObject
+#endif
+{
+public:
+ wxProtocol();
+
+#if wxUSE_SOCKETS
+ bool Reconnect();
+ virtual bool Connect( const wxString& WXUNUSED(host) ) { return FALSE; }
+ virtual bool Connect( wxSockAddress& addr, bool WXUNUSED(wait) = TRUE) { return wxSocketClient::Connect(addr); }
+
+ // read a '\r\n' terminated line from the given socket and put it in
+ // result (without the terminators)
+ static wxProtocolError ReadLine(wxSocketBase *socket, wxString& result);
+
+ // read a line from this socket - this one can be overridden in the
+ // derived classes if different line termination convention is to be used
+ virtual wxProtocolError ReadLine(wxString& result);
+#endif // wxUSE_SOCKETS
+
+ virtual bool Abort() = 0;
+ virtual wxInputStream *GetInputStream(const wxString& path) = 0;
+ virtual wxProtocolError GetError() = 0;
+ virtual wxString GetContentType() { return wxEmptyString; }
+ virtual void SetUser(const wxString& WXUNUSED(user)) {}
+ virtual void SetPassword(const wxString& WXUNUSED(passwd) ) {}
+
+private:
+ DECLARE_DYNAMIC_CLASS_NO_COPY(wxProtocol)
+};
+
+#if wxUSE_SOCKETS
+wxProtocolError WXDLLIMPEXP_NET GetLine(wxSocketBase *sock, wxString& result);
+#endif
+
+// ----------------------------------------------------------------------------
+// macros for protocol classes
+// ----------------------------------------------------------------------------
+