internal void handleChallenge(MSNMessage message) { //<<< CHL 0 15570131571988941333\r\n //>>> QRY 1049 [email protected] 32\r\n8f2f5a91b72102cd28355e9fc9000d6e (no newline) //<<< QRY 1049\r\n String md = HashMD5(message.getData()[0] + "Q1P7W2E4J9R8U3S5"); controller.sendMessage(new MSNMessage("QRY " + MSNTrIDGenerator.NextID() + " [email protected] 32\r\n" + md)); }
public MSNUserIncommingEmoticon(String username, String userPayload) { this.username = username; this.messageType = MSNEnumerations.UserMessageType.incomming_emoticon_message; this.font = "Ariel"; this.userPayload = userPayload; id = MSNTrIDGenerator.NextID(); send = true; display = true; }
internal MSNSwitchboard(MSNController controller, String addressString, int addressPort, String authenticateString, String rngTrID) //handles conversations started by local client { try { this.controller = controller; #region connect to switchboard try { switchboardSocket = new MSNSocketWrapper(addressString, addressPort, false); if (!switchboardSocket.connected()) { Console.WriteLine("Error making switchboard connection in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ")"); throw new Exception("Could not connect to switchboard in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ")"); } } catch (Exception) { Console.WriteLine("Error making switchboard connection in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ")"); return; } #endregion #region authenticate //ANS 1 [email protected] 1056411141.26158 17342299\r\n switchboardSocket.send(new MSNMessage("ANS " + MSNTrIDGenerator.NextID() + " " + controller.Username + " " + authenticateString + " " + rngTrID + "\r\n")); #endregion #region incommingMessageReadThread incommingMessageHandlerThread = new Thread(new ThreadStart(processIncommingMessageLoop)); incommingMessageHandlerThread.Name = "MSNSwitchboard incomming read thread"; incommingMessageHandlerThread.Start(); #endregion #region incommingMSGThread incommingMSGThread = new Thread(new ThreadStart(incommingMSGLoop)); incommingMSGThread.Name = "Incomming MSG handler thread"; incommingMSGThread.Start(); #endregion #region outgoingMSGThread outgoingMSGThread = new Thread(new ThreadStart(outgoingMSGLoop)); outgoingMSGThread.Name = "Outgoing MSG handler thread"; outgoingMSGThread.Start(); #endregion plugins.ElementAdded += new MSNListenableList <IMSNSwitchboardPlugin> .ElementAddedDelegate(plugins_ElementAdded); } catch (Exception) { Console.WriteLine("Error establishing switchboard session in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ")"); } }
public MSNUserTypingMessage(String username, MSNEnumerations.UserMessageType messageType) { this.username = username; this.messageType = messageType; this.id = MSNTrIDGenerator.NextID(); userPayload = ""; font = ""; send = true; display = true; }
public MSNUserOutgoingMessage(String font, String userPayload) { this.messageType = MSNEnumerations.UserMessageType.outgoing_text_message; this.font = font; this.id = MSNTrIDGenerator.NextID(); this.userPayload = userPayload; this.username = null; send = true; display = true; }
private void controller_LoginStatusChanged(MSNEnumerations.LoginStatus newStatus) { if (newStatus == MSNEnumerations.LoginStatus.LOGGED_OUT) { reset(); } else if (newStatus == MSNEnumerations.LoginStatus.LOGGED_IN) { //send initial sync command controller.sendMessage(new MSNMessage("SYN " + MSNTrIDGenerator.NextID() + " " + versionID + "\r\n")); } }
internal void startConversation(List <String> usernames) { //XFR 15 SB\r\n try { int id = MSNTrIDGenerator.NextID(); newConversationContacts.Add(id.ToString(), usernames); controller.sendMessage(new MSNMessage("XFR " + id + " SB\r\n")); } catch (Exception) { Console.WriteLine("Error in MSNSwitchboardController.startConversation"); } }
public MSNUserIncommingMessage(String username, String font, String userPayload) { this.username = username; this.messageType = MSNEnumerations.UserMessageType.incomming_text_message; this.font = font; this.userPayload = userPayload; id = MSNTrIDGenerator.NextID(); send = true; display = true; if (userPayload.StartsWith("\r\n") && userPayload.Length > 2) { userPayload = userPayload.Substring(2); } }
internal MSNSocketWrapper doAuthentication(String address, int port) { //messenger.hotmail.com:1863 MSNSocketWrapper sw = new MSNSocketWrapper(address, port, false); if (sw.connected() != true) { throw new Exception("Not connecting to messenger.hotmail.com"); } #region negotiate protocol version (VER) #region VER 1 MSNP8 CVR0\r\n MSNMessage outMessage = new MSNMessage("VER " + MSNTrIDGenerator.NextID() + " MSNP9 MSNP8 CVR0\r\n"); sw.send(outMessage); #endregion #region <<< VER 1 MSNP8 CVR0\r\n MSNMessage inMessage = sw.recieve(); if (inMessage.getCommand().Equals("VER") != true) { throw new Exception("VER Expected (" + inMessage.ToString() + ")"); } if (inMessage.getTrID() != outMessage.getTrID()) { throw new Exception("Incorrect TrID reponce in VER (" + inMessage.ToString() + ")"); } String[] messageDataTokens = inMessage.getData(); if (messageDataTokens.Length == 0) { throw new Exception("No data recieved in VER (" + inMessage.ToString() + ")"); } if (messageDataTokens[0].ToString().Equals("0")) { throw new Exception("Protocol MSNP9 MSNP8 CVR0 not supported in VER (" + inMessage.ToString() + ")"); } #endregion #endregion #region negotiate client version (CVR) #region CVR 2 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS [email protected]\r\n outMessage = new MSNMessage("CVR " + MSNTrIDGenerator.NextID() + " 0x0409 win 4.10 i386 MSNMSGR 7.0.0816 MSMSGS " + username + "\r\n"); sw.send(outMessage); #endregion #region CVR 2 7.0.0816 7.0.0816 1.0.0000 http://download.microsoft.com/download/8/a/4/8a42bcae-f533-4468-b871-d2bc8dd32e9e/SETUP9x.EXE http://messenger.msn.com\r\n inMessage = sw.recieve(); if (inMessage.getCommand().Equals("CVR") != true) { throw new Exception("CVR Expected (" + inMessage.ToString() + ")"); } if (inMessage.getTrID() != outMessage.getTrID()) { throw new Exception("Incorrect TrID reponce in CVR (" + inMessage.ToString() + ")"); } messageDataTokens = inMessage.getData(); if (messageDataTokens.Length == 0) { throw new Exception("No data recieved in CVR (" + inMessage.ToString() + ")"); } #endregion #endregion #region get session tpf -> passport session ticket (USR) #region USR 3 TWN I [email protected]\r\n outMessage = new MSNMessage("USR " + MSNTrIDGenerator.NextID() + " TWN I " + username + "\r\n"); sw.send(outMessage); #endregion #region get responce inMessage = sw.recieve(); if (!(inMessage.getCommand().Equals("XFR") == true || inMessage.getCommand().Equals("USR") == true)) { throw new Exception("USR/XFR Expected (" + inMessage.ToString() + ")"); } //HANDLE INITIAL USR if (inMessage.getCommand().Equals("USR")) { String[] data = inMessage.getData(); if (data.Length >= 6) { initialFriendlyName = HttpUtility.UrlDecode(data[4]); } } if (inMessage.getTrID() != outMessage.getTrID()) { throw new Exception("Incorrect TrID reponce in CVR (" + inMessage.ToString() + ")"); } #endregion #region XFR 3 NS 207.46.106.118:1863 0 207.46.104.20:1863\r\n if (inMessage.getCommand().Equals("XFR")) { messageDataTokens = inMessage.getData(); if (messageDataTokens.Length != 4) { throw new Exception("Incorrect data length in XFR (" + inMessage.ToString() + ")"); } try { char[] splitTokens = new char[1]; splitTokens[0] = ':'; String[] addressDataTokens = messageDataTokens[1].Split(splitTokens); String newAddress = addressDataTokens[0]; int newPort = int.Parse(addressDataTokens[1]); return(doAuthentication(newAddress, newPort)); } catch (FormatException) { throw new Exception("Format error in XFR (" + inMessage.ToString() + ")"); } } #endregion String sessionTicket = ""; //First USR #region USR 3 TWN S lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1062764229,kpp=1,kv=5,ver=2.1.0173.1,tpf=43f8a4c8ed940c04e3740be46c4d1619\r\n if (inMessage.getCommand().Equals("USR")) { String messageStr = inMessage.ToString(); messageStr = messageStr.Replace("\r\n", ""); char[] splitTokens = new char[1]; splitTokens[0] = '='; messageDataTokens = messageStr.Split(splitTokens); String tpf = messageDataTokens[messageDataTokens.Length - 1].ToString(); String ver = messageDataTokens[messageDataTokens.Length - 3].ToString().Replace(",rn", ""); sessionTicket = getPassportTicket(tpf, ver); } #endregion #endregion #region final authentication (USR) #region USR 4 TWN S t=53*1hAu8ADuD3TEwdXoOMi08sD*2!cMrntTwVMTjoB3p6stWTqzbkKZPVQzA5NOt19SLI60PY!b8K4YhC!Ooo5ug$$&p=5eKBBC!yBH6ex5mftp!a9DrSb0B3hU8aqAWpaPn07iCGBw5akemiWSd7t2ot!okPvIR!Wqk!MKvi1IMpxfhkao9wpxlMWYAZ!DqRfACmyQGG112Bp9xrk04!BVBUa9*H9mJLoWw39m63YQRE1yHnYNv08nyz43D3OnMcaCoeSaEHVM7LpR*LWDme29qq2X3j8N\r\n outMessage = new MSNMessage("USR " + MSNTrIDGenerator.NextID() + " TWN S " + sessionTicket + "\r\n"); sw.send(outMessage); #endregion #region USR 4 OK [email protected] example%20display%20name 1 0\r\n inMessage = sw.recieve(); if (inMessage.getCommand().Equals("USR")) { String[] data = inMessage.getData(); if (data.Length >= 3) { initialFriendlyName = HttpUtility.UrlDecode(data[2]); } } if (!inMessage.getCommand().Equals("USR")) { throw new Exception("Unexpected command responce for USR in doAuthentication(" + address + ", " + port + ")"); } if (inMessage.getTrID() != outMessage.getTrID()) { throw new Exception("Unexpected TrID responce for USR in doAuthentication(" + address + ", " + port + ")"); } messageDataTokens = inMessage.getData(); if (messageDataTokens.Length != 5) { throw new Exception("Unexpected length data responce for USR in doAuthentication(" + address + ", " + port + ")"); } if (!messageDataTokens[0].Equals("OK")) { throw new Exception("Unknown failure to authentication for USR in doAuthentication(" + address + ", " + port + ")"); } if (!messageDataTokens[1].Equals(username)) { throw new Exception("Authenticated as incorrect user for USR in doAuthentication(" + address + ", " + port + ")"); } //############################################################################################################################# // AUTHENTICATION PASSED // AUTHENTICATION PASSED // AUTHENTICATION PASSED // AUTHENTICATION PASSED // AUTHENTICATION PASSED // //############################################################################################################################# return(sw); #endregion #endregion }
public void invite(String username) { sendMessage(new MSNMessage("CAL " + MSNTrIDGenerator.NextID() + " " + username + "\r\n")); }
internal MSNSwitchboard(MSNController controller, String addressString, int addressPort, String authenticateString, List <String> initialUsers) //handles conversations started by local client { try { this.controller = controller; #region connect to switchboard try { switchboardSocket = new MSNSocketWrapper(addressString, addressPort, false); if (!switchboardSocket.connected()) { Console.WriteLine("Error making switchboard connection in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ", " + initialUsers.ToString() + ")"); throw new Exception("Could not connect to switchboard in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ", " + initialUsers.ToString() + ")"); } } catch (Exception) { Console.WriteLine("Error making switchboard connection in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ", " + initialUsers.ToString() + ")"); return; } #endregion #region authenticate //USR 7 [email protected] 189597.1056411784.29994\r\n switchboardSocket.send(new MSNMessage("USR " + MSNTrIDGenerator.NextID() + " " + controller.Username + " " + authenticateString + "\r\n")); #endregion #region add initial users //CAL 8 [email protected]\r\n if (initialUsers != null) { for (int i = 0; i < initialUsers.Count; i++) { switchboardSocket.send(new MSNMessage("CAL " + MSNTrIDGenerator.NextID() + " " + initialUsers[i] + "\r\n")); } } #endregion #region incommingMessageReadThread incommingMessageHandlerThread = new Thread(new ThreadStart(processIncommingMessageLoop)); incommingMessageHandlerThread.Name = "MSNSwitchboard incomming read thread"; incommingMessageHandlerThread.Start(); #endregion #region incommingMSGThread incommingMSGThread = new Thread(new ThreadStart(incommingMSGLoop)); incommingMSGThread.Name = "Incomming MSG handler thread"; incommingMSGThread.Start(); #endregion #region outgoingMSGThread outgoingMSGThread = new Thread(new ThreadStart(outgoingMSGLoop)); outgoingMSGThread.Name = "Outgoing MSG handler thread"; outgoingMSGThread.Start(); #endregion plugins.ElementAdded += new MSNListenableList <IMSNSwitchboardPlugin> .ElementAddedDelegate(plugins_ElementAdded); } catch (Exception) { //Console.WriteLine("Error establishing switchboard session in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ", " + initialUsers.ToString() + ")"); } }
internal void reconnect(String addressString, int addressPort, String authenticateString, String rngTrID) { try { activeUsers.Clear(); #region connect to switchboard try { switchboardSocket = new MSNSocketWrapper(addressString, addressPort, false); if (!switchboardSocket.connected()) { Console.WriteLine("Error making switchboard connection in MSNSwitchboard.reconnect(" + addressString + ", " + addressPort + ", " + authenticateString + ")"); throw new Exception("Could not connect to switchboard in MSNSwitchboard.reconnect(" + addressString + ", " + addressPort + ", " + authenticateString + ")"); } } catch (Exception) { Console.WriteLine("Error making switchboard connection in MSNSwitchboard.reconnect(" + addressString + ", " + addressPort + ", " + authenticateString + ")"); return; } #endregion #region authenticate //ANS 1 [email protected] 1056411141.26158 17342299\r\n switchboardSocket.send(new MSNMessage("ANS " + MSNTrIDGenerator.NextID() + " " + controller.Username + " " + authenticateString + " " + rngTrID + "\r\n")); #endregion #region incommingMessageReadThread try { incommingMessageHandlerThread.Abort(); } catch (Exception) { } incommingMessageHandlerThread = new Thread(new ThreadStart(processIncommingMessageLoop)); incommingMessageHandlerThread.Name = "MSNSwitchboard incomming read thread"; incommingMessageHandlerThread.Start(); #endregion #region incommingMSGThread try { incommingMSGThread.Abort(); } catch (Exception) { } incommingMSGThread = new Thread(new ThreadStart(incommingMSGLoop)); incommingMSGThread.Name = "Incomming MSG handler thread"; incommingMSGThread.Start(); #endregion #region outgoingMSGThread try { outgoingMSGThread.Abort(); } catch (Exception) { } outgoingMSGThread = new Thread(new ThreadStart(outgoingMSGLoop)); outgoingMSGThread.Name = "Outgoing MSG handler thread"; outgoingMSGThread.Start(); #endregion } catch (Exception) { Console.WriteLine("Error establishing switchboard session in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ")"); } }
internal void reconnect(String addressString, int addressPort, String authenticateString, List <String> initialUsers) { try { activeUsers.Clear(); #region connect to switchboard try { switchboardSocket = new MSNSocketWrapper(addressString, addressPort, false); if (!switchboardSocket.connected()) { Console.WriteLine("Error making switchboard connection in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ", " + initialUsers.ToString() + ")"); throw new Exception("Could not connect to switchboard in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ", " + initialUsers.ToString() + ")"); } } catch (Exception) { Console.WriteLine("Error making switchboard connection in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ", " + initialUsers.ToString() + ")"); return; } #endregion #region authenticate //USR 7 [email protected] 189597.1056411784.29994\r\n switchboardSocket.send(new MSNMessage("USR " + MSNTrIDGenerator.NextID() + " " + controller.Username + " " + authenticateString + "\r\n")); #endregion #region add initial users //CAL 8 [email protected]\r\n if (initialUsers != null) { for (int i = 0; i < initialUsers.Count; i++) { switchboardSocket.send(new MSNMessage("CAL " + MSNTrIDGenerator.NextID() + " " + initialUsers[i] + "\r\n")); } } #endregion #region incommingMessageReadThread try { incommingMessageHandlerThread.Abort(); } catch (Exception) { } incommingMessageHandlerThread = new Thread(new ThreadStart(processIncommingMessageLoop)); incommingMessageHandlerThread.Name = "MSNSwitchboard incomming read thread"; incommingMessageHandlerThread.Start(); #endregion #region incommingMSGThread try { incommingMSGThread.Abort(); } catch (Exception) { } incommingMSGThread = new Thread(new ThreadStart(incommingMSGLoop)); incommingMSGThread.Name = "Incomming MSG handler thread"; incommingMSGThread.Start(); #endregion #region outgoingMSGThread try { outgoingMSGThread.Abort(); } catch (Exception) { } outgoingMSGThread = new Thread(new ThreadStart(outgoingMSGLoop)); outgoingMSGThread.Name = "Outgoing MSG handler thread"; outgoingMSGThread.Start(); #endregion } catch (Exception) { Console.WriteLine("Error establishing switchboard session in MSNSwitchboard(" + controller.ToString() + ", " + addressString + ", " + addressPort + ", " + authenticateString + ", " + initialUsers.ToString() + ")"); } }