/* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.telephony.ims.stub; import android.annotation.NonNull; import android.annotation.SystemApi; import android.telephony.ims.DelegateMessageCallback; import android.telephony.ims.DelegateRegistrationState; import android.telephony.ims.ImsService; import android.telephony.ims.SipDelegateConfiguration; import android.telephony.ims.SipDelegateConnection; import android.telephony.ims.SipDelegateManager; import android.telephony.ims.SipMessage; /** * The {@link SipDelegate} is implemented by the {@link ImsService} and allows a privileged * IMS application to use this delegate to send SIP messages as well as acknowledge the receipt of * incoming SIP messages delivered to the application over the existing IMS registration, allowing * for a single IMS registration for multiple IMS applications. *
* Once the SIP delegate is created for that application, * {@link ImsRegistrationImplBase#updateSipDelegateRegistration()} will be called, indicating that * the application is finished setting up SipDelegates and the existing IMS registration may be * modified to include the features managed by these SipDelegates. *
* This SipDelegate will need to notify the remote application of the registration of these features * as well as the associated {@link SipDelegateConfiguration} before the application can start * sending/receiving SIP messages via the transport. See * {@link android.telephony.ims.DelegateStateCallback} for more information. * @hide */ @SystemApi public interface SipDelegate { /** * The framework calls this method when a remote RCS application wishes to send a new outgoing * SIP message. *
* Once sent, this SIP delegate should notify the remote application of the success or * failure using {@link DelegateMessageCallback#onMessageSent(String)} or * {@link DelegateMessageCallback#onMessageSendFailure(String, int)}. * @param message The SIP message to be sent over the operator’s network. * @param configVersion The SipDelegateImsConfiguration version used to construct the * SipMessage. See {@link SipDelegateConfiguration} for more information. If the * version specified here does not match the most recently constructed * {@link SipDelegateConfiguration}, this message should fail validation checks and * {@link DelegateMessageCallback#onMessageSendFailure} should be called with code * {@link SipDelegateManager#MESSAGE_FAILURE_REASON_STALE_IMS_CONFIGURATION}. */ void sendMessage(@NonNull SipMessage message, long configVersion); /** * The remote IMS application has closed a SIP session and the routing resources associated * with the SIP session using the provided Call-ID may now be cleaned up. *
* Typically, a SIP session will be considered closed when all associated dialogs receive a * BYE request. After the session has been closed, the IMS application will call * {@link SipDelegateConnection#cleanupSession(String)} to signal to the framework that * resources can be released. In some cases, the framework will request that the ImsService * close the session due to the open SIP session holding up an event such as applying a * provisioning change or handing over to another transport type. See * {@link DelegateRegistrationState}. * * @param callId The call-ID header value associated with the ongoing SIP Session that the * framework is requesting be cleaned up. */ void cleanupSession(@NonNull String callId); /** * The remote application has received the SIP message and is processing it. * @param viaTransactionId The Transaction ID found in the via header field of the * previously sent {@link SipMessage}. */ void notifyMessageReceived(@NonNull String viaTransactionId); /** * The remote application has either not received the SIP message or there was an error * processing it. * @param viaTransactionId The Transaction ID found in the via header field of the * previously sent {@link SipMessage}. * @param reason The reason why the message was not correctly received. */ void notifyMessageReceiveError(@NonNull String viaTransactionId, @SipDelegateManager.MessageFailureReason int reason); }