mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
				synced 2023-10-10 17:16:51 +00:00 
			
		
		
		
	Set DSCP 41 on stream data packets. WMM capable WLAN accesspoints
should understand this and give precedence. For Internet streaming it could be used by traffic shapers. Suggested by ollo@vdrportal (#237). Modified Files: server/connectionHTTP.c server/connectionVTP.c tools/socket.c tools/socket.h
This commit is contained in:
		| @@ -1,5 +1,5 @@ | ||||
| /* | ||||
|  *  $Id: connectionHTTP.c,v 1.11 2007/04/16 11:01:02 schmirl Exp $ | ||||
|  *  $Id: connectionHTTP.c,v 1.12 2007/05/09 09:12:42 schmirl Exp $ | ||||
|  */ | ||||
|  | ||||
| #include <ctype.h> | ||||
| @@ -71,6 +71,8 @@ bool cConnectionHTTP::ProcessRequest(void) | ||||
| 				device->SwitchChannel(m_Channel, false); | ||||
| 				if (m_LiveStreamer->SetChannel(m_Channel, m_StreamType, m_Apid)) { | ||||
| 					m_LiveStreamer->SetDevice(device); | ||||
| 					if (!SetDSCP()) | ||||
| 						LOG_ERROR_STR("unable to set DSCP sockopt"); | ||||
| 					if (m_StreamType == stES && (m_Apid != 0 || ISRADIO(m_Channel))) { | ||||
| 						return Respond("HTTP/1.0 200 OK") | ||||
| 						    && Respond("Content-Type: audio/mpeg") | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| /* | ||||
|  *  $Id: connectionVTP.c,v 1.13 2007/04/26 06:25:13 schmirl Exp $ | ||||
|  *  $Id: connectionVTP.c,v 1.14 2007/05/09 09:12:42 schmirl Exp $ | ||||
|  */ | ||||
|   | ||||
| #include "server/connectionVTP.h" | ||||
| @@ -691,6 +691,8 @@ bool cConnectionVTP::CmdPORT(char *Opts) | ||||
| 		return Respond(551, "Couldn't open data connection"); | ||||
| 	} | ||||
|  | ||||
| 	if (!m_LiveSocket->SetDSCP()) | ||||
| 		LOG_ERROR_STR("unable to set DSCP sockopt"); | ||||
| 	if (m_LiveStreamer) | ||||
| 		m_LiveStreamer->Start(m_LiveSocket); | ||||
|  | ||||
|   | ||||
| @@ -6,6 +6,15 @@ | ||||
| #include <errno.h> | ||||
| #include <fcntl.h> | ||||
|  | ||||
| // default class: best effort | ||||
| #define DSCP_BE    0 | ||||
| // gold class (video): assured forwarding 4 with lowest drop precedence | ||||
| #define DSCP_AF41 34 << 2 | ||||
| // premium class (voip): expedited forwarding | ||||
| #define DSCP_EF   46 << 2 | ||||
| // actual DSCP value used | ||||
| #define STREAMDEV_DSCP DSCP_AF41 | ||||
|  | ||||
| cTBSocket::cTBSocket(int Type) { | ||||
| 	memset(&m_LocalAddr, 0, sizeof(m_LocalAddr)); | ||||
| 	memset(&m_RemoteAddr, 0, sizeof(m_RemoteAddr)); | ||||
| @@ -141,3 +150,8 @@ bool cTBSocket::Shutdown(int how) { | ||||
|  | ||||
| 	return ::shutdown(*this, how) != -1; | ||||
| } | ||||
|  | ||||
| bool cTBSocket::SetDSCP(void) { | ||||
| 	int dscp = STREAMDEV_DSCP; | ||||
| 	return ::setsockopt(*this, SOL_IP, IP_TOS, &dscp, sizeof(dscp)) != -1; | ||||
| } | ||||
|   | ||||
| @@ -68,6 +68,9 @@ public: | ||||
| 	   an appropriate value. */ | ||||
| 	virtual bool Accept(const cTBSocket &Listener); | ||||
|  | ||||
| 	/* Sets DSCP sockopt */ | ||||
| 	bool SetDSCP(void); | ||||
|  | ||||
| 	/* LocalPort() returns the port number this socket is connected to locally. | ||||
| 	   The result is undefined for a non-open socket. */ | ||||
| 	int LocalPort(void) const { return ntohs(m_LocalAddr.sin_port); } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user