Esempio n. 1
0
func (self *BindElement) Handle(strm stream.ServerStream, opts features.Options) error {
	request_id := opts.(*iq.IQElement)

	// FIXME(goxmpp): 2014-04-03: auth check, state presence check, resource check required
	var state *BindState
	strm.State().Get(&state)
	if state.VerifyResource(self.Resource) {
		state.Resource = self.Resource
	} else {
		// TODO(goxmpp): 2014-04-03
	}

	var authState *auth.AuthState
	strm.State().Get(&authState)

	strm.SetClientJID(authState.UserName + "@" + strm.ServerName() + "/" + state.Resource)
	log.Printf("Bound to JID: %#v", strm.ClientJID())

	// TODO(goxmpp): 2014-04-03: might be easier to just use original IQ?
	response_iq := iq.NewIQElement()
	response_iq.Type = "result"
	response_iq.ID = request_id.ID
	response_iq.AddElement(&BindElement{JID: strm.ClientJID()})
	if err := strm.WriteElement(response_iq); err != nil {
		return err
	}

	return nil
}