objective-cxmppejabberdxmpp4r

iOS XMPP framework get all registered users


In my chat application I want to get all online registered users. So everybody and not only people in my roster which is achieved with this code:

- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence {
// a buddy went offline/online
NSString *presenceType = [presence type]; // online/offline
NSString *myUsername = [[sender myJID] user];
NSString *presenceFromUser = [[presence from] user];
if (![presenceFromUser isEqualToString:myUsername]) {
    if ([presenceType isEqualToString:@"available"]) {
        [_chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"chat.denederlandsewateren.nl"]];
    } else if ([presenceType isEqualToString:@"unavailable"]) {
        [_chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"chat.denederlandsewateren.nl"]];
    }
}
}

With this code the users only sees other users who are 'friends' but I need all users registered on this particular domain. Is this possible with ejabberd?


Solution

  • - (void)getAllRegisteredUsers {
    
        NSError *error = [[NSError alloc] init];
        NSXMLElement *query = [[NSXMLElement alloc] initWithXMLString:@"<query xmlns='http://jabber.org/protocol/disco#items' node='all users'/>"
                                                                error:&error];
        XMPPIQ *iq = [XMPPIQ iqWithType:@"get"
                                     to:[XMPPJID jidWithString:@"DOMAIN"]
                              elementID:[xmppStream generateUUID] child:query];
        [xmppStream sendElement:iq];
    }
    
    - (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
    {
        NSXMLElement *queryElement = [iq elementForName: @"query" xmlns: @"http://jabber.org/protocol/disco#items"];
    
        if (queryElement) {
            NSArray *itemElements = [queryElement elementsForName: @"item"];
            NSMutableArray *mArray = [[NSMutableArray alloc] init];
            for (int i=0; i<[itemElements count]; i++) {
    
                NSString *jid=[[[itemElements objectAtIndex:i] attributeForName:@"jid"] stringValue];
                [mArray addObject:jid];
            }
    
    
    
        }