mirror of
				https://github.com/django/daphne.git
				synced 2025-11-04 01:27:33 +03:00 
			
		
		
		
	Merge pull request #58 from rixx/✨
Respond with a code when closing a connection
This commit is contained in:
		
						commit
						a672da7b21
					
				| 
						 | 
					@ -275,7 +275,6 @@ class WebRequest(http.Request):
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
class HTTPProtocol(http.HTTPChannel):
 | 
					class HTTPProtocol(http.HTTPChannel):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    requestFactory = WebRequest
 | 
					    requestFactory = WebRequest
 | 
				
			||||||
| 
						 | 
					@ -335,11 +334,13 @@ class HTTPFactory(http.HTTPFactory):
 | 
				
			||||||
                protocol.serverSend(message["bytes"], True)
 | 
					                protocol.serverSend(message["bytes"], True)
 | 
				
			||||||
            if message.get("text", None):
 | 
					            if message.get("text", None):
 | 
				
			||||||
                protocol.serverSend(message["text"], False)
 | 
					                protocol.serverSend(message["text"], False)
 | 
				
			||||||
            if message.get("close", False):
 | 
					
 | 
				
			||||||
 | 
					            closing_code = message.get("close", False)
 | 
				
			||||||
 | 
					            if closing_code:
 | 
				
			||||||
                if protocol.state == protocol.STATE_CONNECTING:
 | 
					                if protocol.state == protocol.STATE_CONNECTING:
 | 
				
			||||||
                    protocol.serverReject()
 | 
					                    protocol.serverReject()
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    protocol.serverClose()
 | 
					                    protocol.serverClose(code=closing_code)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            raise ValueError("Cannot dispatch message on channel %r" % channel)
 | 
					            raise ValueError("Cannot dispatch message on channel %r" % channel)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -105,7 +105,7 @@ class WebSocketProtocol(WebSocketServerProtocol):
 | 
				
			||||||
            # so drop the connection.
 | 
					            # so drop the connection.
 | 
				
			||||||
            self.muted = True
 | 
					            self.muted = True
 | 
				
			||||||
            logger.warn("WebSocket force closed for %s due to connect backpressure", self.reply_channel)
 | 
					            logger.warn("WebSocket force closed for %s due to connect backpressure", self.reply_channel)
 | 
				
			||||||
            # Send code 1013 "try again later" with close.
 | 
					            # Send code 503 "Service Unavailable" with close.
 | 
				
			||||||
            raise ConnectionDeny(code=503, reason="Connection queue at capacity")
 | 
					            raise ConnectionDeny(code=503, reason="Connection queue at capacity")
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            self.factory.log_action("websocket", "connecting", {
 | 
					            self.factory.log_action("websocket", "connecting", {
 | 
				
			||||||
| 
						 | 
					@ -198,11 +198,12 @@ class WebSocketProtocol(WebSocketServerProtocol):
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            self.sendMessage(content.encode("utf8"), binary)
 | 
					            self.sendMessage(content.encode("utf8"), binary)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def serverClose(self):
 | 
					    def serverClose(self, code=True):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Server-side channel message to close the socket
 | 
					        Server-side channel message to close the socket
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        self.sendClose()
 | 
					        code = 1000 if code is True else code
 | 
				
			||||||
 | 
					        self.sendClose(code=code)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def onClose(self, wasClean, code, reason):
 | 
					    def onClose(self, wasClean, code, reason):
 | 
				
			||||||
        self.cleanup()
 | 
					        self.cleanup()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user