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