Skip to content

Commit 9b3f310

Browse files
authored
Merge pull request #2760 from RestComm/restcomm-1579
Restcomm 1579 - Allow Regex if source org is null
2 parents 9c645b5 + 0610220 commit 9b3f310

4 files changed

Lines changed: 1792 additions & 1 deletion

File tree

restcomm/restcomm.interpreter/src/main/java/org/restcomm/connect/interpreter/NumberSelectorService.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ public NumberSelectionResult searchNumberWithResult(String phone,
279279
if (numberfound.number == null) {
280280
//only use regex if perfect match didnt worked
281281
if (destinationOrganizationSid != null
282-
&& destinationOrganizationSid.equals(sourceOrganizationSid)
282+
&& (sourceOrganizationSid == null || destinationOrganizationSid.equals(sourceOrganizationSid))
283283
&& phone.matches("[\\d,*,#,+]+")) {
284284
//check regex if source and dest orgs are the same
285285
//only use regex if org available
@@ -296,7 +296,26 @@ public NumberSelectionResult searchNumberWithResult(String phone,
296296
}
297297
}
298298
}
299+
}
300+
if (numberfound.number == null) {
301+
if (logger.isDebugEnabled()) {
302+
StringBuffer stringBuffer = new StringBuffer();
303+
304+
stringBuffer.append("NumberSelectionService didn't match a number because: ");
299305

306+
if (destinationOrganizationSid == null) {
307+
stringBuffer.append(" - Destination Org is null - ");
308+
} else if (sourceOrganizationSid != null && !destinationOrganizationSid.equals(sourceOrganizationSid)) {
309+
stringBuffer.append(" - Source Org is NOT null and DOESN'T match the Destination Org - ");
310+
} else if (!phone.matches("[\\d,*,#,+]+")) {
311+
String msg = String.format(" - Phone %s doesn't match regex \"[\\\\d,*,#,+]+\" - ", phone);
312+
stringBuffer.append(msg);
313+
} else {
314+
String msg = String.format(" - Phone %s didn't match any of the Regex - ",phone);
315+
stringBuffer.append(msg);
316+
}
317+
logger.debug(stringBuffer.toString());
318+
}
300319
}
301320
return numberfound;
302321
}

restcomm/restcomm.interpreter/src/test/java/org/restcomm/connect/interpreter/NumberSelectorServiceTest.java

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,4 +255,95 @@ public void testRegexMatch() {
255255

256256
}
257257

