internal MSNTicket(Credentials creds) { if (null != creds && false == String.IsNullOrEmpty(creds.Account) && false == String.IsNullOrEmpty(creds.Password)) { DeleteTick = NextDeleteTick(); Sha256Key = ComputeSHA(creds.Account, creds.Password); } }
/// <summary> /// Send the first message to the server. /// </summary> protected virtual void SendInitialMessage() { (MessageProcessor as NSMessageProcessor).ResetTransactionID(); // 1) VER: MSN Protocol used MessageProcessor.SendMessage(new NSMessage("VER", new string[] { "MSNP21", "CVR0" })); // 2) CVR: Send client information MsnProtocol msnProtocol = MsnProtocol.MSNP21; Credentials oldcred = Credentials; Credentials = new Credentials(oldcred.Account, oldcred.Password, msnProtocol); string base64Hop = (hopCount == 0 || hopCount == int.MaxValue) ? "0" : Convert.ToBase64String(Encoding.ASCII.GetBytes("Version: 1\r\nXfrCount: " + hopCount.ToString(CultureInfo.InvariantCulture))); MessageProcessor.SendMessage(new NSMessage("CVR", new string[] { "0x040c", //The LCIDs in .net framework are different from Windows API: "0x" + CultureInfo.CurrentCulture.LCID.ToString("x4") "winnt", "6.1.1", "i386", Credentials.ClientInfo.MessengerClientName, Credentials.ClientInfo.MessengerClientBuildVer, Credentials.ClientInfo.MessengerClientBrand, Credentials.Account, base64Hop }) ); // 3) USR: Begin login procedure MessageProcessor.SendMessage(new NSMessage("USR", new string[] { "SSO", "I", Credentials.Account })); }
private static MSNTicket GetFromCacheOrCreateNewWithLock(string sha256key, Credentials creds) { MSNTicket ticket = null; lock (SyncObject) { if (authenticatedTicketsCache.ContainsKey(sha256key)) { // Hit delete tick ticket = authenticatedTicketsCache[sha256key]; ticket.DeleteTick = MSNTicket.NextDeleteTick(); } else { ticket = new MSNTicket(creds); } } return ticket; }