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 */ 16package com.android.voicemail.impl.sms; 17 18import android.os.Bundle; 19import com.android.voicemail.impl.NeededForTesting; 20import com.android.voicemail.impl.OmtpConstants; 21import com.android.voicemail.impl.VisualVoicemailPreferences; 22import 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 */ 30public 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 mProvisioningStatus; 36 private final String mStatusReturnCode; 37 private final String mSubscriptionUrl; 38 private final String mServerAddress; 39 private final String mTuiAccessNumber; 40 private final String mClientSmsDestinationNumber; 41 private final String mImapPort; 42 private final String mImapUserName; 43 private final String mImapPassword; 44 private final String mSmtpPort; 45 private final String mSmtpUserName; 46 private final String mSmtpPassword; 47 private final String mTuiPasswordLength; 48 49 @Override 50 public String toString() { 51 return "StatusMessage [mProvisioningStatus=" 52 + mProvisioningStatus 53 + ", mStatusReturnCode=" 54 + mStatusReturnCode 55 + ", mSubscriptionUrl=" 56 + mSubscriptionUrl 57 + ", mServerAddress=" 58 + mServerAddress 59 + ", mTuiAccessNumber=" 60 + mTuiAccessNumber 61 + ", mClientSmsDestinationNumber=" 62 + mClientSmsDestinationNumber 63 + ", mImapPort=" 64 + mImapPort 65 + ", mImapUserName=" 66 + mImapUserName 67 + ", mImapPassword=" 68 + VvmLog.pii(mImapPassword) 69 + ", mSmtpPort=" 70 + mSmtpPort 71 + ", mSmtpUserName=" 72 + mSmtpUserName 73 + ", mSmtpPassword=" 74 + VvmLog.pii(mSmtpPassword) 75 + ", mTuiPasswordLength=" 76 + mTuiPasswordLength 77 + "]"; 78 } 79 80 public StatusMessage(Bundle wrappedData) { 81 mProvisioningStatus = unquote(getString(wrappedData, OmtpConstants.PROVISIONING_STATUS)); 82 mStatusReturnCode = getString(wrappedData, OmtpConstants.RETURN_CODE); 83 mSubscriptionUrl = getString(wrappedData, OmtpConstants.SUBSCRIPTION_URL); 84 mServerAddress = getString(wrappedData, OmtpConstants.SERVER_ADDRESS); 85 mTuiAccessNumber = getString(wrappedData, OmtpConstants.TUI_ACCESS_NUMBER); 86 mClientSmsDestinationNumber = 87 getString(wrappedData, OmtpConstants.CLIENT_SMS_DESTINATION_NUMBER); 88 mImapPort = getString(wrappedData, OmtpConstants.IMAP_PORT); 89 mImapUserName = getString(wrappedData, OmtpConstants.IMAP_USER_NAME); 90 mImapPassword = getString(wrappedData, OmtpConstants.IMAP_PASSWORD); 91 mSmtpPort = getString(wrappedData, OmtpConstants.SMTP_PORT); 92 mSmtpUserName = getString(wrappedData, OmtpConstants.SMTP_USER_NAME); 93 mSmtpPassword = getString(wrappedData, OmtpConstants.SMTP_PASSWORD); 94 mTuiPasswordLength = 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 mProvisioningStatus; 110 } 111 112 /** @return the return-code of the status SMS. */ 113 public String getReturnCode() { 114 return mStatusReturnCode; 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 mSubscriptionUrl; 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 mServerAddress; 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 mTuiAccessNumber; 139 } 140 141 /** @return the number to which client originated SMSes should be sent to. */ 142 @NeededForTesting 143 public String getClientSmsDestinationNumber() { 144 return mClientSmsDestinationNumber; 145 } 146 147 /** @return the IMAP server port to talk to. */ 148 public String getImapPort() { 149 return mImapPort; 150 } 151 152 /** @return the IMAP user name to be used for authentication. */ 153 public String getImapUserName() { 154 return mImapUserName; 155 } 156 157 /** @return the IMAP password to be used for authentication. */ 158 public String getImapPassword() { 159 return mImapPassword; 160 } 161 162 /** @return the SMTP server port to talk to. */ 163 @NeededForTesting 164 public String getSmtpPort() { 165 return mSmtpPort; 166 } 167 168 /** @return the SMTP user name to be used for SMTP authentication. */ 169 @NeededForTesting 170 public String getSmtpUserName() { 171 return mSmtpUserName; 172 } 173 174 /** @return the SMTP password to be used for SMTP authentication. */ 175 @NeededForTesting 176 public String getSmtpPassword() { 177 return mSmtpPassword; 178 } 179 180 public String getTuiPasswordLength() { 181 return mTuiPasswordLength; 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