POST data support
[pykit.git] / Publisher.hh
1 // $Id$
2 //
3 // Copyright (C) 2010
4 //     Stefan Bund <info@j32.de>
5
6 /** \file
7     \brief InternalNetworkAccessManager public header */
8
9 #ifndef HH_PyKit_Publisher_
10 #define HH_PyKit_Publisher_ 1
11
12 // Custom includes
13 #include <QNetworkAccessManager>
14 #include <QNetworkRequest>
15 #include <QNetworkReply>
16 #include <QBuffer>
17 #include <boost/noncopyable.hpp>
18
19 //#include "Publisher.mpp"
20 ///////////////////////////////hh.p////////////////////////////////////////
21
22 namespace pykit {
23
24     namespace detail { class InternalServerReply; }
25
26     class Request
27     {
28     public:
29         void write(std::string const & data);
30         void reset();
31
32         void setContentType(std::string const & contentType);
33         void setLocation(std::string const & location);
34
35         QUrl url() const;
36         QByteArray postData() const;
37         QByteArray operation() const;
38         QString postContentType() const;
39
40     private:
41         Request(detail::InternalServerReply & reply);
42
43         detail::InternalServerReply & reply_;
44
45         friend class detail::InternalServerReply;
46     };
47
48     class Publisher
49         : boost::noncopyable
50     {
51     public:
52         virtual ~Publisher() {}
53         virtual void publish(Request & request) = 0;
54     };
55
56     class InternalNetworkAccessManager
57         : public QNetworkAccessManager
58     {
59         Q_OBJECT;
60     public:
61         InternalNetworkAccessManager(QNetworkAccessManager * manager, QObject * parent,
62                                      Publisher * publisher);
63
64         QNetworkReply * createRequest(Operation operation, QNetworkRequest const & request,
65                                       QIODevice * device);
66
67     private:
68         Publisher * publisher_;
69     };
70
71 }
72
73 ///////////////////////////////hh.e////////////////////////////////////////
74 //#include "Publisher.cci"
75 //#include "Publisher.ct"
76 //#include "Publisher.cti"
77 #endif
78
79 \f
80 // Local Variables:
81 // mode: c++
82 // fill-column: 100
83 // comment-column: 40
84 // c-file-style: "j32"
85 // indent-tabs-mode: nil
86 // ispell-local-dictionary: "american"
87 // compile-command: "scons -U"
88 // End: