private void DoConnect() { if (Settings.DisableHttpPolling) { ConnectivitySettings.HttpPoll = false; } NSMessageProcessor mp = new NSMessageProcessor(ConnectivitySettings); Nameserver.MessageProcessor = mp; mp.Connect(); }
/// <summary> /// Disconnects from the messenger network. /// </summary> public virtual void Disconnect() { NSMessageProcessor mp = Nameserver.MessageProcessor as NSMessageProcessor; if (mp != null && mp.Connected) { if (nsMessageHandler != null && nsMessageHandler.Owner != null) { nsMessageHandler.Owner.SetStatus(PresenceStatus.Offline); } mp.Disconnect(); } }
internal static void Authenticate( NSMessageHandler nsMessageHandler, string policy, EventHandler onSuccess, EventHandler <ExceptionEventArgs> onError) { CheckCleanup(); if (nsMessageHandler == null || nsMessageHandler.Credentials == null) { return; } string authUser = nsMessageHandler.Credentials.Account; string authPassword = nsMessageHandler.Credentials.Password; if (String.IsNullOrEmpty(authUser) || String.IsNullOrEmpty(authPassword)) { return; } string sha256key = MSNTicket.ComputeSHA(authUser, authPassword); MSNTicket ticket = GetFromCacheOrCreateNewWithLock(sha256key, nsMessageHandler.Credentials); SSOTicketType[] ssos = (SSOTicketType[])Enum.GetValues(typeof(SSOTicketType)); SSOTicketType expiredtickets = SSOTicketType.None; foreach (SSOTicketType ssot in ssos) { if (ExpiryState.NotExpired != ticket.Expired(ssot)) { expiredtickets |= ssot; } } if (expiredtickets == SSOTicketType.None) { nsMessageHandler.MSNTicket = ticket; if (onSuccess != null) { onSuccess(nsMessageHandler, EventArgs.Empty); } } else { Trace.WriteLineIf(Settings.TraceSwitch.TraceInfo, "Request new tickets: " + expiredtickets, "SingleSignOnManager"); SingleSignOn sso = new SingleSignOn(nsMessageHandler, policy); sso.AddAuths(expiredtickets); // ASYNC if (onSuccess != null && onError != null) { try { sso.Authenticate(ticket, delegate(object sender, EventArgs e) { try { AddToCacheWithLock(ticket); // Check Credentials again. Owner may sign off while SSOing. if (nsMessageHandler.Credentials != null && nsMessageHandler.Credentials.Account == authUser && nsMessageHandler.Credentials.Password == authPassword && nsMessageHandler.IsSignedIn == false) { NSMessageProcessor nsmp = nsMessageHandler.MessageProcessor as NSMessageProcessor; if (nsmp != null && nsmp.Connected) { nsMessageHandler.MSNTicket = ticket; onSuccess(nsMessageHandler, e); } } } catch (Exception ex) { DeleteFromCacheWithLock(sha256key); onError(nsMessageHandler, new ExceptionEventArgs(ex)); } }, delegate(object sender, ExceptionEventArgs e) { DeleteFromCacheWithLock(sha256key); onError(nsMessageHandler, e); }); } catch (Exception error) { DeleteFromCacheWithLock(sha256key); onError(nsMessageHandler, new ExceptionEventArgs(error)); } } else { // SYNC AuthenticateRetryAndUpdateCacheSync(sso, ticket, sha256key, 3); nsMessageHandler.MSNTicket = ticket; } } }
public MessageProcessorChangedEventArgs(NSMessageProcessor oldProcessor, NSMessageProcessor newProcessor) { this.oldProcessor = oldProcessor; this.newProcessor = newProcessor; }
/// <summary> /// Called when a XFR command has been received. /// </summary> /// <remarks> /// Indicates that the notification server has send us the location that we must switch to a new notification server. /// <code>XFR 0 [NS] [*.gateway.edge.messenger.live.com:Port] [G] [D] [HopString]</code> /// <code>XFR [Transaction] [NS] [IP:Port] [U] [D] [HopString]</code> /// </remarks> /// <param name="message"></param> protected virtual void OnXFRReceived(NSMessage message) { if ((string)message.CommandValues[0] == "NS") { // switch to a new notification server. That means reconnecting our current message processor. NSMessageProcessor processor = (NSMessageProcessor)MessageProcessor; // set new connectivity settings ConnectivitySettings newSettings = new ConnectivitySettings(processor.ConnectivitySettings); // disconnect first processor.Disconnect(); processor = null; string[] hostAndPort = ((string)message.CommandValues[1]).Split(new char[] { ':' }); bool isGateway = message.CommandValues[2].ToString() == "G"; // Get hop count. Version: 1\r\nXfrCount: 2\r\n if (message.CommandValues.Count >= 5) { string hopString = Encoding.ASCII.GetString(Convert.FromBase64String((string)message.CommandValues[4])); Match m = Regex.Match(hopString, @"(\d+)").NextMatch(); if (m.Success) { hopCount = Convert.ToInt32(m.Value); } } if (Settings.DisableHttpPolling && isGateway) { newSettings.HttpPoll = false; newSettings.Host = ConnectivitySettings.DefaultHost; newSettings.Port = ConnectivitySettings.DefaultPort; } else { newSettings.HttpPoll = isGateway; newSettings.Host = hostAndPort[0]; newSettings.Port = int.Parse(hostAndPort[1], System.Globalization.CultureInfo.InvariantCulture); } // Register events and handler, NSMessageProcessor mp = new NSMessageProcessor(newSettings); this.MessageProcessor = mp; mp.Connect(); // then reconnect. The login procedure will now start over again. } }
private void DoConnect() { if (Settings.DisableHttpPolling) ConnectivitySettings.HttpPoll = false; NSMessageProcessor mp = new NSMessageProcessor(ConnectivitySettings); Nameserver.MessageProcessor = mp; mp.Connect(); }