source: subversion/applications/editors/osm-editor/qt3/HTTPHandler.h @ 34447

Last change on this file since 34447 was 1158, checked in by nick, 13 years ago

moved current version to qt3 directory in preparation for qt4

File size: 3.7 KB
Line 
1/*
2    Copyright (C) 2005 Nick Whitelegg, Hogweed Software, nick@hogweed.org
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 USA
17
18 */
19#ifndef REQUESTER_H
20#define REQUESTER_H
21
22#include <qhttp.h>
23#include <qstring.h>
24#include <qcstring.h>
25#include <vector>
26#include <deque>
27using std::vector;
28
29#include <iostream>
30using namespace std;
31
32namespace OpenStreetMap
33{
34
35class MainWindow2;
36
37struct Request
38{
39        QString requestType;
40        QString apicall;
41        QByteArray data;
42        QObject *receiver, *errorReceiver;
43        const char *callback, *errorCallback;
44        void *recObj;
45
46
47        Request(const QString& rt,const QString& ac, const QByteArray& d, 
48                                        QObject *rc, const char *cb, QObject *erc, const char *err,
49                                        void *dt)
50                { requestType=rt;
51                        apicall=ac; data=d; receiver=rc; callback=cb; 
52                        errorReceiver=erc; errorCallback = err; recObj=dt; }
53};
54
55class HTTPHandler  : public QObject
56{
57Q_OBJECT
58
59private:
60        QHttp* http;
61        QString host, method;
62        QString username, password;
63        bool makingRequest, httpError;
64//      vector<int> curReqIDs;
65        int curReqId;
66        bool locked;
67        int respCount;
68        std::deque<Request> requests;
69        bool doEmitErrorOccurred;
70
71        const char *defaultErrorCallback;
72
73        void sendRequest(const QString&, const QString&,
74                                        const QByteArray& b = QByteArray());
75
76public:
77        HTTPHandler(const QString& host)
78                { this->host=host; http=new QHttp; username=password="";
79                        makingRequest=false; locked=true; respCount=0;
80                        curReqId=0;
81               
82                QObject::connect(http,
83                                        SIGNAL(responseHeaderReceived (const QHttpResponseHeader&)),
84                                        this,
85                                        SLOT(responseHeaderReceived(const QHttpResponseHeader&))
86                                        );
87
88                QObject::connect(http,SIGNAL(requestFinished(int,bool)),
89                                        this,SLOT(responseReceived(int,bool)));
90
91                defaultErrorCallback = SLOT(handleNetCommError(const QString&));
92
93                }
94        ~HTTPHandler()
95                { delete http; }
96        void setAuthentication(const QString& u, const QString &p)
97                { username=u; password=p; }
98        bool isMakingRequest()
99                { return makingRequest; }
100        void lock() { locked=true; }
101        void unlock() { locked=false; }
102
103        void scheduleCommand(const QString& requestType,
104                                        const QString& apicall,const QByteArray& data=QByteArray(),
105                                                        QObject *receiver=NULL,
106                                                        const char* callback=NULL, 
107                                                        void* transferObject=NULL,
108                                                        const char* errorCallback= 
109                                                                SLOT(handleNetCommError(const QString&)),
110                                                        QObject* errorReceiver=NULL);
111        void scheduleCommand(const QString& requestType,
112                                        const QString& apicall,
113                                                        QObject *receiver,
114                                                        const char* callback, 
115                                                        void* transferObject,
116                                                        const char* errorCallback=
117                                                                SLOT(handleNetCommError(const QString&)),
118                                                                QObject *errorReceiver=NULL)
119                { scheduleCommand(requestType,apicall,QByteArray(),receiver,
120                                                                callback,transferObject,errorCallback,
121                                                                errorReceiver); }
122
123        void clearRequests();
124
125public slots:
126        void responseHeaderReceived(const QHttpResponseHeader&);       
127        void responseReceived(int,bool);
128
129signals:
130        //void responseReceived(const QByteArray&);
131        void responseReceived(const QByteArray&,void*);
132        void httpErrorOccurred(int,const QString&);
133        void errorOccurred(const QString&);
134};
135
136}
137
138#endif
Note: See TracBrowser for help on using the repository browser.