WCS 5.2.2098: SIP trunk INVITEs reach port 40000 but WCS doesn’t parse sip_trunk.yml (404 on /rest-api/sip_trunks)

Sebastián Acosta

New Member
Hello Flashphoner team,


Goal

Integrate 3CX → WCS (SIP trunk @ 40000) → WebRTC (Meta integration handled separately). I need WCS to accept inbound SIP trunk calls from 3CX and forward media to a local RTMP endpoint.


Environment


  • Cloud: AWS EC2 (Amazon Linux 2)
  • WCS build: 5.2.2098 (startup.log shows Starting FlashphonerWebCallServer-5.2.2098-… on amzn 2)
  • Java: OpenJDK 14.0.1
  • WCS external IP: 18.214.18.170
  • WCS private IP: 10.10.1.140
  • PBX (3CX) public IP that sends INVITE: 54.94.72.97 (3CX LAN IP seen in Via: 10.10.2.133)

What works


  • SIP accounts register fine on WCS and I see normal REGISTER / 200 OK traffic in flashphoner.log.

Issue


  • I’m setting up a SIP trunk on UDP/TCP 40000.
    The socket is listening:

    ss -u -lpn | grep 40000
    UNCONN 0 10.10.1.140:40000 0.0.0.0:* users:(("java",pid=2790512,fd=210))

    ss -t -lpn | grep 40000
    LISTEN 0 50 10.10.1.140:40000 0.0.0.0:* users:(("java",pid=2790512,fd=211))
  • 3CX INVITEs do reach WCS: tcpdump on 40000 shows repeated INVITE with SDP from 54.94.72.97:5060 → 10.10.1.140:40000.
    However, WCS never logs the INVITE (even with debug) and does not reply (no 100 Trying / 404 / 486, etc.).
  • REST API for trunks returns 404:

    curl -s http://localhost:8081/rest-api/sip_trunks
    {"status":404,"error":"Not Found","message":"/rest-api/sip_trunks"}
  • I also see this in flashphoner.log around start:

    ERROR ThreadsConfigParser - main Config file not found
    (This appears regardless of the trunk config.)

Config
/usr/local/FlashphonerWebCallServer-5.2.2098/conf/flashphoner.properties (relevant lines):



sip_trunk_enabled=true
sip_add_contact_id=false
rtmp_transponder_stream_name_prefix=


/usr/local/FlashphonerWebCallServer-5.2.2098/conf/sip_trunk.yml:



trunks:
pbx_t0:
localPort: 40000
proxyIp: 54.94.72.97 # 3CX public IP that sends the INVITE
remotePort: 5060
url: rtmp://192.168.1.20:1935/live
visibleName: PBX-Flashphoner
sdp: |
v=0
o=10009 2469 1555 IN IP4 0.0.0.0
c=IN IP4 0.0.0.0
t=0 0
m=audio 7270 RTP/AVP 0 8 96 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:96 opus/48000/2
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=recvonly
sdpParams:
- b=AS:2000
- b=RS:50
- b=RR:100


Permissions on the file:



-rw-r--r-- 1 flashphoner flashphoner 520 Oct 13 /usr/local/FlashphonerWebCallServer-5.2.2098/conf/sip_trunk.yml


Logging (added for verbosity):



log4j.logger.com.flashphoner.server.sip=DEBUG
log4j.logger.gov.nist=DEBUG


Observed


  • On restart, there’s no line indicating that sip_trunk.yml is loaded, and there is no “listening trunk on 40000” message.
  • INVITEs arrive (verified by tcpdump), but no SIP response from WCS and no INVITE lines in flashphoner.log.

Questions


  1. Does my current license/build include the SIP Trunk / SIP Gateway module?
    • If not, which license tier and build do I need to load sip_trunk.yml and enable /rest-api/sip_trunks?
  2. Is the config filename and path correct for this build (conf/sip_trunk.yml)?
    Any different name (e.g., sip_trunks.yml) or directory expected?
  3. What does ERROR ThreadsConfigParser - main Config file not found refer to, and can it be related to the trunk not loading?
  4. With NAT (public 18.214.18.170 / private 10.10.1.140), is proxyIp meant to be the source IP of the PBX INVITE (54.94.72.97) as I used?
  5. Are there additional properties to flip (e.g., to explicitly enable the trunk service) or other logs I should enable to confirm initialization?

Expected


  • On service start, WCS should log that the trunk config is parsed and that it’s listening on port 40000.
  • /rest-api/sip_trunks should return the configured pbx_t0.
  • When INVITE from 3CX hits 40000, WCS should respond (100 Trying, etc.) and then push media to rtmp://192.168.1.20:1935/live per url.

I can provide full logs and packet captures if helpful.
Thanks in advance for confirming licensing/build requirements and pointing out anything wrong in my setup.


— Sebastián
 
Top