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