allow multiple close() calls, throw error when using a closed Wormhole
This commit is contained in:
		
							parent
							
								
									3daef13ac0
								
							
						
					
					
						commit
						0748647049
					
				| 
						 | 
				
			
			@ -106,7 +106,7 @@ class Channel:
 | 
			
		|||
                time.sleep(self._wait)
 | 
			
		||||
        return body
 | 
			
		||||
 | 
			
		||||
    def deallocate(self, mood=u"unknown"):
 | 
			
		||||
    def deallocate(self, mood=None):
 | 
			
		||||
        # only try once, no retries
 | 
			
		||||
        data = json.dumps({"appid": self._appid,
 | 
			
		||||
                           "channelid": self._channelid,
 | 
			
		||||
| 
						 | 
				
			
			@ -177,6 +177,7 @@ class Wormhole:
 | 
			
		|||
        self.verifier = None
 | 
			
		||||
        self._sent_data = set() # phases
 | 
			
		||||
        self._got_data = set()
 | 
			
		||||
        self._closed = False
 | 
			
		||||
 | 
			
		||||
    def handle_welcome(self, welcome):
 | 
			
		||||
        if ("motd" in welcome and
 | 
			
		||||
| 
						 | 
				
			
			@ -266,6 +267,7 @@ class Wormhole:
 | 
			
		|||
            self.verifier = self.derive_key(u"wormhole:verifier")
 | 
			
		||||
 | 
			
		||||
    def get_verifier(self):
 | 
			
		||||
        if self._closed: raise UsageError
 | 
			
		||||
        if self.code is None: raise UsageError
 | 
			
		||||
        if self._channel is None: raise UsageError
 | 
			
		||||
        self._get_key()
 | 
			
		||||
| 
						 | 
				
			
			@ -275,6 +277,7 @@ class Wormhole:
 | 
			
		|||
        if not isinstance(outbound_data, type(b"")):
 | 
			
		||||
            raise TypeError(type(outbound_data))
 | 
			
		||||
        if not isinstance(phase, type(u"")): raise TypeError(type(phase))
 | 
			
		||||
        if self._closed: raise UsageError
 | 
			
		||||
        if phase in self._sent_data: raise UsageError # only call this once
 | 
			
		||||
        if self.code is None: raise UsageError
 | 
			
		||||
        if self._channel is None: raise UsageError
 | 
			
		||||
| 
						 | 
				
			
			@ -291,6 +294,7 @@ class Wormhole:
 | 
			
		|||
    def get_data(self, phase=u"data"):
 | 
			
		||||
        if not isinstance(phase, type(u"")): raise TypeError(type(phase))
 | 
			
		||||
        if phase in self._got_data: raise UsageError # only call this once
 | 
			
		||||
        if self._closed: raise UsageError
 | 
			
		||||
        if self.code is None: raise UsageError
 | 
			
		||||
        if self._channel is None: raise UsageError
 | 
			
		||||
        self._got_data.add(phase)
 | 
			
		||||
| 
						 | 
				
			
			@ -303,6 +307,9 @@ class Wormhole:
 | 
			
		|||
        except CryptoError:
 | 
			
		||||
            raise WrongPasswordError
 | 
			
		||||
 | 
			
		||||
    def close(self):
 | 
			
		||||
        monitor.close(self._channel)
 | 
			
		||||
        self._channel.deallocate()
 | 
			
		||||
    def close(self, mood=None):
 | 
			
		||||
        self._closed = True
 | 
			
		||||
        if self._channel:
 | 
			
		||||
            c, self._channel = self._channel, None
 | 
			
		||||
            monitor.close(c)
 | 
			
		||||
            c.deallocate(mood)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user