powerguru-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Powerguru-commit] [SCM] powerguru branch, master, updated. 92ac0be47ba4


From: Rob Savoye
Subject: [Powerguru-commit] [SCM] powerguru branch, master, updated. 92ac0be47ba4dac32cff29ed4d9ae3a35198c6ff
Date: Fri, 21 Dec 2018 16:10:39 -0500 (EST)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "powerguru".

The branch, master has been updated
       via  92ac0be47ba4dac32cff29ed4d9ae3a35198c6ff (commit)
       via  e97aa754636e34e3ee53e57640b323e073def7e5 (commit)
       via  dd60657b8398877c1d48960540ca0d4568bcdfc2 (commit)
       via  4b5eee1211bfff04b9d6dd2244e41a2a05da0e8c (commit)
       via  04af3d08cb93adb455e03b1ff2c974c81f45cfd5 (commit)
       via  263766086034e36d8771086a9f139d835f3a50b7 (commit)
      from  bb32c057f6ee51ac0d81d144e9313fe75c30ee08 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=92ac0be47ba4dac32cff29ed4d9ae3a35198c6ff


commit 92ac0be47ba4dac32cff29ed4d9ae3a35198c6ff
Author: Rob Savoye <address@hidden>
Date:   Fri Dec 21 14:10:08 2018 -0700

    Use newer getaddrinfo based commands for network server

