Mixes for Privacy and Anonymity in the Internet
Public Member Functions | Static Public Member Functions | Private Attributes | Static Private Attributes | List of all members
CAMuxSocket Class Reference

Public Member Functions

 CAMuxSocket ()
 ~CAMuxSocket ()
SINT32 getHashKey ()
 Returns a Hashkey which uniquely identifies this socket. More...
SINT32 accept (UINT16 port)
SINT32 accept (const CASocketAddr &oAddr)
 Waits for an incoming connection on oAddr. More...
SINT32 connect (CASocketAddr &psa)
SINT32 connect (CASocketAddr &psa, UINT retry, UINT32 time)
SINT32 close ()
 Closes the underlying socket. More...
SINT32 send (MIXPACKET *pPacket)
 Sends a MixPacket over the Network. More...
SINT32 send (MIXPACKET *pPacket, UINT8 *buff)
SINT32 prepareForSend (MIXPACKET *inoutPacket)
SINT32 receive (MIXPACKET *pPacket)
 Receives a whole MixPacket. More...
SINT32 receive (MIXPACKET *pPacket, UINT32 timeout)
 Trys to receive a Mix-Packet. More...
SINT32 receiveFully (UINT8 *buff, UINT32 len)
 Receives some "plain" bytes from the underlying socket - just a convenient function... More...
SINT32 receiveFully (UINT8 *buff, UINT32 len, UINT32 msTimeOut)
CASocketgetCASocket ()
SOCKET getSocket ()
SINT32 setCrypt (bool b)
bool getIsEncrypted ()
SINT32 setKey (UINT8 *key, UINT32 keyLen)
 Sets the symmetric keys used for de-/encrypting the Mux connection. More...
SINT32 setSendKey (UINT8 *key, UINT32 keyLen)
SINT32 setReceiveKey (UINT8 *key, UINT32 keyLen)

Static Public Member Functions

static SINT32 init ()
static SINT32 cleanup ()

Private Attributes

CASocket m_Socket
UINT32 m_aktBuffPos
CASymCipher m_oCipherIn
CASymCipher m_oCipherOut
bool m_bIsCrypted
CAMutex m_csSend
CAMutex m_csReceive

Static Private Attributes

static t_hashkeylistEntryms_phashkeylistAvailableHashKeys =NULL
static SINT32 ms_nMaxHashKeyValue =0
static CAMutexms_pcsHashKeyList =NULL

Constructor & Destructor Documentation

◆ CAMuxSocket()

CAMuxSocket::CAMuxSocket ( )

◆ ~CAMuxSocket()

CAMuxSocket::~CAMuxSocket ( )

Member Function Documentation

◆ accept() [1/2]

SINT32 CAMuxSocket::accept ( UINT16  port)

◆ accept() [2/2]

SINT32 CAMuxSocket::accept ( const CASocketAddr oAddr)

Waits for an incoming connection on oAddr.

Return values

References CASocket::accept(), CASocket::close(), CASocket::create(), E_SUCCESS, E_UNKNOWN, CASocketAddr::getType(), CASocket::listen(), m_aktBuffPos, m_Socket, and CASocket::setReuseAddr().

◆ cleanup()

static SINT32 CAMuxSocket::cleanup ( )

◆ close()

SINT32 CAMuxSocket::close ( )

◆ connect() [1/2]

SINT32 CAMuxSocket::connect ( CASocketAddr psa)

◆ connect() [2/2]

