~ubuntu-branches/debian/experimental/gpac/experimental

« back to all changes in this revision

Viewing changes to extra_lib/include/platinum/PltHttp.h

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2014-02-22 18:15:00 UTC
  • mfrom: (1.2.2) (3.1.6 sid)
  • Revision ID: package-import@ubuntu.com-20140222181500-b4phupo05gjpmopa
Tags: 0.5.0+svn5104~dfsg1-1
* New  upstream version 0.5.0+svn5104~dfsg1:
  - src/utils/sha1.c is relicensed under LGPLv2.1, Closes: #730759
* Don't install modules in multi-arch directories, Closes: #730497
* Add libusb-1.0.0-dev headers because libfreenect requires this
* Fix install rule
* Follow upstream soname bump
  - Drop the symbols file for now until it has been revised thourougly
* Let binaries produce the correct svn revision
* Refresh patches
* Patch and build against libav10, Closes: #739321
* Bump standards version, no changes necessary

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
|
3
3
|   Platinum - HTTP Helper
4
4
|
5
 
| Copyright (c) 2004-2008, Plutinosoft, LLC.
 
5
| Copyright (c) 2004-2010, Plutinosoft, LLC.
6
6
| All rights reserved.
7
7
| http://www.plutinosoft.com
8
8
|
17
17
| licensed software under version 2, or (at your option) any later
18
18
| version, of the GNU General Public License (the "GPL") must enter
19
19
| into a commercial license agreement with Plutinosoft, LLC.
20
 
 
20
| licensing@plutinosoft.com
 
21
|  
21
22
| This program is distributed in the hope that it will be useful,
22
23
| but WITHOUT ANY WARRANTY; without even the implied warranty of
23
24
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
31
32
|
32
33
****************************************************************/
33
34
 
 
35
/** @file
 
36
 HTTP utilities
 
37
 */
 
38
 
34
39
#ifndef _PLT_HTTP_H_
35
40
#define _PLT_HTTP_H_
36
41
 
38
43
|   includes
39
44
+---------------------------------------------------------------------*/
40
45
#include "Neptune.h"
 
46
#include "PltVersion.h"
 
47
 
 
48
/*----------------------------------------------------------------------
 
49
|   constants
 
50
+---------------------------------------------------------------------*/
 
51
#if !defined(PLT_HTTP_DEFAULT_USER_AGENT)
 
52
#define PLT_HTTP_DEFAULT_USER_AGENT "UPnP/1.0 DLNADOC/1.50 Platinum/" PLT_PLATINUM_SDK_VERSION_STRING
 
53
#endif
 
54
 
 
55
#if !defined(PLT_HTTP_DEFAULT_SERVER)
 
56
#define PLT_HTTP_DEFAULT_SERVER "UPnP/1.0 DLNADOC/1.50 Platinum/" PLT_PLATINUM_SDK_VERSION_STRING
 
57
#endif
 
58
 
 
59
/*----------------------------------------------------------------------
 
60
|   types
 
61
+---------------------------------------------------------------------*/
 
62
typedef enum {
 
63
        PLT_DEVICE_UNKNOWN,
 
64
        PLT_DEVICE_XBOX,
 
65
        PLT_DEVICE_PS3,
 
66
        PLT_DEVICE_WMP,
 
67
    PLT_DEVICE_SONOS,
 
68
    PLT_DEVICE_MAC,
 
69
    PLT_DEVICE_WINDOWS,
 
70
    PLT_DEVICE_VLC
 
71
} PLT_DeviceSignature;
41
72
 
42
73
/*----------------------------------------------------------------------
43
74
|   PLT_HttpHelper
44
75
+---------------------------------------------------------------------*/
 
76
/**
 
77
 The PLT_HttpHelper class is a set of utility functions for manipulating 
 
78
 HTTP headers, entities and messages.
 
79
 */
45
80
class PLT_HttpHelper {
46
 
 public:
 
81
public:
47
82
    static bool         IsConnectionKeepAlive(NPT_HttpMessage& message);
48
83
    static bool         IsBodyStreamSeekable(NPT_HttpMessage& message);
49
84
 
50
 
    static NPT_Result   ToLog(NPT_LoggerReference logger, int level, NPT_HttpRequest* request);
51
 
    static NPT_Result   ToLog(NPT_LoggerReference logger, int level, NPT_HttpResponse* response);
52
 
 
53
 
    static NPT_Result   GetContentType(NPT_HttpMessage& message, NPT_String& type);
54
 
