mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
				synced 2023-10-10 17:16:51 +00:00 
			
		
		
		
	dropped cServerConnection::m_Pending
This commit is contained in:
		
							
								
								
									
										1
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								HISTORY
									
									
									
									
									
								
							@@ -1,6 +1,7 @@
 | 
				
			|||||||
VDR Plugin 'streamdev' Revision History
 | 
					VDR Plugin 'streamdev' Revision History
 | 
				
			||||||
---------------------------------------
 | 
					---------------------------------------
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
					- dropped cServerConnection::m_Pending
 | 
				
			||||||
- the icy-name HTTP header sent with radio streams makes VLC pick the wrong
 | 
					- the icy-name HTTP header sent with radio streams makes VLC pick the wrong
 | 
				
			||||||
  demuxer. Send icy-name only for ES audio streams.
 | 
					  demuxer. Send icy-name only for ES audio streams.
 | 
				
			||||||
- fixed regression of "live TV must be switched in VDR main thread" change:
 | 
					- fixed regression of "live TV must be switched in VDR main thread" change:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,7 +66,6 @@ cServerConnection::cServerConnection(const char *Protocol, int Type):
 | 
				
			|||||||
		cTBSocket(Type),
 | 
							cTBSocket(Type),
 | 
				
			||||||
		m_Protocol(Protocol),
 | 
							m_Protocol(Protocol),
 | 
				
			||||||
		m_DeferClose(false),
 | 
							m_DeferClose(false),
 | 
				
			||||||
		m_Pending(false),
 | 
					 | 
				
			||||||
		m_ReadBytes(0),
 | 
							m_ReadBytes(0),
 | 
				
			||||||
		m_WriteBytes(0),
 | 
							m_WriteBytes(0),
 | 
				
			||||||
		m_WriteIndex(0)
 | 
							m_WriteIndex(0)
 | 
				
			||||||
@@ -196,8 +195,6 @@ bool cServerConnection::Write(void)
 | 
				
			|||||||
	if (m_WriteIndex == m_WriteBytes) {
 | 
						if (m_WriteIndex == m_WriteBytes) {
 | 
				
			||||||
		m_WriteIndex = 0;
 | 
							m_WriteIndex = 0;
 | 
				
			||||||
		m_WriteBytes = 0;
 | 
							m_WriteBytes = 0;
 | 
				
			||||||
		if (m_Pending)
 | 
					 | 
				
			||||||
			Command(NULL);
 | 
					 | 
				
			||||||
		if (m_DeferClose)
 | 
							if (m_DeferClose)
 | 
				
			||||||
			return false;
 | 
								return false;
 | 
				
			||||||
		Flushed();
 | 
							Flushed();
 | 
				
			||||||
@@ -205,12 +202,12 @@ bool cServerConnection::Write(void)
 | 
				
			|||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool cServerConnection::Respond(const char *Message, bool Last, ...) 
 | 
					bool cServerConnection::Respond(const char *Message, ...) 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char *buffer;
 | 
						char *buffer;
 | 
				
			||||||
	int length;
 | 
						int length;
 | 
				
			||||||
	va_list ap;
 | 
						va_list ap;
 | 
				
			||||||
	va_start(ap, Last);
 | 
						va_start(ap, Message);
 | 
				
			||||||
	length = vasprintf(&buffer, Message, ap);
 | 
						length = vasprintf(&buffer, Message, ap);
 | 
				
			||||||
	va_end(ap);
 | 
						va_end(ap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -233,7 +230,6 @@ bool cServerConnection::Respond(const char *Message, bool Last, ...)
 | 
				
			|||||||
	m_WriteBytes += length;
 | 
						m_WriteBytes += length;
 | 
				
			||||||
	m_WriteBuffer[m_WriteBytes++] = '\015';
 | 
						m_WriteBuffer[m_WriteBytes++] = '\015';
 | 
				
			||||||
	m_WriteBuffer[m_WriteBytes++] = '\012';
 | 
						m_WriteBuffer[m_WriteBytes++] = '\012';
 | 
				
			||||||
	m_Pending = !Last;
 | 
					 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,6 @@ class cServerConnection: public cListObject, public cTBSocket
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
	const char *m_Protocol;
 | 
						const char *m_Protocol;
 | 
				
			||||||
	bool        m_DeferClose;
 | 
						bool        m_DeferClose;
 | 
				
			||||||
	bool        m_Pending;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	char        m_ReadBuffer[MAXPARSEBUFFER];
 | 
						char        m_ReadBuffer[MAXPARSEBUFFER];
 | 
				
			||||||
	uint        m_ReadBytes;
 | 
						uint        m_ReadBytes;
 | 
				
			||||||
@@ -53,12 +52,8 @@ protected:
 | 
				
			|||||||
	virtual bool Command(char *Cmd) = 0;
 | 
						virtual bool Command(char *Cmd) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Will put Message into the response queue, which will be sent in the next
 | 
						/* Will put Message into the response queue, which will be sent in the next
 | 
				
			||||||
	   server cycle. Note that Message will be line-terminated by Respond. 
 | 
						   server cycle. Note that Message will be line-terminated by Respond. */
 | 
				
			||||||
	   Only one line at a time may be sent. If there are lines to follow, set
 | 
						virtual bool Respond(const char *Message, ...);
 | 
				
			||||||
	   Last to false. Command(NULL) will be called in the next cycle, so you can
 | 
					 | 
				
			||||||
	   post the next line. */
 | 
					 | 
				
			||||||
	virtual bool Respond(const char *Message, bool Last = true, ...);
 | 
					 | 
				
			||||||
			//__attribute__ ((format (printf, 2, 4)));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Add a request header */
 | 
						/* Add a request header */
 | 
				
			||||||
	void SetHeader(const char *Name, const char *Value, const char *Prefix = "") { m_Headers.insert(tStrStr(std::string(Prefix) + Name, Value)); }
 | 
						void SetHeader(const char *Name, const char *Value, const char *Prefix = "") { m_Headers.insert(tStrStr(std::string(Prefix) + Name, Value)); }
 | 
				
			||||||
@@ -87,8 +82,8 @@ public:
 | 
				
			|||||||
	virtual bool HasData(void) const;
 | 
						virtual bool HasData(void) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Gets called by server when the socket can accept more data. Writes
 | 
						/* Gets called by server when the socket can accept more data. Writes
 | 
				
			||||||
	   the buffer filled up by Respond(). Calls Command(NULL) if there is a
 | 
						   the buffer filled up by Respond(). Returns false in case of an
 | 
				
			||||||
	   command pending. Returns false in case of an error */
 | 
						   error */
 | 
				
			||||||
	virtual bool Write(void);
 | 
						virtual bool Write(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Gets called by server when there is incoming data to read. Calls
 | 
						/* Gets called by server when there is incoming data to read. Calls
 | 
				
			||||||
@@ -128,7 +123,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
inline bool cServerConnection::HasData(void) const
 | 
					inline bool cServerConnection::HasData(void) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return m_WriteBytes > 0 || m_Pending || m_DeferClose;
 | 
						return m_WriteBytes > 0 || m_DeferClose;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // VDR_STREAMDEV_SERVER_CONNECTION_H
 | 
					#endif // VDR_STREAMDEV_SERVER_CONNECTION_H
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -147,7 +147,7 @@ bool cConnectionHTTP::ProcessRequest(void)
 | 
				
			|||||||
		esyslog("streamdev-server connectionHTTP: Missing method or pathinfo");
 | 
							esyslog("streamdev-server connectionHTTP: Missing method or pathinfo");
 | 
				
			||||||
	} else if (it_method->second.compare("GET") == 0 && ProcessURI(it_pathinfo->second)) {
 | 
						} else if (it_method->second.compare("GET") == 0 && ProcessURI(it_pathinfo->second)) {
 | 
				
			||||||
		if (m_ChannelList)
 | 
							if (m_ChannelList)
 | 
				
			||||||
			return Respond("%s", true, m_ChannelList->HttpHeader().c_str());
 | 
								return Respond("%s", m_ChannelList->HttpHeader().c_str());
 | 
				
			||||||
		else if (m_Channel != NULL) {
 | 
							else if (m_Channel != NULL) {
 | 
				
			||||||
			cDevice *device = NULL;
 | 
								cDevice *device = NULL;
 | 
				
			||||||
			if (ProvidesChannel(m_Channel, 0))
 | 
								if (ProvidesChannel(m_Channel, 0))
 | 
				
			||||||
@@ -164,7 +164,7 @@ bool cConnectionHTTP::ProcessRequest(void)
 | 
				
			|||||||
					} else if (m_StreamType == stES && (m_Apid[0] || m_Dpid[0] || ISRADIO(m_Channel))) {
 | 
										} else if (m_StreamType == stES && (m_Apid[0] || m_Dpid[0] || ISRADIO(m_Channel))) {
 | 
				
			||||||
						return Respond("HTTP/1.0 200 OK")
 | 
											return Respond("HTTP/1.0 200 OK")
 | 
				
			||||||
						    && Respond("Content-Type: audio/mpeg")
 | 
											    && Respond("Content-Type: audio/mpeg")
 | 
				
			||||||
						    && Respond("icy-name: %s", true, m_Channel->Name())
 | 
											    && Respond("icy-name: %s", m_Channel->Name())
 | 
				
			||||||
						    && Respond("");
 | 
											    && Respond("");
 | 
				
			||||||
					} else if (ISRADIO(m_Channel)) {
 | 
										} else if (ISRADIO(m_Channel)) {
 | 
				
			||||||
						return Respond("HTTP/1.0 200 OK")
 | 
											return Respond("HTTP/1.0 200 OK")
 | 
				
			||||||
@@ -190,7 +190,7 @@ bool cConnectionHTTP::ProcessRequest(void)
 | 
				
			|||||||
	} else if (it_method->second.compare("HEAD") == 0 && ProcessURI(it_pathinfo->second)) {
 | 
						} else if (it_method->second.compare("HEAD") == 0 && ProcessURI(it_pathinfo->second)) {
 | 
				
			||||||
		DeferClose();
 | 
							DeferClose();
 | 
				
			||||||
		if (m_ChannelList)
 | 
							if (m_ChannelList)
 | 
				
			||||||
			return Respond("%s", true, m_ChannelList->HttpHeader().c_str());
 | 
								return Respond("%s", m_ChannelList->HttpHeader().c_str());
 | 
				
			||||||
		else if (m_Channel != NULL) {
 | 
							else if (m_Channel != NULL) {
 | 
				
			||||||
			if (ProvidesChannel(m_Channel, 0)) {
 | 
								if (ProvidesChannel(m_Channel, 0)) {
 | 
				
			||||||
				if (m_StreamType == stEXT) {
 | 
									if (m_StreamType == stEXT) {
 | 
				
			||||||
@@ -200,7 +200,7 @@ bool cConnectionHTTP::ProcessRequest(void)
 | 
				
			|||||||
				} else if (m_StreamType == stES && (m_Apid[0] || m_Dpid[0] || ISRADIO(m_Channel))) {
 | 
									} else if (m_StreamType == stES && (m_Apid[0] || m_Dpid[0] || ISRADIO(m_Channel))) {
 | 
				
			||||||
					return Respond("HTTP/1.0 200 OK")
 | 
										return Respond("HTTP/1.0 200 OK")
 | 
				
			||||||
					    && Respond("Content-Type: audio/mpeg")
 | 
										    && Respond("Content-Type: audio/mpeg")
 | 
				
			||||||
					    && Respond("icy-name: %s", true, m_Channel->Name())
 | 
										    && Respond("icy-name: %s", m_Channel->Name())
 | 
				
			||||||
					    && Respond("");
 | 
										    && Respond("");
 | 
				
			||||||
				} else if (ISRADIO(m_Channel)) {
 | 
									} else if (ISRADIO(m_Channel)) {
 | 
				
			||||||
					return Respond("HTTP/1.0 200 OK")
 | 
										return Respond("HTTP/1.0 200 OK")
 | 
				
			||||||
@@ -235,7 +235,7 @@ void cConnectionHTTP::Flushed(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (m_ChannelList) {
 | 
						if (m_ChannelList) {
 | 
				
			||||||
		if (m_ChannelList->HasNext()) {
 | 
							if (m_ChannelList->HasNext()) {
 | 
				
			||||||
			if (!Respond("%s", true, m_ChannelList->Next().c_str()))
 | 
								if (!Respond("%s", m_ChannelList->Next().c_str()))
 | 
				
			||||||
				DeferClose();
 | 
									DeferClose();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user