mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-07-27 03:52:47 +02:00
1906f576bb
standardize default region on mesh.default_region (remove legacy region_default_scope usage) add/align CLI support for owner.info, path.hash.mode, and loop.detect with validation wire UI terminal get/set + autocomplete/help for owner.info, path.hash.mode, loop.detect extend update_radio_config to persist owner_info for UI set owner.info add and use shared packet utility for advert creation + default-region transport scoping refactor repeater and room-server advert paths to reuse shared packet logic
62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
import logging
|
|
from typing import Optional, Tuple
|
|
|
|
from openhop_core.protocol import PacketBuilder
|
|
from openhop_core.protocol.constants import ROUTE_TYPE_TRANSPORT_FLOOD
|
|
|
|
logger = logging.getLogger("RepeaterPacketUtils")
|
|
|
|
|
|
def create_scoped_advert_packet(
|
|
*,
|
|
local_identity,
|
|
node_name: str,
|
|
latitude: float,
|
|
longitude: float,
|
|
flags: int,
|
|
default_region,
|
|
scope_label: str,
|
|
) -> Tuple[object, Optional[str]]:
|
|
"""Create a flood advert packet and apply default-region transport scope when configured."""
|
|
packet = PacketBuilder.create_advert(
|
|
local_identity=local_identity,
|
|
name=node_name,
|
|
lat=latitude,
|
|
lon=longitude,
|
|
feature1=0,
|
|
feature2=0,
|
|
flags=flags,
|
|
route_type="flood",
|
|
)
|
|
|
|
scoped_region_name = _apply_default_region_scope(
|
|
packet=packet,
|
|
default_region=default_region,
|
|
scope_label=scope_label,
|
|
)
|
|
return packet, scoped_region_name
|
|
|
|
|
|
def _apply_default_region_scope(*, packet, default_region, scope_label: str) -> Optional[str]:
|
|
"""Apply transport-flood scoping for a default region if provided."""
|
|
region_name = str(default_region).strip() if default_region not in (None, "") else ""
|
|
if not region_name:
|
|
return None
|
|
|
|
try:
|
|
from openhop_core.protocol.transport_keys import calc_transport_code, get_auto_key_for
|
|
|
|
region_key = get_auto_key_for(region_name)
|
|
packet.transport_codes[0] = calc_transport_code(region_key, packet)
|
|
packet.transport_codes[1] = 0 # reserved for home region
|
|
packet.header = (packet.header & ~0x03) | ROUTE_TYPE_TRANSPORT_FLOOD
|
|
return region_name
|
|
except Exception as scope_err:
|
|
logger.warning(
|
|
"Failed to apply default region scope '%s' to %s; sending unscoped flood: %s",
|
|
region_name,
|
|
scope_label,
|
|
scope_err,
|
|
)
|
|
return None
|