Add some FIXME statements due to open questions. Improve a two default parameters.
This commit is contained in:
		
							parent
							
								
									1383bb6a74
								
							
						
					
					
						commit
						8a19e11bee
					
				
					 3 changed files with 24 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -92,6 +92,8 @@ class NonBlockingClient:
 | 
			
		|||
			self.NonBlockingHTTP.PlugOut()
 | 
			
		||||
		if 'NonBlockingBOSH' in self.__dict__:
 | 
			
		||||
			self.NonBlockingBOSH.PlugOut()
 | 
			
		||||
		# FIXME: we never unplug dispatcher, only on next connect
 | 
			
		||||
		# See _xmpp_connect_machine and SASLHandler
 | 
			
		||||
 | 
			
		||||
		connected = self.connected
 | 
			
		||||
		stream_started = self.stream_started
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +131,7 @@ class NonBlockingClient:
 | 
			
		|||
		self.disconnecting = False
 | 
			
		||||
 | 
			
		||||
	def connect(self, on_connect, on_connect_failure, hostname=None, port=5222,
 | 
			
		||||
	on_proxy_failure=None, proxy=None, secure_tuple=(None, None, None)):
 | 
			
		||||
	on_proxy_failure=None, proxy=None, secure_tuple=('plain', None, None)):
 | 
			
		||||
		''' 
 | 
			
		||||
		Open XMPP connection (open XML streams in both directions).
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -353,22 +355,22 @@ class NonBlockingClient:
 | 
			
		|||
					# if stream version is less than 1.0, we can't do more
 | 
			
		||||
					log.warn('While connecting with type = "tls": stream version is less than 1.0')
 | 
			
		||||
					self._on_connect()
 | 
			
		||||
					return
 | 
			
		||||
				if self.Dispatcher.Stream.features.getTag('starttls'):
 | 
			
		||||
					# Server advertises TLS support, start negotiation
 | 
			
		||||
					self.stream_started = False
 | 
			
		||||
					log.info('TLS supported by remote server. Requesting TLS start.')
 | 
			
		||||
					self._tls_negotiation_handler()
 | 
			
		||||
					return
 | 
			
		||||
				else:
 | 
			
		||||
					log.warn('While connecting with type = "tls": TLS unsupported by remote server')
 | 
			
		||||
					self._on_connect()
 | 
			
		||||
					return
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
		elif self.connected in ['ssl', 'tls']:
 | 
			
		||||
			self._on_connect()
 | 
			
		||||
			return
 | 
			
		||||
		assert False # should never be reached
 | 
			
		||||
		else:
 | 
			
		||||
			log.error('Stream opened for unsupported connection: %s' % 
 | 
			
		||||
				(self.connected or 'Disconnected'))
 | 
			
		||||
 | 
			
		||||
	def _tls_negotiation_handler(self, con=None, tag=None):
 | 
			
		||||
		''' takes care of TLS negotioation with <starttls> '''
 | 
			
		||||
| 
						 | 
				
			
			@ -477,7 +479,7 @@ class NonBlockingClient:
 | 
			
		|||
			# wrong user/pass, stop auth
 | 
			
		||||
			if 'SASL' in self.__dict__:
 | 
			
		||||
				self.SASL.PlugOut()
 | 
			
		||||
			self.connected = None # FIXME: is this intended?
 | 
			
		||||
			self.connected = None # FIXME: is this intended? We use ''elsewhere
 | 
			
		||||
			self._on_sasl_auth(None)
 | 
			
		||||
		elif self.SASL.startsasl == 'success':
 | 
			
		||||
			auth_nb.NonBlockingBind.get_instance().PlugIn(self)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,8 @@ class Dispatcher():
 | 
			
		|||
			XMPPDispatcher().PlugIn(client_obj)
 | 
			
		||||
		elif client_obj.protocol_type == 'BOSH':
 | 
			
		||||
			BOSHDispatcher().PlugIn(client_obj, after_SASL, old_features)
 | 
			
		||||
		else:
 | 
			
		||||
			assert False # should never be reached
 | 
			
		||||
	
 | 
			
		||||
	@classmethod
 | 
			
		||||
	def get_instance(cls, *args, **kwargs):
 | 
			
		||||
| 
						 | 
				
			
			@ -111,6 +113,8 @@ class XMPPDispatcher(PlugIn):
 | 
			
		|||
		'''
 | 
			
		||||
			Registers default namespaces/protocols/handlers. Used internally.
 | 
			
		||||
		'''
 | 
			
		||||
		# FIXME: inject dependencies, do not rely that they are defined by our
 | 
			
		||||
		# owner
 | 
			
		||||
		self.RegisterNamespace('unknown')
 | 
			
		||||
		self.RegisterNamespace(NS_STREAMS)
 | 
			
		||||
		self.RegisterNamespace(self._owner.defaultNamespace)
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +166,7 @@ class XMPPDispatcher(PlugIn):
 | 
			
		|||
			raise ValueError('Incorrect stream start: (%s,%s). Terminating.'
 | 
			
		||||
				% (tag, ns))
 | 
			
		||||
 | 
			
		||||
	def ProcessNonBlocking(self, data=None):
 | 
			
		||||
	def ProcessNonBlocking(self, data):
 | 
			
		||||
		'''
 | 
			
		||||
		Check incoming stream for data waiting.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -172,6 +176,11 @@ class XMPPDispatcher(PlugIn):
 | 
			
		|||
			2) '0' string if no data were processed but link is alive;
 | 
			
		||||
			3) 0 (zero) if underlying connection is closed.
 | 
			
		||||
		'''
 | 
			
		||||
		# FIXME:
 | 
			
		||||
		# When an error occurs we disconnect the transport directly. Client's
 | 
			
		||||
		# disconnect method will never be called.
 | 
			
		||||
		# Is this intended?
 | 
			
		||||
		# also look at transports start_disconnect()
 | 
			
		||||
		for handler in self._cycleHandlers:
 | 
			
		||||
			handler(self)
 | 
			
		||||
		if len(self._pendingExceptions) > 0:
 | 
			
		||||
| 
						 | 
				
			
			@ -317,7 +326,7 @@ class XMPPDispatcher(PlugIn):
 | 
			
		|||
		'''
 | 
			
		||||
		self._eventHandler = handler
 | 
			
		||||
 | 
			
		||||
	def returnStanzaHandler(self,conn,stanza):
 | 
			
		||||
	def returnStanzaHandler(self, conn, stanza):
 | 
			
		||||
		'''
 | 
			
		||||
		Return stanza back to the sender with <feature-not-implemented/> error set
 | 
			
		||||
		'''
 | 
			
		||||
