Expose parsing util methods for telephony validation

Bug: 173828358
Test: atest TeleServiceTests
Change-Id: I271a36bcecb332c30f04e7fb22c45098384bc634
This commit is contained in:
Brad Ebinger
2021-04-06 18:55:27 +00:00
parent 67a02c82dc
commit 3cccf87d80
2 changed files with 23 additions and 4 deletions

View File

@@ -80,6 +80,15 @@ public class SipMessageParsingUtils {
return verifySipRequest(splitLine);
}
/**
* @return true if the SIP message start line is considered a response.
*/
public static boolean isSipResponse(String startLine) {
String[] splitLine = splitStartLineAndVerify(startLine);
if (splitLine == null) return false;
return verifySipResponse(splitLine);
}
/**
* Return the via branch parameter, which is used to identify the transaction ID (request and
* response pair) in a SIP transaction.
@@ -140,7 +149,12 @@ public class SipMessageParsingUtils {
return !headers.isEmpty() ? headers.get(0).second : null;
}
private static String[] splitStartLineAndVerify(String startLine) {
/**
* Validate that the start line is correct and split into its three segments.
* @param startLine The start line to verify and split.
* @return The split start line, which will always have three segments.
*/
public static String[] splitStartLineAndVerify(String startLine) {
String[] splitLine = startLine.split(" ");
if (isStartLineMalformed(splitLine)) return null;
return splitLine;
@@ -184,7 +198,7 @@ public class SipMessageParsingUtils {
* (This is internally an equalsIgnoreMatch comparison).
* @return the matched header keys and values.
*/
private static List<Pair<String, String>> parseHeaders(String headerString,
public static List<Pair<String, String>> parseHeaders(String headerString,
boolean stopAtFirstMatch, String... matchingHeaderKeys) {
// Ensure there is no leading whitespace
headerString = removeLeadingWhitespace(headerString);

View File

@@ -80,13 +80,18 @@ public class SipDelegateManager {
public static final int MESSAGE_FAILURE_REASON_DELEGATE_CLOSED = 2;
/**
* The SIP message has an invalid start line and the message can not be sent.
* The SIP message has an invalid start line and the message can not be sent or the start line
* failed validation due to the request containing a restricted SIP request method.
* {@link SipDelegateConnection}s can not send SIP requests for the methods: REGISTER, PUBLISH,
* or OPTIONS.
*/
public static final int MESSAGE_FAILURE_REASON_INVALID_START_LINE = 3;
/**
* One or more of the header fields in the header section of the outgoing SIP message is invalid
* and the SIP message can not be sent.
* or contains a restricted header value and the SIP message can not be sent.
* {@link SipDelegateConnection}s can not send SIP SUBSCRIBE requests for the "Event" header
* value of "presence".
*/
public static final int MESSAGE_FAILURE_REASON_INVALID_HEADER_FIELDS = 4;