diff options
| author | Sebastien Braun | 2010-07-14 16:10:00 +0200 |
|---|---|---|
| committer | Sebastien Braun | 2010-07-14 16:10:00 +0200 |
| commit | b4059aff0fbc54ba67fae57c743f5900e7b73f92 (patch) | |
| tree | 80cf90cb5578a404976de0de795ddbac157c76a2 /src/net | |
| parent | Implement multicast transfer protocol. (diff) | |
| download | pvs-b4059aff0fbc54ba67fae57c743f5900e7b73f92.tar.gz pvs-b4059aff0fbc54ba67fae57c743f5900e7b73f92.tar.xz pvs-b4059aff0fbc54ba67fae57c743f5900e7b73f92.zip | |
Make UDP encapsulation correctly configurable.
Diffstat (limited to 'src/net')
| -rw-r--r-- | src/net/mcast/McastConfiguration.h | 26 | ||||
| -rw-r--r-- | src/net/mcast/McastConstants.h | 1 | ||||
| -rw-r--r-- | src/net/mcast/McastPGMSocket.cpp | 21 | ||||
| -rw-r--r-- | src/net/mcast/trial_programs/McastConfigArgParser.cpp | 6 |
4 files changed, 43 insertions, 11 deletions
diff --git a/src/net/mcast/McastConfiguration.h b/src/net/mcast/McastConfiguration.h index a609ce1..c32ac4f 100644 --- a/src/net/mcast/McastConfiguration.h +++ b/src/net/mcast/McastConfiguration.h @@ -35,8 +35,8 @@ public: _multicastDPort(DEFAULT_MULTICAST_DPORT), _multicastWinSize(DEFAULT_MULTICAST_WSIZ), _multicastMTU(DEFAULT_MULTICAST_MTU), - _multicastUDPPort(DEFAULT_MULTICAST_UDPPORT), - _multicastUseUDP(false) + _multicastUDPPortBase(DEFAULT_MULTICAST_UDPPORT), + _multicastUseUDP(DEFAULT_MULTICAST_USEUDP) { } @@ -48,7 +48,7 @@ public: _multicastDPort(other._multicastDPort), _multicastWinSize(other._multicastWinSize), _multicastMTU(other._multicastMTU), - _multicastUDPPort(other._multicastUDPPort), + _multicastUDPPortBase(other._multicastUDPPortBase), _multicastUseUDP(other._multicastUseUDP) { } @@ -127,16 +127,26 @@ public: return this; } - bool multicastUDPPort() const + quint16 multicastUDPPortBase() const { - return _multicastUDPPort; + return _multicastUDPPortBase; } - McastConfiguration* multicastUDPPort(quint16 port) + McastConfiguration* multicastUDPPortBase(quint16 port) { - _multicastUDPPort = port; + _multicastUDPPortBase = port; return this; } + quint16 multicastUDPUPort() const + { + return _multicastUDPPortBase; + } + + quint16 multicastUDPMPort() const + { + return _multicastUDPPortBase + 1; + } + void commit() { emit changed(); @@ -152,7 +162,7 @@ private: quint16 _multicastDPort; quint16 _multicastWinSize; quint16 _multicastMTU; - quint16 _multicastUDPPort; + quint16 _multicastUDPPortBase; bool _multicastUseUDP; }; diff --git a/src/net/mcast/McastConstants.h b/src/net/mcast/McastConstants.h index 712a0d5..9913457 100644 --- a/src/net/mcast/McastConstants.h +++ b/src/net/mcast/McastConstants.h @@ -23,6 +23,7 @@ #define DEFAULT_MULTICAST_ADDRESS ";239.255.220.207" #define DEFAULT_MULTICAST_SPORT 6964 #define DEFAULT_MULTICAST_DPORT 6965 +#define DEFAULT_MULTICAST_USEUDP true #define DEFAULT_MULTICAST_UDPPORT 6966 #define DEFAULT_MULTICAST_RATE (100*1024) #define DEFAULT_MULTICAST_WSIZ 3000 diff --git a/src/net/mcast/McastPGMSocket.cpp b/src/net/mcast/McastPGMSocket.cpp index 0d6b694..41764d5 100644 --- a/src/net/mcast/McastPGMSocket.cpp +++ b/src/net/mcast/McastPGMSocket.cpp @@ -142,8 +142,15 @@ bool McastPGMSocket::open(McastConfiguration const* config, Direction direction) sa_family_t family = addrinfo->ai_send_addrs[0].gsr_group.ss_family; - good - = pgm_socket(&_priv->socket, family, SOCK_SEQPACKET, IPPROTO_PGM, &err); + if(config->multicastUseUDP()) + { + good = pgm_socket(&_priv->socket, family, SOCK_SEQPACKET, IPPROTO_UDP, &err); + } + else + { + good = pgm_socket(&_priv->socket, family, SOCK_SEQPACKET, IPPROTO_PGM, &err); + } + if (!good) { qCritical() << "Could not open socket: PGM Error: " << err->message; @@ -209,6 +216,16 @@ bool McastPGMSocket::open(McastConfiguration const* config, Direction direction) int const mtu = config->multicastMTU(); pgm_setsockopt(_priv->socket, PGM_MTU, &mtu, sizeof(mtu)); + // UDP Encapsulation + if(config->multicastUseUDP()) + { + const quint16 uport = config->multicastUDPUPort(); + const quint16 mport = config->multicastUDPMPort(); + + pgm_setsockopt(_priv->socket, PGM_UDP_ENCAP_MCAST_PORT, &mport, sizeof(mport)); + pgm_setsockopt(_priv->socket, PGM_UDP_ENCAP_UCAST_PORT, &uport, sizeof(uport)); + } + pgm_sockaddr_t addr; addr.sa_addr.sport = config->multicastSPort(); addr.sa_port = config->multicastDPort(); diff --git a/src/net/mcast/trial_programs/McastConfigArgParser.cpp b/src/net/mcast/trial_programs/McastConfigArgParser.cpp index 8849544..efea0b5 100644 --- a/src/net/mcast/trial_programs/McastConfigArgParser.cpp +++ b/src/net/mcast/trial_programs/McastConfigArgParser.cpp @@ -125,6 +125,10 @@ bool parseMcastConfigArg(QStringList::iterator& i, QStringList::iterator const& { config->multicastUseUDP(true); } + else if (arg == "-no-udp") + { + config->multicastUseUDP(false); + } else if (arg == "-udp-port") { i++; @@ -140,7 +144,7 @@ bool parseMcastConfigArg(QStringList::iterator& i, QStringList::iterator const& cerr << "Error: UDP-Port is not an integer" << endl; return false; } - config->multicastUDPPort(udpport); + config->multicastUDPPortBase(udpport); } else { |
