mmsharing/mmshengine/src/musenguriparser.cpp
branchRCL_3
changeset 22 73a1feb507fb
parent 0 f0cf47e981f9
child 23 bc78a40cd63c
equal deleted inserted replaced
21:33a5d2bbf6fc 22:73a1feb507fb
    20 #include "mussettings.h"
    20 #include "mussettings.h"
    21 #include "muslogger.h"
    21 #include "muslogger.h"
    22 
    22 
    23 #include <uri8.h>
    23 #include <uri8.h>
    24 #include <charconv.h>
    24 #include <charconv.h>
    25 //#include <f32file.h>
       
    26 #include <utf.h>
    25 #include <utf.h>
    27 #include <collate.h>
    26 #include <collate.h>
    28 
    27 
    29      
    28      
    30 // ============================ MEMBER FUNCTIONS ===============================
    29 // ============================ MEMBER FUNCTIONS ===============================
    32 
    31 
    33 // -----------------------------------------------------------------------------
    32 // -----------------------------------------------------------------------------
    34 // UTF7 is not working, since it converts + as +-
    33 // UTF7 is not working, since it converts + as +-
    35 // -----------------------------------------------------------------------------
    34 // -----------------------------------------------------------------------------
    36 //
    35 //
    37 EXPORT_C TMusEngUriParser::TMusEngUriParser( const TDesC16& aUri )
    36 TMusEngUriParser::TMusEngUriParser( const TDesC16& aUri )
    38     :iUriType( ENotParsed )
    37     :iUriType( ENotParsed )
    39     {
    38     {
    40     TBuf8<KMaxUriLength> buf;
    39     TBuf8<KMaxUriLength> buf;
    41 
    40 
    42     if ( CnvUtfConverter::ConvertFromUnicodeToUtf8( buf, aUri ) == 0 )
    41     if ( CnvUtfConverter::ConvertFromUnicodeToUtf8( buf, aUri ) == 0 )
    47         {
    46         {
    48         iUri = KNullDesC8();
    47         iUri = KNullDesC8();
    49         }
    48         }
    50     }
    49     }
    51 
    50 
    52 
    51 // ----------------------------------------------------------------------------- 
    53 // ----------------------------------------------------------------------------- 
    52 //
    54 //
    53 // -----------------------------------------------------------------------------
    55 // -----------------------------------------------------------------------------
    54 //
    56 //
    55 TMusEngUriParser::TMusEngUriType TMusEngUriParser::UriType()
    57 EXPORT_C TMusEngUriParser::TMusEngUriType TMusEngUriParser::UriType()
       
    58     {
    56     {
    59     return iUriType;
    57     return iUriType;
    60     }
    58     }
    61     
    59 
    62 
    60 // ----------------------------------------------------------------------------- 
    63 // ----------------------------------------------------------------------------- 
    61 //
    64 //
    62 // -----------------------------------------------------------------------------
    65 // -----------------------------------------------------------------------------
    63 //
    66 //
    64 HBufC8* TMusEngUriParser::GetUri8L()
    67 EXPORT_C HBufC8* TMusEngUriParser::GetUri8L()
       
    68     {
    65     {
    69     MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::GetUri8L()" )
    66     MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::GetUri8L()" )
    70     
    67     
    71     __ASSERT_ALWAYS( UriType() != TMusEngUriParser::ENotParsed, 
    68     __ASSERT_ALWAYS( UriType() != TMusEngUriParser::ENotParsed, 
    72                      User::Leave( KErrNotReady ) ); 
    69                      User::Leave( KErrNotReady ) ); 
    74     HBufC8* uri8 = iUri.AllocL();
    71     HBufC8* uri8 = iUri.AllocL();
    75     
    72     
    76     MUS_LOG( "mus: [ENGINE]  <- TMusEngUriParser::GetUri8L()" )
    73     MUS_LOG( "mus: [ENGINE]  <- TMusEngUriParser::GetUri8L()" )
    77 
    74 
    78     return uri8;
    75     return uri8;
    79 
    76     }
    80     }
       
    81 
       
    82 
    77 
    83 // -----------------------------------------------------------------------------
    78 // -----------------------------------------------------------------------------
    84 // 
    79 // 
    85 // -----------------------------------------------------------------------------
    80 // -----------------------------------------------------------------------------
    86 //
    81 //
    87 EXPORT_C HBufC16* TMusEngUriParser::GetUri16L( TBool aPrefix )
    82 HBufC16* TMusEngUriParser::GetUri16L( TBool aPrefix )
    88     {
    83     {
    89     MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::GetUri16L()" )
    84     MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::GetUri16L()" )
    90     
    85     
    91     __ASSERT_ALWAYS( UriType() != TMusEngUriParser::ENotParsed, 
    86     __ASSERT_ALWAYS( UriType() != TMusEngUriParser::ENotParsed, 
    92                      User::Leave( KErrNotReady ) ); 
    87                      User::Leave( KErrNotReady ) ); 
   104         }
    99         }
   105     
   100     
   106     MUS_LOG( "mus: [ENGINE]  <- TMusEngUriParser::GetUri16L()" )
   101     MUS_LOG( "mus: [ENGINE]  <- TMusEngUriParser::GetUri16L()" )
   107     
   102     
   108     return uri16;
   103     return uri16;
   109    
   104     }
   110     }
   105 
   111 
   106 // ----------------------------------------------------------------------------- 
   112 
   107 //
   113 // -----------------------------------------------------------------------------
   108 // -----------------------------------------------------------------------------
   114 // 
   109 //
   115 //
   110 void TMusEngUriParser::ParseUriL()
   116 // -----------------------------------------------------------------------------
       
   117 //
       
   118 EXPORT_C void TMusEngUriParser::ParseUriL()
       
   119     {
   111     {
   120     MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::ParseUriL()" )
   112     MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::ParseUriL()" )
   121     
   113     
   122     if ( iUri.Find( KMusEngAtSign ) >= 0 ) // Sip uri
   114     if ( iUri.Find( KMusEngAtSign ) >= 0 ) // Sip uri
   123         {
   115         {
   133         if ( MultimediaSharingSettings::OperatorVariantSettingL()
   125         if ( MultimediaSharingSettings::OperatorVariantSettingL()
   134                 != MusSettingsKeys::EOperatorSpecific )
   126                 != MusSettingsKeys::EOperatorSpecific )
   135             {// basic behaviour
   127             {// basic behaviour
   136             MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::ParseUriL() \
   128             MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::ParseUriL() \
   137                     normal behaviour" )
   129                     normal behaviour" )
   138             User::Leave( KErrCorrupt );
   130             User::Leave( KErrArgument );        
   139             }
   131             }
   140         else
   132         else
   141             { // variant behaviour(local tel uri)
   133             { // variant behaviour(local tel uri)
   142             HandleLocalTelUriL();
   134             HandleLocalTelUriL();
   143             }
   135             }
   144         }
   136         }
   145     }
   137     }
   146 
   138 
   147 
   139 // -----------------------------------------------------------------------------
   148 // -----------------------------------------------------------------------------
       
   149 // 
       
   150 //
   140 //
   151 // -----------------------------------------------------------------------------
   141 // -----------------------------------------------------------------------------
   152 //
   142 //
   153 void TMusEngUriParser::HandleSipUriL()
   143 void TMusEngUriParser::HandleSipUriL()
   154     {
   144     {
   187 
   177 
   188     User::LeaveIfError( parser.Validate() );
   178     User::LeaveIfError( parser.Validate() );
   189     
   179     
   190     iUriType = TMusEngUriParser::ESip;
   180     iUriType = TMusEngUriParser::ESip;
   191     }
   181     }
   192     
       
   193    
   182    
   194    
   183 // ----------------------------------------------------------------------------- 
   195    
       
   196 // -----------------------------------------------------------------------------
       
   197 // 
       
   198 //
   184 //
   199 // -----------------------------------------------------------------------------
   185 // -----------------------------------------------------------------------------
   200 //
   186 //
   201 void TMusEngUriParser::HandleTelUriL()
   187 void TMusEngUriParser::HandleTelUriL()
   202     {
   188     {
   203     // Remove leading and trailing whitespaces
       
   204     iUri.TrimAll();
   189     iUri.TrimAll();
   205     if ( iUri.FindF( KMusEngTelPrefix() ) != 0 )
   190     if ( iUri.FindF( KMusEngTelPrefix() ) != 0 )
   206         {
   191         {
   207         // Tel uri without prefix
   192         // Tel uri without prefix
   208         if ( iUri.Length() + KMusEngTelPrefix().Length() <=
   193         if ( iUri.Length() + KMusEngTelPrefix().Length() <=
   221         iUri.Replace( 0, KMusEngTelPrefix().Length(), KMusEngTelPrefix() );
   206         iUri.Replace( 0, KMusEngTelPrefix().Length(), KMusEngTelPrefix() );
   222         }
   207         }
   223 
   208 
   224     TInt index = KMusEngTelPrefix().Length() + KMusEngPlusSign().Length();
   209     TInt index = KMusEngTelPrefix().Length() + KMusEngPlusSign().Length();
   225 
   210 
   226     // Remove whitespaces and extra chracters like parentheses. Check that the
       
   227     // rest characters are digits
       
   228     while ( index < iUri.Length() )
   211     while ( index < iUri.Length() )
   229         {
   212         {
   230         TChar character = iUri[ index ];
   213         TChar character = iUri[ index ];
   231         if ( character.IsAlpha() )
   214         if ( character.IsAlpha() )
   232             {
   215             {
   243         }
   226         }
   244 
   227 
   245     iUriType = TMusEngUriParser::ETel;
   228     iUriType = TMusEngUriParser::ETel;
   246     }
   229     }
   247     
   230     
   248     
   231 // -----------------------------------------------------------------------------
   249 // -----------------------------------------------------------------------------
       
   250 // 
       
   251 //
   232 //
   252 // -----------------------------------------------------------------------------
   233 // -----------------------------------------------------------------------------
   253 //
   234 //
   254 void TMusEngUriParser::HandleLocalTelUriL()
   235 void TMusEngUriParser::HandleLocalTelUriL()
   255     {
   236     {
   256     MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::ParseUriL() \
   237     MUS_LOG( "mus: [ENGINE]  -> TMusEngUriParser::ParseUriL() \
   257             variant behaviour" )
   238             variant behaviour" )
   258     if ( iUri.FindF( KMusEngTelPrefix() ) != 0 )
   239     if ( iUri.FindF( KMusEngTelPrefix() ) != 0 )
   259         {
   240         {
   260         // local tel uri without prefix
   241         // local tel uri without prefix
   261         if ( iUri.Length() + KMusEngTelPrefix().Length() <=
   242         if ( iUri.Length() + KMusEngTelPrefix().Length() <= KMaxUriLength )
   262              KMaxUriLength )
       
   263             {
   243             {
   264             iUri.Insert( 0, KMusEngTelPrefix() );
   244             iUri.Insert( 0, KMusEngTelPrefix() );
   265             }
   245             }
   266         else
   246         else
   267             {
   247             {
   269             }
   249             }
   270         }
   250         }
   271     else
   251     else
   272         {
   252         {
   273         //Tel uri with prefix
   253         //Tel uri with prefix
   274         iUri.Replace(
   254         iUri.Replace( 0, KMusEngTelPrefix().Length(), KMusEngTelPrefix() );
   275                 0,
       
   276                 KMusEngTelPrefix().Length(),
       
   277                 KMusEngTelPrefix() );
       
   278         }
   255         }
   279 
   256 
   280     TInt index = KMusEngTelPrefix().Length();
   257     TInt index = KMusEngTelPrefix().Length();
   281 
   258 
   282     // check if all chars are digits
   259     // check if all chars are digits
   290         ++index;
   267         ++index;
   291         }
   268         }
   292         
   269         
   293     iUriType = TMusEngUriParser::ETel;
   270     iUriType = TMusEngUriParser::ETel;
   294     }
   271     }
   295     
   272 
   296     
       
   297 // End of file
   273 // End of file