mirror of
https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
synced 2023-10-10 19:16:51 +02: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:
parent
2b103196d6
commit
bb1ac54c87
@ -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>
|
#include <ctype.h>
|
||||||
@ -71,6 +71,8 @@ bool cConnectionHTTP::ProcessRequest(void)
|
|||||||
device->SwitchChannel(m_Channel, false);
|
device->SwitchChannel(m_Channel, false);
|
||||||
if (m_LiveStreamer->SetChannel(m_Channel, m_StreamType, m_Apid)) {
|
if (m_LiveStreamer->SetChannel(m_Channel, m_StreamType, m_Apid)) {
|
||||||
m_LiveStreamer->SetDevice(device);
|
m_LiveStreamer->SetDevice(device);
|
||||||
|
if (!SetDSCP())
|
||||||
|
LOG_ERROR_STR("unable to set DSCP sockopt");
|
||||||
if (m_StreamType == stES && (m_Apid != 0 || ISRADIO(m_Channel))) {
|
if (m_StreamType == stES && (m_Apid != 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")
|
||||||
|
@ -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"
|
#include "server/connectionVTP.h"
|
||||||
@ -691,6 +691,8 @@ bool cConnectionVTP::CmdPORT(char *Opts)
|
|||||||
return Respond(551, "Couldn't open data connection");
|
return Respond(551, "Couldn't open data connection");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!m_LiveSocket->SetDSCP())
|
||||||
|
LOG_ERROR_STR("unable to set DSCP sockopt");
|
||||||
if (m_LiveStreamer)
|
if (m_LiveStreamer)
|
||||||
m_LiveStreamer->Start(m_LiveSocket);
|
m_LiveStreamer->Start(m_LiveSocket);
|
||||||
|
|
||||||
|
@ -6,6 +6,15 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.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) {
|
cTBSocket::cTBSocket(int Type) {
|
||||||
memset(&m_LocalAddr, 0, sizeof(m_LocalAddr));
|
memset(&m_LocalAddr, 0, sizeof(m_LocalAddr));
|
||||||
memset(&m_RemoteAddr, 0, sizeof(m_RemoteAddr));
|
memset(&m_RemoteAddr, 0, sizeof(m_RemoteAddr));
|
||||||
@ -141,3 +150,8 @@ bool cTBSocket::Shutdown(int how) {
|
|||||||
|
|
||||||
return ::shutdown(*this, how) != -1;
|
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. */
|
an appropriate value. */
|
||||||
virtual bool Accept(const cTBSocket &Listener);
|
virtual bool Accept(const cTBSocket &Listener);
|
||||||
|
|
||||||
|
/* Sets DSCP sockopt */
|
||||||
|
bool SetDSCP(void);
|
||||||
|
|
||||||
/* LocalPort() returns the port number this socket is connected to locally.
|
/* LocalPort() returns the port number this socket is connected to locally.
|
||||||
The result is undefined for a non-open socket. */
|
The result is undefined for a non-open socket. */
|
||||||
int LocalPort(void) const { return ntohs(m_LocalAddr.sin_port); }
|
int LocalPort(void) const { return ntohs(m_LocalAddr.sin_port); }
|
||||||
|
Loading…
Reference in New Issue
Block a user