private string OnRequestAcLogin(HttpRequest request, FormUrlEncodedBody body, bool isCreate) { AccountRequestCreate info = new AccountRequestCreate(body, isCreate); EventSink.InvokeAccountCreate(info); if (info.IsHandled && info.IsSuccess) { Kernel.WriteLine(Host, $"{request.NetState} authenticated as account '{info.Account}'."); return(new HttpResponse(request, contentType: HttpResponse.ContentTypeTextPlain) .AddHeader("NODE", "wifiappe2") .AddHeader("Server", "Nintendo Wii (http)") .AddHeaderDateGMT() .Append(new FormUrlEncodedBody() .AddParamAscii("challenge", info.Account.GsLoginPassword) .AddParamAscii("locator", "gamespy.com") .AddParamAscii("retry", "0") .AddParamAscii("returncd", "001") .AddParamAscii("token", info.Account.GsLoginToken) .AddParamAscii("datetime", DateTime.UtcNow.ToString("yyyyMMddHHmmss")) .Compile() ).Compile()); } else if (info.IsHandled) // but failed to login, prompt DS for retry { Console.WriteLine($"{Host}: {request.ClientName} failed to authenticate."); return(new HttpResponse(request, contentType: HttpResponse.ContentTypeTextPlain) .AddHeader("NODE", "wifiappw1") .AddHeader("Server", "Nintendo Wii (https)") .AddHeaderDateGMT() .Append(new FormUrlEncodedBody() .AddParamAscii("retry", "0") .AddParamAscii("returncd", info.FailReason) .AddParamAscii("userid", info.ClientUserID) .AddParamAscii("datetime", DateTime.UtcNow.ToString("yyyyMMddHHmmss")) .Compile() ).Compile()); } else { return(OnUnhandledRequest(request)); } }