    static     void     SetContentType(NPT_HttpMessage& message, const char* type);
55
 
    static NPT_Result   GetContentLength(NPT_HttpMessage& message, NPT_LargeSize& len);
56
 
    static void         SetContentLength(NPT_HttpMessage& message, NPT_LargeSize len);
57
 
 
58
 
    static NPT_Result   GetHost(NPT_HttpRequest& request, NPT_String& value);
 
85
    static NPT_Result   ToLog(NPT_LoggerReference logger, int level, const char* prefix, NPT_HttpRequest* request);
 
86
    static NPT_Result   ToLog(NPT_LoggerReference logger, int level, const char* prefix, const NPT_HttpRequest& request);
 
87
    static NPT_Result   ToLog(NPT_LoggerReference logger, int level, const char* prefix, NPT_HttpResponse* response);
 
88
    static NPT_Result   ToLog(NPT_LoggerReference logger, int level, const char* prefix, const NPT_HttpResponse& response);
 
89
 
 
90
    static NPT_Result   GetContentType(const NPT_HttpMessage& message, NPT_String& type);
 
91
    static NPT_Result   GetContentLength(const NPT_HttpMessage& message, NPT_LargeSize& len);
 
92
 
 
93
    static NPT_Result   GetHost(const NPT_HttpRequest& request, NPT_String& value);
59
94
    static void         SetHost(NPT_HttpRequest& request, const char* host);
60
 
    static NPT_Result   GetRange(NPT_HttpRequest& request, NPT_Position& start, NPT_Position& end);
61
 
    static void         SetRange(NPT_HttpRequest& request, NPT_Position start, NPT_Position end = (NPT_Position)-1);
62
 
 
63
 
    static NPT_Result   GetContentRange(NPT_HttpResponse& response, NPT_Position& start, NPT_Position& end, NPT_LargeSize& length);
64
 
    static NPT_Result   SetContentRange(NPT_HttpResponse& response, NPT_Position start, NPT_Position end, NPT_LargeSize length);
65
 
 
66
 
    static NPT_Result   SetBody(NPT_HttpMessage& message, NPT_String& body);
67
 
    static NPT_Result   SetBody(NPT_HttpMessage& message, const char* body, NPT_Size len);
68
 
    static NPT_Result   SetBody(NPT_HttpMessage& message, NPT_InputStreamReference& stream, NPT_LargeSize len = 0);
69
 
 
70
 
 
71
 
    static NPT_Result   GetBody(NPT_HttpMessage& message, NPT_String& body);
72
 
    static NPT_Result   ParseBody(NPT_HttpMessage& message, NPT_XmlElementNode*& xml);
73
 
 
74
 
    static NPT_Result   Connect(NPT_Socket&      connection,
75
 
                                NPT_HttpRequest& request,
76
 
                                NPT_Timeout      timeout = NPT_TIMEOUT_INFINITE);
77
 
        static void                     SetBasicAuthorization(NPT_HttpRequest& request, const char* login, const char* password);
 
95
        static PLT_DeviceSignature GetDeviceSignature(const NPT_HttpRequest& request);
 
96
 
 
97
    static NPT_Result   SetBody(NPT_HttpMessage& message, NPT_String& text, NPT_HttpEntity** entity = NULL);
 
98
    static NPT_Result   SetBody(NPT_HttpMessage& message, const char* text, NPT_HttpEntity** entity = NULL);
 
99
    static NPT_Result   SetBody(NPT_HttpMessage& message, const void* body, NPT_LargeSize len, NPT_HttpEntity** entity = NULL);
 
100
    static NPT_Result   SetBody(NPT_HttpMessage& message, NPT_InputStreamReference stream, NPT_HttpEntity** entity = NULL);
 
101
    static NPT_Result   GetBody(const NPT_HttpMessage& message, NPT_String& body);
 
102
    static NPT_Result   ParseBody(const NPT_HttpMessage& message, NPT_XmlElementNode*& xml);
 
103
 
 
104
        static void                     SetBasicAuthorization(NPT_HttpRequest& request, const char* username, const char* password);
78
105
};
79
106
 
80
107
/*----------------------------------------------------------------------
81
108
|   PLT_HttpRequestContext
82
109
+---------------------------------------------------------------------*/
 
110
/** 
 
111
 The PLT_HttpRequestContext class holds information about the request sent, the
 
112
 local & remote ip addresses and ports associated with a connection. It is used
 
113
 mostly when processing a HTTP response.
 
114
 */
