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
 
UINT8m_Buff
 
CASymCipher m_oCipherIn
 
CASymCipher m_oCipherOut
 
bool m_bIsCrypted
 
CAMutex m_csSend
 
CAMutex m_csReceive
 
t_hashkeylistEntrym_pHashKeyEntry
 

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
E_SUCCESS,ifsuccessful
E_SOCKET_BIND,E_SOCKET_LISTEN
E_UNKOWN

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 ( )
static

◆ 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 ( )
static

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.

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

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_loopPacketProcessing(), fm_loopReadFromMix(), lm_loopReadFromMix(), CAFirstMixB::loop(), CALocalProxy::loop(), mm_loopReadFromMixAfter(), mm_loopReadFromMixBefore(), and CAFirstMixA::shutDown().

◆ 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.

Parameters
pPacketMixPacket to send
Return values
MIXPACKET_SIZEif MixPacket was successful send
E_UNKNOWNotherwise

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.

Parameters
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
E_UNKNOWNotherwise

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
private

◆ m_bIsCrypted

bool CAMuxSocket::m_bIsCrypted
private

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

◆ m_Buff

UINT8* CAMuxSocket::m_Buff
private

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

◆ m_csReceive

CAMutex CAMuxSocket::m_csReceive
private

Referenced by receive(), and setCrypt().

◆ m_csSend

CAMutex CAMuxSocket::m_csSend
private

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

◆ m_oCipherIn

CASymCipher CAMuxSocket::m_oCipherIn
private

Referenced by receive().

◆ m_oCipherOut

CASymCipher CAMuxSocket::m_oCipherOut
private

Referenced by prepareForSend(), and send().

◆ m_pHashKeyEntry

t_hashkeylistEntry* CAMuxSocket::m_pHashKeyEntry
private

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

◆ m_Socket

CASocket CAMuxSocket::m_Socket
private

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

◆ ms_nMaxHashKeyValue

SINT32 CAMuxSocket::ms_nMaxHashKeyValue =0
staticprivate

Referenced by CAMuxSocket().

◆ ms_pcsHashKeyList

CAMutex * CAMuxSocket::ms_pcsHashKeyList =NULL
staticprivate

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

◆ ms_phashkeylistAvailableHashKeys

t_hashkeylistEntry * CAMuxSocket::ms_phashkeylistAvailableHashKeys =NULL
staticprivate

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