@ -2137,7 +2137,12 @@ static int aji_filter_roster(void *data, ikspak *pak)
ASTOBJ_UNLOCK ( iterator ) ;
ASTOBJ_UNLOCK ( iterator ) ;
} ) ;
} ) ;
if ( ! flag ) {
if ( flag ) {
/* found buddy, don't create a new one */
x = iks_next ( x ) ;
continue ;
}
buddy = ast_calloc ( 1 , sizeof ( * buddy ) ) ;
buddy = ast_calloc ( 1 , sizeof ( * buddy ) ) ;
if ( ! buddy ) {
if ( ! buddy ) {
ast_log ( LOG_WARNING , " Out of memory \n " ) ;
ast_log ( LOG_WARNING , " Out of memory \n " ) ;
@ -2150,15 +2155,17 @@ static int aji_filter_roster(void *data, ikspak *pak)
if ( ast_test_flag ( & client - > flags , AJI_AUTOPRUNE ) ) {
if ( ast_test_flag ( & client - > flags , AJI_AUTOPRUNE ) ) {
ast_set_flag ( & buddy - > flags , AJI_AUTOPRUNE ) ;
ast_set_flag ( & buddy - > flags , AJI_AUTOPRUNE ) ;
ASTOBJ_MARK ( buddy ) ;
ASTOBJ_MARK ( buddy ) ;
} else
} else if ( ! iks_strcmp ( iks_find_attrib ( x , " subscription " ) , " none " ) | | ! iks_strcmp ( iks_find_attrib ( x , " subscription " ) , " from " ) ) {
/* subscribe to buddy's presence only
if we really need to */
ast_set_flag ( & buddy - > flags , AJI_AUTOREGISTER ) ;
ast_set_flag ( & buddy - > flags , AJI_AUTOREGISTER ) ;
}
ASTOBJ_UNLOCK ( buddy ) ;
ASTOBJ_UNLOCK ( buddy ) ;
if ( buddy ) {
if ( buddy ) {
ASTOBJ_CONTAINER_LINK ( & client - > buddies , buddy ) ;
ASTOBJ_CONTAINER_LINK ( & client - > buddies , buddy ) ;
ASTOBJ_UNREF ( buddy , aji_buddy_destroy ) ;
ASTOBJ_UNREF ( buddy , aji_buddy_destroy ) ;
}
}
}
}
}
x = iks_next ( x ) ;
x = iks_next ( x ) ;
}
}