File: HttpSocket.h

package info (click to toggle)
cvsnt 2.5.03.2382-3.3%2Blenny1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 32,288 kB
  • ctags: 24,567
  • sloc: ansic: 136,648; cpp: 102,037; sh: 42,846; asm: 3,495; makefile: 1,763; ada: 1,681; perl: 1,352; pascal: 1,089; cs: 1,008; yacc: 805; python: 453; xml: 263; sql: 210; lisp: 7
file content (62 lines) | stat: -rw-r--r-- 2,998 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
	CVSNT Generic API
    Copyright (C) 2004 Tony Hoyle and March-Hare Software Ltd

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
#ifndef HTTPSOCKET__H
#define HTTPSOCKET__H

#include "SocketIO.h"
#include <map>
#include <vector>

class CHttpSocket : public CSocketIO
{
public:
	CVSAPI_EXPORT CHttpSocket();
	CVSAPI_EXPORT virtual ~CHttpSocket();

	CVSAPI_EXPORT bool create(const char *urlHost, bool auto_proxy = true, const char *proxy_address = NULL, const char *proxy_port = NULL, const char *username = NULL, const char *password = NULL);
	CVSAPI_EXPORT bool addRequestHeader(const char *header, const char *value) { m_requestHeaderList[header].push_back(value); return true; }
	CVSAPI_EXPORT bool request(const char *command, const char *location, const char *content = NULL, size_t content_length = 0);
	CVSAPI_EXPORT int responseCode() { return m_responseCode; }
	CVSAPI_EXPORT const char *responseProtocol() { return m_responseProtocol.c_str(); }
	CVSAPI_EXPORT const char *responseString() { return m_responseString.c_str(); }
	CVSAPI_EXPORT const char *responseHeader(const char *header) { if(m_responseHeaderList.find(header)!=m_responseHeaderList.end()) return m_responseHeaderList[header][0].c_str(); else return NULL; }
	CVSAPI_EXPORT const std::vector<cvs::string>* responseHeaders(const char *header) { if(m_responseHeaderList.find(header)!=m_responseHeaderList.end()) return &m_responseHeaderList[header]; else return NULL; }
	CVSAPI_EXPORT const char *responseData(size_t& responseLength) { responseLength = m_content.size(); return m_content.data(); }

protected:
	int m_nAuthStage;
	cvs::string m_port, m_address, m_urlHost;
	cvs::string m_proxyName, m_proxyPort, m_proxyUser, m_proxyPassword;
	cvs::string m_responseProtocol,m_responseString;
	int m_responseCode;
	cvs::string m_content;
	bool m_bProxy,m_bAutoProxy;
	typedef	std::map<cvs::string, std::vector<cvs::string> > headerList_t;
	headerList_t m_requestHeaderList;
	headerList_t m_responseHeaderList;

	bool _create();
	bool _setUrl(const char *urlHost);
	bool _request(const char *command, const char *location, const char *content, size_t content_length);
	bool base64Enc(const unsigned char *from, size_t len, cvs::string& to);
	bool base64Dec(const unsigned char *from, size_t len, cvs::string& to);
};

#endif