Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 0 additions & 46 deletions libp2p/transport/webrtc/_varint.py

This file was deleted.

25 changes: 2 additions & 23 deletions libp2p/transport/webrtc/signaling.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
import trio

from libp2p.abc import INetStream
from libp2p.utils.varint import decode_uvarint_from_stream, encode_uvarint

from ._varint import encode_uvarint
from .exceptions import WebRTCSignalingError
from .signaling_pb.signaling_pb2 import SignalingMessage

Expand Down Expand Up @@ -74,7 +74,7 @@ async def read_signaling_message(stream: INetStream) -> SignalingMessage:
:raises WebRTCSignalingError: If reading or parsing fails.
"""
try:
length = await _read_uvarint(stream)
length = await decode_uvarint_from_stream(stream)
if length > _MAX_SIGNALING_MSG_SIZE:
raise WebRTCSignalingError(
f"Signaling message too large: {length} bytes "
Expand Down Expand Up @@ -261,24 +261,3 @@ async def _receive_expected(self, expected_type: int) -> SignalingMessage:
f"Expected signaling message type {expected_type}, got {msg.type}"
)
return msg


# ------------------------------------------------------------------
# Streaming varint read (sync encoder/decoder live in ._varint)
# ------------------------------------------------------------------


async def _read_uvarint(stream: INetStream) -> int:
"""Read an unsigned varint from a libp2p :class:`INetStream`."""
result = 0
shift = 0
for _ in range(10): # Max 10 bytes for uint64 varint
byte_data = await stream.read(1)
if not byte_data:
raise WebRTCSignalingError("Stream closed while reading varint")
byte = byte_data[0]
result |= (byte & 0x7F) << shift
if not (byte & 0x80):
return result
shift += 7
raise WebRTCSignalingError("Varint too long (> 10 bytes)")
4 changes: 2 additions & 2 deletions libp2p/transport/webrtc/stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import trio

from libp2p.abc import IMuxedStream
from libp2p.utils.varint import decode_varint_with_size, encode_uvarint

from ._varint import decode_uvarint, encode_uvarint
from .constants import MAX_MESSAGE_SIZE, MAX_PAYLOAD_SIZE
from .exceptions import WebRTCStreamError
from .pb.webrtc_pb2 import Message
Expand Down Expand Up @@ -301,7 +301,7 @@ def on_data(self, raw: bytes) -> None:
the mutations inline.
"""
try:
length, consumed = decode_uvarint(raw)
length, consumed = decode_varint_with_size(raw)
except ValueError as e:
logger.warning(
"WebRTCStream channel=%d: malformed varint prefix: %s",
Expand Down
1 change: 1 addition & 0 deletions newsfragments/1355.internal.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Removed ``libp2p/transport/webrtc/_varint.py`` and migrated WebRTC stream and signaling framing to use the shared ``libp2p.utils.varint`` utilities (``encode_uvarint``, ``decode_varint_with_size``, ``decode_uvarint_from_stream``), eliminating a duplicate in-tree varint implementation.
2 changes: 1 addition & 1 deletion tests/core/transport/webrtc/test_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,8 @@ class TestMessageRouting:
async def test_on_channel_message_routes_to_stream(self):
conn = _make_connection()
stream = await conn.open_stream()
from libp2p.transport.webrtc._varint import encode_uvarint
from libp2p.transport.webrtc.pb.webrtc_pb2 import Message
from libp2p.utils.varint import encode_uvarint

proto = Message(message=b"test-data").SerializeToString()
framed = encode_uvarint(len(proto)) + proto
Expand Down
6 changes: 4 additions & 2 deletions tests/core/transport/webrtc/test_signaling.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,16 @@
import pytest
import trio

from libp2p.transport.webrtc._varint import encode_uvarint as _encode_uvarint
from libp2p.transport.webrtc.signaling import (
SignalingSession,
_read_uvarint,
read_signaling_message,
write_signaling_message,
)
from libp2p.transport.webrtc.signaling_pb.signaling_pb2 import SignalingMessage
from libp2p.utils.varint import (
decode_uvarint_from_stream as _read_uvarint,
encode_uvarint as _encode_uvarint,
)


class MockStream:
Expand Down
4 changes: 2 additions & 2 deletions tests/core/transport/webrtc/test_stream.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@

import pytest

from libp2p.transport.webrtc._varint import decode_uvarint, encode_uvarint
from libp2p.transport.webrtc.constants import MAX_PAYLOAD_SIZE
from libp2p.transport.webrtc.pb.webrtc_pb2 import Message
from libp2p.transport.webrtc.stream import StreamState, WebRTCStream
from libp2p.utils.varint import decode_varint_with_size, encode_uvarint


def _framed(msg: Message) -> bytes:
Expand All @@ -23,7 +23,7 @@ def _framed(msg: Message) -> bytes:

def _parse_framed(raw: bytes) -> Message:
"""Inverse of :func:`_framed` — decode the wire format back to a Message."""
length, consumed = decode_uvarint(raw)
length, consumed = decode_varint_with_size(raw)
msg = Message()
msg.ParseFromString(raw[consumed : consumed + length])
return msg
Expand Down
Loading