MessageRequest, sends it to the Message Dispatcher (or straight to a Processor), and sends the resulting SIP message to the next hop. It is the only stateful Routr service, and it is written in Java.
Docker image
fonoster/routr-edgeport
The image reads its configuration from /etc/routr/edgeport.yaml (CONFIG_PATH). On start, it converts the certificates in /etc/routr/certs to the PKCS12 keystore signaling.p12. If server.crt or server.key is missing, it generates self-signed certificates first.
Ports
Configuration file
The EdgePort reads a YAML or JSON file and validates it against a JSON schema at startup.
The
securityContext fields map to the JAIN SIP javax.net.ssl.* and gov.nist.javax.sip.TLS_CLIENT_* properties.
Environment variables
gRPC contract
The EdgePort is a gRPC client. For every SIP request and response, it callsProcessMessage on the address in spec.processor.addr.
MessageRequest carries the Call-ID (ref), the EdgePort reference (edge_port_ref), the SIP method, the sender, the listening points, external_addrs, localnets, the SIP message, and metadata. See processor.proto and sipmessage.proto.
Minimal example
This configuration accepts SIP over UDP and TCP and sends messages to the Dispatcher.Notes
- Behind NAT (Docker, Kubernetes, cloud VMs), set
spec.externalAddrsorEXTERNAL_ADDRS. Processors use these addresses to build the advertised address. - Publish every port in
spec.transportfrom the container. - A
tlsorwsstransport withoutspec.securityContextstops the EdgePort at startup. - Because
HOSTNAMEoverridesref, the EdgePort reference in Docker and Kubernetes is the container or pod hostname. - With several EdgePorts, configure the Connect processor to trust its peer EdgePorts. See Connect processor.