Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b81ca0dc authored by Brad Ebinger's avatar Brad Ebinger Committed by Automerger Merge Worker
Browse files

Merge "Parse params needed for SipDelegate routing" am: 9a13fb1d

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1616689

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I3d5ceb7b6d830e684d3b159e6f50bc8b41b70728
parents 853862f7 9a13fb1d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -11819,10 +11819,12 @@ package android.telephony.ims {
  public final class SipMessage implements android.os.Parcelable {
    ctor public SipMessage(@NonNull String, @NonNull String, @NonNull byte[]);
    method public int describeContents();
    method @Nullable public String getCallIdParameter();
    method @NonNull public byte[] getContent();
    method @NonNull public byte[] getEncodedMessage();
    method @NonNull public String getHeaderSection();
    method @NonNull public String getStartLine();
    method @Nullable public String getViaBranchParameter();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.SipMessage> CREATOR;
  }
+16 −0
Original line number Diff line number Diff line
@@ -65,6 +65,11 @@ public class SipMessageParsingUtils {
    // compact form of the via header key
    private static final String VIA_SIP_HEADER_KEY_COMPACT = "v";

    // call-id header key
    private static final String CALL_ID_SIP_HEADER_KEY = "call-id";
    // compact form of the call-id header key
    private static final String CALL_ID_SIP_HEADER_KEY_COMPACT = "i";

    /**
     * @return true if the SIP message start line is considered a request (based on known request
     * methods).
@@ -124,6 +129,17 @@ public class SipMessageParsingUtils {
        return null;
    }

    /**
     * Return the call-id header key's associated value.
     * @param headerString The string containing the headers of the SIP message.
     */
    public static String getCallId(String headerString) {
        // search for the call-Id header, there should only be one in the header.
        List<Pair<String, String>> headers = parseHeaders(headerString, true,
                CALL_ID_SIP_HEADER_KEY, CALL_ID_SIP_HEADER_KEY_COMPACT);
        return !headers.isEmpty() ? headers.get(0).second : null;
    }

    private static String[] splitStartLineAndVerify(String startLine) {
        String[] splitLine = startLine.split(" ");
        if (isStartLineMalformed(splitLine)) return null;
+29 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.telephony.ims;
import static java.nio.charset.StandardCharsets.UTF_8;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Build;
import android.os.Parcel;
@@ -46,6 +47,8 @@ public final class SipMessage implements Parcelable {
    private final String mStartLine;
    private final String mHeaderSection;
    private final byte[] mContent;
    private final String mViaBranchParam;
    private final String mCallIdParam;

    /**
     * Represents a partially encoded SIP message.
@@ -63,6 +66,9 @@ public final class SipMessage implements Parcelable {
        mStartLine = startLine;
        mHeaderSection = headerSection;
        mContent = content;

        mViaBranchParam = SipMessageParsingUtils.getTransactionId(mHeaderSection);
        mCallIdParam = SipMessageParsingUtils.getCallId(mHeaderSection);
    }

    /**
@@ -73,6 +79,8 @@ public final class SipMessage implements Parcelable {
        mHeaderSection = source.readString();
        mContent = new byte[source.readInt()];
        source.readByteArray(mContent);
        mViaBranchParam = source.readString();
        mCallIdParam = source.readString();
    }

    /**
@@ -97,6 +105,25 @@ public final class SipMessage implements Parcelable {
        return mContent;
    }

    /**
     * @return the branch parameter enclosed in the Via header key's value. See RFC 3261 section
     * 20.42 for more information on the Via header. If {@code null}, then there was either no
     * Via parameter found in this SIP message's headers or no branch parameter found in the
     * Via header.
     */
    public @Nullable String getViaBranchParameter() {
        return mViaBranchParam;
    }

    /**
     * @return the value associated with the call-id header of this SIP message. See RFC 3261
     * section 20.8 for more information on the call-id header. If {@code null}, then there was no
     * call-id header found in this SIP message's headers.
     */
    public @Nullable String getCallIdParameter() {
        return mCallIdParam;
    }

    @Override
    public int describeContents() {
        return 0;
@@ -108,6 +135,8 @@ public final class SipMessage implements Parcelable {
        dest.writeString(mHeaderSection);
        dest.writeInt(mContent.length);
        dest.writeByteArray(mContent);
        dest.writeString(mViaBranchParam);
        dest.writeString(mCallIdParam);
    }

    public static final @NonNull Creator<SipMessage> CREATOR = new Creator<SipMessage>() {
+1 −3
Original line number Diff line number Diff line
@@ -31,8 +31,6 @@ import android.telephony.ims.stub.SipDelegate;
import android.text.TextUtils;
import android.util.Log;

import com.android.internal.telephony.SipMessageParsingUtils;

import java.util.ArrayList;
import java.util.Set;
import java.util.concurrent.Executor;
@@ -188,7 +186,7 @@ public class SipDelegateAidlWrapper implements DelegateStateCallback, DelegateMe
    }

    private void notifyLocalMessageFailedToBeReceived(SipMessage m, int reason) {
        String transactionId = SipMessageParsingUtils.getTransactionId(m.getHeaderSection());
        String transactionId = m.getViaBranchParameter();
        if (TextUtils.isEmpty(transactionId)) {
            Log.w(LOG_TAG, "failure to parse SipMessage.");
            throw new IllegalArgumentException("Malformed SipMessage, can not determine "
+1 −3
Original line number Diff line number Diff line
@@ -32,8 +32,6 @@ import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;

import com.android.internal.telephony.SipMessageParsingUtils;

import java.util.List;
import java.util.NoSuchElementException;
import java.util.concurrent.Executor;
@@ -268,7 +266,7 @@ public class SipDelegateConnectionAidlWrapper implements SipDelegateConnection,
    }

    private void notifyLocalMessageFailedToSend(SipMessage m, int reason) {
        String transactionId = SipMessageParsingUtils.getTransactionId(m.getHeaderSection());
        String transactionId = m.getViaBranchParameter();
        if (TextUtils.isEmpty(transactionId)) {
            Log.w(LOG_TAG, "sendMessage detected a malformed SipMessage and can not get a "
                    + "transaction ID.");