Home | History | Annotate | Download | only in sms
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 package com.android.voicemail.impl.sms;
     17 
     18 import android.os.Bundle;
     19 import com.android.voicemail.impl.NeededForTesting;
     20 import com.android.voicemail.impl.OmtpConstants;
     21 import com.android.voicemail.impl.VisualVoicemailPreferences;
     22 import com.android.voicemail.impl.VvmLog;
     23 
     24 /**
     25  * Structured data representation of OMTP STATUS message.
     26  *
     27  * <p>The getters will return null if the field was not set in the message body or it could not be
     28  * parsed.
     29  */
     30 public class StatusMessage {
     31   // NOTE: Following Status SMS fields are not yet parsed, as they do not seem
     32   // to be useful for initial omtp source implementation.
     33   // lang, g_len, vs_len, pw_len, pm, gm, vtc, vt
     34 
     35   private final String provisioningStatus;
     36   private final String statusReturnCode;
     37   private final String subscriptionUrl;
     38   private final String serverAddress;
     39   private final String tuiAccessNumber;
     40   private final String clientSmsDestinationNumber;
     41   private final String imapPort;
     42   private final String imapUserName;
     43   private final String imapPassword;
     44   private final String smtpPort;
     45   private final String smtpUserName;
     46   private final String smtpPassword;
     47   private final String tuiPasswordLength;
     48 
     49   @Override
     50   public String toString() {
     51     return "StatusMessage [mProvisioningStatus="
     52         + provisioningStatus
     53         + ", mStatusReturnCode="
     54         + statusReturnCode
     55         + ", mSubscriptionUrl="
     56         + subscriptionUrl
     57         + ", mServerAddress="
     58         + serverAddress
     59         + ", mTuiAccessNumber="
     60         + tuiAccessNumber
     61         + ", mClientSmsDestinationNumber="
     62         + clientSmsDestinationNumber
     63         + ", mImapPort="
     64         + imapPort
     65         + ", mImapUserName="
     66         + imapUserName
     67         + ", mImapPassword="
     68         + VvmLog.pii(imapPassword)
     69         + ", mSmtpPort="
     70         + smtpPort
     71         + ", mSmtpUserName="
     72         + smtpUserName
     73         + ", mSmtpPassword="
     74         + VvmLog.pii(smtpPassword)
     75         + ", mTuiPasswordLength="
     76         + tuiPasswordLength
     77         + "]";
     78   }
     79 
     80   public StatusMessage(Bundle wrappedData) {
     81     provisioningStatus = unquote(getString(wrappedData, OmtpConstants.PROVISIONING_STATUS));
     82     statusReturnCode = getString(wrappedData, OmtpConstants.RETURN_CODE);
     83     subscriptionUrl = getString(wrappedData, OmtpConstants.SUBSCRIPTION_URL);
     84     serverAddress = getString(wrappedData, OmtpConstants.SERVER_ADDRESS);
     85     tuiAccessNumber = getString(wrappedData, OmtpConstants.TUI_ACCESS_NUMBER);
     86     clientSmsDestinationNumber =
     87         getString(wrappedData, OmtpConstants.CLIENT_SMS_DESTINATION_NUMBER);
     88     imapPort = getString(wrappedData, OmtpConstants.IMAP_PORT);
     89     imapUserName = getString(wrappedData, OmtpConstants.IMAP_USER_NAME);
     90     imapPassword = getString(wrappedData, OmtpConstants.IMAP_PASSWORD);
     91     smtpPort = getString(wrappedData, OmtpConstants.SMTP_PORT);
     92     smtpUserName = getString(wrappedData, OmtpConstants.SMTP_USER_NAME);
     93     smtpPassword = getString(wrappedData, OmtpConstants.SMTP_PASSWORD);
     94     tuiPasswordLength = getString(wrappedData, OmtpConstants.TUI_PASSWORD_LENGTH);
     95   }
     96 
     97   private static String unquote(String string) {
     98     if (string.length() < 2) {
     99       return string;
    100     }
    101     if (string.startsWith("\"") && string.endsWith("\"")) {
    102       return string.substring(1, string.length() - 1);
    103     }
    104     return string;
    105   }
    106 
    107   /** @return the subscriber's VVM provisioning status. */
    108   public String getProvisioningStatus() {
    109     return provisioningStatus;
    110   }
    111 
    112   /** @return the return-code of the status SMS. */
    113   public String getReturnCode() {
    114     return statusReturnCode;
    115   }
    116 
    117   /**
    118    * @return the URL of the voicemail server. This is the URL to send the users to for subscribing
    119    *     to the visual voicemail service.
    120    */
    121   @NeededForTesting
    122   public String getSubscriptionUrl() {
    123     return subscriptionUrl;
    124   }
    125 
    126   /**
    127    * @return the voicemail server address. Either server IP address or fully qualified domain name.
    128    */
    129   public String getServerAddress() {
    130     return serverAddress;
    131   }
    132 
    133   /**
    134    * @return the Telephony User Interface number to call to access voicemails directly from the IVR.
    135    */
    136   @NeededForTesting
    137   public String getTuiAccessNumber() {
    138     return tuiAccessNumber;
    139   }
    140 
    141   /** @return the number to which client originated SMSes should be sent to. */
    142   @NeededForTesting
    143   public String getClientSmsDestinationNumber() {
    144     return clientSmsDestinationNumber;
    145   }
    146 
    147   /** @return the IMAP server port to talk to. */
    148   public String getImapPort() {
    149     return imapPort;
    150   }
    151 
    152   /** @return the IMAP user name to be used for authentication. */
    153   public String getImapUserName() {
    154     return imapUserName;
    155   }
    156 
    157   /** @return the IMAP password to be used for authentication. */
    158   public String getImapPassword() {
    159     return imapPassword;
    160   }
    161 
    162   /** @return the SMTP server port to talk to. */
    163   @NeededForTesting
    164   public String getSmtpPort() {
    165     return smtpPort;
    166   }
    167 
    168   /** @return the SMTP user name to be used for SMTP authentication. */
    169   @NeededForTesting
    170   public String getSmtpUserName() {
    171     return smtpUserName;
    172   }
    173 
    174   /** @return the SMTP password to be used for SMTP authentication. */
    175   @NeededForTesting
    176   public String getSmtpPassword() {
    177     return smtpPassword;
    178   }
    179 
    180   public String getTuiPasswordLength() {
    181     return tuiPasswordLength;
    182   }
    183 
    184   private static String getString(Bundle bundle, String key) {
    185     String value = bundle.getString(key);
    186     if (value == null) {
    187       return "";
    188     }
    189     return value;
    190   }
    191 
    192   /** Saves a StatusMessage to the {@link VisualVoicemailPreferences}. Not all fields are saved. */
    193   public VisualVoicemailPreferences.Editor putStatus(VisualVoicemailPreferences.Editor editor) {
    194     return editor
    195         .putString(OmtpConstants.IMAP_PORT, getImapPort())
    196         .putString(OmtpConstants.SERVER_ADDRESS, getServerAddress())
    197         .putString(OmtpConstants.IMAP_USER_NAME, getImapUserName())
    198         .putString(OmtpConstants.IMAP_PASSWORD, getImapPassword())
    199         .putString(OmtpConstants.TUI_PASSWORD_LENGTH, getTuiPasswordLength());
    200   }
    201 }
    202