public LoginData Login(string username, string password, string publicServerKey) { StringWriter sw = new StringWriter();//&salt={4} string requestString = String.Format("username={0}&password={1}&server={2}" , username, password, publicServerKey); var request = (HttpWebRequest)WebRequest.Create(LoginUrl); request.Method = "POST"; request.Timeout = 15000; // 15s timeout request.ContentType = "application/x-www-form-urlencoded"; request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore); byte[] formData = Encoding.ASCII.GetBytes(requestString); request.ContentLength = formData.Length; System.Net.ServicePointManager.Expect100Continue = false; // fixes lighthttpd 417 error using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(formData, 0, formData.Length); requestStream.Flush(); } WebResponse response = request.GetResponse(); string responseText = null; using (StreamReader sr = new StreamReader(response.GetResponseStream())) { responseText = sr.ReadToEnd(); } request.Abort(); LoginData data = new LoginData(); //Problem with current login.php: when both password and serverKey are incorrect then // response will be just "Wrong server" and won't contain "Wrong username". //Workaround: For checking password correctness //provide a good publicServerKey - some server from xml.php. data.PasswordCorrect = !(responseText.Contains("Wrong username") || responseText.Contains("Incorrect username")); data.ServerCorrect = !responseText.Contains("server"); StringReader sr2 = new StringReader(responseText); try { string authcode = sr2.ReadLine(); string ip = sr2.ReadLine(); string port = sr2.ReadLine(); data.AuthCode = authcode; data.ServerAddress = ip; data.Port = int.Parse(port); } catch { } return data; }
private void ConnectToInternetGame(string qusername, string qpass, string qgameurl) { var oldclientgame = map; var oldnetwork = network; var oldterrain = terrain; internetgamefactory.NewInternetGame(); //.newclientgame = internetgamefactory.GetClientGame(); //.newnetwork = internetgamefactory.GetNetwork(); //.newterrain = internetgamefactory.GetTerrain(); //.newterrain.Start(); var newnetwork = network; var newterrain = terrain; if (oldterrain is IDisposable) { ((IDisposable)oldterrain).Dispose(); } newterrain.Start(); oldclientgame.Dispose(); newnetwork.MapLoaded += new EventHandler<MapLoadedEventArgs>(network_MapLoaded); newnetwork.MapLoadingProgress += new EventHandler<MapLoadingProgressEventArgs>(newnetwork_MapLoadingProgress); oldnetwork.Dispose(); new MethodInvoker(() => { //game url can be //a) minecraft.net url //if (qgameurl.Contains("minecraft.net")) //{ //} //b) just hash //c) ip:port (server must have disabled authorization checking). LoginData logindata = new LoginData(); int? pport = null; if (qgameurl.Contains(":") && (!qgameurl.Contains("http"))) { pport = int.Parse(qgameurl.Substring(qgameurl.IndexOf(":") + 1).Trim()); qgameurl = qgameurl.Substring(0, qgameurl.IndexOf(":")); } if (mppassword == null) { System.Net.IPAddress server2 = null; try { logindata = login.Login(qusername, qpass, qgameurl); } catch (Exception e) { Console.WriteLine(e.ToString()); } if (logindata == null) { logindata = new LoginData(); } if (System.Net.IPAddress.TryParse(qgameurl, out server2)) { logindata.serveraddress = server2.ToString(); logindata.port = 25565; if (pport != null) { logindata.port = pport.Value; } if (logindata.mppass == null) { logindata.mppass = ""; } } } else { logindata.mppass = mppassword; logindata.port = pport.Value; logindata.serveraddress = qgameurl; } frametickmainthreadtodo.Add( () => { newnetwork.Connect(logindata.serveraddress, logindata.port, username, logindata.mppass); } ); }).BeginInvoke(null, null); GuiStateSetMapLoading(); }