roster.go
changeset 54 b345e0473430
parent 52 9b664fde0ec3
child 55 ce9f9f7108c8
equal deleted inserted replaced
53:4434108fdab0 54:b345e0473430
    48 			ch <- os.NewError(fmt.Sprintf(
    48 			ch <- os.NewError(fmt.Sprintf(
    49 				"Roster query result not query: %v", st))
    49 				"Roster query result not query: %v", st))
    50 			return false
    50 			return false
    51 		}
    51 		}
    52 		cl.roster = make(map[string] *RosterItem, len(rq.Item))
    52 		cl.roster = make(map[string] *RosterItem, len(rq.Item))
    53 		for _, item := range(rq.Item) {
    53 		for i, item := range(rq.Item) {
    54 			cl.roster[item.Jid] = &item
    54 			cl.roster[item.Jid] = &rq.Item[i]
    55 		}
    55 		}
    56 		ch <- nil
    56 		ch <- nil
    57 		return false
    57 		return false
    58 	}
    58 	}
    59 	cl.HandleStanza(iq.Id, f)
    59 	cl.HandleStanza(iq.Id, f)
    93 // of via a method call.
    93 // of via a method call.
    94 // BUG(cjyar) RFC 3921, Section 7.4 says we need to reply.
    94 // BUG(cjyar) RFC 3921, Section 7.4 says we need to reply.
    95 func (cl *Client) maybeUpdateRoster(st Stanza) {
    95 func (cl *Client) maybeUpdateRoster(st Stanza) {
    96 	rq, ok := st.GetNested().(*RosterQuery)
    96 	rq, ok := st.GetNested().(*RosterQuery)
    97 	if st.GetName() == "iq" && st.GetType() == "set" && ok {
    97 	if st.GetName() == "iq" && st.GetType() == "set" && ok {
    98 		for _, item := range(rq.Item) {
    98 		for i, item := range(rq.Item) {
    99 			if item.Subscription == "remove" {
    99 			if item.Subscription == "remove" {
   100 				cl.roster[item.Jid] = nil
   100 				cl.roster[item.Jid] = nil
   101 			} else {
   101 			} else {
   102 				cl.roster[item.Jid] = &item
   102 				cl.roster[item.Jid] = &rq.Item[i]
   103 			}
   103 			}
   104 		}
   104 		}
   105 	}
   105 	}
   106 }
   106 }