1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/protocol/protocol.h 3// Purpose: Protocol base class 4// Author: Guilhem Lavaux 5// Modified by: 6// Created: 10/07/1997 7// RCS-ID: $Id: protocol.h 35650 2005-09-23 12:56:45Z MR $ 8// Copyright: (c) 1997, 1998 Guilhem Lavaux 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_PROTOCOL_PROTOCOL_H 13#define _WX_PROTOCOL_PROTOCOL_H 14 15#include "wx/defs.h" 16 17#if wxUSE_PROTOCOL 18 19#include "wx/object.h" 20#include "wx/string.h" 21#include "wx/stream.h" 22 23#if wxUSE_SOCKETS 24 #include "wx/socket.h" 25#endif 26 27// ---------------------------------------------------------------------------- 28// constants 29// ---------------------------------------------------------------------------- 30 31typedef enum 32{ 33 wxPROTO_NOERR = 0, 34 wxPROTO_NETERR, 35 wxPROTO_PROTERR, 36 wxPROTO_CONNERR, 37 wxPROTO_INVVAL, 38 wxPROTO_NOHNDLR, 39 wxPROTO_NOFILE, 40 wxPROTO_ABRT, 41 wxPROTO_RCNCT, 42 wxPROTO_STREAMING 43} wxProtocolError; 44 45// ---------------------------------------------------------------------------- 46// wxProtocol: abstract base class for all protocols 47// ---------------------------------------------------------------------------- 48 49class WXDLLIMPEXP_NET wxProtocol 50#if wxUSE_SOCKETS 51 : public wxSocketClient 52#else 53 : public wxObject 54#endif 55{ 56public: 57 wxProtocol(); 58 59#if wxUSE_SOCKETS 60 bool Reconnect(); 61 virtual bool Connect( const wxString& WXUNUSED(host) ) { return FALSE; } 62 virtual bool Connect( wxSockAddress& addr, bool WXUNUSED(wait) = TRUE) { return wxSocketClient::Connect(addr); } 63 64 // read a '\r\n' terminated line from the given socket and put it in 65 // result (without the terminators) 66 static wxProtocolError ReadLine(wxSocketBase *socket, wxString& result); 67 68 // read a line from this socket - this one can be overridden in the 69 // derived classes if different line termination convention is to be used 70 virtual wxProtocolError ReadLine(wxString& result); 71#endif // wxUSE_SOCKETS 72 73 virtual bool Abort() = 0; 74 virtual wxInputStream *GetInputStream(const wxString& path) = 0; 75 virtual wxProtocolError GetError() = 0; 76 virtual wxString GetContentType() { return wxEmptyString; } 77 virtual void SetUser(const wxString& WXUNUSED(user)) {} 78 virtual void SetPassword(const wxString& WXUNUSED(passwd) ) {} 79 80private: 81 DECLARE_DYNAMIC_CLASS_NO_COPY(wxProtocol) 82}; 83 84#if wxUSE_SOCKETS 85wxProtocolError WXDLLIMPEXP_NET GetLine(wxSocketBase *sock, wxString& result); 86#endif 87 88// ---------------------------------------------------------------------------- 89// macros for protocol classes 90// ---------------------------------------------------------------------------- 91 92#define DECLARE_PROTOCOL(class) \ 93public: \ 94 static wxProtoInfo g_proto_##class; 95 96#define IMPLEMENT_PROTOCOL(class, name, serv, host) \ 97wxProtoInfo class::g_proto_##class(name, serv, host, CLASSINFO(class)); \ 98bool wxProtocolUse##class = TRUE; 99 100#define USE_PROTOCOL(class) \ 101 extern bool wxProtocolUse##class ; \ 102 static struct wxProtocolUserFor##class \ 103 { \ 104 wxProtocolUserFor##class() { wxProtocolUse##class = TRUE; } \ 105 } wxProtocolDoUse##class; 106 107class WXDLLIMPEXP_NET wxProtoInfo : public wxObject 108{ 109public: 110 wxProtoInfo(const wxChar *name, 111 const wxChar *serv_name, 112 const bool need_host1, 113 wxClassInfo *info); 114 115protected: 116 wxProtoInfo *next; 117 wxString m_protoname; 118 wxString prefix; 119 wxString m_servname; 120 wxClassInfo *m_cinfo; 121 bool m_needhost; 122 123 friend class wxURL; 124 125 DECLARE_DYNAMIC_CLASS(wxProtoInfo) 126 DECLARE_NO_COPY_CLASS(wxProtoInfo) 127}; 128 129#endif // wxUSE_PROTOCOL 130 131#endif // _WX_PROTOCOL_PROTOCOL_H 132