public Message ProcessRst(Message message, Claim claim) { IPeerNeighbor neighbor = host; PeerRequestSecurityTokenResponse response = null; Message reply = null; lock (ThisLock) { if (this.state != PeerAuthState.Created || neighbor == null || neighbor.IsInitiator || neighbor.State != PeerNeighborState.Opened) { OnFailed(neighbor); return(null); } } try { PeerHashToken receivedToken = PeerRequestSecurityToken.CreateHashTokenFrom(message); PeerHashToken expectedToken = securityManager.GetExpectedTokenForClaim(claim); if (!expectedToken.Equals(receivedToken)) { OnFailed(neighbor); } else { this.state = PeerAuthState.Authenticated; PeerHashToken selfToken = securityManager.GetSelfToken(); response = new PeerRequestSecurityTokenResponse(selfToken); reply = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, TrustFeb2005Strings.RequestSecurityTokenResponse, response); OnAuthenticated(); } } catch (Exception e) { if (Fx.IsFatal(e)) { throw; } DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); OnFailed(neighbor); } return(reply); }
public void ProcessRstr(IPeerNeighbor neighbor, Message message, Claim claim) { PeerHashToken receivedToken = PeerRequestSecurityTokenResponse.CreateHashTokenFrom(message); if (!receivedToken.IsValid) { OnFailed(neighbor); } else { PeerHashToken expectedToken = securityManager.GetExpectedTokenForClaim(claim); if (!expectedToken.Equals(receivedToken)) { OnFailed(neighbor); } else { OnAuthenticated(); } } }