tcpiputils/dnd/Test/te_dnssuffix/src/te_dnssuffixtestwrapper.cpp
branchRCL_3
changeset 21 abbed5a4b42a
parent 20 7e41d162e158
child 22 8d540f55e491
equal deleted inserted replaced
20:7e41d162e158 21:abbed5a4b42a
     1 // Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Contains the implementation of all the commands, which is used by the script file.
       
    15 //
       
    16 
       
    17 /**
       
    18  @file
       
    19  @internalTechnology
       
    20  */
       
    21 
       
    22 #include "te_dnssuffixtestwrapper.h"
       
    23 #include "DNSSuffixHostResolver.h"
       
    24 
       
    25 
       
    26 #include <e32base.h>
       
    27 #include <in_sock.h>
       
    28 #include <es_sock.h>
       
    29 #include <commdbconnpref.h>
       
    30 #include <commdb.h>
       
    31 
       
    32 /*
       
    33  * TODO: 1. Try to test with end to end real scenario. Means resolving over real tunnel.
       
    34  * 
       
    35  * 
       
    36  */
       
    37 #define KIPAddrLen 39
       
    38 
       
    39 #define DISABLE_TUNDRIVER
       
    40 
       
    41 // Used for handle the multiple hosts in same test cases. @See TC006
       
    42 #define KMaxHosts 8
       
    43 
       
    44 // Commands
       
    45 _LIT(KInitDNSSuffixTesting, "InitDNSSuffixTesting");
       
    46 _LIT(KEnumerateInterface,   "EnumerateInterface");
       
    47 _LIT(KSetAndGetSuffixList,  "SetAndGetSuffixList");
       
    48 _LIT(KDoResolve,            "DoResolve");
       
    49 _LIT(KDoResolveHostWithoutDomainWithSuffix,     "DoResolveHostWithoutDomainWithSuffix");
       
    50 _LIT(KDoResolveHostWithoutDomainWithoutSuffix,  "DoResolveHostWithoutDomainWithoutSuffix");
       
    51 
       
    52 _LIT(KDNSSuffixSupportTC005,    "DNSSuffixSupportTC005");
       
    53 _LIT(KDNSSuffixSupportTC006,    "DNSSuffixSupportTC006");
       
    54 _LIT(KDNSSuffixSupportTC007,    "DNSSuffixSupportTC007");
       
    55 _LIT(KDNSSuffixSupportTC008,    "DNSSuffixSupportTC008");
       
    56 _LIT(KDNSSuffixSupportTC009,    "DNSSuffixSupportTC009");
       
    57 _LIT(KDNSSuffixSupportTC010,    "DNSSuffixSupportTC010");
       
    58 _LIT(KDNSSuffixSupportTC011,    "DNSSuffixSupportTC011");
       
    59 
       
    60 
       
    61 //Test code
       
    62 _LIT(KCommand, 			    "aCommand = %S");
       
    63 _LIT(KSection, 			    "aSection = %S");
       
    64 _LIT(KAsyncErrorIndex, 	    "aAsyncErrorIndex = %D");
       
    65 
       
    66 _LIT(KKeyDNSSuffixTestSuffixList,   "suffixlist");
       
    67 _LIT(KKeyDNSSuffixTestSuffixList1,   "suffixlist1");
       
    68 _LIT(KKeyDNSSuffixTestSuffixList2,   "suffixlist2");
       
    69 _LIT(KKeyDNSSuffixTestSuffixList3,   "suffixlist3");
       
    70 
       
    71 _LIT(KKeyDNSSuffixTestHostname,     "hostname");
       
    72 
       
    73 _LIT(KSectionDNSSuffixTest001,      "dnssuffix_test001");
       
    74 _LIT(KSectionDNSSuffixTest002,      "dnssuffix_test002");
       
    75 _LIT(KSectionDNSSuffixTest003,      "dnssuffix_test003");
       
    76 _LIT(KSectionDNSSuffixTest004,      "dnssuffix_test004");
       
    77 _LIT(KSectionDNSSuffixTest005,      "dnssuffix_test005");
       
    78 
       
    79 _LIT(KSectionDNSSuffixTest006,          "dnssuffix_test006");
       
    80 _LIT(KKeyDNSSuffixTest006NoOfHostname,  "noofhosts");
       
    81 _LIT(KKeyDNSSuffixTest006Hostname,      "hostname%D");
       
    82 
       
    83 _LIT(KSectionDNSSuffixTest007,              "dnssuffix_test007");
       
    84 _LIT(KKeyDNSSuffixTest007ValidHostname,     "validhostname");
       
    85 _LIT(KKeyDNSSuffixTest007InValidHostname,   "invalidhostname");
       
    86 
       
    87 _LIT(KSectionDNSSuffixTest008,      "dnssuffix_test008");
       
    88 _LIT(KKeyDNSSuffixTestHostname1,    "hostname1");
       
    89 _LIT(KKeyDNSSuffixTestHostname2,    "hostname2");
       
    90 
       
    91 _LIT(KSectionDNSSuffixTest009,      "dnssuffix_test009");
       
    92 
       
    93 _LIT(KSectionDNSSuffixTest010,      "dnssuffix_test010");
       
    94 
       
    95 _LIT(KSectionDNSSuffixTest011,      "dnssuffix_test011");
       
    96 
       
    97 _LIT(KSectionDNSSuffixFirstInterface, "dnssuffix_first_interface");
       
    98 _LIT(KSectionDNSSuffixSecondInterface, "dnssuffix_second_interface");
       
    99 _LIT(KKeyDNSSuffixIAPId,"iapid");
       
   100 _LIT(KKeyInterfaceName,                "interfacename");
       
   101 
       
   102 /*
       
   103  * @author: Santosh K Patil
       
   104  * TODO: Needs to verify the interfaces used to resolve the hosts in each test case.
       
   105  * It is required to verify wheather test executed as desired or not. 
       
   106  * In other words to confirm the new solution is working as expected we need to get 
       
   107  * and verify the inteface name used to resolve the host.
       
   108  * @See Test spec for more details.
       
   109  * 
       
   110  * TODO: Check all config sections
       
   111  */
       
   112 
       
   113 
       
   114 /**
       
   115 Constructor.
       
   116 
       
   117 @internalTechnology
       
   118  */
       
   119 CDNSSuffixTestWrapper::CDNSSuffixTestWrapper()
       
   120     {
       
   121     }
       
   122 
       
   123 /**
       
   124 Destructor.
       
   125 
       
   126 @internalTechnology
       
   127  */
       
   128 CDNSSuffixTestWrapper::~CDNSSuffixTestWrapper()
       
   129     {  
       
   130     
       
   131     }
       
   132 
       
   133 /**
       
   134 Function to instantiate TestWrapper.
       
   135 @return Returns constructed TestWrapper instance pointer
       
   136 @internalTechnology
       
   137  */
       
   138 CDNSSuffixTestWrapper* CDNSSuffixTestWrapper::NewL()
       
   139     {
       
   140     CDNSSuffixTestWrapper*	ret = new (ELeave) CDNSSuffixTestWrapper();
       
   141     CleanupStack::PushL(ret);
       
   142     ret->ConstructL();
       
   143     CleanupStack::Pop(ret);
       
   144     return ret;	
       
   145     }
       
   146 
       
   147 /**
       
   148 Second level constructor, constructs TestWrapper instance.
       
   149 @internalTechnology
       
   150  */
       
   151 void CDNSSuffixTestWrapper::ConstructL()
       
   152     {    
       
   153     }
       
   154 
       
   155 
       
   156 /*
       
   157  * @HandleCallBackL Called by the CDNSSuffixHostResolver::RunL
       
   158  * 
       
   159  */
       
   160 void CDNSSuffixTestWrapper::HandleCallBackL(TInt aError)
       
   161     {
       
   162     INFO_PRINTF1(_L("HandleCallBackL - Entry"));    
       
   163     INFO_PRINTF2(_L("Error code: %D"),aError);
       
   164     
       
   165     if (KErrNone != aError)
       
   166         SetError(KErrNone);
       
   167     else
       
   168         SetError(KErrGeneral);
       
   169     
       
   170     if (iWait.IsStarted())
       
   171         {
       
   172         INFO_PRINTF1(_L("Stoping waiter"));
       
   173         iWait.AsyncStop();
       
   174         }
       
   175     INFO_PRINTF1(_L("HandleCallBackL - Exit"));
       
   176     }
       
   177 
       
   178 /**
       
   179 Function to map the input command to respective function.
       
   180 
       
   181 @return - True Upon successfull command to Function name mapping otherwise False
       
   182 @param aCommand Function name has to be called
       
   183 @param aSection INI file paramenter section name
       
   184 @param aAsyncErrorIndex Error index
       
   185 @see Refer the script file COMMAND section.
       
   186 
       
   187 @internalTechnology
       
   188  */
       
   189 TBool CDNSSuffixTestWrapper::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
       
   190     {
       
   191     TBool ret = ETrue;
       
   192 
       
   193     // Print out the parameters for debugging
       
   194     INFO_PRINTF2( KCommand, &aCommand );
       
   195     INFO_PRINTF2( KSection, &aSection );
       
   196     INFO_PRINTF2( KAsyncErrorIndex, aAsyncErrorIndex );
       
   197     
       
   198     if(KInitDNSSuffixTesting() == aCommand)
       
   199         {
       
   200         DoInitTestingL();
       
   201         }
       
   202     else if(KEnumerateInterface() == aCommand)
       
   203         {
       
   204         DoEnumerateInterfacesL();
       
   205         }
       
   206     else if (KSetAndGetSuffixList() == aCommand)
       
   207         {
       
   208         DoSetAndGetSuffixListL();
       
   209         }
       
   210     else if( KDoResolve() == aCommand)
       
   211         {
       
   212         DoResolveL();
       
   213         }
       
   214     else if( KDoResolveHostWithoutDomainWithSuffix() == aCommand)
       
   215         {
       
   216         DoResolveHostWithoutDomainWithSuffixListSetL();
       
   217         }    
       
   218     else if( KDoResolveHostWithoutDomainWithoutSuffix() == aCommand)
       
   219         {
       
   220         DoResolveHostWithoutDomainWithoutSuffixListL();
       
   221         }
       
   222     else if( KDNSSuffixSupportTC005() == aCommand)
       
   223         {
       
   224         DNSSuffixSupportTC005L();
       
   225         }
       
   226     else if( KDNSSuffixSupportTC006() == aCommand)
       
   227         {
       
   228         DNSSuffixSupportTC006L();
       
   229         }
       
   230     else if( KDNSSuffixSupportTC007() == aCommand)
       
   231         {
       
   232         DNSSuffixSupportTC007L();
       
   233         }
       
   234     else if( KDNSSuffixSupportTC008() == aCommand)
       
   235         {
       
   236         DNSSuffixSupportTC008L();
       
   237         }
       
   238     else if( KDNSSuffixSupportTC009() == aCommand)
       
   239         {
       
   240         DNSSuffixSupportTC009L();
       
   241         }
       
   242     else if( KDNSSuffixSupportTC010() == aCommand)
       
   243        {
       
   244        DNSSuffixSupportTC010L();
       
   245        }
       
   246     else if( KDNSSuffixSupportTC011() == aCommand)
       
   247        {
       
   248        DNSSuffixSupportTC011L();
       
   249        }    
       
   250     else
       
   251         {        
       
   252         ret = EFalse;
       
   253         User::LeaveIfError(KErrNone); // just to suppress LeaveScan warning
       
   254         }
       
   255     
       
   256     return ret;
       
   257     }
       
   258 
       
   259 
       
   260 TInt CDNSSuffixTestWrapper::StartConnections(RSocketServ& aSockServ, RConnection& aConn1, RConnection& aConn2)
       
   261     {
       
   262     INFO_PRINTF1(_L("StartConnections - Entry"));
       
   263     
       
   264     TUint iapId = GetFirstIapId();
       
   265     
       
   266     if ((TInt)iapId == KErrNotFound)
       
   267         return KErrNotFound;
       
   268     
       
   269     TInt err = StartConnection(aSockServ,aConn1,iapId);
       
   270         
       
   271     if (err != KErrNone)
       
   272         {
       
   273         ERR_PRINTF1(_L("Failed to start first connection"));
       
   274         SetError(err);
       
   275         return err;
       
   276         }
       
   277         
       
   278     INFO_PRINTF2(_L("First connection started successfully - IAP: %D"),iapId);        
       
   279     
       
   280 #ifndef DISABLE_TUNDRIVER
       
   281     iapId = GetSecondIapId();
       
   282              
       
   283     if ((TInt)iapId == KErrNotFound)
       
   284         {       
       
   285         aConn1.Close();
       
   286         return KErrNotFound;
       
   287         }
       
   288         
       
   289     err = StartConnection(iSocketServ,aConn2,iapId);
       
   290         
       
   291     if (err != KErrNone)
       
   292         {
       
   293         ERR_PRINTF1(_L("Failed to start second connection"));
       
   294         aConn1.Close();
       
   295         return err;
       
   296         }
       
   297         
       
   298     INFO_PRINTF2(_L("Second connection started successfully - IAP: %D"),iapId);
       
   299 #endif
       
   300             
       
   301     INFO_PRINTF1(_L("StartConnections - Exit"));
       
   302     return KErrNone;
       
   303     }
       
   304 
       
   305 
       
   306 
       
   307 TInt CDNSSuffixTestWrapper::StartConnection(RSocketServ& aSockServ, RConnection& aConn, TUint aIapId)
       
   308     {
       
   309     INFO_PRINTF1(_L("StartConnection - Entry"));
       
   310     
       
   311     TInt err(KErrNone);
       
   312     
       
   313     TCommDbConnPref connPref;
       
   314     INFO_PRINTF1(_L("Getting conn preference"));
       
   315     
       
   316     TRAP(err, GetConnPrefL(aIapId,connPref));
       
   317     
       
   318     if (KErrNone != err)
       
   319         {
       
   320         ERR_PRINTF1(_L("Failed to read conn preference"));
       
   321         return err;
       
   322         }
       
   323     
       
   324     INFO_PRINTF1(_L("Got conn preference"));
       
   325     
       
   326     if((err = aConn.Open(aSockServ, KAfInet)) != KErrNone )
       
   327         {
       
   328         ERR_PRINTF2(_L("Failed to open Connection: %D"),err);
       
   329         return err;
       
   330         }
       
   331         
       
   332     INFO_PRINTF1(_L("Connection opened"));
       
   333     
       
   334     INFO_PRINTF1(_L("Starting Connection"));
       
   335     err = aConn.Start(connPref);
       
   336     
       
   337     if (KErrNone != err)
       
   338         {
       
   339         ERR_PRINTF2(_L("Failed starting Connection: %D"),err);
       
   340         aConn.Close();
       
   341         return err;
       
   342         }
       
   343     
       
   344     INFO_PRINTF1(_L("Connection Started"));
       
   345     
       
   346     INFO_PRINTF1(_L("StartConnection - Exit"));
       
   347     
       
   348     return KErrNone;    
       
   349     }
       
   350 
       
   351    
       
   352 
       
   353 void CDNSSuffixTestWrapper::GetConnPrefL(TUint aIapId,TCommDbConnPref& aPref)
       
   354     {
       
   355     INFO_PRINTF1(_L("GetConnPrefL - Entry"));
       
   356     
       
   357     INFO_PRINTF1(_L("Instantiating CCommsDatabase"));
       
   358     CCommsDatabase* commsDb = CCommsDatabase::NewL();
       
   359     CleanupStack::PushL(commsDb);
       
   360     
       
   361     INFO_PRINTF1(_L("Calling OpenConnectionPrefTableLC"));
       
   362     CCommsDbConnectionPrefTableView* commsDbView = commsDb->OpenConnectionPrefTableLC();
       
   363     
       
   364     INFO_PRINTF1(_L("Going to first record"));
       
   365     User::LeaveIfError(commsDbView->GotoFirstRecord());
       
   366     
       
   367     TInt isFound(KErrNotFound);
       
   368     do
       
   369         {
       
   370         CCommsDbConnectionPrefTableView::TCommDbIapConnectionPref pref;
       
   371         INFO_PRINTF1(_L("Reading conn preferecne."));
       
   372         commsDbView->ReadConnectionPreferenceL(pref);
       
   373         
       
   374         if (pref.iBearer.iIapId == aIapId)
       
   375             {
       
   376             INFO_PRINTF1(_L("Match found"));
       
   377             aPref.SetIapId(aIapId);
       
   378             aPref.SetBearerSet(pref.iBearer.iBearerSet);
       
   379             aPref.SetDirection(pref.iDirection);
       
   380             aPref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt);
       
   381             isFound = KErrNone;
       
   382             break;
       
   383             }
       
   384         } while(!commsDbView->GotoNextRecord());    
       
   385     
       
   386     INFO_PRINTF1(_L("Cleanup resources"));
       
   387     CleanupStack::PopAndDestroy(2, commsDb); // commsDbView, commsDb
       
   388     
       
   389     User::LeaveIfError(isFound);
       
   390     
       
   391     INFO_PRINTF1(_L("GetConnPrefL - Exit"));    
       
   392     }
       
   393 
       
   394 
       
   395 
       
   396 TInt32 CDNSSuffixTestWrapper::GetFirstIapId()
       
   397     {
       
   398     INFO_PRINTF1(_L("GetFirstIapId - Entry"));
       
   399     
       
   400     TInt iapId(KErrNotFound);
       
   401     
       
   402     if (!GetIntFromConfig(KSectionDNSSuffixFirstInterface,KKeyDNSSuffixIAPId,iapId))
       
   403          {
       
   404          ERR_PRINTF1(_L("Failed to read the First IAP id"));
       
   405          }
       
   406       else
       
   407          {
       
   408          INFO_PRINTF2(_L("Got the IAP: %D"),iapId);
       
   409          }
       
   410     
       
   411     INFO_PRINTF1(_L("GetFirstIapId - Exit"));
       
   412     return iapId;
       
   413     }
       
   414 
       
   415 
       
   416 TInt32 CDNSSuffixTestWrapper::GetSecondIapId()
       
   417    {
       
   418    INFO_PRINTF1(_L("GetSecondIapId - Entry"));
       
   419    
       
   420    TInt iapId(KErrNotFound);
       
   421    
       
   422    if (!GetIntFromConfig(KSectionDNSSuffixSecondInterface,KKeyDNSSuffixIAPId,iapId))
       
   423         {
       
   424         ERR_PRINTF1(_L("Failed to read second IAP id"));
       
   425         }
       
   426      else
       
   427         {
       
   428         INFO_PRINTF2(_L("Got the IAP: %D"),iapId);
       
   429         }
       
   430    
       
   431    INFO_PRINTF1(_L("GetSecondIapId - Exit"));
       
   432    return iapId;
       
   433    }
       
   434  
       
   435 
       
   436 TInt CDNSSuffixTestWrapper::GetFirstInterfaceNameL(TDes& aIfaceName)
       
   437     {
       
   438     INFO_PRINTF1(_L("GetFirstInterfaceNameL - Entry"));
       
   439     TInt err(KErrNone);    
       
   440     
       
   441     TPtrC interfaceName;
       
   442     if (!GetStringFromConfig(KSectionDNSSuffixFirstInterface,KKeyInterfaceName,interfaceName))
       
   443         {
       
   444         ERR_PRINTF1(_L("Failed to read the interface name from config"));
       
   445         err = KErrNotFound;
       
   446         SetError(err);
       
   447         return err;
       
   448         }
       
   449         
       
   450     err = GetInterfaceNameL(interfaceName,aIfaceName);
       
   451     
       
   452     INFO_PRINTF1(_L("GetFirstInterfaceNameL - Exit"));
       
   453     return err;
       
   454     }
       
   455     
       
   456 
       
   457 TInt CDNSSuffixTestWrapper::GetSecondInterfaceNameL(TDes& aIfaceName)
       
   458     {    
       
   459     INFO_PRINTF1(_L("GetSecondInterfaceNameL - Entry"));
       
   460     TInt err(KErrNone);    
       
   461     
       
   462     TPtrC interfaceName;
       
   463     if (!GetStringFromConfig(KSectionDNSSuffixSecondInterface,KKeyInterfaceName,interfaceName))
       
   464         {
       
   465         ERR_PRINTF1(_L("Failed to read the interface name from config"));
       
   466         err = KErrNotFound;
       
   467         SetError(err);
       
   468         return err;
       
   469         }    
       
   470     
       
   471     err = GetInterfaceNameL(interfaceName,aIfaceName);
       
   472     
       
   473     INFO_PRINTF1(_L("GetSecondInterfaceNameL - Exit"));
       
   474     return err;    
       
   475     }
       
   476 
       
   477     
       
   478 TInt CDNSSuffixTestWrapper::GetInterfaceNameL(const TDesC& aCriteria,TDes& aIfaceName)
       
   479     {
       
   480     INFO_PRINTF1(_L("GetInterfaceNameL - Entry"));
       
   481 
       
   482     TInt err = KErrNone;
       
   483     CDesCArray* interfaceNameArray = new(ELeave) CDesCArrayFlat(4);
       
   484     CleanupStack::PushL(interfaceNameArray);
       
   485     TRAP(err,GetAvaiableInterfacesL(interfaceNameArray));
       
   486     
       
   487     if (KErrNone != err)
       
   488         {       
       
   489         ERR_PRINTF2(_L("Failed to enumeate the interfaces with error: %D"),err);
       
   490         return err;
       
   491         }
       
   492     
       
   493     INFO_PRINTF2(_L("No of interfaces: %D"),interfaceNameArray->Count());
       
   494     
       
   495     if (interfaceNameArray->Count() <= 0)
       
   496        {
       
   497        INFO_PRINTF1(_L("No interfaces available:"));
       
   498        CleanupStack::PopAndDestroy(interfaceNameArray);
       
   499        err = KErrNotFound;
       
   500        SetError(err);
       
   501        return err;
       
   502        }
       
   503     
       
   504     TBool isInterfaceFound(EFalse);
       
   505     TInt index = -1;
       
   506    
       
   507     for (TInt a=0; a<interfaceNameArray->Count();a++)
       
   508        {
       
   509        HBufC* interfaceNameBuf = (*interfaceNameArray)[a].AllocL();
       
   510        
       
   511        TInt pos = interfaceNameBuf->FindF(aCriteria);
       
   512        
       
   513        delete interfaceNameBuf;
       
   514        
       
   515        if ( KErrNotFound != pos)
       
   516            {
       
   517            isInterfaceFound = ETrue;
       
   518            index = a;
       
   519            break;
       
   520            }
       
   521        }
       
   522     
       
   523     if (!isInterfaceFound)
       
   524         {
       
   525         ERR_PRINTF1(_L("Interface not found"));
       
   526         CleanupStack::PopAndDestroy(interfaceNameArray);
       
   527         err = KErrNotFound;
       
   528         SetError(err);
       
   529         return err;
       
   530         }    
       
   531     
       
   532     aIfaceName.Copy((*interfaceNameArray)[index]);
       
   533     
       
   534     CleanupStack::PopAndDestroy(interfaceNameArray);
       
   535     
       
   536     TPtr tempName((TUint16*)aIfaceName.Ptr(),aIfaceName.Length(),aIfaceName.Length());
       
   537     INFO_PRINTF2(_L("Found Interface and name is: %S"),&tempName);
       
   538     
       
   539     INFO_PRINTF1(_L("GetInterfaceNameL - Exit"));
       
   540     return KErrNone;
       
   541     }
       
   542 
       
   543 /**
       
   544  * DoInitTestingL. Configures the initial connections. 
       
   545  * Function to start the connection to configure the named server on one interface. 
       
   546  */
       
   547 void CDNSSuffixTestWrapper::DoInitTestingL()
       
   548     {
       
   549     INFO_PRINTF1(_L("********************************************"));
       
   550     INFO_PRINTF1(_L("DoInitTestingL"));
       
   551     INFO_PRINTF1(_L("********************************************"));
       
   552 
       
   553     /*@Note, We need to configure the named servers on vTunnel and ethernet interfaces.
       
   554      * So, Configuring them by starting connections on both interfaces. 
       
   555      * 
       
   556      */
       
   557     TInt err = KErrNone;
       
   558     
       
   559     if((err = iSocketServ.Connect()) == KErrNone )
       
   560         INFO_PRINTF1(_L("Socket Server Opened."));
       
   561     else
       
   562         {
       
   563         ERR_PRINTF2(_L("Error Opening Socket Server: %d"), err);
       
   564         SetError(err);
       
   565         return;
       
   566         }
       
   567     
       
   568     ERR_PRINTF2(_L("Error Opening Socket Server: %d"), err);
       
   569     
       
   570     RConnection firstConn; 
       
   571     RConnection vTunConn; // Usef for virtual Tunnel interface
       
   572     
       
   573     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
   574     
       
   575     if (KErrNone != err)
       
   576         {
       
   577         ERR_PRINTF2(_L("Failed to start the Connections: %D"),err);
       
   578         CloseSocketSrv();
       
   579         SetError(err);
       
   580         return;
       
   581         }
       
   582     INFO_PRINTF1(_L("Started the connections successfully"));
       
   583     
       
   584     INFO_PRINTF1(_L("Close the connections"));
       
   585    
       
   586 #ifndef DISABLE_TUNDRIVER
       
   587     if (vTunConn.SubSessionHandle())
       
   588         vTunConn.Close();
       
   589 #endif
       
   590 
       
   591     if (firstConn.SubSessionHandle())
       
   592         firstConn.Close();
       
   593     
       
   594     SetError(err);      
       
   595     CloseSocketSrv();    
       
   596     }
       
   597 
       
   598 /**
       
   599  * @DoEnumerateInterfacesL. Enumerates the all available interfaces.
       
   600  */
       
   601 void CDNSSuffixTestWrapper::DoEnumerateInterfacesL()
       
   602     {
       
   603     INFO_PRINTF1(_L("********************************************"));
       
   604     INFO_PRINTF1(_L("DoEnumerateInterfacesL"));
       
   605     INFO_PRINTF1(_L("********************************************"));
       
   606     
       
   607     CDesCArray* interfaceNameArray = new(ELeave) CDesCArrayFlat(4);
       
   608     CleanupStack::PushL(interfaceNameArray);
       
   609     TRAPD(err,GetAvaiableInterfacesL(interfaceNameArray));
       
   610    
       
   611     if (KErrNone == err)
       
   612         {
       
   613         // Print the interface names        
       
   614         INFO_PRINTF2(_L("Found %D interfaces"),interfaceNameArray->Count());
       
   615         
       
   616         for(TInt a=0;a<interfaceNameArray->Count();a++)
       
   617             {
       
   618             TPtrC interfaceName = (*interfaceNameArray)[a];
       
   619             INFO_PRINTF2(_L("Interface: %S"),&interfaceName);
       
   620             }
       
   621         }
       
   622     else
       
   623         {
       
   624         ERR_PRINTF2(_L("Failed to enumeate the interfaces with error: %D"),err);
       
   625         }
       
   626     
       
   627     CleanupStack::PopAndDestroy(interfaceNameArray);
       
   628     
       
   629     SetError(err);
       
   630     }
       
   631 
       
   632 /*
       
   633  * GetAvaiableInterfacesL. Function to get the names of all available names of  all interfaces.
       
   634  * @arg aInterfaceNamesArray (out param), Array of interface names owned by caller. 
       
   635  */
       
   636 void CDNSSuffixTestWrapper::GetAvaiableInterfacesL(MDesCArray* aInterfaceNamesArray)
       
   637     {
       
   638     INFO_PRINTF1(_L("GetAvaiableInterfacesL - Entry"));
       
   639     
       
   640     CDesCArray* interfacesArray = static_cast<CDesCArray*>(aInterfaceNamesArray);
       
   641     interfacesArray->Reset();
       
   642     
       
   643     TInt err = KErrNone;
       
   644     RSocketServ socketSrv;
       
   645     
       
   646     if ( (err = socketSrv.Connect()) != KErrNone)
       
   647         {
       
   648         ERR_PRINTF2(_L("Failed Connecting to Socet server error: %D"),err);
       
   649         SetError(err);
       
   650         return;
       
   651         }
       
   652     INFO_PRINTF1( _L("Connected to Socket server"));
       
   653     
       
   654     INFO_PRINTF1(_L("Opening socket..."));
       
   655     
       
   656     RSocket socket;
       
   657     err = socket.Open(socketSrv,KAfInet, KSockDatagram, KProtocolInetUdp);
       
   658     
       
   659     if (KErrNone != err)
       
   660         {
       
   661         INFO_PRINTF2(_L("Failed Opening socket with error: %D"),err);
       
   662         SetError(err);
       
   663         socketSrv.Close();
       
   664         return;
       
   665         }
       
   666     
       
   667     INFO_PRINTF1(_L("Socket opened"));
       
   668     
       
   669     err = socket.SetOpt(KSoInetEnumInterfaces,KSolInetIfCtrl);
       
   670   
       
   671     if (KErrNone != err)
       
   672         {
       
   673         INFO_PRINTF2(_L("Failed enumerating interfaces with error: %D"),err);
       
   674         SetError(err);
       
   675         socket.Close();
       
   676         socketSrv.Close();
       
   677         return;
       
   678         }
       
   679     
       
   680     TSoInetInterfaceInfo info;
       
   681     TPckg<TSoInetInterfaceInfo> opt(info);
       
   682     
       
   683     while(socket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, opt) == KErrNone)
       
   684         {
       
   685        // INFO_PRINTF2(_L("Interface Name %S"),&opt().iName);
       
   686         interfacesArray->AppendL(opt().iName);
       
   687         }
       
   688     
       
   689     INFO_PRINTF1(_L("Finished"));
       
   690     
       
   691     INFO_PRINTF1(_L("Closing connections"));
       
   692     socket.Close();
       
   693     socketSrv.Close();
       
   694     SetError(KErrNone);
       
   695     INFO_PRINTF1(_L("GetAvaiableInterfacesL - Exit"));
       
   696     }
       
   697 
       
   698 
       
   699 /**
       
   700 Function test the setting of suffix list and getting suffix list on interface.
       
   701 */
       
   702 void CDNSSuffixTestWrapper::DoSetAndGetSuffixListL()
       
   703     {
       
   704     INFO_PRINTF1(_L("************************************************************"));
       
   705     INFO_PRINTF1(_L("DoSetAndGetSuffixListL - DNS_Suffix_Support_TC001"));
       
   706     INFO_PRINTF1(_L("************************************************************"));
       
   707         
       
   708     TInt err(KErrNone);
       
   709     
       
   710     TName interfaceName;
       
   711     
       
   712     TRAP(err, err = GetFirstInterfaceNameL(interfaceName));
       
   713         
       
   714     if (err != KErrNone )
       
   715         {
       
   716         ERR_PRINTF2(_L("Failed to get the interface error: %D"),err);
       
   717         SetError(err);
       
   718         return;
       
   719         }
       
   720     
       
   721     TPtrC suffixList;
       
   722     iSuffixList.Reset();
       
   723     
       
   724     if (!GetStringFromConfig(KSectionDNSSuffixTest001,KKeyDNSSuffixTestSuffixList,suffixList))
       
   725         {
       
   726         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
   727         SetError(KErrNotFound);
       
   728         return;
       
   729         }
       
   730     else
       
   731         {
       
   732         INFO_PRINTF2(_L("Suffix list: %S"),&suffixList);
       
   733         FillSuffixList(iSuffixList,suffixList);
       
   734         }
       
   735             
       
   736     err = iSocketServ.Connect();
       
   737            
       
   738     if(KErrNone != err)
       
   739        {
       
   740        ERR_PRINTF1(_L("Failed to connect socket Server"));
       
   741        SetError(err);
       
   742        return;
       
   743        }
       
   744     
       
   745     INFO_PRINTF1(_L("Connected to socket Server"));
       
   746     
       
   747     TUint iapId = GetFirstIapId();
       
   748     
       
   749     if (KErrNotFound == (TInt)iapId)
       
   750        {
       
   751        ERR_PRINTF2(_L("Failed to get the iap id: %D"),err);
       
   752        SetError(err);
       
   753        CloseSocketSrv();
       
   754        return;
       
   755        }
       
   756     
       
   757     RConnection firstConn; 
       
   758     err = StartConnection(iSocketServ,firstConn,iapId);
       
   759     
       
   760     if (KErrNone != err)
       
   761       {
       
   762       ERR_PRINTF2(_L("Failed to start the Connections: %D"),err);
       
   763       CloseSocketSrv();
       
   764       SetError(err);
       
   765       return;
       
   766       }
       
   767     
       
   768     INFO_PRINTF1(_L("Started the connections successfully"));
       
   769     
       
   770     
       
   771     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,interfaceName,iSuffixList);
       
   772     
       
   773     if (KErrNone != err)
       
   774         {
       
   775         ERR_PRINTF2(_L("Failed Setting the suffix list with errror : %D"),err);
       
   776         SetError(err);  
       
   777         firstConn.Close();
       
   778         CloseSocketSrv();
       
   779         return;
       
   780         }
       
   781     
       
   782     INFO_PRINTF1(_L("Getting the suffix list on interface:"));
       
   783     
       
   784     iSuffixList2.Reset();
       
   785     
       
   786     err = GetDNSSuffixList(iSocketServ,interfaceName,iSuffixList2);
       
   787         
       
   788     if (KErrNone != err)
       
   789         {
       
   790         ERR_PRINTF2(_L("Failed to get the suffix list with errror : %D"),err);
       
   791         }
       
   792     
       
   793     
       
   794     if (err == KErrNone)
       
   795         {        
       
   796         if ( (err = IsSuffixListEqual(iSuffixList,iSuffixList2)) == KErrNone)
       
   797             {
       
   798             INFO_PRINTF1(_L("Suffix list are same and Test is successfull"));
       
   799             }
       
   800         else
       
   801             {
       
   802             ERR_PRINTF1(_L("Suffix list are not same and Test failed"));
       
   803             }
       
   804         }
       
   805     
       
   806     SetError(err);
       
   807     
       
   808     firstConn.Close();
       
   809     CloseSocketSrv();
       
   810     
       
   811     INFO_PRINTF1(_L("Set and Get Suffix list Test - Finished"));
       
   812     }
       
   813 
       
   814 
       
   815 
       
   816 TInt CDNSSuffixTestWrapper::SetDNSSuffixListOnInterface(RSocketServ& aServ,RConnection& /*aConn*/,const TDesC& aInterfaceName,RInetSuffixList& aData)
       
   817     {
       
   818     INFO_PRINTF1(_L("SetDNSSuffixListOnInterfaceL - Entry"));
       
   819     
       
   820     INFO_PRINTF1(_L("Opening socket..."));    
       
   821        
       
   822     RSocket socket;
       
   823     TInt err = socket.Open(aServ,KAfInet, KSockDatagram, KProtocolInetUdp);    
       
   824     
       
   825     if (KErrNone != err)
       
   826         {
       
   827         INFO_PRINTF2(_L("Failed Opening socket with error: %D"),err);
       
   828         SetError(err);
       
   829         return err;
       
   830         }
       
   831   
       
   832     INFO_PRINTF1(_L("Socket opened"));
       
   833     
       
   834     err = socket.SetOpt(KSoInetEnumInterfaces,KSolInetIfCtrl);
       
   835     
       
   836     if (KErrNone != err)
       
   837         {
       
   838         INFO_PRINTF2(_L("Failed enumerating interfaces with error: %D"),err);
       
   839         SetError(err);        
       
   840         socket.Close();
       
   841         return err;
       
   842         }
       
   843     
       
   844 	TSoInetInterfaceInfo getOpt;
       
   845     TPckg<TSoInetInterfaceInfo> opt_out(getOpt);
       
   846     
       
   847     TBool isSuffixListSet(EFalse);
       
   848     
       
   849     while(socket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, opt_out)== KErrNone)        
       
   850         {    
       
   851         
       
   852         INFO_PRINTF2(_L("Interface Name: %S"),&opt_out().iName);        
       
   853         INFO_PRINTF2(_L("Name Server: %D"),!opt_out().iNameSer1.IsUnspecified());
       
   854         
       
   855         TBuf<KIPAddrLen> ipBuf;
       
   856         opt_out().iAddress.Output(ipBuf);
       
   857         INFO_PRINTF2(_L("IP Address: %S"),&ipBuf);
       
   858 
       
   859         TBuf<KIPAddrLen> nameserBuf;
       
   860         opt_out().iNameSer1.Output(nameserBuf);
       
   861         INFO_PRINTF2(_L("Name Server IP: %S"),&nameserBuf);
       
   862 
       
   863         if( (opt_out().iName.Length()>0) /*&& !(opt_out().iNameSer1.IsUnspecified())*/ && (aInterfaceName.CompareF(opt_out().iName)==0) )       
       
   864             {
       
   865             INFO_PRINTF2(_L("Setting suffix list on Interface: %S"),&opt_out().iName);
       
   866             INFO_PRINTF2(_L("MTU on the interface is : %d"), opt_out().iMtu);
       
   867 
       
   868             TSoInetInterfaceInfoExtnDnsSuffix setOpt;
       
   869             (TSoInetInterfaceInfo &)setOpt = opt_out();
       
   870             TPckg<TSoInetInterfaceInfoExtnDnsSuffix> opt_in(setOpt);
       
   871             /*opt_in().iName = opt_out().iName;
       
   872             opt_in().iAddress = opt_out().iAddress;
       
   873             opt_in().iNetMask = opt_out().iNetMask;*/
       
   874             opt_in().iDoId = ETrue;
       
   875             opt_in().iDelete = EFalse;
       
   876             opt_in().iDomainSuffix.DeleteAll();
       
   877             
       
   878             err = socket.SetOpt(KSoInetConfigInterface,KSolInetIfCtrl,opt_in);
       
   879             
       
   880             if (err != KErrNone)
       
   881                 {
       
   882                 ERR_PRINTF2(_L("Failed to reset suffix list on the interface: %D"),err);
       
   883                 break;
       
   884                 }
       
   885             else
       
   886 	            INFO_PRINTF1(_L("Interface domain suffix list reset successful"));
       
   887             	
       
   888             if (aData.Count() == 0) // We plan to set empty record, so only reset is sufficient
       
   889                 isSuffixListSet = ETrue;
       
   890             
       
   891             for(TInt a=0;a<aData.Count();a++)
       
   892                 {
       
   893                 opt_in().iDomainSuffix.Copy(aData[a]);
       
   894                 err = socket.SetOpt(KSoInetConfigInterface,KSolInetIfCtrl,opt_in);
       
   895                 if (err != KErrNone)
       
   896                 	{
       
   897                 	ERR_PRINTF2(_L("Failed to set suffix list: %D"),err);
       
   898                 	break;
       
   899             		}
       
   900                 else
       
   901                 	{
       
   902 	                INFO_PRINTF1(_L("Suffix list added successfully"));
       
   903                 	isSuffixListSet = ETrue;
       
   904             		}
       
   905                 }
       
   906             break;
       
   907             }
       
   908         }
       
   909     
       
   910     if (!isSuffixListSet)
       
   911         {
       
   912         err = KErrNotFound;
       
   913         ERR_PRINTF2(_L("Failed to set suffix list with error: %D"),err);       
       
   914         }
       
   915         
       
   916     SetError(err);
       
   917     
       
   918     INFO_PRINTF1(_L("Closing socket"));
       
   919     
       
   920     socket.Close();
       
   921     INFO_PRINTF1(_L("SetDNSSuffixListOnInterfaceL - Exit"));
       
   922     return err;
       
   923     }
       
   924 
       
   925 
       
   926 
       
   927 /**
       
   928  * GetDNSSuffixList. Gets the suffix list set on an interface.
       
   929  * 
       
   930  * @arg  aServ, session handle to a socket server. 
       
   931  * @arg  aData (in/out param) Data having the suffix list. Packed buffer of type TInetSuffixList
       
   932  *
       
   933  */
       
   934 TInt CDNSSuffixTestWrapper::GetDNSSuffixList(RSocketServ& aServ,const TDesC& aInterfaceName,RInetSuffixList& aData)
       
   935     {
       
   936     INFO_PRINTF1(_L("GetDNSSuffixList - Entry"));
       
   937     
       
   938     INFO_PRINTF1(_L("Opening socket..."));
       
   939     RSocket socket;
       
   940     TInt err = socket.Open(aServ,KAfInet, KSockDatagram, KProtocolInetUdp);
       
   941     
       
   942     if (KErrNone != err)
       
   943        {
       
   944        INFO_PRINTF2(_L("Failed Opening socket with error: %D"),err);
       
   945        SetError(err);
       
   946        return err;
       
   947        }
       
   948     
       
   949     INFO_PRINTF1(_L("Socket opened"));
       
   950     
       
   951     err = socket.SetOpt(KSoInetEnumInterfaces,KSolInetIfCtrl);
       
   952     
       
   953     if (KErrNone != err)
       
   954        {
       
   955        INFO_PRINTF2(_L("Failed enumerating interfaces with error: %D"),err);
       
   956        SetError(err);
       
   957        socket.Close();
       
   958        return err;
       
   959        }
       
   960 
       
   961 	TSoInetInterfaceInfo getOpt;
       
   962     TPckg<TSoInetInterfaceInfo> opt(getOpt);
       
   963        
       
   964     while(socket.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, opt) == KErrNone)
       
   965 		{
       
   966 		if (aInterfaceName.CompareF(opt().iName) == KErrNone)
       
   967 			{
       
   968 			INFO_PRINTF2(_L("Reading suffix list from interface: %S"),&opt().iName);     
       
   969 
       
   970 			TBuf<KIPAddrLen> tempIp;
       
   971 			opt().iAddress.Output(tempIp);
       
   972 			INFO_PRINTF2(_L("IP: %S"),&tempIp);
       
   973 
       
   974 			TInetSuffix domainSuffix;
       
   975 			TPckg<TInetSuffix> dom_opt(domainSuffix);
       
   976 			if (err = socket.SetOpt(KSoInetEnumDomainSuffix, KSolInetIfCtrl) != KErrNone)
       
   977 				return err; 
       
   978 			while( socket.GetOpt(KSoInetNextDomainSuffix, KSolInetIfCtrl, dom_opt) == KErrNone)
       
   979 				{
       
   980                 aData.AppendL(dom_opt().iSuffixName);
       
   981 				}
       
   982 			break;
       
   983 			}
       
   984 		}
       
   985     
       
   986     INFO_PRINTF1(_L("Closing socket"));
       
   987     socket.Close();
       
   988 
       
   989     INFO_PRINTF1(_L("GetDNSSuffixList - Exit"));
       
   990     return KErrNone;
       
   991     }
       
   992 
       
   993 
       
   994 
       
   995 /**
       
   996  * FillSuffixListL, Function to fill the suffix names in the TInetSuffixList object. 
       
   997  * @arg aSuffixList, out param, on return has the suffix list set in it.
       
   998  * @arg aData, has the list of domain suffix names in the form of abc.xyz.com;efg.xyz.com
       
   999  */
       
  1000 TInt CDNSSuffixTestWrapper::FillSuffixList(RInetSuffixList& aSuffixList,TDesC& aData)
       
  1001     {
       
  1002     INFO_PRINTF1(_L("FillSuffixList - Entry"));
       
  1003     
       
  1004     INFO_PRINTF2(_L("Processing Suffix list: %S"),&aData);
       
  1005     
       
  1006     TPtr data((TUint16*)aData.Ptr(),aData.Length(),aData.Length());
       
  1007     data.TrimAll();
       
  1008     
       
  1009     TInt pos = KErrNone;
       
  1010     while( (pos = data.Find(_L(";"))) != KErrNotFound)
       
  1011         {
       
  1012         TPtr suffixItem((TUint16*)data.Left(pos).Ptr(),pos,pos);
       
  1013         INFO_PRINTF3(_L("Processing %D suffix name: %S"),/*sListBuf()*/iSuffixList.Count()+1,&suffixItem);
       
  1014         
       
  1015         TSuffixName tmpBuf;
       
  1016         tmpBuf.Copy(suffixItem);
       
  1017         aSuffixList.AppendL(tmpBuf);
       
  1018         data.Copy(data.Mid(pos+1));
       
  1019         }
       
  1020     data.TrimAll();
       
  1021     INFO_PRINTF3(_L("Processing %D suffix name: %S"),/*sListBuf()*/iSuffixList.Count()+1,&data);
       
  1022     INFO_PRINTF2(_L("Data Len: %D"),data.Length());
       
  1023     
       
  1024     TSuffixName tmpBuf;
       
  1025     tmpBuf.Copy(data);
       
  1026     aSuffixList.AppendL(tmpBuf);
       
  1027     
       
  1028     INFO_PRINTF1(_L("FillSuffixList - Exit"));
       
  1029     
       
  1030     return aSuffixList.Count() == 0 ? KErrNotFound : KErrNone;
       
  1031     }
       
  1032 
       
  1033 
       
  1034 void CDNSSuffixTestWrapper::CloseSocketSrv()
       
  1035     {
       
  1036     INFO_PRINTF1(_L("Closing socket server"));
       
  1037     
       
  1038     if (iSocketServ.Handle())
       
  1039         {
       
  1040         iSocketServ.Close();
       
  1041         INFO_PRINTF1(_L("Closed Sock Srv successfully"));
       
  1042         }
       
  1043     else
       
  1044         {
       
  1045         INFO_PRINTF1(_L("Inavild Sock Srv handle"));
       
  1046         }
       
  1047     }
       
  1048 
       
  1049 /* 
       
  1050  * IsSuffixListEqual, Utility function, compares the two suffix list structures. 
       
  1051  * @arg aSuffixList1 First structure holding the suffix list
       
  1052  * @arg aSuffixList2 second structure holding the suffix list
       
  1053  * 
       
  1054  * @return KErrNone if both suffix list strucures same otherwise KErrArgument.  
       
  1055  * 
       
  1056  */
       
  1057 TInt CDNSSuffixTestWrapper::IsSuffixListEqual(const RInetSuffixList& aSuffixList1, const RInetSuffixList& aSuffixList2)
       
  1058     {
       
  1059     INFO_PRINTF1(_L("IsSuffixListEqual - Entry"));
       
  1060     
       
  1061     if (aSuffixList1.Count() != aSuffixList2.Count())
       
  1062         {
       
  1063         return KErrArgument;
       
  1064         }
       
  1065     
       
  1066     for (TInt a=0; a<aSuffixList1.Count();a++)
       
  1067         {
       
  1068         if (aSuffixList1[a].CompareF(aSuffixList2[a]) != KErrNone)
       
  1069             {
       
  1070             return KErrArgument;
       
  1071             }
       
  1072         }
       
  1073     INFO_PRINTF1(_L("IsSuffixListEqual - Exit"));
       
  1074     return KErrNone;
       
  1075     }
       
  1076 
       
  1077 
       
  1078 /*
       
  1079  * Prerequisite: Two interfaces required to be up and running (virtual Tunnel and ethernet).
       
  1080  * 
       
  1081  * DoResolveL. Resolves the domain name
       
  1082  * 
       
  1083  * 
       
  1084  */
       
  1085 void CDNSSuffixTestWrapper::DoResolveL()
       
  1086     {
       
  1087     INFO_PRINTF1(_L("********************************************"));
       
  1088     INFO_PRINTF1(_L("DoResolveL  - DNS_Suffix_Support_TC002"));
       
  1089     INFO_PRINTF1(_L("********************************************"));
       
  1090     
       
  1091     TPtrC hostname;
       
  1092     
       
  1093     if (!GetStringFromConfig(KSectionDNSSuffixTest002,KKeyDNSSuffixTestHostname,hostname))
       
  1094         {
       
  1095         ERR_PRINTF1(_L("Failed to read the host name value"));    
       
  1096         SetError(KErrNotFound);
       
  1097         return;
       
  1098         }
       
  1099     else
       
  1100         {
       
  1101         INFO_PRINTF2(_L("Host name: %S"),&hostname);       
       
  1102         }
       
  1103 
       
  1104 	TInt err = KErrNone;
       
  1105     TName interfaceName;
       
  1106     
       
  1107     TRAP(err, err = GetFirstInterfaceNameL(interfaceName));
       
  1108         
       
  1109     if (err != KErrNone )
       
  1110         {
       
  1111         ERR_PRINTF2(_L("Failed to get the interface error: %D"),err);
       
  1112         SetError(err);
       
  1113         return;
       
  1114         }
       
  1115         
       
  1116     TPtrC suffixList;
       
  1117     iSuffixList.Reset();
       
  1118     
       
  1119     if (!GetStringFromConfig(KSectionDNSSuffixTest002,KKeyDNSSuffixTestSuffixList,suffixList))
       
  1120         {
       
  1121         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  1122         SetError(KErrNotFound);
       
  1123         return;
       
  1124         }
       
  1125     else
       
  1126         {
       
  1127         INFO_PRINTF2(_L("Suffix list: %S"),&suffixList);
       
  1128         FillSuffixList(iSuffixList,suffixList);
       
  1129         }
       
  1130 
       
  1131     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  1132         {
       
  1133         ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  1134         SetError(err);
       
  1135         return;
       
  1136         }
       
  1137     
       
  1138     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  1139     
       
  1140     /*
       
  1141      * @Note: Start more than one interface. 
       
  1142      * Here starting vitual tunnel nif interface as a default. @see ethernet ced.xml file in which I have made 
       
  1143      * vTun as default in pref table.
       
  1144      */ 
       
  1145     RConnection vTunConn; // used for vTunnel
       
  1146     RConnection firstConn; 
       
  1147     
       
  1148     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  1149    
       
  1150     if (err != KErrNone)
       
  1151         {
       
  1152         ERR_PRINTF1(_L("Failed to start connections"));
       
  1153         CloseSocketSrv();
       
  1154         SetError(err);
       
  1155         return;
       
  1156         }
       
  1157     
       
  1158     INFO_PRINTF1(_L("Connections started successfully"));
       
  1159    
       
  1160     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,interfaceName,iSuffixList);
       
  1161     
       
  1162     if (KErrNone != err)
       
  1163         {
       
  1164         ERR_PRINTF2(_L("Failed Setting the suffix list with errror : %D"),err);
       
  1165         SetError(err);  
       
  1166         firstConn.Close();
       
  1167         CloseSocketSrv();
       
  1168         return;
       
  1169         }
       
  1170 
       
  1171     // Open implicit resolver.
       
  1172     RHostResolver resolver;
       
  1173     
       
  1174     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp)) != KErrNone)
       
  1175         {
       
  1176         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  1177         firstConn.Close();
       
  1178         vTunConn.Close();
       
  1179         CloseSocketSrv();
       
  1180         SetError(err);        
       
  1181         return;
       
  1182         }       
       
  1183     
       
  1184     INFO_PRINTF1(_L("Connected to Host resolver successfully"));
       
  1185                
       
  1186     TNameEntry nameEntry;
       
  1187     
       
  1188     INFO_PRINTF2(_L("Requesting to resolve hostname: %S"),&hostname);
       
  1189     
       
  1190     if ( (err = resolver.GetByName(hostname,nameEntry)) != KErrNone)
       
  1191       {
       
  1192       ERR_PRINTF3(_L("Failed host resolution for %S with error: %D"),&hostname,err);       
       
  1193       }
       
  1194     else
       
  1195       {
       
  1196       TInetAddr& netAddress = TInetAddr::Cast(nameEntry().iAddr);
       
  1197       
       
  1198       if (netAddress.IsUnspecified())
       
  1199           {
       
  1200           ERR_PRINTF1(_L("Invalid host address"));
       
  1201           err = KErrArgument;
       
  1202           }
       
  1203       else
       
  1204           {
       
  1205           TBuf<KIPAddrLen> address;
       
  1206           netAddress.Output(address);
       
  1207           INFO_PRINTF1(_L("Got valid IP address:"));
       
  1208           INFO_PRINTF2(_L("Host name: %S"),&nameEntry().iName);
       
  1209           INFO_PRINTF2(_L("Host address: %S"),&address);
       
  1210           }
       
  1211       }
       
  1212     
       
  1213     INFO_PRINTF1(_L("Closing host resolver"));
       
  1214     resolver.Close();
       
  1215 
       
  1216     SetError(err);
       
  1217     
       
  1218     INFO_PRINTF1(_L("Closing connections and socket serv session"));
       
  1219     firstConn.Close();
       
  1220     vTunConn.Close();
       
  1221     CloseSocketSrv();           
       
  1222     }
       
  1223 
       
  1224 
       
  1225 
       
  1226 void CDNSSuffixTestWrapper::DoResolveHostWithoutDomainWithSuffixListSetL()
       
  1227     {
       
  1228     INFO_PRINTF1(_L("******************************************************"));
       
  1229     INFO_PRINTF1(_L("DoResolveHostWithoutDomainL with Domain suffix Set"));
       
  1230     INFO_PRINTF1(_L(" - DNS_Suffix_Support_TC003"));
       
  1231     INFO_PRINTF1(_L("******************************************************"));
       
  1232     
       
  1233     TPtrC hostname;
       
  1234     
       
  1235     if (!GetStringFromConfig(KSectionDNSSuffixTest003,KKeyDNSSuffixTestHostname,hostname))
       
  1236         {
       
  1237         ERR_PRINTF1(_L("Failed to read the host name value"));    
       
  1238         SetError(KErrNotFound);
       
  1239         return;
       
  1240         }
       
  1241     else
       
  1242         {
       
  1243         INFO_PRINTF2(_L("Host name: %S"),&hostname);       
       
  1244         }
       
  1245     
       
  1246     TInt err = KErrNone;
       
  1247     
       
  1248     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  1249         {
       
  1250         ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  1251         SetError(err);
       
  1252         return;
       
  1253         }
       
  1254     
       
  1255     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  1256         
       
  1257     RConnection vTunConn; // used for vTunnel
       
  1258     RConnection firstConn; 
       
  1259     
       
  1260     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  1261     
       
  1262     if (err != KErrNone)
       
  1263        {
       
  1264        ERR_PRINTF1(_L("Failed to start connections"));
       
  1265        CloseSocketSrv();
       
  1266        SetError(err);
       
  1267        return;
       
  1268        }
       
  1269 
       
  1270    INFO_PRINTF1(_L("Connections started successfully"));
       
  1271        
       
  1272     // Open explicit resolver with ethernet
       
  1273     RHostResolver resolver;
       
  1274     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp,firstConn)) != KErrNone)
       
  1275         {
       
  1276         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  1277         firstConn.Close();
       
  1278         vTunConn.Close();
       
  1279         CloseSocketSrv();
       
  1280         SetError(err);
       
  1281         return;
       
  1282         }       
       
  1283     
       
  1284     INFO_PRINTF1(_L("Connected to Host resolver successfully"));
       
  1285                
       
  1286     TNameEntry nameEntry;
       
  1287     
       
  1288     if ( (err = resolver.GetByName(hostname,nameEntry)) != KErrNone)
       
  1289       {
       
  1290       ERR_PRINTF3(_L("Failed host resolution for %S with error: %D"),&hostname,err);
       
  1291       INFO_PRINTF1(_L("Test success"));
       
  1292       SetError(err);
       
  1293       }
       
  1294     else
       
  1295       {
       
  1296       TInetAddr address = nameEntry().iAddr;
       
  1297       
       
  1298       if (address.IsUnspecified())
       
  1299           {
       
  1300           ERR_PRINTF1(_L("Invalid host address"));
       
  1301           err = KErrArgument;
       
  1302           }
       
  1303       else
       
  1304           {
       
  1305           TBuf<KIPAddrLen> ipAddr;
       
  1306           address.Output(ipAddr);
       
  1307           INFO_PRINTF1(_L("Got valid IP address:"));
       
  1308           INFO_PRINTF2(_L("Host name: %S"),&nameEntry().iName);
       
  1309           INFO_PRINTF2(_L("Host address: %S"),&ipAddr);
       
  1310           }
       
  1311       SetError(err);
       
  1312       }
       
  1313     
       
  1314     INFO_PRINTF1(_L("Closing host resolver"));
       
  1315     resolver.Close();
       
  1316     firstConn.Close();
       
  1317     vTunConn.Close();   
       
  1318     CloseSocketSrv();           
       
  1319     }
       
  1320 
       
  1321 
       
  1322 void CDNSSuffixTestWrapper::DoResolveHostWithoutDomainWithoutSuffixListL()
       
  1323     {
       
  1324     INFO_PRINTF1(_L("******************************************************"));
       
  1325     INFO_PRINTF1(_L("DoResolveHostWithoutDomainL  With no Suffix list"));
       
  1326     INFO_PRINTF1(_L("DNS_Suffix_Support_TC004"));
       
  1327     INFO_PRINTF1(_L("******************************************************"));
       
  1328     
       
  1329     TPtrC hostname;
       
  1330     
       
  1331     if (!GetStringFromConfig(KSectionDNSSuffixTest004,KKeyDNSSuffixTestHostname,hostname))
       
  1332         {
       
  1333         ERR_PRINTF1(_L("Failed to read the host name value"));    
       
  1334         SetError(KErrNotFound);
       
  1335         return;
       
  1336         }
       
  1337     else
       
  1338         {
       
  1339         INFO_PRINTF2(_L("Host name: %S"),&hostname);       
       
  1340         }
       
  1341     
       
  1342     TInt err(KErrNone);
       
  1343     // Note: Remove the suffix list set on Ethernet interface.
       
  1344   
       
  1345     TName interfaceName;
       
  1346     err = GetFirstInterfaceNameL(interfaceName);   
       
  1347    
       
  1348     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  1349         {
       
  1350         ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  1351         SetError(err);
       
  1352         return;
       
  1353         }
       
  1354     
       
  1355     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  1356         
       
  1357     RConnection vTunConn; // used for vTunnel
       
  1358     RConnection firstConn;
       
  1359     
       
  1360     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  1361     
       
  1362     if (err != KErrNone)
       
  1363       {
       
  1364       ERR_PRINTF1(_L("Failed to start connections"));
       
  1365       CloseSocketSrv();
       
  1366       SetError(err);
       
  1367       return;
       
  1368       }
       
  1369     
       
  1370     /*
       
  1371     * @Note: Remove the suffix list (which we set in TC001) set on the interface by just setting empty list on it.
       
  1372     */
       
  1373     INFO_PRINTF1(_L("Setting empty suffix list on interface:"));
       
  1374     iSuffixList.Reset();
       
  1375     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,interfaceName,iSuffixList);
       
  1376     
       
  1377     if (err != KErrNone)
       
  1378         {
       
  1379         ERR_PRINTF2(_L("Failed to remove the suffix list set on interface with error: %D"),err);
       
  1380         SetError(err);
       
  1381         firstConn.Close();
       
  1382         vTunConn.Close();
       
  1383         CloseSocketSrv();
       
  1384         return;
       
  1385         }
       
  1386     
       
  1387     INFO_PRINTF1(_L("Removed suffix list from interface:"));
       
  1388     
       
  1389     // Open explicit resolver with ethernet
       
  1390     RHostResolver resolver;
       
  1391     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp,firstConn)) != KErrNone)
       
  1392         {
       
  1393         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  1394         firstConn.Close();
       
  1395         vTunConn.Close();
       
  1396         CloseSocketSrv();
       
  1397         SetError(err);
       
  1398         return;
       
  1399         }       
       
  1400     
       
  1401     INFO_PRINTF1(_L("Connected to Host resolver successfully"));
       
  1402                
       
  1403     TNameEntry nameEntry;
       
  1404     
       
  1405     if ( (err = resolver.GetByName(hostname,nameEntry)) != KErrNone)
       
  1406       {
       
  1407       ERR_PRINTF3(_L("Failed host resolution for %S with error: %D"),&hostname,err);
       
  1408       INFO_PRINTF1(_L("Test success"));
       
  1409       SetError(EPass);
       
  1410       }
       
  1411     else
       
  1412       {
       
  1413       TInetAddr address = nameEntry().iAddr;
       
  1414       
       
  1415       if (address.IsUnspecified())
       
  1416           {
       
  1417           ERR_PRINTF1(_L("Invalid host address"));
       
  1418           err = KErrArgument;
       
  1419           }
       
  1420       else
       
  1421           {
       
  1422           TBuf<KIPAddrLen> ipAddr;
       
  1423           address.Output(ipAddr);
       
  1424           INFO_PRINTF1(_L("Got valid IP address:"));
       
  1425           INFO_PRINTF2(_L("Host name: %S"),&nameEntry().iName);
       
  1426           INFO_PRINTF2(_L("Host address: %S"),&ipAddr);
       
  1427           }
       
  1428       SetError(EFail);
       
  1429       }
       
  1430     
       
  1431     INFO_PRINTF1(_L("Closing host resolver"));
       
  1432     resolver.Close();
       
  1433     firstConn.Close();
       
  1434     vTunConn.Close();   
       
  1435     CloseSocketSrv();      
       
  1436     INFO_PRINTF1(_L("DoResolveHostWithoutDomainWithoutSuffixListL - Exit"));
       
  1437     }
       
  1438 
       
  1439 
       
  1440 
       
  1441 void CDNSSuffixTestWrapper::DNSSuffixSupportTC005L()
       
  1442     {
       
  1443     INFO_PRINTF1(_L("****************************************************"));
       
  1444     INFO_PRINTF1(_L("DNSSuffixSupportTC005L - DNS_Suffix_Support_TC005"));
       
  1445     INFO_PRINTF1(_L("****************************************************"));
       
  1446     
       
  1447     TPtrC hostname;
       
  1448     
       
  1449     if (!GetStringFromConfig(KSectionDNSSuffixTest005,KKeyDNSSuffixTestHostname,hostname))
       
  1450         {
       
  1451         ERR_PRINTF1(_L("Failed to read the host name value"));    
       
  1452         SetError(KErrNotFound);
       
  1453         return;
       
  1454         }
       
  1455     else
       
  1456         {
       
  1457         INFO_PRINTF2(_L("Host name: %S"),&hostname);       
       
  1458         }
       
  1459     
       
  1460     TInt err(KErrNone);
       
  1461         
       
  1462     TFileName interfaceName;
       
  1463     
       
  1464     TRAP(err, err = GetFirstInterfaceNameL(interfaceName));
       
  1465     
       
  1466     if (err != KErrNone )
       
  1467         {
       
  1468         ERR_PRINTF2(_L("Failed to get the interface error: %D"),err);
       
  1469         SetError(err);
       
  1470         return;
       
  1471         }
       
  1472     
       
  1473     TPtrC suffixList;    
       
  1474     iSuffixList.Reset();
       
  1475     
       
  1476     if (!GetStringFromConfig(KSectionDNSSuffixTest005,KKeyDNSSuffixTestSuffixList,suffixList))
       
  1477         {
       
  1478         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  1479         SetError(KErrNotFound);
       
  1480         return;
       
  1481         }
       
  1482     else
       
  1483         {
       
  1484         INFO_PRINTF2(_L("Suffix list: %S"),&suffixList);
       
  1485         FillSuffixList(iSuffixList,suffixList);
       
  1486         }
       
  1487      
       
  1488     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  1489         {
       
  1490         ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  1491         SetError(err);
       
  1492         return;
       
  1493         }
       
  1494     
       
  1495     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  1496     
       
  1497     RConnection vTunConn; // used for vTunnel
       
  1498     RConnection firstConn; 
       
  1499     
       
  1500     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  1501     
       
  1502     if (err != KErrNone)
       
  1503        {
       
  1504        ERR_PRINTF1(_L("Failed to start connections"));
       
  1505        CloseSocketSrv();
       
  1506        SetError(err);
       
  1507        return;
       
  1508        }
       
  1509     
       
  1510     INFO_PRINTF1(_L("Connections started successfully"));
       
  1511     
       
  1512     INFO_PRINTF2(_L("Setting suffix list on : %S"),&interfaceName);
       
  1513     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,interfaceName,iSuffixList);    
       
  1514         
       
  1515     if (KErrNone != err)
       
  1516         {
       
  1517         ERR_PRINTF2(_L("Failed Setting the suffix list with errror : %D"),err);
       
  1518         SetError(err);    
       
  1519         firstConn.Close();
       
  1520         vTunConn.Close();
       
  1521         CloseSocketSrv();
       
  1522         return;
       
  1523         }
       
  1524     
       
  1525     INFO_PRINTF1(_L("Suffix list set successfully"));
       
  1526     
       
  1527     INFO_PRINTF1(_L("Creating explicit host resolver"));
       
  1528     
       
  1529     // Open explicit resolver
       
  1530     RHostResolver resolver;
       
  1531     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp,firstConn)) != KErrNone)
       
  1532         {
       
  1533         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  1534         firstConn.Close();
       
  1535         vTunConn.Close();
       
  1536         CloseSocketSrv();
       
  1537         SetError(err);
       
  1538         return;
       
  1539         }       
       
  1540     
       
  1541     INFO_PRINTF1(_L("Connected to Host resolver successfully"));
       
  1542                
       
  1543     TNameEntry nameEntry;
       
  1544     
       
  1545     if ( (err = resolver.GetByName(hostname,nameEntry)) != KErrNone)
       
  1546         {
       
  1547         INFO_PRINTF3(_L("Host resolution for %S with error: %D"),&hostname,err);
       
  1548         INFO_PRINTF1(_L("Test success"));
       
  1549         err = KErrNone;
       
  1550         }    
       
  1551     else
       
  1552         {
       
  1553         err = KErrArgument;
       
  1554         ERR_PRINTF1(_L("Test failed: Expected no resolution, but resolved"));
       
  1555         }
       
  1556     
       
  1557     SetError(err);
       
  1558     INFO_PRINTF1(_L("Closing host resolver, connections and Sock Srv session"));
       
  1559     resolver.Close();
       
  1560     firstConn.Close();
       
  1561     vTunConn.Close();    
       
  1562     CloseSocketSrv();
       
  1563     INFO_PRINTF1(_L("CDNSSuffixTestWrapper::DNSSuffixSupportTC005L - Exit"));
       
  1564     }
       
  1565 
       
  1566 
       
  1567 void CDNSSuffixTestWrapper::DNSSuffixSupportTC006L()
       
  1568     {
       
  1569     INFO_PRINTF1(_L("****************************************************"));
       
  1570     INFO_PRINTF1(_L("DNSSuffixSupportTC006L - DNS_Suffix_Support_TC006"));
       
  1571     INFO_PRINTF1(_L("****************************************************"));
       
  1572     
       
  1573     TInt numberOfHosts(0);
       
  1574     
       
  1575     if (!GetIntFromConfig(KSectionDNSSuffixTest006,KKeyDNSSuffixTest006NoOfHostname,numberOfHosts))
       
  1576         {
       
  1577         ERR_PRINTF1(_L("Failed to read the no of hosts from config"));    
       
  1578         SetError(KErrNotFound);
       
  1579         return;
       
  1580         }
       
  1581     else
       
  1582         {
       
  1583         INFO_PRINTF2(_L("No of hosts: %D"),numberOfHosts);       
       
  1584         }       
       
  1585 
       
  1586     TPtrC hostnames[KMaxHosts];
       
  1587     
       
  1588     for (TInt b=0;b<numberOfHosts;b++)
       
  1589         {
       
  1590         TFileName keyName;
       
  1591         keyName.Format(KKeyDNSSuffixTest006Hostname,b+1);
       
  1592         
       
  1593         if (!GetStringFromConfig(KSectionDNSSuffixTest006,keyName,hostnames[b]))
       
  1594             {
       
  1595             ERR_PRINTF1(_L("Failed to read the 1st host name value"));    
       
  1596             SetError(KErrNotFound);
       
  1597             return;
       
  1598             }
       
  1599         else
       
  1600             {
       
  1601             INFO_PRINTF3(_L("Host name%D: %S"),b,&hostnames[b]);       
       
  1602             }        
       
  1603         }
       
  1604         
       
  1605     TInt err(KErrNone);
       
  1606         
       
  1607     TName interfaceName;
       
  1608     
       
  1609     TRAP(err, err = GetFirstInterfaceNameL(interfaceName));
       
  1610     
       
  1611     if (err != KErrNone )
       
  1612         {
       
  1613         ERR_PRINTF2(_L("Failed to get the interface error: %D"),err);
       
  1614         SetError(err);
       
  1615         return;
       
  1616         }
       
  1617     
       
  1618     TPtrC suffixList;
       
  1619     iSuffixList.Reset();
       
  1620     
       
  1621     if (!GetStringFromConfig(KSectionDNSSuffixTest006,KKeyDNSSuffixTestSuffixList,suffixList))
       
  1622         {
       
  1623         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  1624         SetError(KErrNotFound);
       
  1625         return;
       
  1626         }
       
  1627     else
       
  1628         {
       
  1629         INFO_PRINTF2(_L("Suffix list: %S"),&suffixList);
       
  1630         FillSuffixList(iSuffixList,suffixList);
       
  1631         }
       
  1632      
       
  1633     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  1634         {
       
  1635         ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  1636         SetError(err);
       
  1637         return;
       
  1638         }
       
  1639     
       
  1640     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  1641     
       
  1642     RConnection vTunConn; // used for vTunnel
       
  1643     RConnection firstConn; 
       
  1644     
       
  1645     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  1646     
       
  1647     if (err != KErrNone)
       
  1648       {
       
  1649       ERR_PRINTF1(_L("Failed to start connections"));
       
  1650       CloseSocketSrv();
       
  1651       SetError(err);
       
  1652       return;
       
  1653       }
       
  1654     
       
  1655     INFO_PRINTF1(_L("Connections started successfully"));
       
  1656     
       
  1657     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,interfaceName,iSuffixList);
       
  1658        
       
  1659     if (KErrNone != err)
       
  1660         {
       
  1661         ERR_PRINTF2(_L("Failed Setting the suffix list with errror : %D"),err);
       
  1662         SetError(err);
       
  1663         firstConn.Close();
       
  1664         vTunConn.Close();
       
  1665         CloseSocketSrv();
       
  1666         return;
       
  1667         }
       
  1668 
       
  1669     INFO_PRINTF1(_L("Set suffix list on interface successfully"));
       
  1670     
       
  1671     RHostResolver resolver;
       
  1672     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp,firstConn)) != KErrNone)
       
  1673         {
       
  1674         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  1675         firstConn.Close();
       
  1676         vTunConn.Close();
       
  1677         CloseSocketSrv();
       
  1678         SetError(err);
       
  1679         return;
       
  1680         }       
       
  1681     
       
  1682     INFO_PRINTF1(_L("Connected to Host resolver successfully"));
       
  1683                
       
  1684     TNameEntry nameEntry[KMaxHosts];
       
  1685     
       
  1686     // Resolve all three hosts
       
  1687     for (TInt a=0;a<numberOfHosts;a++)
       
  1688         {
       
  1689         INFO_PRINTF2(_L("Resolving host: %S"),&hostnames[a]);
       
  1690         
       
  1691         if ( (err = resolver.GetByName(hostnames[a],nameEntry[a])) != KErrNone)
       
  1692             {
       
  1693             INFO_PRINTF3(_L("Host resolution for %S failed with error: %D"),&hostnames[a],err);
       
  1694             INFO_PRINTF1(_L("Test Failed"));
       
  1695             SetError(err);
       
  1696             break;
       
  1697             }
       
  1698         }
       
  1699     
       
  1700     if (err == KErrNone)
       
  1701         {
       
  1702         for (TInt a=0;a<numberOfHosts;a++)
       
  1703             {
       
  1704             TInetAddr address = nameEntry[a]().iAddr;
       
  1705             
       
  1706             if (address.IsUnspecified())
       
  1707                 {
       
  1708                 ERR_PRINTF1(_L("Invalid host address"));
       
  1709                 err = KErrArgument;
       
  1710                 }
       
  1711             else
       
  1712                 {
       
  1713                 TBuf<KIPAddrLen> ipAddr;
       
  1714                 address.Output(ipAddr);
       
  1715                 INFO_PRINTF1(_L("Got valid IP address:"));
       
  1716                 INFO_PRINTF2(_L("Host name: %S"),&nameEntry[a]().iName);
       
  1717                 INFO_PRINTF2(_L("Host address: %S"),&ipAddr);
       
  1718                 }            
       
  1719             }       
       
  1720         }
       
  1721     
       
  1722     SetError(err);
       
  1723     INFO_PRINTF1(_L("Closing host resolver, connections and Sock Srv session"));
       
  1724     resolver.Close();
       
  1725     firstConn.Close();
       
  1726     vTunConn.Close();    
       
  1727     CloseSocketSrv();
       
  1728     INFO_PRINTF1(_L("CDNSSuffixTestWrapper::DNSSuffixSupportTC006L - Exit"));
       
  1729     }
       
  1730 
       
  1731 
       
  1732 /*
       
  1733  * TODO: Needs to find the way to change the ranking IAP's programatically. 
       
  1734  * Note: Before running this test case make ethernet iap as default
       
  1735  * by changing its ranking to one(1). 
       
  1736  * @ See te_dnssuffixcedv2.xml
       
  1737  * @See te_dnssuffixsuite.script for below line
       
  1738  * ced -i z:\testdata\configs\te_dnssuffixcedv2.xml 
       
  1739  *
       
  1740  */
       
  1741 void CDNSSuffixTestWrapper::DNSSuffixSupportTC007L()
       
  1742     {
       
  1743     INFO_PRINTF1(_L("**********************************************************************"));
       
  1744     INFO_PRINTF1(_L("DNS_Suffix_Test007L - DNS_Suffix_Support_007"));
       
  1745     INFO_PRINTF1(_L("**********************************************************************"));
       
  1746     
       
  1747     TPtrC validHostname;
       
  1748     TPtrC inValidHostname;
       
  1749     
       
  1750     if (!GetStringFromConfig(KSectionDNSSuffixTest007,KKeyDNSSuffixTest007ValidHostname,validHostname))
       
  1751         {
       
  1752         ERR_PRINTF1(_L("Failed to read the valid host name from config"));    
       
  1753         SetError(KErrNotFound);
       
  1754         return;
       
  1755         }
       
  1756     else
       
  1757         {
       
  1758         INFO_PRINTF2(_L("Valid Host name: %S"),&validHostname);       
       
  1759         }
       
  1760     
       
  1761     if (!GetStringFromConfig(KSectionDNSSuffixTest007,KKeyDNSSuffixTest007InValidHostname,inValidHostname))
       
  1762         {
       
  1763         ERR_PRINTF1(_L("Failed to read the invalid host name from config"));    
       
  1764         SetError(KErrNotFound);
       
  1765         return;
       
  1766         }
       
  1767     else
       
  1768         {
       
  1769         INFO_PRINTF2(_L("Invalid Host name: %S"),&inValidHostname);       
       
  1770         }   
       
  1771    
       
  1772     // @Santosh K Patil
       
  1773     // Note: Remove the suffix lists from the interfaces set by previous test cases, if any.    
       
  1774     // Note: start multiple interfaces
       
  1775     
       
  1776     TFileName interfaceName;
       
  1777     TInt err = KErrNone;
       
  1778     err = GetFirstInterfaceNameL(interfaceName);
       
  1779     
       
  1780     /*
       
  1781      * @Note: Remove the suffix list set on the interface (which we set in earlier test cases) 
       
  1782      *  by just setting empty list on it.
       
  1783      */
       
  1784     INFO_PRINTF1(_L("Setting empty suffix list on interface:"));
       
  1785     iSuffixList.Reset();
       
  1786     
       
  1787     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  1788        {
       
  1789        ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  1790        SetError(err);
       
  1791        return;
       
  1792        }
       
  1793     
       
  1794     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  1795     
       
  1796     RConnection vTunConn; // used for vTunnel
       
  1797     RConnection firstConn; 
       
  1798     
       
  1799     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  1800     
       
  1801     if (err != KErrNone)
       
  1802       {
       
  1803       ERR_PRINTF1(_L("Failed to start connections"));
       
  1804       CloseSocketSrv();
       
  1805       SetError(err);
       
  1806       return;
       
  1807       }
       
  1808     
       
  1809     INFO_PRINTF1(_L("Connections started successfully"));
       
  1810     
       
  1811     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,interfaceName,iSuffixList);
       
  1812            
       
  1813     if (KErrNone != err)
       
  1814         {
       
  1815         ERR_PRINTF2(_L("Failed Setting the suffix list with errror : %D"),err);
       
  1816         SetError(err);
       
  1817         firstConn.Close();
       
  1818         vTunConn.Close();
       
  1819         CloseSocketSrv();
       
  1820         return;
       
  1821         }
       
  1822     
       
  1823     INFO_PRINTF1(_L("Removed suffix list from interface:"));
       
  1824 
       
  1825     INFO_PRINTF1(_L("Opening implicit resolver"));
       
  1826     // Open implicit resolver.
       
  1827     RHostResolver resolver;
       
  1828     
       
  1829     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp)) != KErrNone)
       
  1830         {
       
  1831         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  1832         firstConn.Close();
       
  1833         vTunConn.Close();
       
  1834         CloseSocketSrv();
       
  1835         SetError(err);        
       
  1836         return;
       
  1837         }       
       
  1838     
       
  1839     INFO_PRINTF1(_L("Connected to Host resolver successfully"));
       
  1840                
       
  1841     TNameEntry nameEntry;
       
  1842     
       
  1843     INFO_PRINTF2(_L("Requesting to resolve valid hostname: %S"),&validHostname);
       
  1844     
       
  1845     if ( (err = resolver.GetByName(validHostname,nameEntry)) != KErrNone)
       
  1846       {
       
  1847       ERR_PRINTF3(_L("Host resolution failed for %S with error: %D"),&validHostname,err);       
       
  1848       }
       
  1849     else
       
  1850       {
       
  1851       TInetAddr& netAddress = TInetAddr::Cast(nameEntry().iAddr);
       
  1852       
       
  1853       if (netAddress.IsUnspecified())
       
  1854           {
       
  1855           ERR_PRINTF1(_L("Invalid host address"));
       
  1856           err = KErrArgument;
       
  1857           }
       
  1858       else
       
  1859           {
       
  1860           TBuf<KIPAddrLen> address;
       
  1861           netAddress.Output(address);
       
  1862           INFO_PRINTF1(_L("Got valid IP address:"));
       
  1863           INFO_PRINTF2(_L("Host name: %S"),&nameEntry().iName);
       
  1864           INFO_PRINTF2(_L("Host address: %S"),&address);
       
  1865           }
       
  1866       }    
       
  1867     
       
  1868     if (err == KErrNone)
       
  1869         {
       
  1870         TNameEntry nameEntry2;
       
  1871         
       
  1872         INFO_PRINTF2(_L("Requesting to resolve invalid hostname: %S"),&inValidHostname);
       
  1873         
       
  1874         if ( (err = resolver.GetByName(inValidHostname,nameEntry2)) != KErrNone)
       
  1875           {
       
  1876           INFO_PRINTF3(_L("Host resolution failed for %S with error: %D"),&inValidHostname,err);
       
  1877           INFO_PRINTF1(_L("Test scenario passed"));
       
  1878           err = KErrNone;
       
  1879           }
       
  1880         else
       
  1881           {
       
  1882           err = KErrArgument;
       
  1883           INFO_PRINTF1(_L("Error: Seems host is resolvable"));
       
  1884           }        
       
  1885         }
       
  1886     
       
  1887     SetError(err);
       
  1888     
       
  1889     INFO_PRINTF1(_L("Closing host resolver"));
       
  1890     resolver.Close();    
       
  1891     
       
  1892     INFO_PRINTF1(_L("Closing connections and socket serv session"));
       
  1893     firstConn.Close();
       
  1894     vTunConn.Close();
       
  1895     CloseSocketSrv();           
       
  1896     INFO_PRINTF1(_L("CDNSSuffixTestWrapper::DNSSuffixSupportTC007L - Exit"));
       
  1897     }
       
  1898 
       
  1899 
       
  1900 void CDNSSuffixTestWrapper::DNSSuffixSupportTC008L()
       
  1901     {
       
  1902     INFO_PRINTF1(_L("**********************************************************************"));
       
  1903     INFO_PRINTF1(_L("DNS_Suffix_Test008L - DNS_Suffix_Support_008"));
       
  1904     INFO_PRINTF1(_L("**********************************************************************"));
       
  1905     
       
  1906     TPtrC hostname1;
       
  1907     TPtrC hostname2;
       
  1908     
       
  1909     if (!GetStringFromConfig(KSectionDNSSuffixTest008,KKeyDNSSuffixTestHostname1,hostname1))
       
  1910         {
       
  1911         ERR_PRINTF1(_L("Failed to read the 1 host name from config"));    
       
  1912         SetError(KErrNotFound);
       
  1913         return;
       
  1914         }
       
  1915     else
       
  1916         {
       
  1917         INFO_PRINTF2(_L("Host name1: %S"),&hostname1);       
       
  1918         }
       
  1919     
       
  1920     if (!GetStringFromConfig(KSectionDNSSuffixTest008,KKeyDNSSuffixTestHostname2,hostname2))
       
  1921         {
       
  1922         ERR_PRINTF1(_L("Failed to read the 2 host name from config"));    
       
  1923         SetError(KErrNotFound);
       
  1924         return;
       
  1925         }
       
  1926     else
       
  1927         {
       
  1928         INFO_PRINTF2(_L("Host name2: %S"),&hostname2);       
       
  1929         }   
       
  1930    
       
  1931     // @Santosh K Patil
       
  1932     // @note: Set suffix lists on both interfaces (eth and vtun)    
       
  1933     // @note: start multiple interfaces
       
  1934     
       
  1935     TName ethernetInterface;
       
  1936     TName vTunInterface;
       
  1937     TInt err = KErrNone;
       
  1938     err = GetFirstInterfaceNameL(ethernetInterface);
       
  1939     
       
  1940     if (KErrNone != err)
       
  1941         { 
       
  1942         ERR_PRINTF1(_L("Failed get the name of the interface (ethernet)"));    
       
  1943         SetError(KErrNotFound);
       
  1944         return;
       
  1945         }
       
  1946     
       
  1947 #ifndef DISABLE_TUNDRIVER
       
  1948     err = GetSecondInterfaceNameL(vTunInterface);
       
  1949     
       
  1950     if (KErrNone != err)
       
  1951         { 
       
  1952         ERR_PRINTF1(_L("Failed get the name of the interface (vTun)"));    
       
  1953         SetError(KErrNotFound);
       
  1954         return;
       
  1955         }
       
  1956 #endif
       
  1957    
       
  1958     INFO_PRINTF1(_L("Setting suffix list on interface:"));
       
  1959     
       
  1960     iSuffixList2.Reset();
       
  1961     
       
  1962     TPtrC suffixList;
       
  1963     if (!GetStringFromConfig(KSectionDNSSuffixTest008,KKeyDNSSuffixTestSuffixList,suffixList))
       
  1964         {
       
  1965         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  1966         SetError(KErrNotFound);
       
  1967         return;
       
  1968         }
       
  1969     else
       
  1970         {
       
  1971         INFO_PRINTF2(_L("Suffix list: %S"),&suffixList);
       
  1972         FillSuffixList(iSuffixList2,suffixList);
       
  1973         }   
       
  1974     
       
  1975     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  1976        {
       
  1977        ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  1978        SetError(err);
       
  1979        return;
       
  1980        }
       
  1981     
       
  1982     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  1983     
       
  1984     RConnection vTunConn; // used for vTunnel
       
  1985     RConnection firstConn; 
       
  1986     
       
  1987     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  1988     
       
  1989     if (err != KErrNone)
       
  1990       {
       
  1991       ERR_PRINTF1(_L("Failed to start connections"));
       
  1992       CloseSocketSrv();
       
  1993       SetError(err);
       
  1994       return;
       
  1995       }
       
  1996     
       
  1997     INFO_PRINTF1(_L("Connections started successfully"));
       
  1998     
       
  1999     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,ethernetInterface,iSuffixList2);
       
  2000              
       
  2001     if (KErrNone != err)
       
  2002         {
       
  2003         ERR_PRINTF3(_L("Failed Setting the suffix list on %S with errror : %D"),&ethernetInterface,err);
       
  2004         SetError(err);
       
  2005         firstConn.Close();
       
  2006         vTunConn.Close();
       
  2007         CloseSocketSrv();
       
  2008         return;
       
  2009         }
       
  2010     
       
  2011     INFO_PRINTF2(_L("Set suffix list on %S successfully"),&ethernetInterface);
       
  2012     
       
  2013 #ifndef DISABLE_TUNDRIVER
       
  2014     err = SetDNSSuffixListOnInterface(iSocketServ,vTunConn,vTunInterface,iSuffixList2);
       
  2015                
       
  2016     if (KErrNone != err)
       
  2017         {
       
  2018         ERR_PRINTF3(_L("Failed Setting the suffix list on %S with errror : %D"),&vTunInterface,err);
       
  2019         SetError(err);
       
  2020         firstConn.Close();
       
  2021         vTunConn.Close();
       
  2022         CloseSocketSrv();
       
  2023         return;
       
  2024         }
       
  2025     
       
  2026     INFO_PRINTF2(_L("Set suffix list on %S successfully"),&vTunInterface);        
       
  2027 #endif
       
  2028     
       
  2029     INFO_PRINTF1(_L("Opening implicit resolver"));
       
  2030     // Open implicit resolver.
       
  2031     RHostResolver resolver;
       
  2032     INFO_PRINTF1(_L("Creating implicit resolver"));
       
  2033     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp)) != KErrNone)
       
  2034         {
       
  2035         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  2036         firstConn.Close();
       
  2037         vTunConn.Close();
       
  2038         CloseSocketSrv();
       
  2039         SetError(err);        
       
  2040         return;
       
  2041         }       
       
  2042     
       
  2043     INFO_PRINTF1(_L("Connected to implicit Host resolver successfully"));
       
  2044                
       
  2045     TNameEntry nameEntry;
       
  2046     
       
  2047     INFO_PRINTF2(_L("Requesting to resolve hostname: %S"),&hostname1);
       
  2048     
       
  2049     if ( (err = resolver.GetByName(hostname1,nameEntry)) != KErrNone)
       
  2050       {
       
  2051       ERR_PRINTF3(_L("Failed to resolve the host %S with error: %D"),&hostname1,err);       
       
  2052       }
       
  2053     else
       
  2054       {
       
  2055       TInetAddr& netAddress = TInetAddr::Cast(nameEntry().iAddr);
       
  2056       
       
  2057       if (netAddress.IsUnspecified())
       
  2058           {
       
  2059           ERR_PRINTF1(_L("Invalid host address"));
       
  2060           err = KErrArgument;
       
  2061           }
       
  2062       else
       
  2063           {
       
  2064           TBuf<KIPAddrLen> address;
       
  2065           netAddress.Output(address);
       
  2066           INFO_PRINTF1(_L("Got valid IP address:"));
       
  2067           INFO_PRINTF2(_L("Host name: %S"),&nameEntry().iName);
       
  2068           INFO_PRINTF2(_L("Host address: %S"),&address);
       
  2069           }
       
  2070       }    
       
  2071     
       
  2072     INFO_PRINTF1(_L("Closing implicit host resolver"));
       
  2073     resolver.Close(); 
       
  2074         
       
  2075 #ifndef DISABLE_TUNDRIVER
       
  2076     if (err == KErrNone)
       
  2077         {
       
  2078         // Open explicit resolver.
       
  2079         RHostResolver resolver2;
       
  2080         INFO_PRINTF1(_L("Creating explicit resolver"));
       
  2081         if ( (err = resolver2.Open(iSocketServ,KAfInet,KProtocolInetUdp,vTunConn)) != KErrNone)
       
  2082             {
       
  2083             ERR_PRINTF2(_L("Failed Connecting to explicit Host resolver with error: %D"),err);
       
  2084             firstConn.Close();
       
  2085             vTunConn.Close();
       
  2086             CloseSocketSrv();
       
  2087             SetError(err);        
       
  2088             return;
       
  2089             }       
       
  2090         
       
  2091         INFO_PRINTF1(_L("Connected to explicit Host resolver successfully"));
       
  2092         
       
  2093         
       
  2094         TNameEntry nameEntry2;        
       
  2095         INFO_PRINTF2(_L("Requesting to resolve hostname: %S"),&hostname2);
       
  2096         
       
  2097         if ( (err = resolver2.GetByName(hostname2,nameEntry2)) != KErrNone)
       
  2098           {
       
  2099           INFO_PRINTF3(_L("Host resolution failed for %S with error: %D"),&hostname2,err);
       
  2100           INFO_PRINTF1(_L("Test scenario passed"));
       
  2101           err = KErrNone;
       
  2102           }
       
  2103         else
       
  2104           {
       
  2105           err = KErrArgument;
       
  2106           INFO_PRINTF1(_L("Error: Seems host is resolvable"));
       
  2107           }      
       
  2108         
       
  2109         INFO_PRINTF1(_L("Closing explicit host resolver"));
       
  2110         resolver2.Close();    
       
  2111         }
       
  2112 #endif
       
  2113     
       
  2114     SetError(err);
       
  2115     
       
  2116     INFO_PRINTF1(_L("Closing connections and socket serv session"));
       
  2117     firstConn.Close();
       
  2118     vTunConn.Close();
       
  2119     CloseSocketSrv();           
       
  2120     INFO_PRINTF1(_L("CDNSSuffixTestWrapper::DNSSuffixSupportTC008L - Exit"));
       
  2121     }
       
  2122 
       
  2123 
       
  2124 // TODO: Cross check the correct ness of the implementation.
       
  2125 void CDNSSuffixTestWrapper::DNSSuffixSupportTC009L()
       
  2126     {
       
  2127     INFO_PRINTF1(_L("**********************************************************************"));
       
  2128     INFO_PRINTF1(_L("DNSSuffixSupportTC009L - DNS_Suffix_Support_009"));
       
  2129     INFO_PRINTF1(_L("**********************************************************************"));
       
  2130     
       
  2131     TPtrC hostname1;
       
  2132     TPtrC hostname2;
       
  2133     
       
  2134     if (!GetStringFromConfig(KSectionDNSSuffixTest009,KKeyDNSSuffixTestHostname1,hostname1))
       
  2135         {
       
  2136         ERR_PRINTF1(_L("Failed to read the 1 host name from config"));    
       
  2137         SetError(KErrNotFound);
       
  2138         return;
       
  2139         }
       
  2140     else
       
  2141         {
       
  2142         INFO_PRINTF2(_L("Host name1: %S"),&hostname1);       
       
  2143         }
       
  2144     
       
  2145     if (!GetStringFromConfig(KSectionDNSSuffixTest009,KKeyDNSSuffixTestHostname2,hostname2))
       
  2146         {
       
  2147         ERR_PRINTF1(_L("Failed to read the 2 host name from config"));    
       
  2148         SetError(KErrNotFound);
       
  2149         return;
       
  2150         }
       
  2151     else
       
  2152         {
       
  2153         INFO_PRINTF2(_L("Host name2: %S"),&hostname2);       
       
  2154         }
       
  2155     
       
  2156     /*
       
  2157      * @Santosh K Patil        
       
  2158      * @note: start multiple interfaces
       
  2159      * Set suffix lists on vTunnel interface    
       
  2160      * Open explicit connection on other interface
       
  2161      */
       
  2162      TInt err = KErrNone;
       
  2163 #ifndef DISABLE_TUNDRIVER
       
  2164     TFileName vTunInterface;
       
  2165     err = GetSecondInterfaceNameL(vTunInterface);
       
  2166     
       
  2167     if (KErrNone != err)
       
  2168         { 
       
  2169         ERR_PRINTF1(_L("Failed get the name of the interface (vTun)"));    
       
  2170         SetError(KErrNotFound);
       
  2171         return;
       
  2172         }    
       
  2173    
       
  2174     INFO_PRINTF1(_L("Setting suffix list on vTun interface:"));
       
  2175     
       
  2176     iSuffixList.Reset();
       
  2177     
       
  2178     TPtrC suffixList;
       
  2179     if (!GetStringFromConfig(KSectionDNSSuffixTest009,KKeyDNSSuffixTestSuffixList,suffixList))
       
  2180         {
       
  2181         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  2182         SetError(KErrNotFound);
       
  2183         return;
       
  2184         }
       
  2185     else
       
  2186         {
       
  2187         INFO_PRINTF2(_L("Suffix list: %S"),&suffixList);
       
  2188         FillSuffixList(iSuffixList,suffixList);
       
  2189         }
       
  2190 #endif
       
  2191 
       
  2192     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  2193        {
       
  2194        ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  2195        SetError(err);
       
  2196        return;
       
  2197        }
       
  2198     
       
  2199     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  2200     
       
  2201     RConnection vTunConn; // used for vTunnel
       
  2202     RConnection firstConn; 
       
  2203     
       
  2204     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  2205     
       
  2206     if (err != KErrNone)
       
  2207       {
       
  2208       ERR_PRINTF1(_L("Failed to start connections"));
       
  2209       CloseSocketSrv();
       
  2210       SetError(err);
       
  2211       return;
       
  2212       }
       
  2213     
       
  2214     INFO_PRINTF1(_L("Connections started successfully"));
       
  2215     
       
  2216 #ifndef DISABLE_TUNDRIVER
       
  2217     err = SetDNSSuffixListOnInterface(iSocketServ,vTunConn,vTunInterface,iSuffixList);
       
  2218                    
       
  2219     if (KErrNone != err)
       
  2220         {
       
  2221         ERR_PRINTF3(_L("Failed Setting the suffix list on %S with errror : %D"),&vTunInterface,err);
       
  2222         SetError(err);
       
  2223         firstConn.Close();
       
  2224         vTunConn.Close();
       
  2225         CloseSocketSrv();
       
  2226         return;
       
  2227         }
       
  2228     
       
  2229     INFO_PRINTF2(_L("Set suffix list on %S successfully"),&vTunInterface);  
       
  2230 #endif
       
  2231 
       
  2232     INFO_PRINTF1(_L("Opening explicit resolver"));
       
  2233     // Open implicit resolver.
       
  2234     RHostResolver resolver;
       
  2235     INFO_PRINTF1(_L("Creating explicit resolver"));
       
  2236     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp,firstConn)) != KErrNone)
       
  2237         {
       
  2238         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  2239         firstConn.Close();
       
  2240         vTunConn.Close();
       
  2241         CloseSocketSrv();
       
  2242         SetError(err);        
       
  2243         return;
       
  2244         }       
       
  2245     
       
  2246     INFO_PRINTF1(_L("Connected to explicit Host resolver successfully"));
       
  2247                
       
  2248     TNameEntry nameEntry;
       
  2249     
       
  2250     INFO_PRINTF2(_L("Requesting to resolve hostname: %S"),&hostname1);
       
  2251     
       
  2252     if ( (err = resolver.GetByName(hostname1,nameEntry)) != KErrNone)
       
  2253       {
       
  2254       ERR_PRINTF3(_L("Failed to resolve the host %S with error: %D"),&hostname1,err);       
       
  2255       }
       
  2256     else
       
  2257       {
       
  2258       TInetAddr& netAddress = TInetAddr::Cast(nameEntry().iAddr);
       
  2259       
       
  2260       if (netAddress.IsUnspecified())
       
  2261           {
       
  2262           ERR_PRINTF1(_L("Invalid host address"));
       
  2263           err = KErrArgument;
       
  2264           }
       
  2265       else
       
  2266           {
       
  2267           TBuf<KIPAddrLen> address;
       
  2268           netAddress.Output(address);
       
  2269           INFO_PRINTF1(_L("Got valid IP address:"));
       
  2270           INFO_PRINTF2(_L("Host name: %S"),&nameEntry().iName);
       
  2271           INFO_PRINTF2(_L("Host address: %S"),&address);
       
  2272           }
       
  2273       }
       
  2274         
       
  2275     if (err == KErrNone)
       
  2276         { 
       
  2277         TNameEntry nameEntry2;        
       
  2278         INFO_PRINTF2(_L("Requesting to resolve hostname: %S"),&hostname2);
       
  2279         
       
  2280         if ( (err = resolver.GetByName(hostname2,nameEntry2)) != KErrNone)
       
  2281           {
       
  2282           INFO_PRINTF3(_L("Host resolution failed for %S with error: %D"),&hostname2,err);
       
  2283           INFO_PRINTF1(_L("Test scenario passed"));
       
  2284           err = KErrNone;
       
  2285           }
       
  2286         else
       
  2287           {
       
  2288           // TODO: We have to change this once we come up with end to end setup for VTun err = KErrArgument;
       
  2289           INFO_PRINTF1(_L("We assumed that host is resolved through explicit connection and hence test is pass."));
       
  2290           INFO_PRINTF1(_L("We have to change this once we come up with end to end setup for VTun."));
       
  2291           err = KErrNone;
       
  2292          // INFO_PRINTF1(_L("Error: Seems host is resolvable"));
       
  2293           } 
       
  2294         }   
       
  2295     
       
  2296     SetError(err);
       
  2297 
       
  2298     INFO_PRINTF1(_L("Closing host resolver"));
       
  2299     resolver.Close(); 
       
  2300     
       
  2301     INFO_PRINTF1(_L("Closing connections and socket serv session"));
       
  2302     firstConn.Close();
       
  2303     vTunConn.Close();
       
  2304     CloseSocketSrv();           
       
  2305     INFO_PRINTF1(_L("CDNSSuffixTestWrapper::DNSSuffixSupportTC009L - Exit"));
       
  2306     }
       
  2307 
       
  2308 
       
  2309 // TODO: If I set suffix list name of length with max size then client panic's.
       
  2310 void CDNSSuffixTestWrapper::DNSSuffixSupportTC010L()
       
  2311     {
       
  2312     INFO_PRINTF1(_L("**********************************************************************"));
       
  2313     INFO_PRINTF1(_L("DNSSuffixSupportTC010L - DNS_Suffix_Support_010"));
       
  2314     INFO_PRINTF1(_L("**********************************************************************"));
       
  2315     
       
  2316     TPtrC hostname;
       
  2317     
       
  2318     if (!GetStringFromConfig(KSectionDNSSuffixTest010,KKeyDNSSuffixTestHostname,hostname))
       
  2319         {
       
  2320         ERR_PRINTF1(_L("Failed to read the host name from config"));    
       
  2321         SetError(KErrNotFound);
       
  2322         return;
       
  2323         }
       
  2324     else
       
  2325         {
       
  2326         INFO_PRINTF2(_L("Host name1: %S"),&hostname);       
       
  2327         }
       
  2328     
       
  2329     // @Santosh K Patil     
       
  2330     // @note: start multiple interfaces
       
  2331     // @note: Set long suffix lists on both interface  
       
  2332     // @note: Create explicit resolver and set the suffixlist with max size.
       
  2333     
       
  2334     TFileName ethernetInterface;
       
  2335     TInt err = KErrNone;
       
  2336     err = GetFirstInterfaceNameL(ethernetInterface);
       
  2337     
       
  2338     if (KErrNone != err)
       
  2339         { 
       
  2340         ERR_PRINTF1(_L("Failed get the name of the interface (ethernet)"));    
       
  2341         SetError(KErrNotFound);
       
  2342         return;
       
  2343         }
       
  2344   
       
  2345     INFO_PRINTF1(_L("Setting suffix list on interface:"));
       
  2346     iSuffixList.Reset();
       
  2347     
       
  2348     
       
  2349     // @Ganesh - Constructing suffix list for FillSuffixList with 3 separate suffix name entries in ini
       
  2350     // @Ganesh - as the names are too long for the parser to parse and add it in one GetStringFromConfig call 
       
  2351     TPtrC suffixName;
       
  2352     TBuf<1024> suffixList;
       
  2353     if (!GetStringFromConfig(KSectionDNSSuffixTest010,KKeyDNSSuffixTestSuffixList1,suffixName))
       
  2354         {
       
  2355         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  2356         SetError(KErrNotFound);
       
  2357         return;
       
  2358         }
       
  2359     else
       
  2360         {
       
  2361         INFO_PRINTF1(_L("Suffix name:"));
       
  2362         INFO_PRINTF2(_L("%S"),&suffixName);
       
  2363         suffixList.Append(suffixName);
       
  2364         suffixList.Append(_L(";"));
       
  2365         }
       
  2366 
       
  2367     if (!GetStringFromConfig(KSectionDNSSuffixTest010,KKeyDNSSuffixTestSuffixList2,suffixName))
       
  2368         {
       
  2369         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  2370         SetError(KErrNotFound);
       
  2371         return;
       
  2372         }
       
  2373     else
       
  2374         {
       
  2375         INFO_PRINTF1(_L("Suffix name:"));
       
  2376         INFO_PRINTF2(_L("%S"),&suffixName);
       
  2377         suffixList.Append(suffixName);
       
  2378         suffixList.Append(_L(";"));
       
  2379         }
       
  2380     
       
  2381     if (!GetStringFromConfig(KSectionDNSSuffixTest010,KKeyDNSSuffixTestSuffixList3,suffixName))
       
  2382         {
       
  2383         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  2384         SetError(KErrNotFound);
       
  2385         return;
       
  2386         }
       
  2387     else
       
  2388         {
       
  2389         INFO_PRINTF1(_L("Suffix name:"));
       
  2390         INFO_PRINTF2(_L("%S"),&suffixName);
       
  2391         suffixList.Append(suffixName);
       
  2392         }
       
  2393     FillSuffixList(iSuffixList,suffixList);
       
  2394     
       
  2395     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  2396        {
       
  2397        ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  2398        SetError(err);
       
  2399        return;
       
  2400        }
       
  2401     
       
  2402     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  2403     
       
  2404     RConnection vTunConn; // used for vTunnel
       
  2405     RConnection firstConn; 
       
  2406     
       
  2407     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  2408     
       
  2409     if (err != KErrNone)
       
  2410       {
       
  2411       ERR_PRINTF1(_L("Failed to start connections"));
       
  2412       CloseSocketSrv();
       
  2413       SetError(err);
       
  2414       return;
       
  2415       }
       
  2416     
       
  2417     INFO_PRINTF1(_L("Connections started successfully"));
       
  2418     
       
  2419     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,ethernetInterface,iSuffixList);
       
  2420                   
       
  2421     if (KErrNone != err)
       
  2422         {
       
  2423         ERR_PRINTF3(_L("Failed Setting the suffix list on %S with errror : %D"),&ethernetInterface,err);
       
  2424         SetError(err);
       
  2425         firstConn.Close();
       
  2426         vTunConn.Close();
       
  2427         CloseSocketSrv();
       
  2428         return;
       
  2429         }
       
  2430     
       
  2431     INFO_PRINTF2(_L("Set suffix list on %S successfully"),&ethernetInterface);  
       
  2432     
       
  2433     INFO_PRINTF1(_L("Opening explicit resolver"));
       
  2434     
       
  2435     RHostResolver resolver;
       
  2436     INFO_PRINTF1(_L("Creating explicit resolver"));
       
  2437     if ( (err = resolver.Open(iSocketServ,KAfInet,KProtocolInetUdp,firstConn)) != KErrNone)
       
  2438         {
       
  2439         ERR_PRINTF2(_L("Failed Connecting to Host resolver with error: %D"),err);
       
  2440         firstConn.Close();
       
  2441         vTunConn.Close();
       
  2442         CloseSocketSrv();
       
  2443         SetError(err);        
       
  2444         return;
       
  2445         }       
       
  2446     
       
  2447     INFO_PRINTF1(_L("Connected to explicit Host resolver successfully"));
       
  2448                
       
  2449     TNameEntry nameEntry;
       
  2450     
       
  2451     INFO_PRINTF2(_L("Requesting to resolve hostname: %S"),&hostname);
       
  2452     
       
  2453     if ( (err = resolver.GetByName(hostname,nameEntry)) != KErrNone)
       
  2454       {
       
  2455       INFO_PRINTF3(_L("Failed to resolve the host %S with error: %D"),&hostname,err);   
       
  2456       INFO_PRINTF1(_L("Test Pass"));
       
  2457       err = KErrNone;
       
  2458       }
       
  2459     else
       
  2460       {
       
  2461       err = KErrArgument;
       
  2462       INFO_PRINTF1(_L("Host seems to be resolvable"));
       
  2463       }    
       
  2464     
       
  2465     SetError(err);
       
  2466     
       
  2467     INFO_PRINTF1(_L("Closing host resolver"));
       
  2468     resolver.Close();  
       
  2469     
       
  2470     INFO_PRINTF1(_L("Closing connections and socket serv session"));
       
  2471     firstConn.Close();
       
  2472     vTunConn.Close();
       
  2473     CloseSocketSrv();           
       
  2474     INFO_PRINTF1(_L("CDNSSuffixTestWrapper::DNSSuffixSupportTC010L - Exit"));
       
  2475     }
       
  2476 
       
  2477 
       
  2478 /*
       
  2479  * @Test: Connection dissconnection test
       
  2480  * 
       
  2481  * Make vTun as default interface
       
  2482  * Set suffix on ethernet
       
  2483  * Open implicit resolver (assumed that it is opened on vTun)
       
  2484  * Request for name resolution (Async one)
       
  2485  * Stop the connection and observe the behaviour.(Expected, resolution should fail gracefully)
       
  2486  * With appropriate error code.
       
  2487  * 
       
  2488  */
       
  2489 void CDNSSuffixTestWrapper::DNSSuffixSupportTC011L()
       
  2490     {
       
  2491     INFO_PRINTF1(_L("**********************************************************************"));
       
  2492     INFO_PRINTF1(_L("DNSSuffixSupportTC011L - DNS_Suffix_Support_011"));
       
  2493     INFO_PRINTF1(_L("**********************************************************************"));
       
  2494     
       
  2495     TPtrC hostname;
       
  2496     
       
  2497     if (!GetStringFromConfig(KSectionDNSSuffixTest011,KKeyDNSSuffixTestHostname,hostname))
       
  2498         {
       
  2499         ERR_PRINTF1(_L("Failed to read the host name from config"));    
       
  2500         SetError(KErrNotFound);
       
  2501         return;
       
  2502         }
       
  2503     else
       
  2504         {
       
  2505         INFO_PRINTF2(_L("Host name1: %S"),&hostname);       
       
  2506         }
       
  2507     
       
  2508     TFileName ethernetInterface;
       
  2509     TInt err = KErrNone;
       
  2510     err = GetFirstInterfaceNameL(ethernetInterface);
       
  2511     
       
  2512     if (KErrNone != err)
       
  2513         { 
       
  2514         ERR_PRINTF1(_L("Failed get the name of the interface (ethernet)"));    
       
  2515         SetError(KErrNotFound);
       
  2516         return;
       
  2517         }
       
  2518   
       
  2519     INFO_PRINTF1(_L("Setting suffix list on interface:"));
       
  2520     iSuffixList.Reset();
       
  2521         
       
  2522     
       
  2523     TPtrC suffixList;
       
  2524     if (!GetStringFromConfig(KSectionDNSSuffixTest011,KKeyDNSSuffixTestSuffixList,suffixList))
       
  2525         {
       
  2526         ERR_PRINTF1(_L("Failed to read suffix lists from config"));    
       
  2527         SetError(KErrNotFound);
       
  2528         return;
       
  2529         }
       
  2530     else
       
  2531         {
       
  2532         INFO_PRINTF1(_L("Suffix list:"));
       
  2533         INFO_PRINTF2(_L("%S"),&suffixList);
       
  2534         FillSuffixList(iSuffixList,suffixList);
       
  2535         }   
       
  2536     
       
  2537     if ( (err = iSocketServ.Connect()) != KErrNone)
       
  2538        {
       
  2539        ERR_PRINTF1(_L("Failed Connecting to socket server"));
       
  2540        SetError(err);
       
  2541        return;
       
  2542        }
       
  2543     
       
  2544     INFO_PRINTF1(_L("Connected to socket server successfully"));
       
  2545     
       
  2546     RConnection vTunConn; // used for vTunnel
       
  2547     RConnection firstConn; 
       
  2548     
       
  2549     err = StartConnections(iSocketServ,firstConn, vTunConn);
       
  2550     
       
  2551     if (err != KErrNone)
       
  2552       {
       
  2553       ERR_PRINTF1(_L("Failed to start connections"));
       
  2554       CloseSocketSrv();
       
  2555       SetError(err);
       
  2556       return;
       
  2557       }
       
  2558     
       
  2559     INFO_PRINTF1(_L("Connections started successfully"));
       
  2560     
       
  2561     err = SetDNSSuffixListOnInterface(iSocketServ,firstConn,ethernetInterface,iSuffixList);
       
  2562                      
       
  2563     if (KErrNone != err)
       
  2564         {
       
  2565         ERR_PRINTF3(_L("Failed Setting the suffix list on %S with errror : %D"),&ethernetInterface,err);
       
  2566         SetError(err);
       
  2567         firstConn.Close();
       
  2568         vTunConn.Close();
       
  2569         CloseSocketSrv();
       
  2570         return;
       
  2571         }
       
  2572     
       
  2573     INFO_PRINTF2(_L("Set suffix list on %S successfully"),&ethernetInterface);  
       
  2574 
       
  2575     
       
  2576     // Open explcit resolver. using CDNSSuffixHostResolver    
       
  2577     CDNSSuffixHostResolver* resolver = CDNSSuffixHostResolver::NewLC(*this,iSocketServ,firstConn);
       
  2578     
       
  2579     INFO_PRINTF2(_L("Request to resolve host(async): %S"),&hostname);
       
  2580     err = resolver->ResolveL(hostname);
       
  2581     
       
  2582     INFO_PRINTF1(_L("Stoping the connection"));
       
  2583     
       
  2584     err = firstConn.Stop();
       
  2585     
       
  2586     // Note: we have to stop the wait loop in HandleCallBackL
       
  2587     iWait.Start();
       
  2588     
       
  2589     CleanupStack::PopAndDestroy();
       
  2590     
       
  2591     INFO_PRINTF1(_L("Closing connections and socket serv session"));
       
  2592     firstConn.Close();
       
  2593     vTunConn.Close();
       
  2594     CloseSocketSrv();           
       
  2595     INFO_PRINTF1(_L("CDNSSuffixTestWrapper::DNSSuffixSupportTC011L - Exit"));
       
  2596     }
       
  2597 
       
  2598 
       
  2599 // End of file