|
1 /*! |
|
2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Provides services to parse CTI URIs. |
|
15 * |
|
16 */ |
|
17 |
|
18 #include <QRegExp> |
|
19 #include "ctiurischemeparser.h" |
|
20 #include "qtphonelog.h" |
|
21 |
|
22 const QString KCtiUriSchemePrefix = "cti:"; |
|
23 const QString KVisualSeparators("-.() "); |
|
24 const QString KCtiPauseChar = ","; |
|
25 const QString KCtiWaitChar = "/"; |
|
26 const QString KDtmfPauseChar = "p"; |
|
27 const QString KDtmfWaitChar = "w"; |
|
28 |
|
29 /*! |
|
30 CtiUriSchemeParser::CtiUriSchemeParser. |
|
31 */ |
|
32 CtiUriSchemeParser::CtiUriSchemeParser(QObject* parent) |
|
33 : |
|
34 UriSchemeParser(parent) |
|
35 { |
|
36 PHONE_DEBUG("CtiUriSchemeParser::CtiUriSchemeParser"); |
|
37 } |
|
38 |
|
39 |
|
40 /*! |
|
41 CtiUriSchemeParser::~CtiUriSchemeParser. |
|
42 */ |
|
43 CtiUriSchemeParser::~CtiUriSchemeParser() |
|
44 { |
|
45 PHONE_DEBUG("CtiUriSchemeParser::~CtiUriSchemeParser"); |
|
46 } |
|
47 |
|
48 |
|
49 /*! |
|
50 CtiUriSchemeParser::isSupportedUriScheme. |
|
51 */ |
|
52 bool CtiUriSchemeParser::isSupportedUriScheme(const QString &uri) const |
|
53 { |
|
54 PHONE_DEBUG("CtiUriSchemeParser::isSupportedUriScheme"); |
|
55 |
|
56 QRegExp expression(QString("^") + KCtiUriSchemePrefix); |
|
57 return uri.contains(expression); |
|
58 } |
|
59 |
|
60 |
|
61 /*! |
|
62 CtiUriSchemeParser::parseUri. |
|
63 */ |
|
64 bool CtiUriSchemeParser::parseUri( |
|
65 const QString &uri, |
|
66 QString &phoneNumber, |
|
67 QString &dtmfString) const |
|
68 { |
|
69 PHONE_DEBUG("CtiUriSchemeParser::parseUri"); |
|
70 |
|
71 QString dialString = ""; |
|
72 |
|
73 if (validateUri(uri)) { |
|
74 dialString = uri.mid(KCtiUriSchemePrefix.length()); |
|
75 |
|
76 removeVisualSeparators(dialString); |
|
77 convertToneInputToPostDialDtmfString(dialString); |
|
78 } |
|
79 |
|
80 return UriSchemeParser::parsePhoneDialString( |
|
81 dialString, phoneNumber, dtmfString); |
|
82 } |
|
83 |
|
84 |
|
85 /*! |
|
86 CtiUriSchemeParser::validateUri. |
|
87 Validity rules: |
|
88 1. Uri must start with "cti:" |
|
89 2. + -sign may occur only at the beginning of the URI. |
|
90 3. Uri cannot contain tone input only or start with tone input. |
|
91 4. Uri length must be at least 1. |
|
92 5. Uri must contain only valid characters. |
|
93 5.1. Phone number part cannot contain tone input characters. |
|
94 6. Uri cannot contain multiple wait characters in succession. |
|
95 */ |
|
96 bool CtiUriSchemeParser::validateUri(const QString &uri) const |
|
97 { |
|
98 PHONE_DEBUG("CtiUriSchemeParser::validateUri"); |
|
99 |
|
100 bool isValid = false; |
|
101 |
|
102 QRegExp expression( |
|
103 "^cti:\\+?[\\d-\\.\\(\\) ]{1,}([,/][\\d*#,/-\\.\\(\\) ]*)?$"); |
|
104 isValid = uri.contains(expression); |
|
105 if (isValid) { |
|
106 QRegExp validateMultipleWaitExp("//+"); |
|
107 isValid = !uri.contains(validateMultipleWaitExp); |
|
108 } |
|
109 |
|
110 return isValid; |
|
111 } |
|
112 |
|
113 |
|
114 /*! |
|
115 CtiUriSchemeParser::removeVisualSeparators. |
|
116 */ |
|
117 void CtiUriSchemeParser::removeVisualSeparators(QString &uri) const |
|
118 { |
|
119 PHONE_DEBUG("CtiUriSchemeParser::removeVisualSeparators"); |
|
120 |
|
121 QRegExp visualSeparatorExp("[" + QRegExp::escape(KVisualSeparators) + "]"); |
|
122 uri.remove(visualSeparatorExp); |
|
123 } |
|
124 |
|
125 |
|
126 /*! |
|
127 CtiUriSchemeParser::convertToneInputToPostDialDtmfString. |
|
128 */ |
|
129 void CtiUriSchemeParser::convertToneInputToPostDialDtmfString( |
|
130 QString &uri) const |
|
131 { |
|
132 PHONE_DEBUG("CtiUriSchemeParser::convertToneInputToPostDialDtmfString"); |
|
133 |
|
134 uri.replace(KCtiWaitChar, KDtmfWaitChar); |
|
135 uri.replace(KCtiPauseChar, KDtmfPauseChar); |
|
136 } |