private void ExecuteInternal() { try { WiFiDirectTestLogger.Log("Beginning Discover/Connect scenario"); // Do all discovers foreach (var discoveryParams in discoveryConnectParameters.DiscoveryParameters) { var discoveryScenario = new ServicesDiscoveryScenario(seekerTestController, advertiserTestController, discoveryParams); ServicesDiscoveryScenarioResult discoveryResult = discoveryScenario.Execute(); discoveryResults.Add(discoveryResult); if (!discoveryResult.ScenarioSucceeded) { throw new Exception("Discovery failed!"); } } // BUG: [TH2] Fix race on back-to-back discoveries Task.Delay(500).Wait(); // Do all connects foreach (var connectPreParams in discoveryConnectParameters.ConnectParameters) { // Need to translate indices to handles if (connectPreParams.DiscoveryResultIndex > discoveryResults.Count || connectPreParams.DiscoveryResultIndex < 0 || connectPreParams.DiscoveredHandleIndex > discoveryResults[connectPreParams.DiscoveryResultIndex].DiscoveryHandles.Count || connectPreParams.DiscoveredHandleIndex < 0) { throw new Exception("Bad connect parameters! Index out of range for discovered device"); } WFDSvcWrapperHandle discoveredDevice = discoveryResults[connectPreParams.DiscoveryResultIndex].DiscoveryHandles[connectPreParams.DiscoveredHandleIndex]; // Now run scenario ServicesConnectParameters connectParams = new ServicesConnectParameters( discoveredDevice, connectPreParams.AdvertiserHandle, connectPreParams.Options ); var connectScenario = new ServicesConnectScenario(seekerTestController, advertiserTestController, connectParams); ServicesConnectScenarioResult connectResult = connectScenario.Execute(); connectResults.Add(connectResult); if (!connectResult.ScenarioSucceeded) { throw new Exception("Connect failed!"); } } succeeded = true; } catch (Exception e) { WiFiDirectTestLogger.Error("Caught exception while executing service discover/connect scenario: {0}", e); } }
public async Task <AsyncHandleResult> ConnectAsync( DiscoveredService discovered ) { WFDSvcWrapperHandle sessionHandle = null; Exception error = null; bool success = false; try { ThrowIfDisposed(); WiFiDirectTestLogger.Log("ConnectAsync... (Discovery={0})", discovered.Handle); sessionHandle = await discovered.ConnectAsync(); ServiceSession session = GetSession(sessionHandle); if (session.Session.Status != WiFiDirectServiceSessionStatus.Open) { throw new Exception("Session did not start successfully"); } success = true; } catch (Exception ex) { WiFiDirectTestLogger.Log("Exception in ConnectAsync (this may be expected)"); error = ex; } return(new AsyncHandleResult(sessionHandle, success, error)); }
public void PrefixServiceNameMatchExactAndPrefix() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Publish 2 services on remote with same prefix string prefix = remoteWFDController.GenerateUniqueServiceName(); var publishParams1 = new ServicesPublishParameters( prefix + ".foo", prefixList: new List <String> { prefix } ); WFDSvcWrapperHandle advertiser1 = ExecutePublishScenario(publishParams1); var publishParams2 = new ServicesPublishParameters( prefix ); WFDSvcWrapperHandle advertiser2 = ExecutePublishScenario(publishParams2); // Discover both services using common prefix var discoveryParams1 = new ServicesDiscoveryParameters( prefix + "*", advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser1, advertiser2 }, expectedMatchCount: 2, type: ServicesDiscoveryType.Watcher ); ExecuteDiscoveryScenario(discoveryParams1); } }
public async Task <AsyncHandleResult> AddDatagramSocketAsync( ServiceSession session, UInt16 port ) { WFDSvcWrapperHandle socketHandle = null; Exception error = null; bool success = false; try { ThrowIfDisposed(); WiFiDirectTestLogger.Log( "AddDatagramSocketAsync... (port={0}) (Session={1})", port.ToString(), session.Handle ); SocketWrapper socket = await session.AddDatagramSocketListenerAsync(port); socketHandle = socket.Handle; success = true; } catch (Exception ex) { WiFiDirectTestLogger.Log("Exception in AddDatagramSocketAsync (this may be expected)"); error = ex; } return(new AsyncHandleResult(socketHandle, success, error)); }
public ServicesUnpublishParameters( WFDSvcWrapperHandle advertiserHandle, bool remove = true ) { AdvertiserHandle = advertiserHandle; Remove = remove; }
public ServicesDisconnectParameters( WFDSvcWrapperHandle sessionHandle, WFDSvcWrapperHandle otherSessionHandle ) { SessionHandle = sessionHandle; OtherSessionHandle = otherSessionHandle; }
public ServicesPublishScenarioResult( bool scenarioSucceeded, WFDSvcWrapperHandle advertiserHandle ) { ScenarioSucceeded = scenarioSucceeded; AdvertiserHandle = advertiserHandle; }
private void ExecuteInternal() { try { WiFiDirectTestLogger.Log( "Starting Publish for service \"{0}\" on device {1} ({2})", publishParameters.ServiceName, advertisingWFDController.DeviceAddress, advertisingWFDController.MachineName ); List <WiFiDirectServiceConfigurationMethod> configMethods = null; if (publishParameters.ConfigMethods != ServicePublishConfigMethods.NotSet) { configMethods = new List <WiFiDirectServiceConfigurationMethod>(); if (publishParameters.ConfigMethods == ServicePublishConfigMethods.PinOnlyDisplay || publishParameters.ConfigMethods == ServicePublishConfigMethods.PinOnlyDisplayKeypad || publishParameters.ConfigMethods == ServicePublishConfigMethods.PinOrDefaultDisplay || publishParameters.ConfigMethods == ServicePublishConfigMethods.Any) { configMethods.Add(WiFiDirectServiceConfigurationMethod.PinDisplay); } if (publishParameters.ConfigMethods == ServicePublishConfigMethods.PinOnlyKeypad || publishParameters.ConfigMethods == ServicePublishConfigMethods.PinOnlyDisplayKeypad || publishParameters.ConfigMethods == ServicePublishConfigMethods.PinOrDefaultKeypad || publishParameters.ConfigMethods == ServicePublishConfigMethods.Any) { configMethods.Add(WiFiDirectServiceConfigurationMethod.PinEntry); } if (publishParameters.ConfigMethods == ServicePublishConfigMethods.PinOrDefaultDisplay || publishParameters.ConfigMethods == ServicePublishConfigMethods.PinOrDefaultKeypad || publishParameters.ConfigMethods == ServicePublishConfigMethods.Any) { configMethods.Add(WiFiDirectServiceConfigurationMethod.Default); } } handle = advertisingWFDController.PublishService( publishParameters.ServiceName, publishParameters.AutoAccept, publishParameters.PreferGO, configMethods, WiFiDirectServiceStatus.Available, // TODO status 0, // TODO custom status publishParameters.ServiceInfo, publishParameters.SessionInfo, publishParameters.PrefixList ); succeeded = true; } catch (Exception e) { WiFiDirectTestLogger.Error("Caught exception while executing service publish scenario: {0}", e); } }
public void PublishServicesLongName() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Publish multiple services with long names and prefixes string prefix1 = remoteWFDController.GenerateUniqueServiceName("com.microsoft.longnameservice.1.2.3.4.5.6.7.8.9.0."); var publishParams1 = new ServicesPublishParameters( prefix1 + ".foo" ); WFDSvcWrapperHandle advertiser1 = ExecutePublishScenario(publishParams1); var publishParams2 = new ServicesPublishParameters( prefix1 + ".bar" ); WFDSvcWrapperHandle advertiser2 = ExecutePublishScenario(publishParams2); var publishParams3 = new ServicesPublishParameters( prefix1 + ".baz" ); WFDSvcWrapperHandle advertiser3 = ExecutePublishScenario(publishParams3); var publishParams4 = new ServicesPublishParameters( prefix1 + ".bat" ); WFDSvcWrapperHandle advertiser4 = ExecutePublishScenario(publishParams4); // Discover all services, NOT USING PREFIX var discoveryParams1 = new ServicesDiscoveryParameters( prefix1 + ".foo", advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser1 }, type: ServicesDiscoveryType.Watcher ); ExecuteDiscoveryScenario(discoveryParams1); var discoveryParams2 = new ServicesDiscoveryParameters( prefix1 + ".bar", advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser2 }, type: ServicesDiscoveryType.Watcher ); ExecuteDiscoveryScenario(discoveryParams2); var discoveryParams3 = new ServicesDiscoveryParameters( prefix1 + ".baz", advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser3 }, type: ServicesDiscoveryType.Watcher ); ExecuteDiscoveryScenario(discoveryParams3); var discoveryParams4 = new ServicesDiscoveryParameters( prefix1 + ".bat", advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser4 }, type: ServicesDiscoveryType.Watcher ); ExecuteDiscoveryScenario(discoveryParams4); } }
public ServicesConnectParameters( WFDSvcWrapperHandle discoveryHandle, WFDSvcWrapperHandle advertiserHandle, ServicesConnectOptions options ) { DiscoveryHandle = discoveryHandle; AdvertiserHandle = advertiserHandle; Options = options; }
public ServicesOpenSocketScenarioResult( bool scenarioSucceeded, WFDSvcWrapperHandle senderSocketHandle, WFDSvcWrapperHandle receiverSocketHandle ) { ScenarioSucceeded = scenarioSucceeded; SenderSocketHandle = senderSocketHandle; ReceiverSocketHandle = receiverSocketHandle; }
public void RemoveSession(WFDSvcWrapperHandle handle) { bool fRemoved = sessionCollection.Remove(handle); if (!fRemoved) { WiFiDirectTestLogger.Error("Remove session failed to find session in list! (Session={0})", handle); throw new Exception("Failed to remove session"); } }
public void RemoveDiscovery(WFDSvcWrapperHandle handle) { bool fRemoved = discoveryCollection.Remove(handle); if (!fRemoved) { WiFiDirectTestLogger.Error("Remove discovery failed to find discovery in list! (Session={0})", handle); throw new Exception("Failed to remove discovery"); } }
public WFDSvcWrapperHandle GetLastRemoteSocketAdded( ServiceSession session ) { WiFiDirectTestLogger.Log("Waiting for session to get RemotePortAdded event and setup socket (Session={0})", session.Handle); session.WaitForRemotePortAdded(); WFDSvcWrapperHandle socketHandle = session.LastRemoteSocketAdded; return(socketHandle); }
public ServicesOpenSocketParameters( WFDSvcWrapperHandle senderSessionHandle, WFDSvcWrapperHandle receiverSessionHandle, WiFiDirectServiceIPProtocol protocol, UInt16 port ) { SenderSessionHandle = senderSessionHandle; ReceiverSessionHandle = receiverSessionHandle; Protocol = protocol; Port = port; }
public ServicesReconnectPreDiscoveryParameters( int discoveryResultIndex, int discoveredHandleIndex, WFDSvcWrapperHandle advertiserHandle, ServicesConnectOptions options ) { Options = options; DiscoveryResultIndex = discoveryResultIndex; DiscoveredHandleIndex = discoveredHandleIndex; AdvertiserHandle = advertiserHandle; }
public ServiceSession GetSession(WFDSvcWrapperHandle handle) { ThrowIfDisposed(); ServiceSession session = sessionCollection[handle]; if (session == null) { throw new Exception(String.Format(CultureInfo.InvariantCulture, "Session not found for handle={0}", handle)); } return(session); }
public DiscoveredService GetDiscoveredService(WFDSvcWrapperHandle handle) { ThrowIfDisposed(); DiscoveredService service = discoveryCollection[handle]; if (service == null) { throw new Exception(String.Format(CultureInfo.InvariantCulture, "Discovered service not found for handle={0}", handle)); } return(service); }
public ServiceAdvertiser GetAdvertiser(WFDSvcWrapperHandle handle) { ThrowIfDisposed(); ServiceAdvertiser advertiser = advertiserCollection[handle]; if (advertiser == null) { throw new Exception(String.Format(CultureInfo.InvariantCulture, "Advertiser not found for handle={0}", handle)); } return(advertiser); }
public void MultipleDiscoveries() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Publish 2 services on remote var publishParams1 = new ServicesPublishParameters( remoteWFDController.GenerateUniqueServiceName() ); WFDSvcWrapperHandle advertiser1 = ExecutePublishScenario(publishParams1); var publishParams2 = new ServicesPublishParameters( remoteWFDController.GenerateUniqueServiceName() ); WFDSvcWrapperHandle advertiser2 = ExecutePublishScenario(publishParams2); // Quick sanity check that the service names are different Verify.AreNotEqual(publishParams1.ServiceName, publishParams2.ServiceName); // Discover same services from local var discoveryParams1 = new ServicesDiscoveryParameters( publishParams1.ServiceName, advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser1 } ); ExecuteDiscoveryScenario(discoveryParams1); var discoveryParams2 = new ServicesDiscoveryParameters( publishParams2.ServiceName, advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser2 } ); ExecuteDiscoveryScenario(discoveryParams2); // Publish 3rd service on remote var publishParams3 = new ServicesPublishParameters( remoteWFDController.GenerateUniqueServiceName() ); WFDSvcWrapperHandle advertiser3 = ExecutePublishScenario(publishParams3); Verify.AreNotEqual(publishParams3.ServiceName, publishParams1.ServiceName); Verify.AreNotEqual(publishParams3.ServiceName, publishParams2.ServiceName); // Discover 3rd service from local var discoveryParams3 = new ServicesDiscoveryParameters( publishParams3.ServiceName, advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser3 } ); ExecuteDiscoveryScenario(discoveryParams3); } }
public ServicesSendDataParameters( WFDSvcWrapperHandle senderSessionHandle, WFDSvcWrapperHandle senderSocketHandle, WFDSvcWrapperHandle receiverSessionHandle, WFDSvcWrapperHandle receiverSocketHandle, UInt32 dataSize ) { SenderSessionHandle = senderSessionHandle; SenderSocketHandle = senderSocketHandle; ReceiverSessionHandle = receiverSessionHandle; ReceiverSocketHandle = receiverSocketHandle; DataSize = dataSize; }
public ServicesConnectScenarioResult( bool scenarioSucceeded, WFDSvcWrapperHandle seekerSessionHandle, WFDSvcWrapperHandle advertiserSessionHandle, WFDSvcWrapperHandle seekerSocketHandle, WFDSvcWrapperHandle advertiserSocketHandle ) { ScenarioSucceeded = scenarioSucceeded; SeekerSessionHandle = seekerSessionHandle; AdvertiserSessionHandle = advertiserSessionHandle; SeekerSocketHandle = seekerSocketHandle; AdvertiserSocketHandle = advertiserSocketHandle; }
private void ExecuteInternal() { try { WiFiDirectTestLogger.Log( "Starting open socket ({6} {7}) from session with handle {0} on device {1} ({2}), expect socket added on session with handle {3} on device {4} ({5})", socketParameters.SenderSessionHandle, senderWFDController.DeviceAddress, senderWFDController.MachineName, socketParameters.ReceiverSessionHandle, receiverWFDController.DeviceAddress, receiverWFDController.MachineName, socketParameters.Protocol.ToString(), socketParameters.Port ); if (socketParameters.Protocol == WiFiDirectServiceIPProtocol.Tcp) { senderSocketHandle = senderWFDController.AddServiceStreamSocket( socketParameters.SenderSessionHandle, socketParameters.Port ); receiverSocketHandle = receiverWFDController.GetServiceRemoteSocketAdded( socketParameters.ReceiverSessionHandle ); } else if (socketParameters.Protocol == WiFiDirectServiceIPProtocol.Udp) { senderSocketHandle = senderWFDController.AddServiceDatagramSocket( socketParameters.SenderSessionHandle, socketParameters.Port ); receiverSocketHandle = receiverWFDController.GetServiceRemoteSocketAdded( socketParameters.ReceiverSessionHandle ); } else { throw new Exception("Unsupported Protocol!"); } succeeded = true; } catch (Exception e) { WiFiDirectTestLogger.Error("Caught exception while executing service open socket scenario: {0}", e); } }
// TODO add general constructor that just takes the 2 lists if needed /// <summary> /// Simple version for a single discovery/connect of same service /// </summary> public ServicesDiscoverConnectParameters( WFDSvcWrapperHandle advertiserHandle, string query, ServicesDiscoveryType discoveryType, ServicesConnectOptions connectOptions ) { DiscoveryParameters = new List <ServicesDiscoveryParameters> { new ServicesDiscoveryParameters(query, 1, new List <WFDSvcWrapperHandle> { advertiserHandle }, discoveryType) }; ConnectParameters = new List <ServicesReconnectPreDiscoveryParameters> { new ServicesReconnectPreDiscoveryParameters(0, 0, advertiserHandle, connectOptions) }; }
public void ServiceInfoMaxSize() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { string serviceInfo = ""; Random rng = new Random(); const string s_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()_-+={}][|;:'<>,./?~` "; StringBuilder builder = new StringBuilder(); // make a string of 65000 ASCII characters // First write 10000 random characters // Next write 7 characters to match // Then write 54993 random characters for (int i = 0; i < 10000; i++) { builder.Append(s_chars[rng.Next(s_chars.Length)]); } builder.Append("foo_bar"); for (int i = 0; i < 54993; i++) { builder.Append(s_chars[rng.Next(s_chars.Length)]); } serviceInfo = builder.ToString(); var publishParams1 = new ServicesPublishParameters( remoteWFDController.GenerateUniqueServiceName(), serviceInfo: serviceInfo ); WFDSvcWrapperHandle advertiser1 = ExecutePublishScenario(publishParams1); // Discover service with info var discoveryParams1 = new ServicesDiscoveryParameters( publishParams1.ServiceName, advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser1 }, type: ServicesDiscoveryType.Watcher, serviceInfoRequest: "foo_bar", advertiserServiceInfoMatch: new List <bool> { true } ); ExecuteDiscoveryScenario(discoveryParams1); } }
public void ServiceInfoMultipleMatchSameServicePrefix() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { string prefix = remoteWFDController.GenerateUniqueServiceName(); var publishParams1 = new ServicesPublishParameters( prefix + ".foo", prefixList: new List <String> { prefix }, serviceInfo: "this is some example service info. It will match the requested info" ); WFDSvcWrapperHandle advertiser1 = ExecutePublishScenario(publishParams1); var publishParams2 = new ServicesPublishParameters( prefix, serviceInfo: "Here is another set of service info. It also has the word example" ); WFDSvcWrapperHandle advertiser2 = ExecutePublishScenario(publishParams2); var publishParams3 = new ServicesPublishParameters( prefix + ".bar", prefixList: new List <String> { prefix }, serviceInfo: "This service will match without service info. Not expected to find this" ); WFDSvcWrapperHandle advertiser3 = ExecutePublishScenario(publishParams3); // Discover all services using same name var discoveryParams1 = new ServicesDiscoveryParameters( prefix + "*", advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser1, advertiser2, advertiser3 }, expectedMatchCount: 3, type: ServicesDiscoveryType.Watcher, serviceInfoRequest: "example", advertiserServiceInfoMatch: new List <bool> { true, true, false } ); ExecuteDiscoveryScenario(discoveryParams1); } }
public WFDSvcWrapperHandle GetLastAdvertiserSession( ServiceAdvertiser advertiser, bool autoAccept ) { WiFiDirectTestLogger.Log("Waiting for Advertiser to get session connection (Advertiser={0})", advertiser.Handle); if (autoAccept) { advertiser.WaitForAutoAcceptSessionConnected(); } else { advertiser.WaitForSessionRequested(); } WFDSvcWrapperHandle sessionHandle = advertiser.LastConnectedSession; return(sessionHandle); }
public void UnPublishService(ServiceAdvertiser advertiser, bool fRemove = false) { ThrowIfDisposed(); WFDSvcWrapperHandle handle = advertiser.Handle; WiFiDirectTestLogger.Log("Unpublishing advertiser (Advertiser={0} ServiceName={1})", handle, advertiser.Advertiser.ServiceName); advertiser.Advertiser.Stop(); if (fRemove) { WiFiDirectTestLogger.Log("Removing advertiser (Advertiser={0} ServiceName={1})", handle, advertiser.Advertiser.ServiceName); advertiser.Dispose(); advertiserCollection.Remove(handle); } WiFiDirectTestLogger.Log("Unpublish service done (Advertiser={0})", handle); }
public void PrefixServiceNameMatchingSpecific() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Publish 2 services on remote with same prefix, 3rd service with different prefix string prefix = remoteWFDController.GenerateUniqueServiceName(); var publishParams1 = new ServicesPublishParameters( prefix + ".1.foo", prefixList: new List <String> { prefix, prefix + ".1" } ); WFDSvcWrapperHandle advertiser1 = ExecutePublishScenario(publishParams1); var publishParams2 = new ServicesPublishParameters( prefix + ".1.bar", prefixList: new List <String> { prefix, prefix + ".1", prefix + ".1." } ); WFDSvcWrapperHandle advertiser2 = ExecutePublishScenario(publishParams2); var publishParams3 = new ServicesPublishParameters( prefix + ".2.foo", prefixList: new List <String> { prefix, prefix + ".2" } ); WFDSvcWrapperHandle advertiser3 = ExecutePublishScenario(publishParams3); // Discover first 2 services using common prefix var discoveryParams1 = new ServicesDiscoveryParameters( prefix + ".1*", advertisersToMatch: new List <WFDSvcWrapperHandle> { advertiser1, advertiser2 }, expectedMatchCount: 2 ); ExecuteDiscoveryScenario(discoveryParams1); } }
public void UnPublishNoMatchDiscovery() { using (RemoteControllerLogGroup lg = new RemoteControllerLogGroup(remoteWFDController)) { // Publish one service on remote var publishParams = new ServicesPublishParameters( remoteWFDController.GenerateUniqueServiceName() ); WFDSvcWrapperHandle advertiser = ExecutePublishScenario(publishParams); // Unpublish service var unpublishParams = new ServicesUnpublishParameters(advertiser); ExecuteUnpublishScenario(unpublishParams); // Discover same service from local, should not be found var discoveryParams = new ServicesDiscoveryParameters( publishParams.ServiceName, 0 ); ExecuteDiscoveryScenario(discoveryParams); } }