Commit a6dac599 authored by guillecxb's avatar guillecxb
Browse files

init

parent 52c277d6
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ from .redis_internal_event import RedisInternalEvent
from .resources import Resource
from .responses import internal_server_error, not_found_error, forbidden_error, make_response, bad_request_error
from ..core.sign_certificate import sign_certificate
from ..util import dict_to_camel_case, clean_empty, serialize_clean_camel_case
from ..util import dict_to_camel_case, clean_empty, serialize_clean_camel_case, negotiate_supported_features


class ProviderManagementOperations(Resource):
+14 −0
Original line number Diff line number Diff line
@@ -192,3 +192,17 @@ def _deserialize_dict(data, boxed_type):
    """
    return {k: _deserialize(v, boxed_type)
            for k, v in data.items() }

TOTAL_FEATURES = 18
SUPPORTED_FEATURES_HEX = "201"

def negotiate_supported_features(client_hex: str) -> str:
    client_bin = bin(int(client_hex or "0", 16))[2:].zfill(TOTAL_FEATURES)[::-1]
    server_bin = bin(int(SUPPORTED_FEATURES_HEX, 16))[2:].zfill(TOTAL_FEATURES)[::-1]

    negotiated_bin = ''.join([
        '1' if client_bin[i] == '1' and server_bin[i] == '1' else '0'
        for i in range(TOTAL_FEATURES)
    ])[::-1]

    return hex(int(negotiated_bin, 2))[2:] or "0"
 No newline at end of file