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

Reply via email to