MCPcopy Index your code
hub / github.com/python-websockets/websockets / handshake

Method handshake

src/websockets/asyncio/server.py:114–207  ·  view source on GitHub ↗

Perform the opening handshake.

(
        self,
        process_request: (
            Callable[
                [ServerConnection, Request],
                Awaitable[Response | None] | Response | None,
            ]
            | None
        ) = None,
        process_response: (
            Callable[
                [ServerConnection, Request, Response],
                Awaitable[Response | None] | Response | None,
            ]
            | None
        ) = None,
        server_header: str | None = SERVER,
    )

Source from the content-addressed store, hash-verified

112 return self.protocol.reject(status, text)
113
114 async def handshake(
115 self,
116 process_request: (
117 Callable[
118 [ServerConnection, Request],
119 Awaitable[Response | None] | Response | None,
120 ]
121 | None
122 ) = None,
123 process_response: (
124 Callable[
125 [ServerConnection, Request, Response],
126 Awaitable[Response | None] | Response | None,
127 ]
128 | None
129 ) = None,
130 server_header: str | None = SERVER,
131 ) -> None:
132 """
133 Perform the opening handshake.
134
135 """
136 await asyncio.wait(
137 [self.request_rcvd, self.connection_lost_waiter],
138 return_when=asyncio.FIRST_COMPLETED,
139 )
140
141 if self.request is not None:
142 async with self.send_context(expected_state=CONNECTING):
143 response = None
144
145 if process_request is not None:
146 try:
147 response = process_request(self, self.request)
148 if isinstance(response, Awaitable):
149 response = await response
150 except Exception as exc:
151 self.protocol.handshake_exc = exc
152 response = self.protocol.reject(
153 http.HTTPStatus.INTERNAL_SERVER_ERROR,
154 (
155 "Failed to open a WebSocket connection.\n"
156 "See server log for more information.\n"
157 ),
158 )
159
160 if response is None:
161 if self.server.is_serving():
162 self.response = self.protocol.accept(self.request)
163 else:
164 self.response = self.protocol.reject(
165 http.HTTPStatus.SERVICE_UNAVAILABLE,
166 "Server is shutting down.\n",
167 )
168 else:
169 assert isinstance(response, Response) # help mypy
170 self.response = response
171

Callers 1

conn_handlerMethod · 0.45

Calls 6

acceptMethod · 0.80
send_responseMethod · 0.80
process_requestFunction · 0.70
send_contextMethod · 0.45
rejectMethod · 0.45
is_servingMethod · 0.45

Tested by

no test coverage detected