summaryrefslogtreecommitdiff
path: root/java/com/android/voicemail/impl/sms/StatusMessage.java
blob: a5766a61aad8f8068625588d72460b5320eb0d6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
/*
 * Copyright (C) 2015 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 com.android.voicemail.impl.sms;

import android.os.Bundle;
import com.android.voicemail.impl.NeededForTesting;
import com.android.voicemail.impl.OmtpConstants;
import com.android.voicemail.impl.VisualVoicemailPreferences;
import com.android.voicemail.impl.VvmLog;

/**
 * Structured data representation of OMTP STATUS message.
 *
 * <p>The getters will return null if the field was not set in the message body or it could not be
 * parsed.
 */
public class StatusMessage {
  // NOTE: Following Status SMS fields are not yet parsed, as they do not seem
  // to be useful for initial omtp source implementation.
  // lang, g_len, vs_len, pw_len, pm, gm, vtc, vt

  private final String mProvisioningStatus;
  private final String mStatusReturnCode;
  private final String mSubscriptionUrl;
  private final String mServerAddress;
  private final String mTuiAccessNumber;
  private final String mClientSmsDestinationNumber;
  private final String mImapPort;
  private final String mImapUserName;
  private final String mImapPassword;
  private final String mSmtpPort;
  private final String mSmtpUserName;
  private final String mSmtpPassword;
  private final String mTuiPasswordLength;

  @Override
  public String toString() {
    return "StatusMessage [mProvisioningStatus="
        + mProvisioningStatus
        + ", mStatusReturnCode="
        + mStatusReturnCode
        + ", mSubscriptionUrl="
        + mSubscriptionUrl
        + ", mServerAddress="
        + mServerAddress
        + ", mTuiAccessNumber="
        + mTuiAccessNumber
        + ", mClientSmsDestinationNumber="
        + mClientSmsDestinationNumber
        + ", mImapPort="
        + mImapPort
        + ", mImapUserName="
        + mImapUserName
        + ", mImapPassword="
        + VvmLog.pii(mImapPassword)
        + ", mSmtpPort="
        + mSmtpPort
        + ", mSmtpUserName="
        + mSmtpUserName
        + ", mSmtpPassword="
        + VvmLog.pii(mSmtpPassword)
        + ", mTuiPasswordLength="
        + mTuiPasswordLength
        + "]";
  }

  public StatusMessage(Bundle wrappedData) {
    mProvisioningStatus = unquote(getString(wrappedData, OmtpConstants.PROVISIONING_STATUS));
    mStatusReturnCode = getString(wrappedData, OmtpConstants.RETURN_CODE);
    mSubscriptionUrl = getString(wrappedData, OmtpConstants.SUBSCRIPTION_URL);
    mServerAddress = getString(wrappedData, OmtpConstants.SERVER_ADDRESS);
    mTuiAccessNumber = getString(wrappedData, OmtpConstants.TUI_ACCESS_NUMBER);
    mClientSmsDestinationNumber =
        getString(wrappedData, OmtpConstants.CLIENT_SMS_DESTINATION_NUMBER);
    mImapPort = getString(wrappedData, OmtpConstants.IMAP_PORT);
    mImapUserName = getString(wrappedData, OmtpConstants.IMAP_USER_NAME);
    mImapPassword = getString(wrappedData, OmtpConstants.IMAP_PASSWORD);
    mSmtpPort = getString(wrappedData, OmtpConstants.SMTP_PORT);
    mSmtpUserName = getString(wrappedData, OmtpConstants.SMTP_USER_NAME);
    mSmtpPassword = getString(wrappedData, OmtpConstants.SMTP_PASSWORD);
    mTuiPasswordLength = getString(wrappedData, OmtpConstants.TUI_PASSWORD_LENGTH);
  }

  private static String unquote(String string) {
    if (string.length() < 2) {
      return string;
    }
    if (string.startsWith("\"") && string.endsWith("\"")) {
      return string.substring(1, string.length() - 1);
    }
    return string;
  }

  /** @return the subscriber's VVM provisioning status. */
  public String getProvisioningStatus() {
    return mProvisioningStatus;
  }

  /** @return the return-code of the status SMS. */
  public String getReturnCode() {
    return mStatusReturnCode;
  }

  /**
   * @return the URL of the voicemail server. This is the URL to send the users to for subscribing
   *     to the visual voicemail service.
   */
  @NeededForTesting
  public String getSubscriptionUrl() {
    return mSubscriptionUrl;
  }

  /**
   * @return the voicemail server address. Either server IP address or fully qualified domain name.
   */
  public String getServerAddress() {
    return mServerAddress;
  }

  /**
   * @return the Telephony User Interface number to call to access voicemails directly from the IVR.
   */
  @NeededForTesting
  public String getTuiAccessNumber() {
    return mTuiAccessNumber;
  }

  /** @return the number to which client originated SMSes should be sent to. */
  @NeededForTesting
  public String getClientSmsDestinationNumber() {
    return mClientSmsDestinationNumber;
  }

  /** @return the IMAP server port to talk to. */
  public String getImapPort() {
    return mImapPort;
  }

  /** @return the IMAP user name to be used for authentication. */
  public String getImapUserName() {
    return mImapUserName;
  }

  /** @return the IMAP password to be used for authentication. */
  public String getImapPassword() {
    return mImapPassword;
  }

  /** @return the SMTP server port to talk to. */
  @NeededForTesting
  public String getSmtpPort() {
    return mSmtpPort;
  }

  /** @return the SMTP user name to be used for SMTP authentication. */
  @NeededForTesting
  public String getSmtpUserName() {
    return mSmtpUserName;
  }

  /** @return the SMTP password to be used for SMTP authentication. */
  @NeededForTesting
  public String getSmtpPassword() {
    return mSmtpPassword;
  }

  public String getTuiPasswordLength() {
    return mTuiPasswordLength;
  }

  private static String getString(Bundle bundle, String key) {
    String value = bundle.getString(key);
    if (value == null) {
      return "";
    }
    return value;
  }

  /** Saves a StatusMessage to the {@link VisualVoicemailPreferences}. Not all fields are saved. */
  public VisualVoicemailPreferences.Editor putStatus(VisualVoicemailPreferences.Editor editor) {
    return editor
        .putString(OmtpConstants.IMAP_PORT, getImapPort())
        .putString(OmtpConstants.SERVER_ADDRESS, getServerAddress())
        .putString(OmtpConstants.IMAP_USER_NAME, getImapUserName())
        .putString(OmtpConstants.IMAP_PASSWORD, getImapPassword())
        .putString(OmtpConstants.TUI_PASSWORD_LENGTH, getTuiPasswordLength());
  }
}