83
115
class PLT_HttpRequestContext : public NPT_HttpRequestContext {
84
116
public:
85
117
    // constructors and destructor
86
 
    PLT_HttpRequestContext(NPT_HttpRequest& request) : 
 
118
    PLT_HttpRequestContext(const NPT_HttpRequest& request) : 
87
119
        m_Request(request) {}
88
 
    PLT_HttpRequestContext(NPT_HttpRequest& request, const NPT_HttpRequestContext& context) :
 
120
    PLT_HttpRequestContext(const NPT_HttpRequest& request, const NPT_HttpRequestContext& context) :
89
121
        NPT_HttpRequestContext(&context.GetLocalAddress(), &context.GetRemoteAddress()),
90
122
        m_Request(request) {}
91
123
    virtual ~PLT_HttpRequestContext() {}
92
124
    
93
 
    NPT_HttpRequest& GetRequest() const { return m_Request; }
 
125
    const NPT_HttpRequest& GetRequest() const { return m_Request; }
 
126
        PLT_DeviceSignature GetDeviceSignature() { return PLT_HttpHelper::GetDeviceSignature(m_Request); }
94
127
    
95
128
private:
96
 
    NPT_HttpRequest& m_Request;
 
129
    const NPT_HttpRequest& m_Request;
97
130
};
98
131
 
99
132
/*----------------------------------------------------------------------
100
133
|   macros
101
134
+---------------------------------------------------------------------*/
102
135
#if defined(NPT_CONFIG_ENABLE_LOGGING)
103
 
#define PLT_LOG_HTTP_MESSAGE_L(_logger, _level, _msg) \
104
 
    PLT_HttpHelper::ToLog((_logger), (_level), (_msg))
105
 
#define PLT_LOG_HTTP_MESSAGE(_level, _msg) \
106
 
        PLT_HttpHelper::ToLog((_NPT_LocalLogger), (_level), (_msg))
 
136
#define PLT_LOG_HTTP_MESSAGE_L(_logger, _level, _prefix, _msg) \
 
137
    PLT_HttpHelper::ToLog((_logger), (_level), (_prefix), (_msg))
 
138
#define PLT_LOG_HTTP_MESSAGE(_level, _prefix, _msg) \
 
139
        PLT_HttpHelper::ToLog((_NPT_LocalLogger), (_level), (_prefix), (_msg))
107
140
 
108
141
#else /* NPT_CONFIG_ENABLE_LOGGING */
109
 
#define PLT_LOG_HTTP_MESSAGE_L(_logger, _level, _msg)
110
 
#define PLT_LOG_HTTP_MESSAGE(_level, _msg)
 
142
#define PLT_LOG_HTTP_MESSAGE_L(_logger, _level, _prefix, _msg)
 
143
#define PLT_LOG_HTTP_MESSAGE(_level, _prefix, _msg)
111
144
#endif /* NPT_CONFIG_ENABLE_LOGGING */
112
145
 
113
146
/*----------------------------------------------------------------------
114
147
|   PLT_HttpRequestHandler
115
148
+---------------------------------------------------------------------*/
116
 
template <class T>
 
149
/**
 
150
 The PLT_HttpRequestHandler class delegates the handling of the response of a
 
151
 received HTTP request by a HTTP Server.
 
152
 */
117
153
class PLT_HttpRequestHandler : public NPT_HttpRequestHandler
118
154
{
119
155
public:
120
 
    PLT_HttpRequestHandler<T>(T* data) : m_Data(data) {}
121
 
    virtual ~PLT_HttpRequestHandler<T>() {}
 
156
    PLT_HttpRequestHandler(NPT_HttpRequestHandler* delegate) : 
 
157
        m_Delegate(delegate) {}
 
158
    virtual ~PLT_HttpRequestHandler() {}
122
159
 
123
160
    // NPT_HttpRequestHandler methods
124
161
    NPT_Result SetupResponse(NPT_HttpRequest&              request, 
125
162
                             const NPT_HttpRequestContext& context,
126
163
                             NPT_HttpResponse&             response) {
127
 
        return m_Data->ProcessHttpRequest(request, context, response);
 
164
        return m_Delegate->SetupResponse(request, context, response);
128
165
    }
129
166
 
130
167
private:
131
 
    T* m_Data;
 
168
    NPT_HttpRequestHandler* m_Delegate;
132
169
};
133
170
 
134
 
 
135
171
#endif /* _PLT_HTTP_H_ */