summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorengn33r <engn33r@users.noreply.github.com>2021-04-26 22:59:00 -0400
committerengn33r <engn33r@users.noreply.github.com>2021-04-26 22:59:00 -0400
commit513f5a5947c2054d7ed87d4db00a1dd75850147e (patch)
tree30fd02c7739803d6cf157fd8f1fb763b83498f75
parentcefb07e88302970b134f85142aeec485451ff8e7 (diff)
downloadwebsocket-client-513f5a5947c2054d7ed87d4db00a1dd75850147e.tar.gz
Add docs for custom masking
-rw-r--r--docs/source/examples.rst60
1 files changed, 56 insertions, 4 deletions
diff --git a/docs/source/examples.rst b/docs/source/examples.rst
index 867f2e7..45f8174 100644
--- a/docs/source/examples.rst
+++ b/docs/source/examples.rst
@@ -397,6 +397,7 @@ This type of connection does not automatically respond to a "ping" with a "pong"
ws = websocket.WebSocket()
ws.connect("ws://echo.websocket.org")
ws.ping()
+ ws.ping("This is an optional ping payload")
ws.pong()
ws.close()
@@ -422,7 +423,7 @@ send a "pong" when it receives a "ping", per the specification.
wsapp = websocket.WebSocketApp("wss://stream.meetup.com/2/rsvps",
on_message=on_message, on_ping=on_ping, on_pong=on_pong)
- wsapp.run_forever(ping_interval=60, ping_timeout=10)
+ wsapp.run_forever(ping_interval=60, ping_timeout=10, ping_payload="This is an optional ping payload")
Connection Close Status Codes
--------------------------------
@@ -462,13 +463,64 @@ status code values between 3000-4999.
websocket.enableTrace(True)
def on_message(wsapp, message):
- print(message)
- wsapp.close(status=websocket.STATUS_PROTOCOL_ERROR)
- # Alternatively, use wsapp.close(status=1002)
+ print(message)
+ wsapp.close(status=websocket.STATUS_PROTOCOL_ERROR)
+ # Alternatively, use wsapp.close(status=1002)
wsapp = websocket.WebSocketApp("wss://stream.meetup.com/2/rsvps", on_message=on_message)
wsapp.run_forever(skip_utf8_validation=True)
+Customizing frame mask
+--------------------------------
+
+WebSocket frames use masking with a random value to add entropy. The masking
+value in websocket-client is normally set using os.urandom in the
+websocket/_abnf.py file. However, this value can be customized as you wish.
+One use case, outlined in
+`issue #473 <https://github.com/websocket-client/websocket-client/issues/473>`_,
+is to set the masking key to a null value to make it easier to decode the
+messages being sent and received. This is effectively the same as "removing" the
+mask, though the mask cannot be fully "removed" because it is a part of the
+WebSocket frame. Tools such as Wireshark can automatically remove masking
+from payloads to decode the payload message, but it may be easier to skip
+the demasking step in your custom project.
+
+**WebSocket custom masking key code example**
+
+::
+
+ import websocket
+
+ def zero_mask_key(_):
+ return "\x00\x00\x00\x00"
+
+ websocket.enableTrace(True)
+
+ ws = websocket.WebSocket()
+ ws.set_mask_key(zero_mask_key)
+ ws.connect("ws://echo.websocket.org")
+ ws.send("Hello, Server")
+ print(ws.recv())
+ ws.close()
+
+
+**WebSocketApp custom masking key code example**
+
+::
+
+ import websocket
+
+ def zero_mask_key(_):
+ return "\x00\x00\x00\x00"
+
+ websocket.enableTrace(True)
+
+ def on_message(wsapp, message):
+ print(message)
+
+ wsapp = websocket.WebSocketApp("wss://stream.meetup.com/2/rsvps", on_message=on_message, get_mask_key=zero_mask_key)
+ wsapp.run_forever()
+
Real-world Examples
=========================