From fe726a0060c9bbc0079f57379f11ac1ff35704d5 Mon Sep 17 00:00:00 2001 From: darwvin-dev Date: Wed, 2 Sep 2026 18:37:28 +0330 Subject: [PATCH 1/2] fix: accept sips: URIs when extracting caller info The two remote-URI patterns required a literal "sip:". The string "sips:" does not contain "sip:", so a SIPS remote party matched neither pattern and both the display name and the remote URI fell back to "Unknown" -- losing caller ID and the number needed to call back. Accept both schemes with sips?:. Behaviour for sip: URIs is unchanged. --- sipservice/src/main/java/net/gotev/sipservice/CallerInfo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sipservice/src/main/java/net/gotev/sipservice/CallerInfo.java b/sipservice/src/main/java/net/gotev/sipservice/CallerInfo.java index 73bca6af..6087af59 100644 --- a/sipservice/src/main/java/net/gotev/sipservice/CallerInfo.java +++ b/sipservice/src/main/java/net/gotev/sipservice/CallerInfo.java @@ -24,14 +24,14 @@ public CallerInfo(final CallInfo callInfo) { return; } - Pattern displayNameAndRemoteUriPattern = Pattern.compile("^\"([^\"]+).*?sip:(.*?)>$"); + Pattern displayNameAndRemoteUriPattern = Pattern.compile("^\"([^\"]+).*?sips?:(.*?)>$"); Matcher completeInfo = displayNameAndRemoteUriPattern.matcher(temp); if (completeInfo.matches()) { displayName = completeInfo.group(1); remoteUri = completeInfo.group(2); } else { - Pattern remoteUriPattern = Pattern.compile("^.*?sip:(.*?)>$"); + Pattern remoteUriPattern = Pattern.compile("^.*?sips?:(.*?)>$"); Matcher remoteUriInfo = remoteUriPattern.matcher(temp); if (remoteUriInfo.matches()) { displayName = remoteUri = remoteUriInfo.group(1); From c7386e56dabace63669bff979817e6d93a4ac790 Mon Sep 17 00:00:00 2001 From: darwvin-dev Date: Wed, 30 Sep 2026 13:40:15 +0330 Subject: [PATCH 2/2] test: cover SIP and SIPS caller info parsing --- .../net/gotev/sipservice/CallerInfoTest.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 sipservice/src/test/java/net/gotev/sipservice/CallerInfoTest.java diff --git a/sipservice/src/test/java/net/gotev/sipservice/CallerInfoTest.java b/sipservice/src/test/java/net/gotev/sipservice/CallerInfoTest.java new file mode 100644 index 00000000..f77b116e --- /dev/null +++ b/sipservice/src/test/java/net/gotev/sipservice/CallerInfoTest.java @@ -0,0 +1,59 @@ +package net.gotev.sipservice; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.pjsip.pjsua2.CallInfo; + +public class CallerInfoTest { + + private static final class FakeCallInfo extends CallInfo { + private final String remoteUri; + + FakeCallInfo(String remoteUri) { + super(0, false); + this.remoteUri = remoteUri; + } + + @Override + public String getRemoteUri() { + return remoteUri; + } + } + + private static CallerInfo callerInfo(String remoteUri) { + return new CallerInfo(new FakeCallInfo(remoteUri)); + } + + @Test + public void parsesSipUriWithDisplayName() { + CallerInfo info = callerInfo("\"Alice\" "); + + assertEquals("Alice", info.getDisplayName()); + assertEquals("1001@pbx.example.com", info.getRemoteUri()); + } + + @Test + public void parsesSipsUriWithDisplayName() { + CallerInfo info = callerInfo("\"Alice\" "); + + assertEquals("Alice", info.getDisplayName()); + assertEquals("1001@pbx.example.com", info.getRemoteUri()); + } + + @Test + public void parsesSipUriWithoutDisplayName() { + CallerInfo info = callerInfo(""); + + assertEquals("1001@pbx.example.com", info.getDisplayName()); + assertEquals("1001@pbx.example.com", info.getRemoteUri()); + } + + @Test + public void parsesSipsUriWithoutDisplayName() { + CallerInfo info = callerInfo(""); + + assertEquals("1001@pbx.example.com", info.getDisplayName()); + assertEquals("1001@pbx.example.com", info.getRemoteUri()); + } +}