X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fsockets%2Fsocket.h;h=d36dbb0ea420be625066f1c9b84d2141eca7ae17;hb=d9de2aae6b2f47b8e1faacc69adba7406b9d85f0;hp=9ef359679f1b0e48fb7634351d3f15cbbfe611d9;hpb=8637ad53b004d3e88e515fbf91ea4f7f17a11721;p=deb_libcec.git diff --git a/src/lib/platform/sockets/socket.h b/src/lib/platform/sockets/socket.h index 9ef3596..d36dbb0 100644 --- a/src/lib/platform/sockets/socket.h +++ b/src/lib/platform/sockets/socket.h @@ -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. @@ -31,19 +31,15 @@ * 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 -/* Needed on Mac OS/X */ -#ifndef SOL_TCP -#define SOL_TCP IPPROTO_TCP -#endif +#include // Common socket operations @@ -61,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 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; } @@ -89,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; }; @@ -110,7 +106,7 @@ namespace PLATFORM public: CProtectedSocket(_Socket *socket) : m_socket(socket), - m_iUseCount(0) {} + m_bIsIdle(true) {} virtual ~CProtectedSocket(void) { @@ -156,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(); @@ -179,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(); @@ -187,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; @@ -198,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; @@ -213,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 m_condition; + bool m_bIsIdle; }; };