]> gitweb.hamatoma.de Git - reqt/commitdiff
dayly work
authorJ. Hamatoma <hama@siduction.net>
Sun, 15 Dec 2013 22:10:49 +0000 (23:10 +0100)
committerJ. Hamatoma <hama@siduction.net>
Sun, 15 Dec 2013 22:10:49 +0000 (23:10 +0100)
rplcore/rplconfig.cpp
rplcore/rpllogger.cpp
rplnet/rpltcpclient.cpp
rplnet/rpltcpclient.hpp
rplnet/rpltcppeer.cpp
rplnet/rpltcppeer.hpp
rplnet/rpltcpserver.cpp

index d5a3c27e01eb914c1ef348d957728b74d233a9ed..3ab4699e1146431621fd1266206fb7417494829c 100644 (file)
  * VALUE is a string
  */
 
-enum Locations{
-    LOC_WRITE_1 = RPL_FIRST_OF(RPLMODULE_CONFIG),
-    LOC_WRITE_2,
-    LOC_READ_1,
-    LOC_READ_2,
+enum Locations {
+      LOC_WRITE_1 = RPL_FIRST_OF(RPLMODULE_CONFIG),
+      LOC_WRITE_2,
+      LOC_READ_1,
+      LOC_READ_2,
 };
 
-
 /**
  * Constructor.
  *
@@ -39,43 +38,41 @@ enum Locations{
  * @param logger        NULL or a logger
  */
 RplConfig::RplConfig(const char* file, bool readOnly, RplLogger* logger) :
-    m_file(file),
-    m_lineList(),
-    m_readOnly(readOnly),
-    m_logger(logger),
-    m_ownLogger(logger == NULL)
-{
-    if (logger == NULL){
-        initLogger();
-    }
-    if (file != NULL)
-        read(file);
+            m_file(file),
+            m_lineList(),
+            m_readOnly(readOnly),
+            m_logger(logger),
+            m_ownLogger(logger == NULL){
+   if (logger == NULL){
+      initLogger();
+   }
+   if (file != NULL)
+      read(file);
 }
 
-
 /**
  * Destructor.
  *
  * Frees the resources.
  */
 RplConfig::~RplConfig(){
-    if (m_ownLogger)
-        delete m_logger;
-    m_logger = NULL;
+   if (m_ownLogger)
+      delete m_logger;
+   m_logger = NULL;
 }
 
 /**
  * Inititializes a logger.
  */
 void RplConfig::initLogger(){
-    m_logger = new RplLogger();
-    RplMemoryAppender* appender = new RplMemoryAppender();
-    appender->setAutoDelete(true);
-    m_logger->addAppender(appender);
-
-    RplStreamAppender* appender2 = new RplStreamAppender(stdout);
-    appender2->setAutoDelete(true);
-    m_logger->addAppender(appender2);
+   m_logger = new RplLogger();
+   RplMemoryAppender* appender = new RplMemoryAppender();
+   appender->setAutoDelete(true);
+   m_logger->addAppender(appender);
+
+   RplStreamAppender* appender2 = new RplStreamAppender(stdout);
+   appender2->setAutoDelete(true);
+   m_logger->addAppender(appender2);
 }
 
 /**
@@ -87,11 +84,11 @@ void RplConfig::initLogger(){
  *                      otherwise: the value assigned to key
  */
 int RplConfig::asInt(const char* key, int defaultValue) const{
-    int rc = defaultValue;
-    if (contains(key)){
-        rc = atoi((*this)[key]);
-    }
-    return rc;
+   int rc = defaultValue;
+   if (contains(key)){
+      rc = atoi((*this)[key]);
+   }
+   return rc;
 }
 
 /**
@@ -103,13 +100,14 @@ int RplConfig::asInt(const char* key, int defaultValue) const{
  *                      otherwise: the value assigned to key
  */
 bool RplConfig::asBool(const char* key, bool defaultValue) const{
-    bool rc = defaultValue;
-    if (contains(key)){
-        QByteArray value = (*this)[key].toLower();
-        rc = value == "1" || value == "y" || value == "yes" || value == "t" || value == "true";
-    }
-
-    return rc;
+   bool rc = defaultValue;
+   if (contains(key)){
+      QByteArray value = (*this)[key].toLower();
+      rc = value == "1" || value == "y" || value == "yes" || value == "t"
+         || value == "true";
+   }
+
+   return rc;
 }
 
 /**
@@ -120,11 +118,11 @@ bool RplConfig::asBool(const char* key, bool defaultValue) const{
  * @return              defaultValue: key does not exist
  */
 QByteArray RplConfig::asString(const char* key, const char* defaultValue){
-    QByteArray rc = defaultValue;
-    if (contains(key)){
-        rc = (*this)[key];
-    }
-    return rc;
+   QByteArray rc = defaultValue;
+   if (contains(key)){
+      rc = (*this)[key];
+   }
+   return rc;
 }
 
 /**
@@ -135,33 +133,33 @@ QByteArray RplConfig::asString(const char* key, const char* defaultValue){
  *              false: error occurred
  */
 bool RplConfig::read(const char* file){
-    bool rc = true;
-    m_lineList.reserve(1024);
-    FILE* fp = fopen(file, "r");
-    if (fp == NULL){
-        m_logger->logv(LOG_ERROR, LOC_READ_1, "cannot read: %s", file);
-        rc = false;
-    } else{
-        char line[64000];
-        char* separator;
-        int lineNo = 0;
-        while(fgets(line, sizeof line, fp) != NULL){
-            lineNo++;
-            m_lineList.append(line);
-            if(isalnum(line[0]) && (separator = strchr(line, '=')) != NULL){
-                QByteArray key(line, separator - line);
-                QByteArray value(separator + 1);
-                key = key.trimmed();
-                value = value.trimmed();
-                if (contains(key))
-                    m_logger->logv(LOG_WARNING, LOC_READ_2, "defined more than once: %s-%d: %s",
-                        file, lineNo, line);
-                else
-                    insert(key, value);
-            }
-        }
-    }
-    return rc;
+   bool rc = true;
+   m_lineList.reserve(1024);
+   FILE* fp = fopen(file, "r");
+   if (fp == NULL){
+      m_logger->logv(LOG_ERROR, LOC_READ_1, "cannot read: %s", file);
+      rc = false;
+   }else{
+      char line[64000];
+      char* separator;
+      int lineNo = 0;
+      while (fgets(line, sizeof line, fp) != NULL){
+         lineNo++;
+         m_lineList.append(line);
+         if (isalnum(line[0]) && (separator = strchr(line, '=')) != NULL){
+            QByteArray key(line, separator - line);
+            QByteArray value(separator + 1);
+            key = key.trimmed();
+            value = value.trimmed();
+            if (contains(key))
+               m_logger->logv(LOG_WARNING, LOC_READ_2,
+                  "defined more than once: %s-%d: %s", file, lineNo, line);
+            else
+               insert(key, value);
+         }
+      }
+   }
+   return rc;
 }
 
 /**
@@ -172,13 +170,13 @@ bool RplConfig::read(const char* file){
  *              false: error occurred
  */
 bool RplConfig::write(const char* file){
-    bool rc = false;
-    if (m_readOnly)
-        m_logger->log(LOG_ERROR, LOC_WRITE_1, "cannot write: (readonly");
-    else{
-        m_logger->log(LOG_ERROR, LOC_WRITE_2, "not implemented: write()");
-    }
-    return rc;
+   bool rc = false;
+   if (m_readOnly)
+      m_logger->log(LOG_ERROR, LOC_WRITE_1, "cannot write: (readonly");
+   else{
+      m_logger->log(LOG_ERROR, LOC_WRITE_2, "not implemented: write()");
+   }
+   return rc;
 }
 
 // ------------------
@@ -190,48 +188,49 @@ bool RplConfig::write(const char* file){
 /**
  * @brief Unit test of RplConfig.
  */
-class TestRplConfig : public RplTest
-{
+class TestRplConfig: public RplTest {
 public:
-    TestRplConfig() : RplTest("RplConfig"){}
+   TestRplConfig() :
+            RplTest("RplConfig"){
+   }
 
 public:
-    void testBasic(){
-        QByteArray fn = getTempFile("test.data", "config");
-        RplString::write( fn, "#comment\na=1\nb.1==x\n#=\nB=zzz");
-        RplConfig config(fn.constData());
-        checkE(3, config.size());
-        checkE("1", config["a"]);
-        checkE("=x", config["b.1"]);
-        checkE("zzz", config["B"]);
-    }
-    void testAsX(){
-        QByteArray fn = getTempFile("test.data", "config");
-        RplString::write( fn, "i=123\nb=1\nb2=true\nb3=yes\ns=abc");
-        RplConfig config(fn.constData());
-        checkE(5, config.size());
-        checkE(123, config.asInt("i", -1));
-        checkE(-1, config.asInt("I", -1));
-        checkT(config.asBool("b", false));
-        checkT(config.asBool("b2", false));
-        checkT(config.asBool("b3", false));
-        checkT(config.asBool("-", true));
-        checkF(config.asBool("-", false));
-        checkE("abc", config.asString("s", "x"));
-        checkE("x", config.asString("S", "x"));
-    }
-
-    virtual void doIt(){
-        testAsX();
-        testBasic();
-
-    }
+   void testBasic(){
+      QByteArray fn = getTempFile("test.data", "config");
+      RplString::write(fn, "#comment\na=1\nb.1==x\n#=\nB=zzz");
+      RplConfig config(fn.constData());
+      checkE(3, config.size());
+      checkE("1", config["a"]);
+      checkE("=x", config["b.1"]);
+      checkE("zzz", config["B"]);
+   }
+   void testAsX(){
+      QByteArray fn = getTempFile("test.data", "config");
+      RplString::write(fn, "i=123\nb=1\nb2=true\nb3=yes\ns=abc");
+      RplConfig config(fn.constData());
+      checkE(5, config.size());
+      checkE(123, config.asInt("i", -1));
+      checkE(-1, config.asInt("I", -1));
+      checkT(config.asBool("b", false));
+      checkT(config.asBool("b2", false));
+      checkT(config.asBool("b3", false));
+      checkT(config.asBool("-", true));
+      checkF(config.asBool("-", false));
+      checkE("abc", config.asString("s", "x"));
+      checkE("x", config.asString("S", "x"));
+   }
+
+   virtual void doIt(){
+      testAsX();
+      testBasic();
+
+   }
 };
 
 #endif
 void testRplConfig(){
 #ifdef RPL_TEST
-    TestRplConfig test;
-    test.run();
+   TestRplConfig test;
+   test.run();
 #endif
 }
index d3181aa27e62ecfca607ccd37f67ea0bb68ccc20..02ccc6edd38702e54a47ad995c0a39cc46a247b6 100644 (file)
@@ -191,10 +191,12 @@ char RplLogger::getPrefixOfLevel(RplLoggerLevel level) const {
  */
 bool RplLogger::isActive(RplLoggerLevel level) const{
     bool rc = false;
-    for (size_t ix = 0; ! rc && ix < m_countAppenders; ix++){
+    for (size_t ix = 0; ix < m_countAppenders; ix++){
         RplAppender* appender = m_appenders[ix];
-        if (appender->isActive(level))
+        if (appender->isActive(level)){
             rc = true;
+            break;
+        }
     }
     return rc;
 }
index adbb54bbca1cb5682162efd889c0efb45f716000..167fc21b4df6aa377069419081b5fd47781ece21 100644 (file)
@@ -9,6 +9,7 @@
 
 enum {
     LOC_1 = RPL_FIRST_OF(RPLMODULE_TCPCLIENT), // 701
+    LOC_HANDLE_ERROR_1,
 };
 
 /** @class RplTcpClient rpltcpclient.hpp "rplnet/rpltcpclient.hpp"
@@ -28,7 +29,8 @@ enum {
  */
 RplTcpClient::RplTcpClient(const char* ip, int port, QThread* thread,
         RplTerminator* terminator, RplLogger* logger) :
-    m_peer(new RplTcpPeer(ip, port, thread, terminator, logger))
+    m_peer(new RplTcpPeer(ip, port, thread, terminator, logger)),
+    m_logger(logger)
 {
     if (ip != NULL && port != 0)
         setRemoteAddress(ip, port);
@@ -49,6 +51,8 @@ void RplTcpClient::setRemoteAddress(const char* ip, int port){
         m_peer->setSocket(NULL);
     else{
         socket = new QTcpSocket();
+        connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
+                this, SLOT(handleError(QAbstractSocket::SocketError)));
         m_peer->setSocket(socket);
         socket->connectToHost(QString(ip), port);
     }
@@ -62,6 +66,16 @@ RplTcpPeer* RplTcpClient::getPeer() const{
     return m_peer;
 }
 
+/**
+ * @brief Handles a network error.
+ *
+ * @param socketError   the error code
+ */
+void RplTcpClient::handleError(QAbstractSocket::SocketError socketError){
+   m_logger->logv(LOG_ERROR, LOC_HANDLE_ERROR_1, "Network error %d",
+      socketError);
+}
+
 /** @class RplClientThread rpltcpclient.hpp "rplnet/rpltcpclient.hpp"
  *
  * @brief Implements a thread usable for a tcp client.
index 0f11817a06b3aea6d0e0573f555cf56085c55d5f..1421072eba1217b2125c34b7752f312d86e25bd1 100644 (file)
@@ -8,8 +8,14 @@
 #ifndef RPLTCPCLIENT_HPP
 #define RPLTCPCLIENT_HPP
 
-class RplTcpClient
+#ifndef RPLNET_HPP
+#include "rplnet.hpp"
+#endif
+
+class RplTcpPeer;
+class RplTcpClient : public QObject
 {
+   Q_OBJECT
 public:
     RplTcpClient(const char* ip, int port, QThread* thread,
         RplTerminator* terminator, RplLogger* logger = NULL);
@@ -23,8 +29,11 @@ public:
     RplTcpPeer* getPeer() const;
 private:
     void setRemoteAddress(const char* ip, int port);
+public slots:
+    void handleError(QAbstractSocket::SocketError socketError);
 private:
     RplTcpPeer* m_peer;
+    RplLogger* m_logger;
 };
 
 class RplClientThread : public QThread {
index e1e3edb83772e85f1067eebaeb28981b15c441e8..fcfbe208149d9aaa21172d064db95d14d6fd6327 100644 (file)
@@ -12,11 +12,12 @@ enum {
     LOC_READ_BYTES_1,
     LOC_READ_BYTES_2,
     LOC_READ_BYTES_3,
+    LOC_HANDLE_ERROR_1,
 };
 
 static int s_dummy = 0;
 
-/** @class RplTcpNode rpltcpnode.hpp "rplnet/rpltcpnode.hpp"
+/** @class rpltcppeer rpltcppeer.hpp "rplnet/rpltcppeer.hpp"
  *
  * @brief Implement the common things for TCP server and client.
  *
@@ -30,7 +31,7 @@ static int s_dummy = 0;
  *<pre>FLAGS [SALT] COMMAND SIZE
  * </pre>
  * <ul>
- *  <li>FLAGS (1 byte): a XOR sum of the flags defined in <code>RplTcpNode::flag_t.</li>
+ *  <li>FLAGS (1 byte): a XOR sum of the flags defined in <code>rpltcppeer::flag_t</code>.</li>
  *  <li>SALT (4 byte): a random value. Controls the encryption. Only available if <code>FLAG_ENCRYPT</code> is set.</li>
  *  <li>COMMAND (5 byte): define the task to do (client to server) or the answer (server to client).
  *  <li>SIZE (2 or 4 byte): the size of the data behind the header. 4 bytes if <code>FLAG_4_BYTE_SIZE</code> is set.</li>
@@ -54,7 +55,7 @@ RplTcpPeer* RplTcpPeer::createPeer(const char* ip, int port, QThread* thread,
 }
 
 /**
- * @brief RplTcpNode::RplTcpNode
+ * @brief Constructor.
  *
  * @param ip            NULL or the ip address, e.g. "localhost" or "192.168.2.1"
  * @param port          0 or port
@@ -238,7 +239,6 @@ bool RplTcpPeer::receive(QByteArray& command, QByteArray& data){
  * @param flags     a sum of FLAGS_... constants
  * @param command       defines the content of the message to send
  * @param data          NULL or additional data
- * @param size          0 or the size of <code>data</code>
  * @param answer        OUT: the command of the answer
  * @param answerData    OUT: "" or additional data of the answer
  * @return              true: success<br>
@@ -269,6 +269,16 @@ void RplTcpPeer::readTcpData(){
 
 }
 
+/**
+ * @brief Handles a network error.
+ *
+ * @param socketError   the error code
+ */
+void RplTcpPeer::handleError(QTcpSocket::SocketError socketError){
+   m_logger->logv(LOG_ERROR, LOC_HANDLE_ERROR_1, "Network error %d",
+      socketError);
+}
+
 /**
  * @brief Returns the socket.
  *
index 6b36acdd174e5b76ed742271e45dac00bc4200d6..0784de68df9c9f2d4f5f35647f44fde6d23e1f14 100644 (file)
@@ -46,6 +46,8 @@ public:
         QByteArray* data, QByteArray& answer, QByteArray& answerData);
     void setSocket(QAbstractSocket* socket);
     QAbstractSocket* getSocket() const;
+
+    void handleError(QTcpSocket::SocketError socketError);
 private:
     QByteArray readBytes(int bytes, time_t maxTime, int& loops);
 
@@ -64,7 +66,7 @@ private:
     RplRandom m_random;
     ///> true: the read/write operation is done
     bool m_ready;
-    ///> maximum allowed time for sending/receiving one message
+    ///> maximum allowed time (in seconds) for sending/receiving one info unit
     int m_timeout;
     ///> for controlled termination
     RplTerminator* m_terminator;
index 1ace63eb6a45676df25723fb9f1271b5ea391bd1..65e86dffbe3753d898e32e8443d3f685304a3aa4 100644 (file)
@@ -85,6 +85,7 @@ qintptr RplTcpThread::getSocketDescriptor() const{
  * @brief Constructor.
  *
  * @param taskHandler   this handler reads from the tcp and interprets the content
+ * @param thread        the current thread. Used for sleeping
  * @param logger        NULL or logger
  * @param parent        NULL or the parent which deletes the childen
  */