diff --git a/lib/tcpip.cc b/lib/tcpip.cc
index 60a4851..2e1a2d0 100644
--- a/lib/tcpip.cc
+++ b/lib/tcpip.cc
@@ -58,12 +58,13 @@ extern LogFile dbglogfile;
 Tcpip::Tcpip(void)
 
 {
-    // Get the low level host data for this machine
-    //hostDataGet();
+    DEBUGLOG_REPORT_FUNCTION;
 }
 
 Tcpip::~Tcpip(void)
 {
+    DEBUGLOG_REPORT_FUNCTION;
+
     std::vector<int>::iterator it;
 //    for (it = _connection.begin(); it != _connections.end(); it++) {
 //        closeConnection(it);
@@ -100,126 +101,47 @@ Tcpip::createNetServer(short port, const std::string 
&protocol)
     struct protoent *ppe = 0;
     struct sockaddr_in sock_in;
     int             on, type;
-    int             retries = 0;
     const struct hostent  *host;
     struct in_addr  *thisaddr = 0, newaddr;
     in_addr_t       nodeaddr, netaddr;
   
-    struct addrinfo *addr = getAddrInfo("localhost", port);
-    // host = hostDataGet("localhost");
-    // thisaddr = reinterpret_cast<struct in_addr 
*>(_addrinfo->ai_addr->h_addr_list[0]);
-    //thisaddr = addr->sin_addr;
-    //in_addr_t = ipaddr = thisaddr->s_addr;
-    std::memset(&sock_in, 0, sizeof(sock_in));
-  
-    //  sock_in.sin_addr.s_addr = thisaddr->s_addr;
-    sock_in.sin_addr.s_addr = INADDR_ANY;
-  
-    // ipaddr = sock_in.sin_addr.s_addr;
-    sock_in.sin_family = AF_INET;
-    sock_in.sin_port = htons(port);
-  
-  
-    //    dbglogfile << "Trying to make a server for service "
-    //               <<
-    //      srvname << " at port " <<  ntohs(sock_in.sin_port) << nedl;
-  
-    if ((ppe = getprotobyname(protocol.c_str())) == 0) {
-        // error, wasn't able to get a protocol entry
-        dbglogfile << "WARNING: unable to get " << protocol
-                   << " protocol entry" << std::endl;
-        return ERROR;
-    }
-  
-    // set protocol type
-    if (protocol == "udp") {
-        type = SOCK_DGRAM;
+    struct addrinfo *addr = getAddrInfo("", port);
+    if (addr) {
+        // Get a file descriptor for this socket connection
+        _sockIOfd = ::socket(addr->ai_family, addr->ai_socktype, 
addr->ai_protocol);
+        if (_sockIOfd < 0) {
+            std::cerr << "ERROR: unable to create socket: " << strerror(errno) 
<< std::endl;
+            return ERROR;
+        }
     } else {
-        type = SOCK_STREAM;
-    }
-  
-    // Get a file descriptor for this socket connection
-    _sockIOfd = socket(PF_INET, type, ppe->p_proto);
-  
-    // error, wasn't able to create a socket
-    if (_sockIOfd < 0) {
-        dbglogfile << "unable to create socket: " << strerror(errno) << 
std::endl;
-        return SUCCESS;
-    }
-
-    on = 1;
-    if (setsockopt(_sockIOfd, SOL_SOCKET, SO_REUSEADDR,
-                   (char *)&on, sizeof(on)) < 0) {
-        dbglogfile << "setsockopt SO_REUSEADDR failed" << std::endl;
+        std::cerr << "ERROR: unable to get address! " << gai_strerror(errno) 
<< std::endl;
         return ERROR;
     }
-
-    retries = 0;
-  
-    nodeaddr = inet_lnaof(*thisaddr);
-    while (retries < 5) {
-        if (bind(_sockIOfd, reinterpret_cast<struct sockaddr *>(&sock_in),
-                 sizeof(sock_in)) == -1) {
-            dbglogfile << "WARNING: unable to bind to"
-                       << inet_ntoa(sock_in.sin_addr)
-                       << " port!" << strerror(errno) << std::endl;
-      
-            // If there is something already bound to this IP number,
-            // then we increment the number to be the next one in the
-            // range. This lets multiple tcp/ip servers operate on the
-            // same machine using the same tcp/ip port.
-            if (errno == EADDRINUSE) {
-                //            nodeaddr = inet_lnaof(*thisaddr);
-                netaddr = inet_netof(*thisaddr);
-                nodeaddr++;
-                newaddr = inet_makeaddr(netaddr, nodeaddr);
-                sock_in.sin_addr.s_addr = newaddr.s_addr;
-                // There are always two interfaces on any machine, the loopback
-                // device, and the default ethernet port. With IP aliasing, 
there
-                // will be more devices, but if not, we have an error, and 
can't
-                // continue.
-                if (numberOfInterfaces() - 2 > retries) {
-                    retries++;
-                    continue;
-                } else {
-                    dbglogfile <<
-                        "ERROR: There is another process already bound to this 
port!" << std::endl;
-                    return ERROR;
-                }
-            }
-            retries++;
-        }
-    
-        // _hostname = hostByAddrGet(inet_ntoa(sock_in.sin_addr));
     
-#if 0
-        char                ascip[32];
-        inet_ntop(AF_INET, &_ipaddr, ascip, INET_ADDRSTRLEN);
-        dbglogfile << "Host Name is " << host->h_name << " IP is " <<
-            ascip << std::endl;
-#endif
-    
-        dbglogfile << "Server bound to service "
-                   << " on port: " << ntohs(sock_in.sin_port)
-                   << " on IP " << inet_ntoa(sock_in.sin_addr)
-                   << " using fd #" << _sockIOfd << std::endl;
-    
-        if (type == SOCK_STREAM && listen(_sockIOfd, 5) < 0) {
-            dbglogfile << "ERROR: unable to listen on port: "
-                       << port << ": " <<  strerror(errno) << std::endl; 
+    if (bind(_sockIOfd, addr->ai_addr, addr->ai_addrlen) == -1) {
+        dbglogfile << "WARNING: unable to bind to"
+                   << inet_ntoa(sock_in.sin_addr)
+                   << " port!" << strerror(errno) << std::endl;
+        if (errno == EADDRINUSE) {
+            std::cerr << "ERROR: There is another process already bound to 
this port!"
+                      << std::endl;
             return ERROR;
         }
-
-        _port = port;
+    }
     
-#if 0
-        dbglogfile << "Listening for net traffic on fd #\n" << _sockfd << 
std::endl;
-#endif
-
-        return SUCCESS;
+    dbglogfile << "Server bound to port: " << port
+               << " on IP " << inet_ntoa(((struct sockaddr_in 
*)addr->ai_addr)->sin_addr)
+                   << " using fd #" << _sockIOfd << std::endl;
+    
+    if (listen(_sockIOfd, 5) < 0) {
+        dbglogfile << "ERROR: unable to listen on port: "
+                   << port << ": " <<  strerror(errno) << std::endl; 
+        return ERROR;
     }
+    
+    dbglogfile << "Listening for net traffic on fd #" << _sockIOfd << 
std::endl;
 
-    return ERROR;
+    return SUCCESS;
 }
 
 // Description: Accept a new network connection for the port we have
@@ -236,42 +158,35 @@ retcode_t
 Tcpip::newNetConnection(bool block)
 {
     DEBUGLOG_REPORT_FUNCTION;
-    struct sockaddr    fsin;
-    socklen_t          alen;
-    int                        ret;
-    struct timeval        tval;
-    fd_set                fdset;
-    int                   retries = 3;
-  
-    alen = sizeof(struct sockaddr_in);
-  
-#ifdef NET_DEBUG
-    dbglogfile << "Trying to accept net traffic on fd #" << _sockfd << 
std::endl;
-#endif
+    struct sockaddr fsin;
+    int                    ret;
+    socklen_t      alen = 0;
+    struct timeval  tval;
+    fd_set          fdset;
+    int             retries = 3;
+
+    dbglogfile << "Trying to accept net traffic on fd #" << _sockIOfd << 
std::endl;
   
     if (_sockIOfd <= 2) {
         return ERROR;
     }
-  
+
+#if 0
     while (retries--) {
         // We use select to wait for the read file descriptor to be
         // active, which means there is a client waiting to connect.
         FD_ZERO(&fdset);
-        // also return on any input from stdin
-        if (_console) {
-            FD_SET(fileno(stdin), &fdset);
-        }
         FD_SET(_sockIOfd, &fdset);
     
         // Reset the timeout value, since select modifies it on return. To
         // block, set the timeout to zero.
-        tval.tv_sec = 1;
+        tval.tv_sec = 10;
         tval.tv_usec = 0;
     
         if (block) {
             ret = select(_sockIOfd+1, &fdset, NULL, NULL, NULL);
         } else {
-            ret = select(_sockIOfd+1, &fdset, NULL, NULL, &tval);
+            ret = ::select(_sockIOfd+1, &fdset, NULL, NULL, &tval);
         }
     
         if (FD_ISSET(0, &fdset)) {
@@ -297,17 +212,21 @@ Tcpip::newNetConnection(bool block)
                 "ERROR: The accept() socket for fd #%d timed out waiting to 
write!"
                        << _sockIOfd << std::endl;
         }
+        if (ret >= 1) {
+            dbglogfile << "The accept() socket got something!" << std::endl;
+        }
     }
+#endif
 
-    fcntl(_sockIOfd, F_SETFL, O_NONBLOCK); // Don't let accept() block
-    _sockfd = accept(_sockIOfd, &fsin, &alen);
+    ::memset(&fsin, 0,  sizeof(struct sockaddr_in));
+    //::fcntl(_sockIOfd, F_SETFL, O_NONBLOCK); // Don't let accept() block
+    _sockfd = ::accept(_sockIOfd, &fsin, &alen);
   
     if (_sockfd < 0) {
-        dbglogfile << "unable to accept : " << strerror(errno) << std::endl;
+        dbglogfile << "ERROR: unable to accept : " << strerror(errno) << 
std::endl;
         return ERROR;
     } else {
-        dbglogfile << "Accepting tcp/ip connection on fd #"
-                   << _sockfd << std::endl;
+        dbglogfile << "Accepting tcp/ip connection on fd #" << _sockfd << 
std::endl;
     }
 
     std::memcpy(&_client, &fsin, sizeof(struct sockaddr));

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=e97aa754636e34e3ee53e57640b323e073def7e5


commit e97aa754636e34e3ee53e57640b323e073def7e5
Author: Rob Savoye <address@hidden>
Date:   Fri Dec 21 14:08:57 2018 -0700

    make getAddrInfo( support clients and servers

diff --git a/lib/tcputil.cc b/lib/tcputil.cc
index be2610c..5e256a7 100644
--- a/lib/tcputil.cc
+++ b/lib/tcputil.cc
@@ -44,12 +44,12 @@ extern LogFile dbglogfile;
 
 Tcputil::Tcputil(void) : Tcputil("localhost", DEFAULTPORT)
 {
-    DEBUGLOG_REPORT_FUNCTION;
+//    DEBUGLOG_REPORT_FUNCTION;
 }
 
 Tcputil::Tcputil(const std::string &host) : Tcputil(host, DEFAULTPORT)
 {
-    DEBUGLOG_REPORT_FUNCTION;
+//    DEBUGLOG_REPORT_FUNCTION;
 }
 
 Tcputil::Tcputil(const std::string &host, short port)
@@ -57,49 +57,52 @@ Tcputil::Tcputil(const std::string &host, short port)
      _proto(0),
      _hostname("localhost")
 {
-    DEBUGLOG_REPORT_FUNCTION;
+//    DEBUGLOG_REPORT_FUNCTION;
     std::string portstr = std::to_string(port);
     _hostname = host;
 
-#if 0
-    dbglogfile << "Has " << numberOfInterfaces()
-               << " interfaces, using default one" << std::endl;
-#endif
-    //_proto = getprotobyname("tcp");
-    _proto = getprotobynumber(IPPROTO_IP);
+    _proto = getprotobyname("tcp");
+    _proto = getprotobynumber(IPPROTO_TCP);
 
-//    if (!getAddrInfo(host, port)) {
-//        dbglogfile << "WARNING: Couldn't get address info for this machine!" 
<< std::endl;
-//    }
-    
+#if 0
+    // Chances are we don't have an entry in the /etc/services file.
     _service = getservbyport(htons(port), _proto->p_name);
     if (_service) {
         dbglogfile <<  "Found service file entry for " << _service->s_name << 
std::endl;
     } else {
         dbglogfile << "Services file entry for port " << DEFAULTPORT << " was 
not found, using defaults" << std::endl;
     }
+#endif
 }
 
 struct addrinfo *
 Tcputil::getAddrInfo(const std::string& hostname, std::uint16_t port)
 {
-    DEBUGLOG_REPORT_FUNCTION;
+//    DEBUGLOG_REPORT_FUNCTION;
 
     struct addrinfo hints, *ans = nullptr;
     ::memset(&hints, 0, sizeof(struct addrinfo));
 
-    //hints.ai_family = AF_UNSPEC;    // Allow IPv4 or IPv6
-    hints.ai_family = AF_INET;  // Allow IPv4 only for now
-    hints.ai_flags = 0;
-    //hints.ai_flags = AI_PASSIVE;
+    // 
+    if (hostname.empty()) {
+        hints.ai_family = AF_UNSPEC;    // Allow IPv4 or IPv6
+        hints.ai_flags = AI_PASSIVE;
+        //hints.ai_protocol = IPPROTO_TCP; // any protocol
+    } else {
+        hints.ai_family = AF_INET;  // Allow IPv4 only for now
+        hints.ai_flags = 0;
+        _hostname = hostname;
+    }
     hints.ai_protocol = _proto->p_proto;
-    //hints.ai_protocol = 0; // any protocol
-    //hints.ai_socktype = SOCK_DGRAM; // UDP
     hints.ai_socktype = SOCK_STREAM; // TCP
 
-    _hostname = hostname;
     std::string portstr = std::to_string(port);
-    int ret = ::getaddrinfo(hostname.c_str(), portstr.c_str(), &hints, &ans);
+    int ret = 0;
+    if (hostname.empty()) {
+        ret = ::getaddrinfo(nullptr, portstr.c_str(), &hints, &ans);
+    } else {
+        ret = ::getaddrinfo(hostname.c_str(), portstr.c_str(), &hints, &ans);
+    }
     if (ret != 0) {
         std::cerr << "ERROR: getaddrinfo(" << hostname << ") failed! "
                   << gai_strerror(ret) << std::endl;

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=dd60657b8398877c1d48960540ca0d4568bcdfc2


commit dd60657b8398877c1d48960540ca0d4568bcdfc2
Author: Rob Savoye <address@hidden>
Date:   Fri Dec 21 14:06:41 2018 -0700

    Make less verbose

diff --git a/lib/commands.cc b/lib/commands.cc
index f237ca7..36e3857 100644
--- a/lib/commands.cc
+++ b/lib/commands.cc
@@ -36,7 +36,7 @@ extern LogFile dbglogfile;
 
 Commands::Commands()
 {
-    DEBUGLOG_REPORT_FUNCTION;
+//    DEBUGLOG_REPORT_FUNCTION;
 
     _commands["nop"] = Commands::NOP;
     _commands["list"] = Commands::LIST;
@@ -46,7 +46,7 @@ Commands::Commands()
 
 Commands::~Commands()
 {
-    DEBUGLOG_REPORT_FUNCTION;
+//    DEBUGLOG_REPORT_FUNCTION;
 }
 
 std::string &

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=4b5eee1211bfff04b9d6dd2244e41a2a05da0e8c


commit 4b5eee1211bfff04b9d6dd2244e41a2a05da0e8c
Author: Rob Savoye <address@hidden>
Date:   Fri Dec 21 14:06:16 2018 -0700

    Don't use pdev namespace anymore

diff --git a/daemon/main.cc b/daemon/main.cc
index c5ff253..455cf5c 100644
--- a/daemon/main.cc
+++ b/daemon/main.cc
@@ -75,9 +75,9 @@ alarm_handler2 (int sig);
 int curses = 0;
 
 extern void client_handler(Tcpip &net);
-extern void ownet_handler(pdev::Ownet &);
-extern void outback_handler(pdev::Ownet &);
-extern void xantrex_handler(pdev::Ownet &);
+extern void ownet_handler(Ownet &);
+extern void outback_handler(Ownet &);
+extern void xantrex_handler(Ownet &);
 
 std::mutex queue_lock;
 std::queue <XML> tqueue;
@@ -239,17 +239,21 @@ main(int argc, char *argv[])
 
     dbglogfile << "PowerGuru - 1 Wire Mode" << std::endl;
     Tcpip net;
-    net.createNetServer(DEFAULTPORT);
-    std::thread first (client_handler, std::ref(net));
+    if (net.createNetServer(DEFAULTPORT) == ERROR) {
+        std::cerr << "ERROR: Couldn't create a network server!" << std::endl;
+        exit(-1);
+    }
+
+    std::thread client_thread (client_handler, std::ref(net));
 #ifdef BUILD_OWNET
-    pdev::Ownet ownet;
-    std::thread second (ownet_handler, std::ref(ownet));
+    Ownet ownet("localhost:4303");
+    std::thread ownet_thread (ownet_handler, std::ref(ownet));
 #endif
 #ifdef BUILD_XANTREX
-    std::thread third (xantrex_handler, std::ref(ownet));
+    std::thread xantrex_tread (xantrex_handler, std::ref(ownet));
 #endif
 #ifdef BUILD_OUTBACK
-    std::thread fourth(outback_handler, std::ref(ownet));
+    std::thread outback_thread (outback_handler, std::ref(ownet));
 //    std::thread forth (msg_handler, std::ref(pdb));
 #endif
     
@@ -368,15 +372,15 @@ main(int argc, char *argv[])
 
     // synchronize threads:
     dbglogfile << "Killing all threads..." << std::endl;
-    first.join();                // pauses until first finishes
+    client_thread.join();                // pauses until first finishes
 #ifdef BUILD_OWNET
-    second.join();                // pauses until second finishes
-#endif
-#ifdef BUILD_OUTBACK
-    fourth.join();               // pauses until second finishes
+    ownet_thread.join();                // pauses until second finishes
 #endif
 #ifdef BUILD_XANTREX
-    third.join();               // pauses until third finishes
+    xantrex_thread.join();               // pauses until third finishes
+#endif
+#ifdef BUILD_OUTBACK
+    outback_thread.join();               // pauses until second finishes
 #endif
 
     exit(0);

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=04af3d08cb93adb455e03b1ff2c974c81f45cfd5


commit 04af3d08cb93adb455e03b1ff2c974c81f45cfd5
Author: Rob Savoye <address@hidden>
Date:   Fri Dec 21 14:05:58 2018 -0700

    Check return code from net.newNetConnection

diff --git a/daemon/threads.cc b/daemon/threads.cc
index 1dd05c0..62c57e7 100644
--- a/daemon/threads.cc
+++ b/daemon/threads.cc
@@ -48,6 +48,7 @@ extern char *optarg;
 #include "tcpip.h"
 #include "xml.h"
 #include "commands.h"
+#include "ownet.h"
 
 extern LogFile dbglogfile;
 
@@ -69,7 +70,10 @@ client_handler(Tcpip &net)
     std::string user;
 
     while (retries-- <= 10) {
-        net.newNetConnection(true);
+        if (net.newNetConnection(true) == ERROR) {
+            std::cerr << "ERROR: new connection failed!" << std::endl;
+            return;
+        }
 
         bool loop = true;
         std::vector<unsigned char> data;

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=263766086034e36d8771086a9f139d835f3a50b7


commit 263766086034e36d8771086a9f139d835f3a50b7
Author: Rob Savoye <address@hidden>
Date:   Fri Dec 21 14:03:55 2018 -0700

    Add option for remote server

diff --git a/client/cmd.cc b/client/cmd.cc
index 530dff8..945f0dd 100644
--- a/client/cmd.cc
+++ b/client/cmd.cc
@@ -54,7 +54,8 @@ int
 main(int argc, char *argv[])
 {
     int         c;
-    std::string      hostname = "localhost";
+    std::string dbhost = "localhost";
+    std::string pserver = "localhost:" + DEFAULTPORT;
     retcode_t   ret;
 
     // scan for the two main standard GNU options
@@ -69,7 +70,7 @@ main(int argc, char *argv[])
         }
     }
     
-    while ((c = getopt (argc, argv, "hvm:u:p:V")) != -1) {
+    while ((c = getopt (argc, argv, "hvVd:p:")) != -1) {
         switch (c) {
           case 'h':
               usage (argv[0]);
@@ -79,10 +80,14 @@ main(int argc, char *argv[])
               dbglogfile.set_verbosity();
               break;
         
-          case 'm':
-              hostname = strdup(optarg);
+          case 'd':
+              dbhost = strdup(optarg);
               break;
         
+          case 'p':
+              pserver = strdup(optarg);
+              break;
+
           case 'V':
               std::cerr << "PowerGuru version " << VERSION << std::endl;
               exit (0);
@@ -94,13 +99,9 @@ main(int argc, char *argv[])
         }
     }
 
-    Tcpip net;
-    net.createNetClient(DEFAULTPORT);
-    std::thread first (daemon_handler, std::ref(net));
-
-#ifdef BUILD_OWNET_XXXXX
+#ifdef BUILD_OWNET_XXX
     // Talk directly to the OW daemon
-    pdev::Ownet ownet;
+    Ownet ownet(pserver + ":4303");
     if (ownet.isConnected()) {
         if (ownet.hasSensors()) {
             dbglogfile << "and has sensors attached" << std::endl;
@@ -110,7 +111,13 @@ main(int argc, char *argv[])
         }
     }
 #endif
+    Tcpip net;
+    if (net.createNetClient(pserver) == ERROR) {
+        std::cerr << "ERROR: Can't connect to Powerguru daemon!" << std::endl;
+        exit(-1);
+    }
 
+    std::thread first (daemon_handler, std::ref(net));
     std::thread second (console_handler, std::ref(net));
 
     first.join();                // pauses until second finishes
@@ -129,7 +136,8 @@ usage (const char *prog)
     std::cerr << "Usage: pguru: [h] filename" << std::endl;
     std::cerr << "-h\tHelp" << std::endl;
     std::cerr << "-v\tVerbose output" << std::endl;
-    std::cerr << "-m\tDatabase Host(localhost)" << std::endl;
+    std::cerr << "-d\tDatabase Host(localhost)" << std::endl;
+    std::cerr << "-p\tPowerguru Host(localhost)" << std::endl;
     exit (-1);
 }
 

-----------------------------------------------------------------------

Summary of changes:
 client/cmd.cc     |  30 +++++----
 daemon/main.cc    |  34 +++++-----
 daemon/threads.cc |   6 +-
 lib/commands.cc   |   4 +-
 lib/tcpip.cc      | 185 +++++++++++++++---------------------------------------
 lib/tcputil.cc    |  47 +++++++-------
 6 files changed, 122 insertions(+), 184 deletions(-)


hooks/post-receive
-- 
powerguru



reply via email to

[Prev in Thread] Current Thread [Next in Thread]