GNU CommonC++
Main Page
Namespaces
Classes
Files
Examples
File List
File Members
inc
cc++
url.h
Go to the documentation of this file.
1
// Copyright (C) 2001-2005 Open Source Telecom Corporation.
2
// Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
3
//
4
// This program is free software; you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation; either version 2 of the License, or
7
// (at your option) any later version.
8
//
9
// This program is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with this program; if not, write to the Free Software
16
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
//
18
// As a special exception, you may use this file as part of a free software
19
// library without restriction. Specifically, if other files instantiate
20
// templates or use macros or inline functions from this file, or you compile
21
// this file and link it with other files to produce an executable, this
22
// file does not by itself cause the resulting executable to be covered by
23
// the GNU General Public License. This exception does not however
24
// invalidate any other reasons why the executable file might be covered by
25
// the GNU General Public License.
26
//
27
// This exception applies only to the code released under the name GNU
28
// Common C++. If you copy code from other releases into a copy of GNU
29
// Common C++, as the General Public License permits, the exception does
30
// not apply to the code that you add in this way. To avoid misleading
31
// anyone as to the status of such modified files, you must delete
32
// this exception notice from them.
33
//
34
// If you write modifications of your own for GNU Common C++, it is your choice
35
// whether to permit this exception to apply to your modifications.
36
// If you do not wish that, delete this exception notice.
37
//
38
44
#ifndef CCXX_URL_H_
45
#define CCXX_URL_H_
46
47
#ifndef CCXX_CONFIG_H_
48
#include <
cc++/config.h
>
49
#endif
50
51
#ifndef CCXX_SOCKET_H_
52
#include <
cc++/socket.h
>
53
#endif
54
55
#ifndef CCXX_MIME_H_
56
#include <
cc++/mime.h
>
57
#endif
58
59
#ifdef CCXX_NAMESPACES
60
namespace
ost {
61
#endif
62
69
class
__EXPORT
URLStream
:
public
TCPStream
70
{
71
public
:
75
typedef
enum
{
76
errSuccess = 0,
77
errUnreachable
,
78
errMissing
,
79
errDenied
,
80
errInvalid
,
81
errForbidden
,
82
errUnauthorized
,
83
errRelocated
,
84
errFailure
,
85
errTimeout
,
86
errInterface
87
} Error;
88
92
typedef
enum
{
93
authAnonymous = 0,
94
authBasic
95
} Authentication;
96
100
typedef
enum
{
101
encodingBinary = 0,
102
encodingChunked
103
} Encoding;
104
108
typedef
enum
{
109
methodHttpGet
,
110
methodHttpPut
,
111
methodHttpPost
,
112
methodHttpPostMultipart
,
113
methodFtpGet
,
114
methodFtpPut
,
115
methodFileGet
,
116
methodFilePut
117
} Method;
118
122
typedef
enum
{
123
protocolHttp1_0
,
124
protocolHttp1_1
125
} Protocol;
126
127
private
:
128
const
char
*agent, *referer, *cookie, *pragma, *user, *password;
129
const
char
*proxyUser, *proxyPasswd;
130
const
char
*localif;
131
IPV4Host
proxyHost;
132
#ifdef CCXX_IPV6
133
IPV6Host
v6proxyHost;
134
#endif
135
tpport_t
proxyPort;
136
Method urlmethod;
137
Encoding encoding;
138
Protocol protocol;
139
Authentication auth;
140
Authentication proxyAuth;
141
timeout_t
timeout;
142
bool
persistent;
143
bool
follow;
144
unsigned
chunk;
145
146
Error getHTTPHeaders();
147
URLStream
(
const
URLStream
& rhs);
148
149
protected
:
150
ost::String
m_host
, m_address;
151
160
Error
sendHTTPHeader(
const
char
*url,
const
char
**vars,
size_t
bufsize);
161
167
int
underflow(
void
);
168
177
virtual
int
aRead(
char
*buffer,
size_t
len,
timeout_t
timer);
178
187
virtual
int
aWrite(
char
*buffer,
size_t
len,
timeout_t
timer);
188
195
virtual
void
httpHeader(
const
char
*header,
const
char
*value);
196
202
virtual
char
**extraHeader(
void
);
203
204
public
:
211
URLStream
(
Family
family = IPV4,
timeout_t
timer = 0);
212
220
URLStream
&getline(
char
*buffer,
size_t
len);
221
229
Error
get
(
const
char
*url,
size_t
buffer = 512);
230
239
Error
get
(
size_t
buffer = 512);
240
250
Error
submit(
const
char
*url,
const
char
**vars,
size_t
buffer = 512);
251
260
Error
post(
const
char
*url,
const
char
**vars,
size_t
buffer = 512);
261
270
Error
post(
const
char
*url,
MIMEMultipartForm
&form,
size_t
buffer = 512);
271
279
Error
head(
const
char
*url,
size_t
buffer = 512);
280
284
void
close();
285
291
void
setReferer(
const
char
*str);
292
298
inline
void
setHost
(
const
char
*str)
299
{m_host = str;};
300
306
inline
void
setAddress
(
const
char
*str)
307
{m_address = str;};
308
314
inline
void
setCookie
(
const
char
*str)
315
{cookie = str;};
316
322
inline
void
setUser
(
const
char
*str)
323
{user = str;};
324
330
inline
void
setPassword
(
const
char
*str)
331
{password = str;};
332
339
void
setAuthentication(Authentication a,
const
char
*str = NULL);
340
346
inline
void
setProxyUser
(
const
char
*str)
347
{proxyUser = str;};
348
354
inline
void
setProxyPassword
(
const
char
*str)
355
{proxyPasswd = str;};
356
363
void
setProxyAuthentication(Authentication a,
const
char
*str = NULL);
364
370
inline
void
setPragma
(
const
char
*str)
371
{pragma = str;};
372
379
void
setProxy(
const
char
*host,
tpport_t
port);
380
386
inline
void
setAgent
(
const
char
*str)
387
{agent = str;};
388
394
inline
Method
getMethod
(
void
)
395
{
return
urlmethod;};
396
403
inline
void
setTimeout
(
timeout_t
to)
404
{timeout = to;};
405
412
inline
void
setFollow
(
bool
enable)
413
{follow = enable;};
414
420
inline
void
setProtocol
(
Protocol
pro)
421
{protocol = pro;};
427
inline
void
setLocalInterface
(
const
char
*intf)
428
{localif=intf;}
429
};
430
436
__EXPORT
char
* urlDecode(
char
*source,
char
*dest = NULL);
437
444
__EXPORT
char
* urlEncode(
const
char
*source,
char
*dest,
size_t
size);
445
456
__EXPORT
char
* b64Decode(
char
*src,
char
*dest = NULL);
457
469
__EXPORT
char
* b64Encode(
const
char
*source,
char
*dest,
size_t
size);
470
482
__EXPORT
size_t
b64Encode(
const
unsigned
char
*src,
size_t
srcsize,
483
char
*dst,
size_t
dstsize);
484
494
__EXPORT
size_t
b64Decode(
const
char
*src,
495
unsigned
char
*dst,
size_t
dstsize);
496
502
__EXPORT
String b64Encode(
const
String& src);
503
511
__EXPORT
String b64Decode(
const
String& src);
512
519
__EXPORT
String b64Encode(
const
unsigned
char
*src,
size_t
srcsize);
520
530
__EXPORT
size_t
b64Decode(
const
String& src,
531
unsigned
char
*dst,
size_t
dstsize);
532
533
534
#ifdef CCXX_NAMESPACES
535
}
536
#endif
537
538
#endif
539
Generated by
1.8.4