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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
/*
* frontend_svr.h: server for remote frontends
*
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
* $Id$
*
*/
#ifndef __XINELIB_FRONTEND_SVR_H
#define __XINELIB_FRONTEND_SVR_H
#include "config.h"
#include "frontend.h"
//----------------------------- cXinelibServer --------------------------------
#define CTRL_BUF_SIZE 1024
class cBackgroundWriterI;
class cUdpScheduler;
class cStcFuture;
class cCmdFutures;
class cConnState;
class cXinelibDevice;
#include "tools/cxsocket.h"
class cXinelibServer : public cXinelibThread
{
public:
cXinelibServer(cXinelibDevice *Dev, int listen_port);
virtual ~cXinelibServer();
protected:
virtual void Action(void);
public:
// Playback control
virtual void TrickSpeed(int Speed, bool Backwards);
// Data transfer
virtual int Poll(cPoller &Poller, int TimeoutMs);
virtual bool Flush(int TimeoutMs);
virtual void Clear(void);
virtual int Play(const uchar *buf, int len, eStreamId StreamId = sidVdr);
virtual void OsdCmd(void *cmd);
virtual int64_t GetSTC();
virtual void SetHDMode(bool On);
// Image grabbing
virtual uchar *GrabImage(int &Size, bool Jpeg, int Quality,
int SizeX, int SizeY);
// Playback files
virtual int PlayFileCtrl(const char *Cmd, int TimeoutMs=-1);
virtual bool EndOfStreamReached(void);
// Configuration
virtual bool Listen(int port);
virtual int SupportsTrueColorOSD(void);
protected:
// Playback control
virtual int Xine_Control(const char *cmd);
virtual int Xine_Control_Sync(const char *cmd);
virtual int Xine_Control_Result(const char *cmd, uint TimeoutMs);
virtual void Sync(void);
protected:
// Handling of messages from client(s)
void Handle_Discovery_Broadcast(void);
void Handle_ClientConnected(int fd);
void Read_Control(int cli);
void Handle_Control(int cli, const char *cmd);
void Handle_Control_PIPE (int cli, const char *arg);
void Handle_Control_RTP (int cli, const char *arg);
void Handle_Control_UDP (int cli, const char *arg);
void Handle_Control_DATA (int cli, const char *arg);
void Handle_Control_OSD (int cli, const char *arg);
void Handle_Control_KEY (int cli, const char *arg);
void Handle_Control_UDP_RESEND(int cli, const char *arg);
void Handle_Control_CONFIG (int cli);
void Handle_Control_GRAB (int cli, const char *arg);
void Handle_Control_CONTROL (int cli, const char *arg);
void Handle_Control_HTTP (int cli, const char *arg);
void Handle_Control_RTSP (int cli, const char *arg);
void CloseDataConnection(int cli);
void CloseOsdConnection (int cli);
void CloseConnection (int cli);
int Parse_Client_Id(int cli, const char *arg);
protected:
// Data
int m_Port;
int m_ServerId;
int fd_listen;
int fd_discovery;
void *m_hAvahi;
cxSocket fd_control[MAXCLIENTS];
int fd_data [MAXCLIENTS];
cxSocket fd_osd [MAXCLIENTS];
int m_OsdTimeouts[MAXCLIENTS];
char m_CtrlBuf [MAXCLIENTS][CTRL_BUF_SIZE + 1];
int m_CtrlBufPos [MAXCLIENTS];
int m_ConnType [MAXCLIENTS]; // Control connection type. See frontend_svr.c.
bool m_bUdp [MAXCLIENTS]; // Client uses UDP transport
bool m_bMulticast [MAXCLIENTS]; // Client uses multicast RTP
bool m_bConfigOk [MAXCLIENTS]; // Client has been configured
bool m_bArgbOSD [MAXCLIENTS]; // Client supports ARGB OSD
bool m_bRleArgbOSD[MAXCLIENTS]; // Client supports RLE ARGB OSD
bool m_bOsdConn [MAXCLIENTS]; // Client uses separate connection for OSD
int m_iMulticastMask; // bit [cli] is 1 or 0. 1 == multicast in use.
int m_MasterCli; // Master client (controls playback speed)
cString m_PipesDir;
cString m_AllowedHostsFile;
cBackgroundWriterI *m_Writer[MAXCLIENTS]; // buffered output (pipe/tcp/http)
cConnState *m_State[MAXCLIENTS]; // connection state (http/rtsp)
cUdpScheduler *m_Scheduler;
// Storage for return values of pending RPCs
cStcFuture *m_StcFuture;
cCmdFutures *m_Futures;
int m_Token;
int AllocToken(void);
bool HasClients(void);
// Cache current PAT/PMT for new clients
uchar *m_Header;
size_t m_HeaderLength; // bytes used
size_t m_HeaderSize; // bytes allocated
public:
void SetHeader(const uchar *Data, int Length, bool Reset = false);
};
#endif // __XINELIB_FRONTEND_SVR_H
|