http://www.mediawiki.org/wiki/Special:Code/MediaWiki/95725
Revision: 95725
Author: asher
Date: 2011-08-29 23:21:24 +0000 (Mon, 29 Aug 2011)
Log Message:
-----------
rewrite udp2log multicast listen support
Modified Paths:
--------------
trunk/udplog/debian/changelog
trunk/udplog/srclib/Socket.h
trunk/udplog/udp2log/udp2log.cpp
Modified: trunk/udplog/debian/changelog
===================================================================
--- trunk/udplog/debian/changelog 2011-08-29 23:11:36 UTC (rev 95724)
+++ trunk/udplog/debian/changelog 2011-08-29 23:21:24 UTC (rev 95725)
@@ -1,3 +1,9 @@
+udplog (1.7-1) lucid; urgency=low
+
+ * Rewrite multicast listen support
+
+ -- Asher Feldman <[email protected]> Mon, 29 Aug 2011 23:17:35 +0000
+
udplog (1.6-1) lucid; urgency=low
* Fixed account creation in postinst: create system account.
Modified: trunk/udplog/srclib/Socket.h
===================================================================
--- trunk/udplog/srclib/Socket.h 2011-08-29 23:11:36 UTC (rev 95724)
+++ trunk/udplog/srclib/Socket.h 2011-08-29 23:21:24 UTC (rev 95725)
@@ -62,6 +62,22 @@
}
}
+ int Mcast(const char* multicastAddr) {
+ IPAddress any(INADDR_ANY);
+ struct ip_mreq imreq;
+
+ bzero(&imreq, sizeof(struct ip_mreq));
+ imreq.imr_multiaddr.s_addr = inet_addr(multicastAddr);
+ imreq.imr_interface.s_addr = INADDR_ANY;
+ if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const void
*)&imreq,
+ sizeof(struct ip_mreq))) {
+ RaiseError("Socket::Mcast");
+ return errno;
+ } else {
+ return 0;
+ }
+ }
+
boost::shared_ptr<SocketAddress> GetPeerAddress() {
if (connect(fd, SocketAddress::GetBuffer(),
SocketAddress::GetBufferLength()) < 0) {
RaiseError("Socket::GetPeerAddress");
@@ -154,29 +170,4 @@
}
};
-
-class MulticastSocket : public Socket
-{
-public:
- MulticastSocket(int domain = PF_INET)
- : Socket(domain, SOCK_DGRAM, 0) {}
-
- MulticastSocket(IPAddress & addr, unsigned int port, const char*
multicastAddr)
- : Socket(addr.GetDomain(), SOCK_DGRAM, 0)
- {
- struct ip_mreq imreq;
- bzero(&imreq, sizeof(struct ip_mreq));
- boost::shared_ptr<SocketAddress> saddr =
addr.NewSocketAddress(port);
- if (Connect(*saddr)) {
- good = false;
- }
- imreq.imr_multiaddr.s_addr = inet_addr(multicastAddr);
- imreq.imr_interface.s_addr = INADDR_ANY;
-
- // JOIN multicast group on default interface
- setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
- (const void *)&imreq, sizeof(struct ip_mreq));
-
- }
-};
#endif
Modified: trunk/udplog/udp2log/udp2log.cpp
===================================================================
--- trunk/udplog/udp2log/udp2log.cpp 2011-08-29 23:11:36 UTC (rev 95724)
+++ trunk/udplog/udp2log/udp2log.cpp 2011-08-29 23:21:24 UTC (rev 95725)
@@ -185,17 +185,15 @@
IPAddress any(INADDR_ANY);
SocketAddress saddr(any, (unsigned short int)port);
Socket socket;
+ socket = *(new UDPSocket());
+ if (!socket) {
+ cerr << "Unable to open socket\n";
+ return 1;
+ }
+ socket.Bind(saddr);
if(strcmp("0", multicastAddr.c_str())){ //if multicast
- socket = *(new MulticastSocket(any, port,
multicastAddr.c_str()));
- }
- else{
- socket = *(new UDPSocket());
- if (!socket) {
- cerr << "Unable to open socket\n";
- return 1;
- }
- socket.Bind(saddr);
- }
+ socket.Mcast(multicastAddr.c_str());
+ }
// Process received packets
boost::shared_ptr<SocketAddress> address;
const size_t bufSize = 65536;
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs