stream.go
changeset 15 aa2cf77f0ed3
parent 14 fd6781a41e6f
child 16 b839e37b3f29
equal deleted inserted replaced
14:fd6781a41e6f 15:aa2cf77f0ed3
   473 					"bind"}}}
   473 					"bind"}}}
   474 	if res != "" {
   474 	if res != "" {
   475 		msg.Any.Any = &Unrecognized{XMLName: xml.Name{Local:
   475 		msg.Any.Any = &Unrecognized{XMLName: xml.Name{Local:
   476 				"resource"}, Chardata: res}
   476 				"resource"}, Chardata: res}
   477 	}
   477 	}
       
   478 	f := func(st Stanza) bool {
       
   479 		if st.XType() == "error" {
       
   480 			log.Println("Resource binding failed")
       
   481 			return false
       
   482 		}
       
   483 		bind := st.XChild()
       
   484 		if bind == nil {
       
   485 			log.Println("nil resource bind")
       
   486 			return false
       
   487 		}
       
   488 		jidEle := bind.Any
       
   489 		if jidEle == nil {
       
   490 			log.Println("nil resource")
       
   491 			return false
       
   492 		}
       
   493 		jidStr := jidEle.Chardata
       
   494 		if jidStr == "" {
       
   495 			log.Println("empty resource")
       
   496 			return false
       
   497 		}
       
   498 		jid := new(JID)
       
   499 		if !jid.Set(jidStr) {
       
   500 			log.Println("Can't parse JID %s", jidStr)
       
   501 			return false
       
   502 		}
       
   503 		cl.Jid = *jid
       
   504 		log.Printf("Bound resource: %s", cl.Jid.String())
       
   505 		return true
       
   506 	}
       
   507 	cl.HandleStanza(msg.Id, f)
   478 	cl.xmlOut <- msg
   508 	cl.xmlOut <- msg
   479 }
   509 }
   480 
   510 
   481 func (cl *Client) HandleStanza(id string, f func(Stanza) bool) {
   511 func (cl *Client) HandleStanza(id string, f func(Stanza) bool) {
   482 	h := &stanzaHandler{id: id, f: f}
   512 	h := &stanzaHandler{id: id, f: f}