| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- from __future__ import annotations
- from collections.abc import Sequence
- from ..frames import Frame
- from ..typing import ExtensionName, ExtensionParameter
- __all__ = ["Extension", "ClientExtensionFactory", "ServerExtensionFactory"]
- class Extension:
- """
- Base class for extensions.
- """
- name: ExtensionName
- """Extension identifier."""
- def decode(self, frame: Frame, *, max_size: int | None = None) -> Frame:
- """
- Decode an incoming frame.
- Args:
- frame: Incoming frame.
- max_size: Maximum payload size in bytes.
- Returns:
- Decoded frame.
- Raises:
- PayloadTooBig: If decoding the payload exceeds ``max_size``.
- """
- raise NotImplementedError
- def encode(self, frame: Frame) -> Frame:
- """
- Encode an outgoing frame.
- Args:
- frame: Outgoing frame.
- Returns:
- Encoded frame.
- """
- raise NotImplementedError
- class ClientExtensionFactory:
- """
- Base class for client-side extension factories.
- """
- name: ExtensionName
- """Extension identifier."""
- def get_request_params(self) -> Sequence[ExtensionParameter]:
- """
- Build parameters to send to the server for this extension.
- Returns:
- Parameters to send to the server.
- """
- raise NotImplementedError
- def process_response_params(
- self,
- params: Sequence[ExtensionParameter],
- accepted_extensions: Sequence[Extension],
- ) -> Extension:
- """
- Process parameters received from the server.
- Args:
- params: Parameters received from the server for this extension.
- accepted_extensions: List of previously accepted extensions.
- Returns:
- An extension instance.
- Raises:
- NegotiationError: If parameters aren't acceptable.
- """
- raise NotImplementedError
- class ServerExtensionFactory:
- """
- Base class for server-side extension factories.
- """
- name: ExtensionName
- """Extension identifier."""
- def process_request_params(
- self,
- params: Sequence[ExtensionParameter],
- accepted_extensions: Sequence[Extension],
- ) -> tuple[list[ExtensionParameter], Extension]:
- """
- Process parameters received from the client.
- Args:
- params: Parameters received from the client for this extension.
- accepted_extensions: List of previously accepted extensions.
- Returns:
- To accept the offer, parameters to send to the client for this
- extension and an extension instance.
- Raises:
- NegotiationError: To reject the offer, if parameters received from
- the client aren't acceptable.
- """
- raise NotImplementedError
|