@ -2137,26 +2137,33 @@ static int aji_filter_roster(void *data, ikspak *pak)
ASTOBJ_UNLOCK ( iterator ) ;
ASTOBJ_UNLOCK ( iterator ) ;
} ) ;
} ) ;
if ( ! flag ) {
if ( flag ) {
buddy = ast_calloc ( 1 , sizeof ( * buddy ) ) ;
/* found buddy, don't create a new one */
if ( ! buddy ) {
x = iks_next ( x ) ;
ast_log ( LOG_WARNING , " Out of memory \n " ) ;
continue ;
return 0 ;
}
}
ASTOBJ_INIT ( buddy ) ;
buddy = ast_calloc ( 1 , sizeof ( * buddy ) ) ;
ASTOBJ_WRLOCK ( buddy ) ;
if ( ! buddy ) {
ast_copy_string ( buddy - > name , iks_find_attrib ( x , " jid " ) , sizeof ( buddy - > name ) ) ;
ast_log ( LOG_WARNING , " Out of memory \n " ) ;
ast_clear_flag ( & buddy - > flags , AST_FLAGS_ALL ) ;
return 0 ;
if ( ast_test_flag ( & client - > flags , AJI_AUTOPRUNE ) ) {
}
ast_set_flag ( & buddy - > flags , AJI_AUTOPRUNE ) ;
ASTOBJ_INIT ( buddy ) ;
ASTOBJ_MARK ( buddy ) ;
ASTOBJ_WRLOCK ( buddy ) ;
} else
ast_copy_string ( buddy - > name , iks_find_attrib ( x , " jid " ) , sizeof ( buddy - > name ) ) ;
ast_set_flag ( & buddy - > flags , AJI_AUTOREGISTER ) ;
ast_clear_flag ( & buddy - > flags , AST_FLAGS_ALL ) ;
ASTOBJ_UNLOCK ( buddy ) ;
if ( ast_test_flag ( & client - > flags , AJI_AUTOPRUNE ) ) {
if ( buddy ) {
ast_set_flag ( & buddy - > flags , AJI_AUTOPRUNE ) ;
ASTOBJ_CONTAINER_LINK ( & client - > buddies , buddy ) ;
ASTOBJ_MARK ( buddy ) ;
ASTOBJ_UNREF ( buddy , aji_buddy_destroy ) ;
} 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 ) ;
}
ASTOBJ_UNLOCK ( buddy ) ;
if ( buddy ) {
ASTOBJ_CONTAINER_LINK ( & client - > buddies , buddy ) ;
ASTOBJ_UNREF ( buddy , aji_buddy_destroy ) ;
}
}
}
}
x = iks_next ( x ) ;
x = iks_next ( x ) ;