172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/*
272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2007-2008 Esmertec AG.
372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project
472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License.
772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at
872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and
1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License.
1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.transaction;
1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
2072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.os.Bundle;
2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
22798098f7dcc1b7f1fbed1727f1e9ee9a9902f24aAlex Yakavenkaimport com.android.internal.telephony.uicc.IccUtils;
23d6f77b1faf5a6a230026815e8b63d50f71c2361fFrederic Predon
2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/**
2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * A wrapper around the Bundle instances used to start the TransactionService.
2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * It provides high-level APIs to set the information required for the latter to
2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * instantiate transactions.
2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class TransactionBundle {
3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Key for the transaction-type.
3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Allowed values for this key are: TYPE_PUSH_TRANSACTION, TYPE_RETRIEVE_TRANSACTION,
3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * TYPE_SEND_TRANSACTION, and TYPE_READREC_TRANSACTION.
3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String TRANSACTION_TYPE = "type";
3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Key of the push-data.
3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Used when TRANSACTION_TYPE is TYPE_PUSH_TRANSACTION.
4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String PUSH_DATA = "mms-push-data";
4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Key of the MMSC server URL.
4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String MMSC_URL = "mmsc-url";
4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Key of the HTTP Proxy address.
5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String PROXY_ADDRESS = "proxy-address";
5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Key of the HTTP Proxy port.
5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String PROXY_PORT = "proxy-port";
5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Key of the URI.
6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Indicates the URL of the M-Retrieve.conf in TYPE_RETRIEVE_TRANSACTION, or the
6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Uri of the M-Send.req/M-Read-Rec.ind in TYPE_SEND_TRANSACTION and
6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * TYPE_READREC_TRANSACTION, respectively.
6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public static final String URI = "uri";
6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * This is the real Bundle to be sent to the TransactionService upon calling
6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * startService.
6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private final Bundle mBundle;
7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Private constructor.
7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     *
7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * @param transactionType
7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private TransactionBundle(int transactionType) {
7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mBundle = new Bundle();
7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mBundle.putInt(TRANSACTION_TYPE, transactionType);
8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Constructor of a bundle used for TransactionBundle instances of type
8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * TYPE_RETRIEVE_TRANSACTION, TYPE_SEND_TRANSACTION, and TYPE_READREC_TRANSACTION.
8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     *
8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * @param transactionType
8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * @param uri The relevant URI for this transaction. Indicates the URL of the
8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * M-Retrieve.conf in TYPE_RETRIEVE_TRANSACTION, or the Uri of the
8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * M-Send.req/M-Read-Rec.ind in TYPE_SEND_TRANSACTION and
9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * TYPE_READREC_TRANSACTION, respectively.
9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public TransactionBundle(int transactionType, String uri) {
9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        this(transactionType);
9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mBundle.putString(URI, uri);
9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /**
9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Constructor of a transaction bundle used for incoming bundle instances.
9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     *
10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * @param bundle The incoming bundle
10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public TransactionBundle(Bundle bundle) {
10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mBundle = bundle;
10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setConnectionSettings(String mmscUrl,
10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            String proxyAddress,
10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            int proxyPort) {
10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mBundle.putString(MMSC_URL, mmscUrl);
11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mBundle.putString(PROXY_ADDRESS, proxyAddress);
11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mBundle.putInt(PROXY_PORT, proxyPort);
11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setConnectionSettings(TransactionSettings settings) {
11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        setConnectionSettings(
11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                settings.getMmscUrl(),
11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                settings.getProxyAddress(),
11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                settings.getProxyPort());
11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public Bundle getBundle() {
12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mBundle;
12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getTransactionType() {
12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mBundle.getInt(TRANSACTION_TYPE);
12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String getUri() {
13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mBundle.getString(URI);
13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public byte[] getPushData() {
13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mBundle.getByteArray(PUSH_DATA);
13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String getMmscUrl() {
13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mBundle.getString(MMSC_URL);
13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String getProxyAddress() {
14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mBundle.getString(PROXY_ADDRESS);
14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getProxyPort() {
14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return mBundle.getInt(PROXY_PORT);
14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
14836cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor
14936cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor    @Override
15036cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor    public String toString() {
15136cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor        return "transactionType: " + getTransactionType() +
15236cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor            " uri: " + getUri() +
153d6f77b1faf5a6a230026815e8b63d50f71c2361fFrederic Predon            " pushData: " + IccUtils.bytesToHexString(getPushData()) +
15436cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor            " mmscUrl: " + getMmscUrl() +
15536cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor            " proxyAddress: " + getProxyAddress() +
15636cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor            " proxyPort: " + getProxyPort();
15736cb4bcc16e6d395e03d365a066bcad78e9d25c4Tom Taylor    }
15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project}
159