updated copyright messages for 2013
[deb_libcec.git] / src / lib / platform / sockets / socket.h
index 388bb2d8a0d2fd13e2500207f13481ce31dfbbf9..d36dbb0ea420be625066f1c9b84d2141eca7ae17 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * This file is part of the libCEC(R) library.
  *
- * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited.  All rights reserved.
+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited.  All rights reserved.
  * libCEC(R) is an original work, containing original code.
  *
  * libCEC(R) is a trademark of Pulse-Eight Limited.
  *     http://www.pulse-eight.net/
  */
 
-#include "../threads/mutex.h"
-#include "../util/StdString.h"
+#include "lib/platform/threads/mutex.h"
 
 #if defined(__WINDOWS__)
-#include "../windows/os-socket.h"
+#include "lib/platform/windows/os-socket.h"
 #else
-#include "../posix/os-socket.h"
+#include "lib/platform/posix/os-socket.h"
 #endif
 
+#include <string>
+
 // Common socket operations
 
 namespace PLATFORM
@@ -56,26 +57,26 @@ namespace PLATFORM
     virtual bool IsOpen(void) = 0;
     virtual ssize_t Write(void* data, size_t len) = 0;
     virtual ssize_t Read(void* data, size_t len, uint64_t iTimeoutMs = 0) = 0;
-    virtual CStdString GetError(void) = 0;
+    virtual std::string GetError(void) = 0;
     virtual int GetErrorNumber(void) = 0;
-    virtual CStdString GetName(void) = 0;
+    virtual std::string GetName(void) = 0;
   };
 
   template <typename _SType>
   class CCommonSocket : public ISocket
   {
   public:
-    CCommonSocket(_SType initialSocketValue, const CStdString &strName) :
+    CCommonSocket(_SType initialSocketValue, const std::string &strName) :
       m_socket(initialSocketValue),
       m_strName(strName),
       m_iError(0) {}
 
     virtual ~CCommonSocket(void) {}
 
-    virtual CStdString GetError(void)
+    virtual std::string GetError(void)
     {
-      CStdString strError;
-      strError = m_strError.IsEmpty() && m_iError != 0 ? strerror(m_iError) : m_strError;
+      std::string strError;
+      strError = m_strError.empty() && m_iError != 0 ? strerror(m_iError) : m_strError;
       return strError;
     }
 
@@ -84,17 +85,17 @@ namespace PLATFORM
       return m_iError;
     }
 
-    virtual CStdString GetName(void)
+    virtual std::string GetName(void)
     {
-      CStdString strName;
+      std::string strName;
       strName = m_strName;
       return strName;
     }
 
   protected:
     _SType     m_socket;
-    CStdString m_strError;
-    CStdString m_strName;
+    std::string m_strError;
+    std::string m_strName;
     int        m_iError;
     CMutex     m_mutex;
   };
@@ -105,7 +106,7 @@ namespace PLATFORM
   public:
     CProtectedSocket(_Socket *socket) :
       m_socket(socket),
-      m_iUseCount(0) {}
+      m_bIsIdle(true) {}
 
     virtual ~CProtectedSocket(void)
     {
@@ -151,19 +152,19 @@ namespace PLATFORM
     virtual bool IsBusy(void)
     {
       CLockObject lock(m_mutex);
-      return m_socket && m_iUseCount > 0;
+      return m_socket && !m_bIsIdle;
     }
 
-    virtual int GetUseCount(void)
+    virtual bool IsIdle(void)
     {
       CLockObject lock(m_mutex);
-      return m_iUseCount;
+      return m_socket && m_bIsIdle;
     }
 
     virtual ssize_t Write(void* data, size_t len)
     {
       if (!m_socket || !WaitReady())
-        return EINVAL;
+        return -EINVAL;
 
       ssize_t iReturn = m_socket->Write(data, len);
       MarkReady();
@@ -174,7 +175,7 @@ namespace PLATFORM
     virtual ssize_t Read(void* data, size_t len, uint64_t iTimeoutMs = 0)
     {
       if (!m_socket || !WaitReady())
-        return EINVAL;
+        return -EINVAL;
 
       ssize_t iReturn = m_socket->Read(data, len, iTimeoutMs);
       MarkReady();
@@ -182,9 +183,9 @@ namespace PLATFORM
       return iReturn;
     }
 
-    virtual CStdString GetError(void)
+    virtual std::string GetError(void)
     {
-      CStdString strError;
+      std::string strError;
       CLockObject lock(m_mutex);
       strError = m_socket ? m_socket->GetError() : "";
       return strError;
@@ -193,12 +194,12 @@ namespace PLATFORM
     virtual int GetErrorNumber(void)
     {
       CLockObject lock(m_mutex);
-      return m_socket ? m_socket->GetErrorNumber() : EINVAL;
+      return m_socket ? m_socket->GetErrorNumber() : -EINVAL;
     }
 
-    virtual CStdString GetName(void)
+    virtual std::string GetName(void)
     {
-      CStdString strName;
+      std::string strName;
       CLockObject lock(m_mutex);
       strName = m_socket ? m_socket->GetName() : "";
       return strName;
@@ -208,27 +209,21 @@ namespace PLATFORM
     bool WaitReady(void)
     {
       CLockObject lock(m_mutex);
-      if (m_iUseCount > 0)
-        m_condition.Wait(m_mutex);
-
-      if (m_iUseCount > 0)
-        return false;
-
-      ++m_iUseCount;
+      m_condition.Wait(m_mutex, m_bIsIdle);
+      m_bIsIdle = false;
       return true;
     }
 
     void MarkReady(void)
     {
       CLockObject lock(m_mutex);
-      if (m_iUseCount > 0)
-        --m_iUseCount;
-      m_condition.Broadcast();
+      m_bIsIdle = true;
+      m_condition.Signal();
     }
 
-    _Socket   *m_socket;
-    CMutex     m_mutex;
-    CCondition m_condition;
-    int        m_iUseCount;
+    _Socket *        m_socket;
+    CMutex           m_mutex;
+    CCondition<bool> m_condition;
+    bool             m_bIsIdle;
   };
 };