2004-12-30 23:43:55 +01:00
|
|
|
/*
|
2010-12-02 09:57:17 +01:00
|
|
|
* $Id: connectionHTTP.h,v 1.7 2010/07/19 13:49:31 schmirl Exp $
|
2004-12-30 23:43:55 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef VDR_STREAMDEV_SERVERS_CONNECTIONHTTP_H
|
|
|
|
#define VDR_STREAMDEV_SERVERS_CONNECTIONHTTP_H
|
|
|
|
|
|
|
|
#include "connection.h"
|
2005-02-11 17:44:14 +01:00
|
|
|
#include "server/livestreamer.h"
|
2012-12-16 13:29:15 +01:00
|
|
|
#include "server/recstreamer.h"
|
2004-12-30 23:43:55 +01:00
|
|
|
|
2010-12-02 09:57:17 +01:00
|
|
|
#include <map>
|
2004-12-30 23:43:55 +01:00
|
|
|
#include <tools/select.h>
|
|
|
|
|
|
|
|
class cChannel;
|
2013-02-03 11:02:25 +01:00
|
|
|
class cMenuList;
|
2004-12-30 23:43:55 +01:00
|
|
|
|
|
|
|
class cConnectionHTTP: public cServerConnection {
|
|
|
|
private:
|
|
|
|
enum eHTTPStatus {
|
|
|
|
hsRequest,
|
|
|
|
hsHeaders,
|
2005-02-11 17:44:14 +01:00
|
|
|
hsBody,
|
|
|
|
hsFinished,
|
2004-12-30 23:43:55 +01:00
|
|
|
};
|
|
|
|
|
2008-10-14 13:05:46 +02:00
|
|
|
std::string m_Authorization;
|
2005-02-11 17:44:14 +01:00
|
|
|
eHTTPStatus m_Status;
|
2012-11-16 02:00:09 +01:00
|
|
|
tStrStrMap m_Params;
|
2012-12-16 13:29:15 +01:00
|
|
|
cStreamdevStreamer *m_Streamer;
|
|
|
|
eStreamType m_StreamType;
|
2005-02-11 17:44:14 +01:00
|
|
|
// job: transfer
|
|
|
|
const cChannel *m_Channel;
|
2010-12-02 09:57:17 +01:00
|
|
|
int m_Apid[2];
|
|
|
|
int m_Dpid[2];
|
2012-12-16 13:29:15 +01:00
|
|
|
// job: replay
|
|
|
|
cRecording *m_Recording;
|
2005-02-11 17:44:14 +01:00
|
|
|
// job: listing
|
2013-02-03 11:02:25 +01:00
|
|
|
cMenuList *m_MenuList;
|
2005-02-11 17:44:14 +01:00
|
|
|
|
2013-02-03 11:02:25 +01:00
|
|
|
cMenuList* MenuListFromString(const std::string &PathInfo, const std::string &Filebase, const std::string &Fileext) const;
|
2013-02-02 22:34:47 +01:00
|
|
|
cRecording* RecordingFromString(const char* FileBase, const char* FileExt) const;
|
|
|
|
|
2010-12-02 09:57:17 +01:00
|
|
|
bool ProcessURI(const std::string &PathInfo);
|
2012-11-16 02:00:09 +01:00
|
|
|
bool HttpResponse(int Code, bool Last, const char* ContentType = NULL, const char* Headers = "", ...);
|
|
|
|
//__attribute__ ((format (printf, 5, 6)));
|
2012-12-16 13:29:15 +01:00
|
|
|
/**
|
|
|
|
* Extract byte range from HTTP Range header. Returns false if no valid
|
|
|
|
* range is found. The contents of From and To are undefined in this
|
|
|
|
* case. From may be negative in which case To is undefined.
|
|
|
|
* TODO: support for multiple ranges.
|
|
|
|
*/
|
|
|
|
bool ParseRange(int64_t &From, int64_t &To) const;
|
2005-02-11 17:44:14 +01:00
|
|
|
protected:
|
|
|
|
bool ProcessRequest(void);
|
2004-12-30 23:43:55 +01:00
|
|
|
|
|
|
|
public:
|
|
|
|
cConnectionHTTP(void);
|
|
|
|
virtual ~cConnectionHTTP();
|
|
|
|
|
2012-12-16 13:29:15 +01:00
|
|
|
virtual void Attach(void) { if (m_Streamer != NULL) m_Streamer->Attach(); }
|
|
|
|
virtual void Detach(void) { if (m_Streamer != NULL) m_Streamer->Detach(); }
|
2004-12-30 23:43:55 +01:00
|
|
|
|
2011-11-28 16:23:57 +01:00
|
|
|
virtual cString ToText() const;
|
|
|
|
|
2008-10-14 13:05:46 +02:00
|
|
|
virtual bool CanAuthenticate(void);
|
|
|
|
|
2004-12-30 23:43:55 +01:00
|
|
|
virtual bool Command(char *Cmd);
|
|
|
|
|
2007-04-02 12:32:34 +02:00
|
|
|
virtual bool Abort(void) const;
|
2004-12-30 23:43:55 +01:00
|
|
|
virtual void Flushed(void);
|
|
|
|
};
|
|
|
|
|
2007-04-02 12:32:34 +02:00
|
|
|
inline bool cConnectionHTTP::Abort(void) const
|
|
|
|
{
|
2012-12-16 13:29:15 +01:00
|
|
|
return !IsOpen() || (m_Streamer && m_Streamer->Abort());
|
2007-04-02 12:32:34 +02:00
|
|
|
}
|
|
|
|
|
2004-12-30 23:43:55 +01:00
|
|
|
#endif // VDR_STREAMDEV_SERVERS_CONNECTIONVTP_H
|