1b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// Copyright (C) 2012 The Libphonenumber Authors
2b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com//
3b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// Licensed under the Apache License, Version 2.0 (the "License");
4b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// you may not use this file except in compliance with the License.
5b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// You may obtain a copy of the License at
6b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com//
7b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// http://www.apache.org/licenses/LICENSE-2.0
8b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com//
9b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// Unless required by applicable law or agreed to in writing, software
10b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// distributed under the License is distributed on an "AS IS" BASIS,
11b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// See the License for the specific language governing permissions and
13b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// limitations under the License.
14b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
15b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// Utility for international short phone numbers, such as short codes and
16b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// emergency numbers. Note most commercial short numbers are not handled here,
17b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com// but by the phonenumberutil.
18b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
19b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com#ifndef I18N_PHONENUMBERS_SHORTNUMBERINFO_H_
20b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com#define I18N_PHONENUMBERS_SHORTNUMBERINFO_H_
21b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
22b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com#include <map>
23b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com#include <string>
24b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
25b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com#include "phonenumbers/base/basictypes.h"
26b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com#include "phonenumbers/base/memory/scoped_ptr.h"
27b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com#include "phonenumbers/phonemetadata.pb.h"
28b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
29b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.comnamespace i18n {
30b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.comnamespace phonenumbers {
31b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
32b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.comusing std::map;
33b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.comusing std::string;
34b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
35b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.comclass PhoneNumberUtil;
36b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
37b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.comclass ShortNumberInfo {
38b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com public:
39b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  ShortNumberInfo();
40b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
41b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // Returns true if the number might be used to connect to an emergency service
42b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // in the given region.
43b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  //
44b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // This method takes into account cases where the number might contain
45b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // formatting, or might have additional digits appended (when it is okay to do
46b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // that in the region specified).
47b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  bool ConnectsToEmergencyNumber(const string& number,
48b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com                                 const string& region_code) const;
49b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
50b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // Returns true if the number exactly matches an emergency service number in
51b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // the given region.
52b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  //
53b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // This method takes into account cases where the number might contain
54b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // formatting, but doesn't allow additional digits to be appended.
55b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  bool IsEmergencyNumber(const string& number,
56b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com                         const string& region_code) const;
57b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
58b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com private:
59b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  const PhoneNumberUtil& phone_util_;
60b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
61b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  // A mapping from a RegionCode to the PhoneMetadata for that region.
62b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  scoped_ptr<map<string, PhoneMetadata> >
63b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com      region_to_short_metadata_map_;
64b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
65b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  const i18n::phonenumbers::PhoneMetadata* GetMetadataForRegion(
66b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com      const string& region_code) const;
67b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
68b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  bool MatchesEmergencyNumberHelper(const string& number,
69b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com                                    const string& region_code,
70b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com                                    bool allow_prefix_match) const;
71b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
72b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com  DISALLOW_COPY_AND_ASSIGN(ShortNumberInfo);
73b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com};
74b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
75b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com}  // namespace phonenumbers
76b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com}  // namespace i18n
77b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com
78b3bfbbcb458043ddaaa1099b776014ba0968704dlararennie@google.com#endif  // I18N_PHONENUMBERS_SHORTNUMBERINFO_H_
79