public void AutoAcceptSessionInfo() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { string serviceName = remoteWFDController.GenerateUniqueServiceName(); // Now test ASPCP messages for session info ServicesPublishDiscoverConnectParameters pdcParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, preferredConfigMethod: WiFiDirectServiceConfigurationMethod.Default, // seeker validateData: true, expectDeferred: false, sessionInfo: "abcd123" // This should still be sent to advertiser ), configMethods: ServicePublishConfigMethods.Any, // advertiser autoAccept: true, deferredSessionInfo: "zyxw987" // want to make sure this isn't seen by seeker ); var pdcResults = ExecutePublishDiscoverConnectScenario(pdcParams); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( pdcResults.ConnectResults[0].SeekerSessionHandle, pdcResults.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void DeferredPairDefaultConfig() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( validateData: true, expectDeferred: true ), autoAccept: false ); var results = ExecutePublishDiscoverConnectScenario(connectParams); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( results.ConnectResults[0].SeekerSessionHandle, results.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void PinKeypadPairBothPreferGO() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, preferGO: true, preferredConfigMethod: WiFiDirectServiceConfigurationMethod.PinEntry, validateData: true, expectDeferred: true ), preferGO: true ); var results = ExecutePublishDiscoverConnectScenario(connectParams); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( results.ConnectResults[0].SeekerSessionHandle, results.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void DeferredPairSessionInfo() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, preferredConfigMethod: WiFiDirectServiceConfigurationMethod.Default, // seeker validateData: true, expectDeferred: true, sessionInfo: "a" ), configMethods: ServicePublishConfigMethods.Any, // advertiser autoAccept: false ); var results = ExecutePublishDiscoverConnectScenario(connectParams); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( results.ConnectResults[0].SeekerSessionHandle, results.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void DeferredConnectionCapabilityAdvertiserAutoGO() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Start autonomous GO remoteWFDController.StartAutonomousGo(); // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, expectDeferred: true, validateData: true ), autoAccept: false ); var pairResults = ExecutePublishDiscoverConnectScenario(connectParams); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( pairResults.ConnectResults[0].SeekerSessionHandle, pairResults.ConnectResults[0].AdvertiserSessionHandle ) ); CleanupBeforeReconnect(false); // Reconnect ServicesDiscoverConnectParameters reconnectParams = new ServicesDiscoverConnectParameters( pairResults.PublishResults[0].AdvertiserHandle, serviceName, ServicesDiscoveryType.Watcher, new ServicesConnectOptions( callGetProvisioningInfo: true, expectDeferred: true, validateData: true, expectGroupFormationNeeded: false ) ); var reconnectResults = ExecuteDiscoverConnectScenario(reconnectParams); Verify.AreEqual(1, reconnectResults.ConnectResults.Count); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( reconnectResults.ConnectResults[0].SeekerSessionHandle, reconnectResults.ConnectResults[0].AdvertiserSessionHandle ) ); remoteWFDController.StopAutonomousGo(); } }
public void AutoAcceptSeekerGOReconnect() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, preferGO: true, validateData: true ), preferGO: false ); var pairResults = ExecutePublishDiscoverConnectScenario(connectParams); // Verify results before we start using them Verify.AreEqual(1, pairResults.PublishResults.Count); Verify.AreEqual(1, pairResults.ConnectResults.Count); // Disconnect (from advertiser side) ExecuteDisconnectScenario( new ServicesDisconnectParameters( pairResults.ConnectResults[0].AdvertiserSessionHandle, pairResults.ConnectResults[0].SeekerSessionHandle ), false ); CleanupBeforeReconnect(true); // Reconnect ServicesDiscoverConnectParameters reconnectParams = new ServicesDiscoverConnectParameters( pairResults.PublishResults[0].AdvertiserHandle, serviceName, ServicesDiscoveryType.Watcher, new ServicesConnectOptions( preferGO: true, validateData: true, expectGroupFormationNeeded: false ) ); var reconnectResults = ExecuteDiscoverConnectScenario(reconnectParams); Verify.AreEqual(1, reconnectResults.ConnectResults.Count); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( reconnectResults.ConnectResults[0].SeekerSessionHandle, reconnectResults.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void ForgottenGroupAutoAcceptSeeker() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, validateData: true ) ); var pairResults = ExecutePublishDiscoverConnectScenario(connectParams); // Verify results before we start using them Verify.AreEqual(1, pairResults.PublishResults.Count); Verify.AreEqual(1, pairResults.ConnectResults.Count); // Disconnect (from advertiser side) ExecuteDisconnectScenario( new ServicesDisconnectParameters( pairResults.ConnectResults[0].AdvertiserSessionHandle, pairResults.ConnectResults[0].SeekerSessionHandle ), false ); CleanupBeforeReconnect(true); // Forget pairing on seeker side localWFDController.TryRemoveDafAssociation(remoteWFDController.DeviceAddress); localWFDController.FlushVisibleDeviceList(); // Reconnect, which should do pairing ServicesDiscoverConnectParameters reconnectParams = new ServicesDiscoverConnectParameters( pairResults.PublishResults[0].AdvertiserHandle, serviceName, ServicesDiscoveryType.Watcher, new ServicesConnectOptions( callGetProvisioningInfo: true, validateData: true ) ); var reconnectResults = ExecuteDiscoverConnectScenario(reconnectParams); Verify.AreEqual(1, reconnectResults.ConnectResults.Count); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( reconnectResults.ConnectResults[0].SeekerSessionHandle, reconnectResults.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public ServicesPublishDiscoverConnectScenario( WiFiDirectTestController seekerTestController, WiFiDirectTestController advertiserTestController, ServicesPublishDiscoverConnectParameters publishDiscoveryConnectParameters ) { this.seekerTestController = seekerTestController; this.advertiserTestController = advertiserTestController; this.publishDiscoveryConnectParameters = publishDiscoveryConnectParameters; }
public void AutoAcceptPairDeferredReconnect() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( validateData: true ) ); var pairResults = ExecutePublishDiscoverConnectScenario(connectParams); // Verify results before we start using them Verify.AreEqual(1, pairResults.PublishResults.Count); Verify.AreEqual(1, pairResults.ConnectResults.Count); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( pairResults.ConnectResults[0].SeekerSessionHandle, pairResults.ConnectResults[0].AdvertiserSessionHandle ) ); CleanupBeforeReconnect(true); // Reconnect with auto-accept false (deferred) string serviceName2 = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters reconnectParams = new ServicesPublishDiscoverConnectParameters( serviceName2, new ServicesConnectOptions( validateData: true, expectDeferred: true ), autoAccept: false ); var reconnectResults = ExecutePublishDiscoverConnectScenario(reconnectParams); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( reconnectResults.ConnectResults[0].SeekerSessionHandle, reconnectResults.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void ConnectASPOverExistingP2PGroup() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Start by doing WFD pairing // NOTE: use invitation (not used for services) and config method push button (not used for services) ExecutePairingScenario(PairingScenarioType.Invitation, DOT11_WPS_CONFIG_METHOD.DOT11_WPS_CONFIG_METHOD_PUSHBUTTON); // Make sure we close this session on cleanup needToCloseSession = true; // Connect, auto accept string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions(validateData: true) ); var pairResults = ExecutePublishDiscoverConnectScenario(connectParams); Verify.AreEqual(1, pairResults.ConnectResults.Count); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( pairResults.ConnectResults[0].AdvertiserSessionHandle, pairResults.ConnectResults[0].SeekerSessionHandle ), false ); // WFD connection should stay up WiFiDirectTestLogger.Log("Closed ASP Session, waiting to make sure WFD session stays active..."); Task.Delay(8000).Wait(); WfdGlobalSessionState globalSessionStateLocal = localWFDController.QueryGlobalSessionState(); if (globalSessionStateLocal.Sessions.Length != 1) { WiFiDirectTestLogger.Error("Expected a single active session. Current session count = {0}", globalSessionStateLocal.Sessions.Length); throw new Exception("Local machine session is closed"); } WiFiDirectTestUtilities.RunDataPathValidation(localWFDController, remoteWFDController, "6001"); // Close WFD connection localWFDController.CloseSession(); needToCloseSession = false; } }
public void SimpleAutoAcceptPairingReconnect() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesConnectOptions connectOptions = new ServicesConnectOptions(validateData: true); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, connectOptions ); var pairResults = ExecutePublishDiscoverConnectScenario(connectParams); // Verify results before we start using them Verify.AreEqual(1, pairResults.PublishResults.Count); Verify.AreEqual(1, pairResults.ConnectResults.Count); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( pairResults.ConnectResults[0].SeekerSessionHandle, pairResults.ConnectResults[0].AdvertiserSessionHandle ) ); CleanupBeforeReconnect(true); // Reconnect ServicesDiscoverConnectParameters reconnectParams = new ServicesDiscoverConnectParameters( pairResults.PublishResults[0].AdvertiserHandle, serviceName, ServicesDiscoveryType.Watcher, connectOptions ); var reconnectResults = ExecuteDiscoverConnectScenario(reconnectParams); Verify.AreEqual(1, reconnectResults.ConnectResults.Count); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( reconnectResults.ConnectResults[0].SeekerSessionHandle, reconnectResults.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void DeferredPairMultipleSessionSessionInfo() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { string serviceName1 = remoteWFDController.GenerateUniqueServiceName(); string serviceName2 = remoteWFDController.GenerateUniqueServiceName(); // First publish/discover/connect ServicesPublishDiscoverConnectParameters pdc1Params = new ServicesPublishDiscoverConnectParameters( serviceName1, new ServicesConnectOptions(validateData: true) ); var pdc1Results = ExecutePublishDiscoverConnectScenario(pdc1Params); // Now test ASPCP messages for session info ServicesPublishDiscoverConnectParameters pdc2Params = new ServicesPublishDiscoverConnectParameters( serviceName2, new ServicesConnectOptions( callGetProvisioningInfo: false, preferredConfigMethod: WiFiDirectServiceConfigurationMethod.Default, // seeker validateData: true, expectDeferred: true, expectGroupFormationNeeded: false, sessionInfo: "abcd123" ), configMethods: ServicePublishConfigMethods.Any, // advertiser autoAccept: false, deferredSessionInfo: "zyxw987" ); var pdc2Results = ExecutePublishDiscoverConnectScenario(pdc2Params); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( pdc1Results.ConnectResults[0].SeekerSessionHandle, pdc1Results.ConnectResults[0].AdvertiserSessionHandle ) ); ExecuteDisconnectScenario( new ServicesDisconnectParameters( pdc2Results.ConnectResults[0].AdvertiserSessionHandle, pdc2Results.ConnectResults[0].SeekerSessionHandle ), false ); } }
public void DeclinePairingConnectionIsRejected() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, expectConnectSuccess: false, declineConnect: true ), false ); var results = ExecutePublishDiscoverConnectScenario(connectParams); } }
public void DeferredPairNoCommonConfigMethodFail() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, preferredConfigMethod: WiFiDirectServiceConfigurationMethod.PinDisplay, // seeker validateData: true, expectGetProvisioningSuccess: false ), configMethods: ServicePublishConfigMethods.PinOnlyDisplay, // advertiser autoAccept: false ); var results = ExecutePublishDiscoverConnectScenario(connectParams); } }
public void SimpleAutoAcceptPairingAdvertiserDisconnect() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions(validateData: true) ); var results = ExecutePublishDiscoverConnectScenario(connectParams); // Disconnect (from advertiser side) ExecuteDisconnectScenario( new ServicesDisconnectParameters( results.ConnectResults[0].AdvertiserSessionHandle, results.ConnectResults[0].SeekerSessionHandle ), false ); } }
public void DeferredPairSessionInfoMaxSize() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < 144; i++) { builder.Append(s_chars[rng.Next(s_chars.Length)]); } string sessionInfo = builder.ToString(); // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, preferredConfigMethod: WiFiDirectServiceConfigurationMethod.Default, // seeker validateData: true, expectDeferred: true, sessionInfo: sessionInfo ), configMethods: ServicePublishConfigMethods.Any, // advertiser autoAccept: false ); var results = ExecutePublishDiscoverConnectScenario(connectParams); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( results.ConnectResults[0].SeekerSessionHandle, results.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void ForgottenGroupDeferredAdvertiser() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions( callGetProvisioningInfo: true, preferredConfigMethod: WiFiDirectServiceConfigurationMethod.PinEntry, validateData: true, expectDeferred: true ), autoAccept: false ); var pairResults = ExecutePublishDiscoverConnectScenario(connectParams); // Verify results before we start using them Verify.AreEqual(1, pairResults.PublishResults.Count); Verify.AreEqual(1, pairResults.ConnectResults.Count); // Disconnect (from advertiser side) ExecuteDisconnectScenario( new ServicesDisconnectParameters( pairResults.ConnectResults[0].AdvertiserSessionHandle, pairResults.ConnectResults[0].SeekerSessionHandle ), false ); CleanupBeforeReconnect(true); // Forget pairing on advertiser side remoteWFDController.TryRemoveDafAssociation(localWFDController.DeviceAddress); remoteWFDController.FlushVisibleDeviceList(); // BUG: [TH2] Fix race where UE cancels back-to-back discoveries because set additional IEs OID preempts the scan Task.Delay(500).Wait(); // Reconnect, which should do pairing ServicesDiscoverConnectParameters reconnectParams = new ServicesDiscoverConnectParameters( pairResults.PublishResults[0].AdvertiserHandle, serviceName, ServicesDiscoveryType.Watcher, new ServicesConnectOptions( callGetProvisioningInfo: true, expectGroupFormationNeeded: true, preferredConfigMethod: WiFiDirectServiceConfigurationMethod.PinEntry, validateData: true, expectDeferred: true ) ); var reconnectResults = ExecuteDiscoverConnectScenario(reconnectParams); Verify.AreEqual(1, reconnectResults.ConnectResults.Count); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( reconnectResults.ConnectResults[0].SeekerSessionHandle, reconnectResults.ConnectResults[0].AdvertiserSessionHandle ) ); } }
public void SimpleAutoAcceptMultipleSockets() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Connect string serviceName = remoteWFDController.GenerateUniqueServiceName(); ServicesPublishDiscoverConnectParameters connectParams = new ServicesPublishDiscoverConnectParameters( serviceName, new ServicesConnectOptions() ); var results = ExecutePublishDiscoverConnectScenario(connectParams); var tcp1Results = ExecuteOpenSocketSendDataScenario( new ServicesOpenSocketSendDataParameters( results.ConnectResults[0].AdvertiserSessionHandle, results.ConnectResults[0].SeekerSessionHandle, WiFiDirectServiceIPProtocol.Tcp, 6000, 131072 // 128k ), false ); var tcp2Results = ExecuteOpenSocketSendDataScenario( new ServicesOpenSocketSendDataParameters( results.ConnectResults[0].SeekerSessionHandle, results.ConnectResults[0].AdvertiserSessionHandle, WiFiDirectServiceIPProtocol.Tcp, 6007, 131072 // 128k ) ); var udp1Results = ExecuteOpenSocketSendDataScenario( new ServicesOpenSocketSendDataParameters( results.ConnectResults[0].AdvertiserSessionHandle, results.ConnectResults[0].SeekerSessionHandle, WiFiDirectServiceIPProtocol.Udp, 7000, 8000 ), false ); var udp2Results = ExecuteOpenSocketSendDataScenario( new ServicesOpenSocketSendDataParameters( results.ConnectResults[0].SeekerSessionHandle, results.ConnectResults[0].AdvertiserSessionHandle, WiFiDirectServiceIPProtocol.Udp, 7007, 8000 ) ); // Disconnect ExecuteDisconnectScenario( new ServicesDisconnectParameters( results.ConnectResults[0].SeekerSessionHandle, results.ConnectResults[0].AdvertiserSessionHandle ) ); } }
ServicesPublishDiscoverConnectScenarioResult ExecutePublishDiscoverConnectScenario(ServicesPublishDiscoverConnectParameters publishDiscoverConnectParams) { ServicesPublishDiscoverConnectScenario scenario = new ServicesPublishDiscoverConnectScenario( localWFDController, remoteWFDController, publishDiscoverConnectParams ); ServicesPublishDiscoverConnectScenarioResult scenarioResult = scenario.Execute(); Verify.IsTrue(scenarioResult.ScenarioSucceeded); return(scenarioResult); }
public void SimpleAutoAcceptMultipleSimultaneousSessions() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { string serviceName1 = remoteWFDController.GenerateUniqueServiceName(); string serviceName2 = remoteWFDController.GenerateUniqueServiceName(); string serviceName3 = remoteWFDController.GenerateUniqueServiceName(); ServicesConnectOptions connectOptions = new ServicesConnectOptions(validateData: true); // NOTE: this will do FindAllAsync while all other tests use the watcher/incremental updates // Publish 2 services, discover/connect to first ServicesPublishDiscoverConnectParameters pdcParams = new ServicesPublishDiscoverConnectParameters( serviceName1, connectOptions ); var pdcResults = ExecutePublishDiscoverConnectScenario(pdcParams); Verify.AreEqual(1, pdcResults.PublishResults.Count); Verify.AreEqual(1, pdcResults.ConnectResults.Count); // Discover/connect to second ServicesPublishDiscoverConnectParameters pdc2Params = new ServicesPublishDiscoverConnectParameters( serviceName2, connectOptions, discoveryType: ServicesDiscoveryType.Watcher ); var pdc2Results = ExecutePublishDiscoverConnectScenario(pdc2Params); Verify.AreEqual(1, pdc2Results.PublishResults.Count); Verify.AreEqual(1, pdc2Results.ConnectResults.Count); // Publish/discover/connect third service ServicesPublishDiscoverConnectParameters pdc3Params = new ServicesPublishDiscoverConnectParameters( serviceName3, connectOptions ); var pdc3Results = ExecutePublishDiscoverConnectScenario(pdc3Params); Verify.AreEqual(1, pdc3Results.PublishResults.Count); Verify.AreEqual(1, pdc3Results.ConnectResults.Count); // Disconnect second service ExecuteDisconnectScenario( new ServicesDisconnectParameters( pdc2Results.ConnectResults[0].SeekerSessionHandle, pdc2Results.ConnectResults[0].AdvertiserSessionHandle ) ); // Try to send some more data on 1st session, expect still connected ServicesSendDataParameters sendDataParams = new ServicesSendDataParameters( pdcResults.ConnectResults[0].SeekerSessionHandle, pdcResults.ConnectResults[0].SeekerSocketHandle, pdcResults.ConnectResults[0].AdvertiserSessionHandle, pdcResults.ConnectResults[0].AdvertiserSocketHandle, 65536 ); var sendDataResult = ExecuteSendDataScenario(sendDataParams); // Disconnect first/third service ExecuteDisconnectScenario( new ServicesDisconnectParameters( pdcResults.ConnectResults[0].AdvertiserSessionHandle, pdcResults.ConnectResults[0].SeekerSessionHandle ), false ); ExecuteDisconnectScenario( new ServicesDisconnectParameters( pdc3Results.ConnectResults[0].SeekerSessionHandle, pdc3Results.ConnectResults[0].AdvertiserSessionHandle ) ); } }