SINT32 CAMuxSocket::connect ( CASocketAddr psa,
UINT  retry,
UINT32  time 

◆ getCASocket()

CASocket* CAMuxSocket::getCASocket ( )

◆ getHashKey()

SINT32 CAMuxSocket::getHashKey ( )

◆ getIsEncrypted()

bool CAMuxSocket::getIsEncrypted ( )

◆ getSocket()

SOCKET CAMuxSocket::getSocket ( )

◆ init()

static SINT32 CAMuxSocket::init ( )

References E_SUCCESS.

Referenced by CALibProxytest::init().

◆ prepareForSend()

SINT32 CAMuxSocket::prepareForSend ( MIXPACKET inoutPacket)

◆ receive() [1/2]

SINT32 CAMuxSocket::receive ( MIXPACKET pPacket)

Receives a whole MixPacket.

Blocks until a packet is received or a socket error occurs.

pPacketon return stores the received MixPacket
Return values
SOCKET_ERROR,incase of an error

References CASymCipher::crypt1(), E_SUCCESS, E_UNKNOWN, CAMutex::lock(), m_bIsCrypted, m_csReceive, m_oCipherIn, m_Socket, MIXPACKET_SIZE, CAMsg::printMsg(), CAClientSocket::receiveFully(), SOCKET_ERROR, and CAMutex::unlock().

Referenced by CAFirstMix::doUserLogin_internal(), fm_loopReadFromMix(), lm_loopReadFromMix(), CAFirstMixB::loop(), CAFirstMixA::loop(), CALocalProxy::loop(), mm_loopReadFromMixAfter(), and mm_loopReadFromMixBefore().

◆ receive() [2/2]

SINT32 CAMuxSocket::receive ( MIXPACKET pPacket,
UINT32  msTimeout 

◆ receiveFully() [1/2]

SINT32 CAMuxSocket::receiveFully ( UINT8 buff,
UINT32  len 

Receives some "plain" bytes from the underlying socket - just a convenient function...

Referenced by CAMiddleMix::processKeyExchange(), CALastMix::processKeyExchange(), and CAFirstMix::processKeyExchange().

◆ receiveFully() [2/2]

SINT32 CAMuxSocket::receiveFully ( UINT8 buff,
UINT32  len,
UINT32  msTimeOut 

◆ send() [1/2]

SINT32 CAMuxSocket::send ( MIXPACKET pPacket)

Sends a MixPacket over the Network.

Will block until the whole packet is send.

pPacketMixPacket to send
Return values
MIXPACKET_SIZEif MixPacket was successful send

References t_MixPacket::channel, CASymCipher::crypt1(), E_SUCCESS, E_UNKNOWN, t_MixPacket::flags, GET_NET_ERROR, CAMutex::lock(), m_bIsCrypted, m_csSend, m_oCipherOut, m_Socket, MIXPACKET_SIZE, CAMsg::printMsg(), CASocket::sendFully(), and CAMutex::unlock().

Referenced by fm_loopSendToMix(), lm_loopSendToMix(), CALocalProxy::loop(), mm_loopReadFromMixAfter(), mm_loopReadFromMixBefore(), mm_loopSendToMixAfter(), mm_loopSendToMixBefore(), and CALocalProxy::processKeyExchange().

◆ send() [2/2]

SINT32 CAMuxSocket::send ( MIXPACKET pPacket,
UINT8 buff 

◆ setCrypt()

SINT32 CAMuxSocket::setCrypt ( bool  b)

◆ setKey()

SINT32 CAMuxSocket::setKey ( UINT8 key,
UINT32  keyLen 

Sets the symmetric keys used for de-/encrypting the Mux connection.

keybuffer conntaining the key bits
keyLensize of the buffer (keys) if keylen=16, then the key is used for incomming and outgoing direction (key only) if keylen=32, then the first bytes are used for incoming and the last bytes are used for outgoing
Return values
E_SUCCESSif successful

References E_SUCCESS, and E_UNKNOWN.

◆ setReceiveKey()

SINT32 CAMuxSocket::setReceiveKey ( UINT8 key,
UINT32  keyLen 

◆ setSendKey()

SINT32 CAMuxSocket::setSendKey ( UINT8 key,
UINT32  keyLen 

Member Data Documentation

◆ m_aktBuffPos

UINT32 CAMuxSocket::m_aktBuffPos

◆ m_bIsCrypted

bool CAMuxSocket::m_bIsCrypted

Referenced by CAMuxSocket(), receive(), send(), and setCrypt().

◆ m_Buff

UINT8* CAMuxSocket::m_Buff

Referenced by CAMuxSocket(), receive(), and ~CAMuxSocket().

◆ m_csReceive

CAMutex CAMuxSocket::m_csReceive

Referenced by receive(), and setCrypt().

◆ m_csSend

CAMutex CAMuxSocket::m_csSend

Referenced by prepareForSend(), send(), and setCrypt().

◆ m_oCipherIn

CASymCipher CAMuxSocket::m_oCipherIn

Referenced by receive().

◆ m_oCipherOut

CASymCipher CAMuxSocket::m_oCipherOut

Referenced by prepareForSend(), and send().

◆ m_pHashKeyEntry

t_hashkeylistEntry* CAMuxSocket::m_pHashKeyEntry

Referenced by CAMuxSocket(), and ~CAMuxSocket().

◆ m_Socket

CASocket CAMuxSocket::m_Socket

Referenced by accept(), close(), connect(), receive(), and send().

◆ ms_nMaxHashKeyValue

SINT32 CAMuxSocket::ms_nMaxHashKeyValue =0

Referenced by CAMuxSocket().

◆ ms_pcsHashKeyList

CAMutex * CAMuxSocket::ms_pcsHashKeyList =NULL

Referenced by CAMuxSocket(), and ~CAMuxSocket().

◆ ms_phashkeylistAvailableHashKeys

t_hashkeylistEntry * CAMuxSocket::ms_phashkeylistAvailableHashKeys =NULL

Referenced by CAMuxSocket(), and ~CAMuxSocket().