1 //
2 // Copyright (C) 2022 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 #pragma once
17 
18 #include <string>
19 
20 namespace cuttlefish {
21 
22 // Builds PDU format strings used to send SMS to Cuttlefish modem simulator.
23 //
24 // PDU format is specified by the Etsi organization in GSM 03.40
25 // https://www.etsi.org/deliver/etsi_gts/03/0340/05.03.00_60/gsmts_0340v050300p.pdf
26 //
27 // The resulting PDU format string encapsulates different parameters
28 // values like:
29 // * The phone number.
30 // * Data coding scheme. 7 bit Alphabet or 8 bit (used in e.g. smart
31 // messaging, OTA provisioning etc)
32 // * User data.
33 //
34 // NOTE: For sender phone number, only international numbers following the
35 // E.164 format (https://www.itu.int/rec/T-REC-E.164) are supported.
36 //
37 // NOTE: The coding scheme is not parameterized yet using always the 7bit
38 // Alphabet coding scheme.
39 class PDUFormatBuilder {
40  public:
41   void SetUserData(const std::string& user_data);
42   void SetSenderNumber(const std::string& number);
43   // Returns the corresponding PDU format string, returns an empty string if
44   // the User Data or the Sender Number set are invalid.
45   std::string Build();
46 
47  private:
48   std::string user_data_;
49   std::string sender_number_;
50 };
51 
52 }  // namespace cuttlefish
53