protected override void internalAuthenticate(BClient_Indexserver client, BAsyncResult <bool> asyncResult) { // Aktuelle ClientInfo bereitstellen, wg. Landessprache, Zeitzone usw. ClientInfo ci = getLoginResult().clientInfo; // Verbindungsobjekt für GET-Request IXWireClient wire = (IXWireClient)client.getTransport().getWire(); HttpWebResponse resp = null; try { String loginServletUrl = wire.getUrlForAuthentication(); long negotiatedVersion = client.getTransport().getProtocol().negotiatedVersion; long negotiatedBypsVersion = client.getTransport().getProtocol().negotiatedBypsVersion; // Schreibe diese 9er Version für die Verbindung zu IX 9.0. // Weil bei ELO 9 ein String-Vergleich gemacht wird, wäre sonst die Version 10 kleiner als die Version 9 loginServletUrl += "?streamversion=" + BVersioning.stringToLong("9.99.0.0"); loginServletUrl += "&bstreamversion=" + BVersioning.longToString(negotiatedVersion); loginServletUrl += "&bversion=" + negotiatedBypsVersion; loginServletUrl += "&responseformat=byps-binary"; if (ci.language != null) { loginServletUrl += "&language=" + ci.language; } if (ci.timeZone != null) { loginServletUrl += "&timezone=" + HttpUtility.UrlEncode(ci.timeZone); } if (ci.country != null) { loginServletUrl += "&country=" + ci.country; } if (ci.callId != null) { loginServletUrl += "&callid=" + HttpUtility.UrlEncode(ci.callId); } if (computerName != null) { loginServletUrl += "&computerName=" + HttpUtility.UrlEncode(computerName); } // Sitzungskennung übergeben. // Sie wird direkt verworfen und es wird eine neue erstellt. loginServletUrl += "&sessionid=" + HttpUtility.UrlEncode(client.getTransport().getSessionId()); if (WebRequest.DefaultWebProxy != null) { WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials; } HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(loginServletUrl); req.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; req.Credentials = CredentialCache.DefaultCredentials; //http://blogs.msdn.com/buckh/archive/2004/07/28/199706.aspx //CredentialCache credCache = new CredentialCache(); //credCache.Add(new Uri(loginServletUrl), "NTLM", // CredentialCache.DefaultNetworkCredentials); //req.Credentials = credCache; resp = (HttpWebResponse)req.GetResponse(); if (resp.StatusCode != HttpStatusCode.OK) { asyncResult(false, new BException((int)resp.StatusCode, "HTTP Status " + resp.StatusCode)); } Stream responseStream = resp.GetResponseStream(); ByteBuffer buf = BWire.bufferFromStream(responseStream, false); BMessageHeader header = new BMessageHeader(); header.read(buf); // Neue Sitzungs-ID übernehmen if (!header.targetId.isZero()) { client.getTransport().setTargetId(header.targetId); client.getTransport().setSessionId(header.sessionId); } BInput bin = client.getTransport().getInput(header, buf); LoginResult loginResult = (LoginResult)bin.load(); this.setLoginResult(loginResult); asyncResult(false, null); } catch (Exception e) { asyncResult(false, e); } finally { if (resp != null) { resp.Close(); } } }