Я исследую источник программы PPTP и хочу пояснить, каким образом PPTP назначает сеанс идентификатору вызова и идентификатору однорангового вызова.я нахожу код следующим образом, кто может объяснить код для меня?На самом деле я не ясен с логикой.спасибо!
/*
* ctrlpacket.c
*
* PPTP Control Message packet reading, formatting and writing.
*
* $Id: ctrlpacket.c,v 1.6 2005/08/03 09:10:59 quozl Exp $
*/
#define C_BITS (sizeof(unsigned int) * 8)
#define C_SEG(x) (x/C_BITS)
#define C_BIT(x) ((1U)<<(x%C_BITS))
static unsigned int activeCalls[(MAX_CALLS / C_BITS) + 1];
#define MAX_CALLS_PER_TCP_LINK 128
#define MAX_CALLS 60
/*
* get_call_id
*
* Assigns a call ID and peer call ID to the session.
*
* args: call_id (OUT) - the call ID for the session
* retn: 0 on success, -1 on failure
*/
int get_call_id(u_int16_t * loc)
{
for (i = 0; i < MAX_CALLS; i++) {
if (!(activeCalls[C_SEG(i)] & C_BIT(i))) {
activeCalls[C_SEG(i)] |= C_BIT(i);
*loc = i;
return 0;
}
}
return -1;
}