public static bool CheckDeviceHelloType(SoapMessage <WSD.HelloType> message) { return(CheckDeviceType(message.Raw, "/s:Envelope/s:Body/wsd:Hello/wsd:Types")); }
/// <summary> /// Parse UDP packet /// </summary> /// <typeparam name="T">Type of expected object</typeparam> /// <param name="e">Event arguments, containing endpoint address and incoming bytes</param> /// <param name="action">Post-processing action</param> protected void ProcessIncomingPacket <T>(DiscoverySocketEventArgs e, Action action) where T : class { if ((_listenAddress == null) || DiscoveryUtils.CompareAddresses(e.Source.Address, _listenAddress)) { try { //try to parse message according to expected type SoapMessage <T> message = DiscoverySoapBuilder.ParseMessage <T>(e.Message, _discoverySchemas); if (IsExpectedMessage <T>(message)) { EventHandler <DiscoveryMessageEventArgs> handler = GetHandler(message.Object.GetType()); DiscoveryMessageEventArgs args = new DiscoveryMessageEventArgs( message.ToSoapMessage <object>(), e.Source.Address); if (handler != null) { handler(this, args); } action(); } } catch (SoapFaultException ex) { if (ex.Message != null) { if (IsExpectedMessage <Fault>(ex.FaultMessage)) { if (SoapFaultReceived != null) { SoapFaultReceived(this, new DiscoveryErrorEventArgs(ex, ex.Fault)); } action(); } } } catch (UnxpectedElementException ex) { if ((_listenMessages.Count() > 0) && IsExpectedMessageHeader(ex.Headers)) { //throw this exception only is message contains proper RelatedTo, otherwise just ignore message if (ReceiveError != null) { ReceiveError(this, new DiscoveryErrorEventArgs(ex, null)); } action(); throw; } } catch (Exception ex) { if (ReceiveError != null) { ReceiveError(this, new DiscoveryErrorEventArgs(ex, null)); } System.Diagnostics.Trace.WriteLine(string.Format("Discovery::OnMessageReceived error [{0}]", ex.Message)); System.Diagnostics.Trace.Flush(); } } }
public static bool CheckDeviceMatchType(SoapMessage <WSD.ProbeMatchesType> message, int matchNumber) { return(CheckDeviceType(message.Raw, string.Format("/s:Envelope/s:Body/wsd:ProbeMatches/wsd:ProbeMatch/wsd:Types[{0}]", matchNumber + 1))); }
public DiscoveryMessageEventArgs(SoapMessage <object> message, IPAddress sender) { Message = message; Sender = sender; }
public static bool CheckDeviceHelloType(SoapMessage <WSD.HelloType> message, out string reason, bool mode1, bool mode2) { return(CheckDeviceType(message.Raw, "/s:Envelope/s:Body/wsd:Hello/wsd:Types", message.Object.Scopes, out reason, mode1, mode2)); }
public static bool CheckDeviceMatchType(SoapMessage <WSD.ProbeMatchesType> message, int matchNumber, bool mode1, bool mode2) { string reason; return(CheckDeviceMatchType(message, matchNumber, out reason, mode1, mode2)); }
public static bool CheckDeviceMatchType(SoapMessage <WSD.ProbeMatchesType> message, int matchNumber, out string reason, bool mode1, bool mode2) { return(CheckDeviceType(message.Raw, string.Format("/s:Envelope/s:Body/wsd:ProbeMatches/wsd:ProbeMatch/wsd:Types[{0}]", matchNumber + 1), message.Object.ProbeMatch[matchNumber].Scopes, out reason, mode1, mode2)); }
public SoapFaultException(SoapMessage <Fault> message) { Fault = message.Object; FaultMessage = message; }