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

21 statements  

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. 

33 

34import os 

35from struct import unpack 

36 

37 

38def random16() -> int: 

39 return unpack("!H", os.urandom(2))[0] 

40 

41 

42def random32() -> int: 

43 return unpack("!L", os.urandom(4))[0] 

44 

45 

46def uint16_add(a: int, b: int) -> int: 

47 """ 

48 Return a + b. 

49 """ 

50 return (a + b) & 0xFFFF 

51 

52 

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)) 

59 

60 

61def uint16_gte(a: int, b: int) -> bool: 

62 """ 

63 Return a >= b. 

64 """ 

65 return (a == b) or uint16_gt(a, b) 

66 

67 

68def uint32_add(a: int, b: int) -> int: 

69 """ 

70 Return a + b. 

71 """ 

72 return (a + b) & 0xFFFFFFFF 

73 

74 

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)) 

81 

82 

83def uint32_gte(a: int, b: int) -> bool: 

84 """ 

85 Return a >= b. 

86 """ 

87 return (a == b) or uint32_gt(a, b)