258+
@Test
259+
public void testRegexMatchFromNullSrcOrg() {
260+
Sid srcSid = null;
261+
Sid destSid = Sid.generate(Sid.Type.ORGANIZATION);
262+
String regex = "12.*";
263+
String longestRegex = "123.*";
264+
List<IncomingPhoneNumber> emptyNumbers = new ArrayList();
265+
List<IncomingPhoneNumber> numbers = new ArrayList();
266+
final IncomingPhoneNumber.Builder builder = IncomingPhoneNumber.builder();
267+
builder.setPhoneNumber(regex);
268+
numbers.add(builder.build());
269+
builder.setPhoneNumber(longestRegex);
270+
numbers.add(builder.build());
271+
IncomingPhoneNumbersDao numDao = Mockito.mock(IncomingPhoneNumbersDao.class);
272+
when(numDao.getTotalIncomingPhoneNumbers((IncomingPhoneNumberFilter) any())).
273+
thenReturn(1,1);
274+
when(numDao.getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any())).
275+
thenReturn(emptyNumbers, emptyNumbers);
276+
when(numDao.getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any())).
277+
thenReturn(numbers);
278+
InOrder inOrder = inOrder(numDao);
279+
NumberSelectorService service = new NumberSelectorService(numDao);
280+
281+
IncomingPhoneNumber found = service.searchNumber("1234", srcSid, destSid);
282+
283+
Assert.assertNotNull(found);
284+
Assert.assertEquals(longestRegex, found.getPhoneNumber());
285+
inOrder.verify(numDao, times(2)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
286+
inOrder.verify(numDao, times(1)).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
287+
}
288+
289+
@Test
290+
public void testRegexFailToMatchBecauseOfPhone() {
291+
Sid srcSid = null;
292+
Sid destSid = Sid.generate(Sid.Type.ORGANIZATION);
293+
String regex = "12.*";
294+
String longestRegex = "123.*";
295+
List<IncomingPhoneNumber> emptyNumbers = new ArrayList();
296+
List<IncomingPhoneNumber> numbers = new ArrayList();
297+
final IncomingPhoneNumber.Builder builder = IncomingPhoneNumber.builder();
298+
builder.setPhoneNumber(regex);
299+
numbers.add(builder.build());
300+
builder.setPhoneNumber(longestRegex);
301+
numbers.add(builder.build());
302+
IncomingPhoneNumbersDao numDao = Mockito.mock(IncomingPhoneNumbersDao.class);
303+
when(numDao.getTotalIncomingPhoneNumbers((IncomingPhoneNumberFilter) any())).
304+
thenReturn(1,1);
305+
when(numDao.getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any())).
306+
thenReturn(emptyNumbers, emptyNumbers);
307+
when(numDao.getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any())).
308+
thenReturn(numbers);
309+
InOrder inOrder = inOrder(numDao);
310+
NumberSelectorService service = new NumberSelectorService(numDao);
311+
312+
IncomingPhoneNumber found = service.searchNumber("7788", srcSid, destSid);
313+
314+
Assert.assertNull(found);
315+
inOrder.verify(numDao, times(4)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
316+
inOrder.verify(numDao, never()).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
317+
}
318+
319+
320+
@Test
321+
public void testRegexFailToMatchBecauseDestOrgNull() {
322+
Sid srcSid = Sid.generate(Sid.Type.ORGANIZATION);
323+
Sid destSid = null;
324+
String regex = "12.*";
325+
String longestRegex = "123.*";
326+
List<IncomingPhoneNumber> emptyNumbers = new ArrayList();
327+
List<IncomingPhoneNumber> numbers = new ArrayList();
328+
final IncomingPhoneNumber.Builder builder = IncomingPhoneNumber.builder();
329+
builder.setPhoneNumber(regex);
330+
numbers.add(builder.build());
331+
builder.setPhoneNumber(longestRegex);
332+
numbers.add(builder.build());
333+
IncomingPhoneNumbersDao numDao = Mockito.mock(IncomingPhoneNumbersDao.class);
334+
when(numDao.getTotalIncomingPhoneNumbers((IncomingPhoneNumberFilter) any())).
335+
thenReturn(1,1);
336+
when(numDao.getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any())).
337+
thenReturn(emptyNumbers, emptyNumbers);
338+
when(numDao.getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any())).
339+
thenReturn(numbers);
340+
InOrder inOrder = inOrder(numDao);
341+
NumberSelectorService service = new NumberSelectorService(numDao);
342+
343+
IncomingPhoneNumber found = service.searchNumber("1234", srcSid, destSid);
344+
345+
Assert.assertNull(found);
346+
inOrder.verify(numDao, times(2)).getIncomingPhoneNumbersByFilter((IncomingPhoneNumberFilter) any());
347+
inOrder.verify(numDao, never()).getIncomingPhoneNumbersRegex((IncomingPhoneNumberFilter) any());
348+
}
258349
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3+
4+
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
5+
<appender name="rolling-file" class="org.apache.log4j.RollingFileAppender">
6+
<!--keep logs under maven target dir for git ginore and cleaning -->
7+
<!--use arquillian system property to make file names unique across forks -->
8+
<param name="file" value="target/logs/sip-server${arquillian_sip_port}.log" />
9+
<param name="MaxFileSize" value="20000KB" />
10+
<!-- Keep one backup file -->
11+
<param name="MaxBackupIndex" value="20" />
12+
<param name="append" value="false"/>
13+
<layout class="org.apache.log4j.PatternLayout">
14+
<param name="ConversionPattern" value="%p %t %l - %m%n" />
15+
</layout>
16+
</appender>
17+
<appender name="console" class="org.apache.log4j.ConsoleAppender">
18+
<param name="Target" value="System.out" />
19+
<layout class="org.apache.log4j.PatternLayout">
20+
<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %p %t %l - %m%n" />
21+
</layout>
22+
</appender>
23+
<logger name="org.mobicents.servlet.sip.annotations">
24+
<level value="INFO" />
25+
</logger>
26+
<root>
27+
<priority value="DEBUG" />
28+
<appender-ref ref="console" />
29+
<appender-ref ref="rolling-file" />
30+
</root>
31+
</log4j:configuration>

0 commit comments

Comments
 (0)