new mavl is working now
FossilOrigin-Name: 65a4eefffea57509c0d7fd573e53b15bf4a730ce297b7db182aaac796ea92448
This commit is contained in:
		@ -37,110 +37,109 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int cmp_by_addr(const mavldata_t * d1,const mavldata_t *d2)
 | 
			
		||||
static int cmp_by_addr ( const void * d1, const void *d2 )
 | 
			
		||||
{
 | 
			
		||||
	struct conn * c1=(struct conn *) d1->ptr;
 | 
			
		||||
	struct conn * c2=(struct conn *) d2->ptr;
 | 
			
		||||
 | 
			
		||||
	return sock_cmpaddr((struct sockaddr*)&c1->addr,(struct sockaddr*)&c2->addr,1);
 | 
			
		||||
	struct conn * c1 = * ( void ** ) d1 ;
 | 
			
		||||
	struct conn * c2 = * ( void ** ) d2 ;
 | 
			
		||||
	
 | 
			
		||||
	return sock_cmpaddr ( ( struct sockaddr* ) &c1->addr, ( struct sockaddr* ) &c2->addr, 1 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int cmp_by_session_id(const mavldata_t *d1, const mavldata_t *d2)
 | 
			
		||||
static int cmp_by_session_id ( const void *d1, const void  *d2 )
 | 
			
		||||
{
 | 
			
		||||
	struct conn * c1=(struct conn *) d1->ptr;
 | 
			
		||||
	struct conn * c2=(struct conn *) d2->ptr;
 | 
			
		||||
	return memcmp(c1->session_id,c2->session_id,16);	
 | 
			
		||||
	struct conn * c1 = *( void ** ) d1;
 | 
			
		||||
	struct conn * c2 = *( void ** ) d2;
 | 
			
		||||
	return memcmp ( c1->session_id, c2->session_id, 16 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct connlist * connlist_create(int len)
 | 
			
		||||
struct connlist * connlist_create ( int len )
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	struct connlist * cl = malloc(sizeof(struct connlist));
 | 
			
		||||
	if (!cl)
 | 
			
		||||
	struct connlist * cl = malloc ( sizeof ( struct connlist ) );
 | 
			
		||||
	
 | 
			
		||||
	if ( !cl )
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	cl->by_addr = mavl_create(cmp_by_addr,0);
 | 
			
		||||
 | 
			
		||||
	if (!cl->by_addr){
 | 
			
		||||
		free(cl);
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
	cl->by_addr = mavl_create_ptr ( cmp_by_addr, NULL );
 | 
			
		||||
	
 | 
			
		||||
	if ( !cl->by_addr ) {
 | 
			
		||||
		free ( cl );
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cl->by_session_id = mavl_create(cmp_by_session_id,0);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if (pthread_mutex_init(&cl->connlist_mutex,NULL)){
 | 
			
		||||
		mavl_destroy(cl->by_addr);
 | 
			
		||||
		free(cl);
 | 
			
		||||
	
 | 
			
		||||
	cl->by_session_id = mavl_create_ptr ( cmp_by_session_id, NULL );
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	if ( pthread_mutex_init ( &cl->connlist_mutex, NULL ) ) {
 | 
			
		||||
		mavl_destroy ( cl->by_addr );
 | 
			
		||||
		free ( cl );
 | 
			
		||||
		return 0;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	cl->len=len;
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	cl->len = len;
 | 
			
		||||
	
 | 
			
		||||
	return cl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void connlist_lock(struct connlist * cl)
 | 
			
		||||
void connlist_lock ( struct connlist * cl )
 | 
			
		||||
{
 | 
			
		||||
	pthread_mutex_lock(&cl->connlist_mutex);
 | 
			
		||||
	pthread_mutex_lock ( &cl->connlist_mutex );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void connlist_unlock(struct connlist * cl)
 | 
			
		||||
void connlist_unlock ( struct connlist * cl )
 | 
			
		||||
{
 | 
			
		||||
	pthread_mutex_unlock(&cl->connlist_mutex);
 | 
			
		||||
	pthread_mutex_unlock ( &cl->connlist_mutex );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void connlist_destroy(struct connlist * cl)
 | 
			
		||||
void connlist_destroy ( struct connlist * cl )
 | 
			
		||||
{
 | 
			
		||||
	if (!cl)
 | 
			
		||||
	if ( !cl )
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (cl->by_addr)
 | 
			
		||||
		mavl_destroy(cl->by_addr);
 | 
			
		||||
	pthread_mutex_destroy(&cl->connlist_mutex);
 | 
			
		||||
	free(cl);
 | 
			
		||||
		
 | 
			
		||||
	if ( cl->by_addr )
 | 
			
		||||
		mavl_destroy ( cl->by_addr );
 | 
			
		||||
		
 | 
			
		||||
	pthread_mutex_destroy ( &cl->connlist_mutex );
 | 
			
		||||
	free ( cl );
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct conn * connlist_get(struct connlist * cl, const struct sockaddr * addr)
 | 
			
		||||
struct conn * connlist_get ( struct connlist * cl, const struct sockaddr * addr )
 | 
			
		||||
{
 | 
			
		||||
	struct conn search;
 | 
			
		||||
	sock_copyaddr(&search.addr,addr);
 | 
			
		||||
	return mavl_get_ptr(cl->by_addr,&search);
 | 
			
		||||
	sock_copyaddr ( &search.addr, addr );
 | 
			
		||||
	return mavl_get_ptr ( cl->by_addr, &search );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct conn * connlist_add(struct connlist * cl, struct conn * conn)
 | 
			
		||||
struct conn * connlist_add ( struct connlist * cl, struct conn * conn )
 | 
			
		||||
{
 | 
			
		||||
	if ( cl->len!=0)
 | 
			
		||||
		if (cl->by_addr->count>=cl->len)
 | 
			
		||||
	if ( cl->len != 0 )
 | 
			
		||||
		if ( cl->by_addr->count >= cl->len )
 | 
			
		||||
			return NULL;
 | 
			
		||||
	conn->connlist=cl;
 | 
			
		||||
	return mavl_add_ptr(cl->by_addr,conn);
 | 
			
		||||
			
 | 
			
		||||
	conn->connlist = cl;
 | 
			
		||||
	return mavl_add_ptr ( cl->by_addr, conn );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct conn * connlist_get_by_session_id(struct connlist *cl, struct conn * conn)
 | 
			
		||||
struct conn * connlist_get_by_session_id ( struct connlist *cl, struct conn * conn )
 | 
			
		||||
{
 | 
			
		||||
	return mavl_get_ptr(cl->by_session_id,conn);
 | 
			
		||||
	return mavl_get_ptr ( cl->by_session_id, conn );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct conn * connlist_add_by_session_id(struct connlist * cl, struct conn * conn)
 | 
			
		||||
struct conn * connlist_add_by_session_id ( struct connlist * cl, struct conn * conn )
 | 
			
		||||
{
 | 
			
		||||
	return mavl_add_ptr(cl->by_session_id,conn);
 | 
			
		||||
	return mavl_add_ptr ( cl->by_session_id, conn );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void connlist_remove(struct connlist *cl,struct conn * conn)
 | 
			
		||||
void connlist_remove ( struct connlist *cl, struct conn * conn )
 | 
			
		||||
{
 | 
			
		||||
	mavldata_t md;
 | 
			
		||||
	md.ptr=conn;
 | 
			
		||||
	mavl_del(cl->by_session_id,&md);
 | 
			
		||||
	md.ptr=conn;
 | 
			
		||||
	mavl_del(cl->by_addr,&md);
 | 
			
		||||
	void * md;
 | 
			
		||||
	md = conn;
 | 
			
		||||
	mavl_del ( cl->by_session_id, &md );
 | 
			
		||||
	md = conn;
 | 
			
		||||
	mavl_del ( cl->by_addr, &md );
 | 
			
		||||
}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user