phoneengine/phoneservices/src/ctiurischemeparser.cpp
changeset 46 bc5a64e5bc3c
equal deleted inserted replaced
45:6b911d05207e 46:bc5a64e5bc3c
       
     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 }