| 
						 | 
				
			
			@ -348,6 +357,8 @@ class XMPPDispatcher(PlugIn):
 | 
			
		|||
		'''
 | 
			
		||||
		if self._eventHandler:
 | 
			
		||||
			self._eventHandler(realm, event, data)
 | 
			
		||||
		else:
 | 
			
		||||
			log.warning('Received unhandled event: %s' % event)
 | 
			
		||||
 | 
			
		||||
	def dispatch(self, stanza, session=None, direct=0):
 | 
			
		||||
		'''
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -239,6 +239,7 @@ class NonBlockingTransport(PlugIn):
 | 
			
		|||
		else:
 | 
			
		||||
			self.on_timeout = None
 | 
			
		||||
 | 
			
		||||
	# FIXME: where and why does this need to be called
 | 
			
		||||
	def start_disconnect(self):
 | 
			
		||||
		self.set_state(DISCONNECTING)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -267,7 +268,8 @@ class NonBlockingTCP(NonBlockingTransport, IdleObject):
 | 
			
		|||
 | 
			
		||||
		self.proxy_dict = proxy_dict
 | 
			
		||||
		self.on_remote_disconnect = self.disconnect
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	# FIXME: transport should not be aware xmpp
 | 
			
		||||
	def start_disconnect(self):
 | 
			
		||||
		NonBlockingTransport.start_disconnect(self)
 | 
			
		||||
		self.send('</stream:stream>', now=True)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue