|
Mixe for Privacy and Anonymity in the Internet
|
#include <CASocketList.hpp>
Public Member Functions | |
| CASocketList () | |
| CASocketList (bool bThreadSafe) | |
| ~CASocketList () | |
| SINT32 | add (CASocket *pSocket, CASymCipher *pCiphers) |
| Add a new channel to the channel-list. | |
| SINT32 | get (HCHANNEL in, CONNECTION *out) |
| Gets a copy of an entry form the channel-list. | |
| CASocket * | remove (HCHANNEL id) |
| SINT32 | clear () |
| CONNECTION * | getFirst () |
| Gets the first entry of the channel-list. | |
| CONNECTION * | getNext () |
| Gets the next entry of the channel-list. | |
| UINT32 | getSize () |
| SINT32 | setThreadSafe (bool b) |
| SINT32 | addSendMeCounter (HCHANNEL in, SINT32 value) |
Protected Member Functions | |
| SINT32 | increasePool () |
Protected Attributes | |
| CONNECTIONLIST * | m_Connections |
| CONNECTIONLIST * | m_Pool |
| CONNECTIONLIST * | m_AktEnumPos |
| t_MEMBLOCK * | m_Memlist |
| CAMutex | cs |
| bool | m_bThreadSafe |
| UINT32 | m_Size |
Definition at line 47 of file CASocketList.hpp.
Definition at line 64 of file CASocketList.cpp.
References increasePool(), m_AktEnumPos, m_bThreadSafe, m_Connections, m_Memlist, m_Pool, m_Size, and setThreadSafe().
{
m_Connections=NULL;
m_Pool=NULL;
m_Memlist=NULL;
m_AktEnumPos=NULL;
m_bThreadSafe=false;
setThreadSafe(false);
increasePool();
m_Size=0;
}
| CASocketList::CASocketList | ( | bool | bThreadSafe | ) |
Definition at line 76 of file CASocketList.cpp.
References increasePool(), m_AktEnumPos, m_bThreadSafe, m_Connections, m_Memlist, m_Pool, and setThreadSafe().
{
m_Connections=NULL;
m_Pool=NULL;
m_Memlist=NULL;
m_AktEnumPos=NULL;
m_bThreadSafe=false;
setThreadSafe(bThreadSafe);
increasePool();
}
Definition at line 87 of file CASocketList.cpp.
References clear().
{
clear();
}
| SINT32 CASocketList::add | ( | CASocket * | pSocket, |
| CASymCipher * | pCiphers | ||
| ) |
Add a new channel to the channel-list.
The id for that channel is randomly choosen.
| pSocket | a CASocket assoziated with the channel |
| pCiphers | an array of CASymCipher assoziated with the channel |
Definition at line 125 of file CASocketList.cpp.
References cs, connlist::currentSendMeCounter, E_SUCCESS, E_UNKNOWN, getRandom(), increasePool(), CAMutex::lock(), m_bThreadSafe, m_Connections, m_Pool, m_Size, connlist::next, connlist::outChannel, connlist::pCiphers, connlist::pSocket, CAMutex::unlock(), and connlist::upstreamBytes.
Referenced by CALocalProxy::loop().
{
if(m_bThreadSafe)
cs.lock();
CONNECTIONLIST* tmp;
if(m_Pool==NULL)
{
if(increasePool()!=E_SUCCESS)
{
if(m_bThreadSafe)
cs.unlock();
return E_UNKNOWN;
}
}
tmp=m_Pool;
m_Pool=m_Pool->next;
tmp->next=m_Connections;
m_Connections=tmp;
m_Connections->pSocket=pSocket;
m_Connections->pCiphers=pCiphers;
m_Connections->currentSendMeCounter=0;
m_Connections->upstreamBytes=0;
for(;;)
{
SELECT_RANDOM_CHANNEL_ID:
getRandom(&m_Connections->outChannel);
tmp=m_Connections->next;
while(tmp!=NULL)
{
if(tmp->outChannel==m_Connections->outChannel)
goto SELECT_RANDOM_CHANNEL_ID;
tmp=tmp->next;
}
break;
}
m_Size++;
if(m_bThreadSafe)
cs.unlock();
return E_SUCCESS;
}
| SINT32 CASocketList::addSendMeCounter | ( | HCHANNEL | in, |
| SINT32 | value | ||
| ) |
Definition at line 195 of file CASocketList.cpp.
References cs, connlist::currentSendMeCounter, E_SUCCESS, E_UNKNOWN, CAMutex::lock(), m_bThreadSafe, m_Connections, connlist::next, connlist::outChannel, and CAMutex::unlock().
Referenced by CALocalProxy::loop().
{
if(m_bThreadSafe)
cs.lock();
CONNECTIONLIST* tmp;
tmp=m_Connections;
while(tmp!=NULL)
{
if(tmp->outChannel==in)
{
tmp->currentSendMeCounter+=value;
if(m_bThreadSafe)
cs.unlock();
return E_SUCCESS;
}
tmp=tmp->next;
}
if(m_bThreadSafe)
cs.unlock();
return E_UNKNOWN;
}
Definition at line 92 of file CASocketList.cpp.
References E_SUCCESS, m_AktEnumPos, m_Connections, m_Memlist, m_Pool, t_MEMBLOCK::mem, and t_MEMBLOCK::next.
Referenced by ~CASocketList().
| SINT32 CASocketList::get | ( | HCHANNEL | in, |
| CONNECTION * | out | ||
| ) |
Gets a copy of an entry form the channel-list.
| in | - the channel-id for wich the entry is requested |
| out | - the object, that will hold the copy |
Definition at line 173 of file CASocketList.cpp.
References cs, E_SUCCESS, E_UNKNOWN, CAMutex::lock(), m_bThreadSafe, m_Connections, connlist::next, connlist::outChannel, and CAMutex::unlock().
Referenced by CALocalProxy::loop().
{
if(m_bThreadSafe)
cs.lock();
CONNECTIONLIST* tmp;
tmp=m_Connections;
while(tmp!=NULL)
{
if(tmp->outChannel==in)
{
memcpy(out,tmp,sizeof(CONNECTION));
if(m_bThreadSafe)
cs.unlock();
return E_SUCCESS;
}
tmp=tmp->next;
}
if(m_bThreadSafe)
cs.unlock();
return E_UNKNOWN;
}
| CONNECTION* CASocketList::getFirst | ( | ) | [inline] |
Gets the first entry of the channel-list.
Definition at line 62 of file CASocketList.hpp.
References m_AktEnumPos, and m_Connections.
Referenced by CALocalProxy::loop().
{
m_AktEnumPos=m_Connections;
return m_AktEnumPos;
}
| CONNECTION* CASocketList::getNext | ( | ) | [inline] |
Gets the next entry of the channel-list.
Definition at line 72 of file CASocketList.hpp.
References m_AktEnumPos, and connlist::next.
Referenced by CALocalProxy::loop().
{
if(m_AktEnumPos!=NULL)
m_AktEnumPos=m_AktEnumPos->next;
return m_AktEnumPos;
}
| UINT32 CASocketList::getSize | ( | ) | [inline] |
| SINT32 CASocketList::increasePool | ( | ) | [protected] |
Definition at line 39 of file CASocketList.cpp.
References E_SUCCESS, E_UNKNOWN, m_Memlist, m_Pool, t_MEMBLOCK::mem, t_MEMBLOCK::next, connlist::next, and POOL_SIZE.
Referenced by add(), and CASocketList().
{
CONNECTIONLIST* tmp=new CONNECTIONLIST[POOL_SIZE];
if(tmp==NULL)
return E_UNKNOWN;
_MEMBLOCK* tmpMem=new _MEMBLOCK;
if(tmpMem==NULL)
{
delete[] tmp;
tmp = NULL;
return E_UNKNOWN;
}
memset(tmp,0,sizeof(CONNECTIONLIST)*POOL_SIZE);
for(int i=1;i<POOL_SIZE;i++)
{
tmp[i-1].next=&tmp[i];
}
tmp[POOL_SIZE-1].next=m_Pool;
m_Pool=tmp;
tmpMem->next=m_Memlist;
tmpMem->mem=tmp;
m_Memlist=tmpMem;
return E_SUCCESS;
}
| CASocket * CASocketList::remove | ( | HCHANNEL | id | ) |
Definition at line 217 of file CASocketList.cpp.
References cs, CAMutex::lock(), m_AktEnumPos, m_bThreadSafe, m_Connections, m_Pool, m_Size, connlist::next, connlist::outChannel, connlist::pSocket, and CAMutex::unlock().
Referenced by CALocalProxy::loop().
{
if(m_bThreadSafe)
cs.lock();
CONNECTIONLIST* tmp,*before;
CASocket* ret;
tmp=m_Connections;
before=NULL;
while(tmp!=NULL)
{
if(tmp->outChannel==id)
{
if(m_AktEnumPos==tmp)
m_AktEnumPos=tmp->next;
if(before!=NULL)
before->next=tmp->next;
else
m_Connections=tmp->next;
tmp->next=m_Pool;
m_Pool=tmp;
ret=tmp->pSocket;
m_Size--;
if(m_bThreadSafe)
cs.unlock();
return ret;
}
before=tmp;
tmp=tmp->next;
}
if(m_bThreadSafe)
cs.unlock();
return NULL;
}
| SINT32 CASocketList::setThreadSafe | ( | bool | b | ) |
Definition at line 112 of file CASocketList.cpp.
References E_SUCCESS, and m_bThreadSafe.
Referenced by CASocketList().
{
m_bThreadSafe=b;
return E_SUCCESS;
}
CAMutex CASocketList::cs [protected] |
Definition at line 88 of file CASocketList.hpp.
Referenced by add(), addSendMeCounter(), get(), and remove().
CONNECTIONLIST* CASocketList::m_AktEnumPos [protected] |
Definition at line 86 of file CASocketList.hpp.
Referenced by CASocketList(), clear(), getFirst(), getNext(), and remove().
bool CASocketList::m_bThreadSafe [protected] |
Definition at line 89 of file CASocketList.hpp.
Referenced by add(), addSendMeCounter(), CASocketList(), get(), remove(), and setThreadSafe().
CONNECTIONLIST* CASocketList::m_Connections [protected] |
Definition at line 84 of file CASocketList.hpp.
Referenced by add(), addSendMeCounter(), CASocketList(), clear(), get(), getFirst(), and remove().
t_MEMBLOCK* CASocketList::m_Memlist [protected] |
Definition at line 87 of file CASocketList.hpp.
Referenced by CASocketList(), clear(), and increasePool().
CONNECTIONLIST* CASocketList::m_Pool [protected] |
Definition at line 85 of file CASocketList.hpp.
Referenced by add(), CASocketList(), clear(), increasePool(), and remove().
UINT32 CASocketList::m_Size [protected] |
Definition at line 90 of file CASocketList.hpp.
Referenced by add(), CASocketList(), getSize(), and remove().
1.7.6.1