@@ -19,11 +19,15 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #import "XMPPRoster.h" +#import "XMPPRoster_private.h" #import "XMPPRosterItem.h" +#import "XMPPConnection.h" +#import "XMPPIQ.h" +#import "XMPPJID.h" @implementation XMPPRoster - initWithConnection: (XMPPConnection*)conn { self = [super init]; @@ -90,6 +94,32 @@ if (group == nil) group = @""; return [[[groups objectForKey: group] copy] autorelease]; } + +- (void)addRosterItem: (XMPPRosterItem*)rosterItem +{ + XMPPIQ *iq = [XMPPIQ IQWithType: @"set" + ID: [connection generateStanzaID]]; + OFXMLElement *query = [OFXMLElement elementWithName: @"query" + namespace: XMPP_NS_ROSTER]; + OFXMLElement *item = [OFXMLElement elementWithName: @"item" + namespace: XMPP_NS_ROSTER]; + + [item addAttributeWithName: @"jid" + stringValue: rosterItem.JID.bareJID]; + if (rosterItem.name != nil) + [item addAttributeWithName: @"name" + stringValue: rosterItem.name]; + + for (OFString *group in rosterItem.groups) + [item addChild: [OFXMLElement elementWithName: @"group" + namespace: XMPP_NS_ROSTER + stringValue: group]]; + + [query addChild: item]; + [iq addChild: query]; + + [connection sendStanza: iq]; +} @end