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

List of all members.

Public Member Functions

 CAMuxSocket ()
 ~CAMuxSocket ()
SINT32 getHashKey ()
 Returns a Hashkey which uniquely identifies this socket.
SINT32 accept (UINT16 port)
SINT32 accept (const CASocketAddr &oAddr)
 Waits for an incoming connection on oAddr.
SINT32 connect (CASocketAddr &psa)
SINT32 connect (CASocketAddr &psa, UINT retry, UINT32 time)
SINT32 close ()
 Closes the underlying socket.
SINT32 send (MIXPACKET *pPacket)
 Sends a MixPacket over the Network.
SINT32 send (MIXPACKET *pPacket, UINT8 *buff)
SINT32 prepareForSend (MIXPACKET *inoutPacket)
SINT32 receive (MIXPACKET *pPacket)
 Receives a whole MixPacket.
SINT32 receive (MIXPACKET *pPacket, UINT32 timeout)
 Trys to receive a Mix-Packet.
SINT32 receiveFully (UINT8 *buff, UINT32 len)
 Receives some "plain" bytes from the underlying socket - just a convenient function...
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.
SINT32 setSendKey (UINT8 *key, UINT32 keyLen)
SINT32 setReceiveKey (UINT8 *key, UINT32 keyLen)

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 = new CAMutex()

Constructor & Destructor Documentation


Member Function Documentation

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

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

References m_bIsCrypted.

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

SINT32 CAMuxSocket::receive ( MIXPACKET pPacket,
UINT32  msTimeout 
)

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

References m_Socket, and CAClientSocket::receiveFully().

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

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

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

SINT32 CAMuxSocket::send ( MIXPACKET pPacket,
UINT8 buff 
)
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, E_UNKNOWN, m_oCipherIn, m_oCipherOut, and CASymCipher::setKey().

SINT32 CAMuxSocket::setReceiveKey ( UINT8 key,
UINT32  keyLen 
)
SINT32 CAMuxSocket::setSendKey ( UINT8 key,
UINT32  keyLen 
)

Member Data Documentation

bool CAMuxSocket::m_bIsCrypted [private]

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

Referenced by receive(), and setCrypt().

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

Referenced by receive(), setKey(), and setReceiveKey().

Referenced by CAMuxSocket().

CAMutex * CAMuxSocket::ms_pcsHashKeyList = new CAMutex() [static, private]

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

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