show error message when we try to register to an unavailable transport. fixes #1574

This commit is contained in:
Yann Leboulanger 2006-11-22 19:49:41 +00:00
parent ac9220116e
commit 7cdb177558
2 changed files with 14 additions and 12 deletions

View file

@ -167,14 +167,14 @@ class Connection(ConnectionHandlers):
def _event_dispatcher(self, realm, event, data): def _event_dispatcher(self, realm, event, data):
if realm == common.xmpp.NS_REGISTER: if realm == common.xmpp.NS_REGISTER:
if event == common.xmpp.features_nb.REGISTER_DATA_RECEIVED: if event == common.xmpp.features_nb.REGISTER_DATA_RECEIVED:
# data is (agent, DataFrom, is_form) # data is (agent, DataFrom, is_form, error_msg)
if self.new_account_info and \ if self.new_account_info and \
self.new_account_info['hostname'] == data[0]: self.new_account_info['hostname'] == data[0]:
# it's a new account # it's a new account
if not data[1]: # wrong answer if not data[1]: # wrong answer
self.dispatch('ACC_NOT_OK', ( self.dispatch('ACC_NOT_OK', (
_('Transport %s answered wrongly to register request.') % \ _('Transport %s answered wrongly to register request: %s')\
data[0])) % (data[0], data[3])))
return return
req = data[1].asDict() req = data[1].asDict()
req['username'] = self.new_account_info['name'] req['username'] = self.new_account_info['name']
@ -200,8 +200,8 @@ class Connection(ConnectionHandlers):
return return
if not data[1]: # wrong answer if not data[1]: # wrong answer
self.dispatch('ERROR', (_('Invalid answer'), self.dispatch('ERROR', (_('Invalid answer'),
_('Transport %s answered wrongly to register request.') % \ _('Transport %s answered wrongly to register request: %s') % \
data[0])) (data[0], data[3])))
return return
is_form = data[2] is_form = data[2]
if is_form: if is_form:

View file

@ -117,26 +117,28 @@ def getRegInfo(disp, host, info={}, sync=True):
def _ReceivedRegInfo(con, resp, agent): def _ReceivedRegInfo(con, resp, agent):
iq=Iq('get',NS_REGISTER,to=agent) iq=Iq('get',NS_REGISTER,to=agent)
if not isResultNode(resp): if not isResultNode(resp):
con.Event(NS_REGISTER,REGISTER_DATA_RECEIVED,(agent,None,False)) error_msg = resp.getErrorMsg()
con.Event(NS_REGISTER,REGISTER_DATA_RECEIVED,(agent,None,False,error_msg))
return return
tag=resp.getTag('query',namespace=NS_REGISTER) tag=resp.getTag('query',namespace=NS_REGISTER)
if not tag: if not tag:
con.Event(NS_REGISTER,REGISTER_DATA_RECEIVED,(agent,None,False)) error_msg = resp.getErrorMsg()
con.Event(NS_REGISTER,REGISTER_DATA_RECEIVED,(agent,None,False,error_msg))
return return
df=tag.getTag('x',namespace=NS_DATA) df=tag.getTag('x',namespace=NS_DATA)
if df: if df:
con.Event(NS_REGISTER,REGISTER_DATA_RECEIVED,(agent,DataForm(node=df),True)) con.Event(NS_REGISTER,REGISTER_DATA_RECEIVED,(agent,DataForm(node=df),True,''))
return return
df=DataForm(typ='form') df=DataForm(typ='form')
for i in resp.getQueryPayload(): for i in resp.getQueryPayload():
if not isinstance(i, Node): if not isinstance(i, Node):
pass pass
elif i.getName()=='instructions': elif i.getName()=='instructions':
df.addInstructions(i.getData()) df.addInstructions(i.getData())
else: else:
df.setField(i.getName()).setValue(i.getData()) df.setField(i.getName()).setValue(i.getData())
con.Event(NS_REGISTER, REGISTER_DATA_RECEIVED, (agent,df,False)) con.Event(NS_REGISTER, REGISTER_DATA_RECEIVED, (agent,df,False,''))
def register(disp, host, info, cb): def register(disp, host, info, cb):
""" Perform registration on remote server with provided info. """ Perform registration on remote server with provided info.