Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/selkies/webrtc/utils.py: 81%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This Source Code Form is subject to the terms of the Mozilla Public
2# License, v. 2.0. If a copy of the MPL was not distributed with this
3# file, You can obtain one at https://mozilla.org/MPL/2.0/.
4#
5# This file incorporates work covered by the following copyright and
6# permission notice:
7#
8# Copyright (c) Jeremy Lainé.
9# All rights reserved.
10#
11# Redistribution and use in source and binary forms, with or without
12# modification, are permitted provided that the following conditions are met:
13#
14# * Redistributions of source code must retain the above copyright notice,
15# this list of conditions and the following disclaimer.
16# * Redistributions in binary form must reproduce the above copyright notice,
17# this list of conditions and the following disclaimer in the documentation
18# and/or other materials provided with the distribution.
19# * Neither the name of aiortc nor the names of its contributors may
20# be used to endorse or promote products derived from this software without
21# specific prior written permission.
22#
23# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
24# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
27# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
31# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34import os
35from struct import unpack
38def random16() -> int:
39 return unpack("!H", os.urandom(2))[0]
42def random32() -> int:
43 return unpack("!L", os.urandom(4))[0]
46def uint16_add(a: int, b: int) -> int:
47 """
48 Return a + b.
49 """
50 return (a + b) & 0xFFFF
53def uint16_gt(a: int, b: int) -> bool:
54 """
55 Return a > b.
56 """
57 half_mod = 0x8000
58 return ((a < b) and ((b - a) > half_mod)) or ((a > b) and ((a - b) < half_mod))
61def uint16_gte(a: int, b: int) -> bool:
62 """
63 Return a >= b.
64 """
65 return (a == b) or uint16_gt(a, b)
68def uint32_add(a: int, b: int) -> int:
69 """
70 Return a + b.
71 """
72 return (a + b) & 0xFFFFFFFF
75def uint32_gt(a: int, b: int) -> bool:
76 """
77 Return a > b.
78 """
79 half_mod = 0x80000000
80 return ((a < b) and ((b - a) > half_mod)) or ((a > b) and ((a - b) < half_mod))
83def uint32_gte(a: int, b: int) -> bool:
84 """
85 Return a >= b.
86 """
87 return (a == b) or uint32_gt(a, b)