// previous call wrecked the socket connection, but we already sent our request, so we can't just retry --
// this could cause the server to receive the request twice, which could be bad (think of the case where the
// server call causes Amazon.com to ship you an item with one-click purchasing).
- if (sock == null)
+ if (in == null)
throw new HTTPException("a previous pipelined call messed up the socket");
Hashtable h = in == null ? null : parseHeaders(in);
PrintWriter pw = new PrintWriter(new OutputStreamWriter(originalUrl.equals("stdio:") ?
System.out : sock.getOutputStream()));
if (content != null) {
- pw.print("POST " + path + " HTTP/1.1\r\n");
+ pw.print("POST " + path + " HTTP/1.0\r\n"); // FIXME chunked encoding
int contentLength = content.substring(0, 2).equals("\r\n") ?
content.length() - 2 :
(content.length() - content.indexOf("\r\n\r\n") - 4);
if (h.get("AUTHTYPE").equals("Basic")) {
if (authCache.get(originalUrl) != null) throw new HTTPException("username/password rejected");
- authCache.put(originalUrl, "Basic " + new String(Base64.encode(userInfo.getBytes("US-ASCII"))));
+ authCache.put(originalUrl, "Basic " + new String(Base64.encode(userInfo.getBytes("UTF8"))));
} else if (h.get("AUTHTYPE").equals("Digest")) {
if (authCache.get(originalUrl) != null && !"true".equals(h.get("stale")))
if (style.equals("Basic")) {
Proxy.Authorization.authorization2 =
- "Basic " + new String(Base64.encode(Proxy.Authorization.authorization.getBytes("US-ASCII")));
+ "Basic " + new String(Base64.encode(Proxy.Authorization.authorization.getBytes("UTF8")));
} else if (style.equals("Digest")) {
String A1 = Proxy.Authorization.authorization.substring(0, userInfo.indexOf(':')) + ":" + h.get("realm") + ":" +
if (buflen >= 4 && buf[buflen - 4] == '\r' && buf[buflen - 3] == '\n' &&
buf[buflen - 2] == '\r' && buf[buflen - 1] == '\n')
break;
+ if (buflen >=2 && buf[buflen - 1] == '\n' && buf[buflen - 2] == '\n')
+ break; // nice for people using stdio
if (buflen == buf.length) {
byte[] newbuf = new byte[buf.length * 2];
System.arraycopy(buf, 0, newbuf, 0, buflen);
}
private String H(String s) throws IOException {
- byte[] b = s.getBytes("US-ASCII");
+ byte[] b = s.getBytes("UTF8");
MD5Digest md5 = new MD5Digest();
md5.update(b, 0, b.length);
byte[] out = new byte[md5.getDigestSize()];
Scheduler.add(new Scheduler.Task() {
public void perform() throws IOException, JSExn {
Box b = new Box();
- Template t = Template.buildTemplate("org/ibex/builtin/proxy_authorization.ibex", Stream.getInputStream((JS)Main.builtin.get("org/ibex/builtin/proxy_authorization.ibex")), new Ibex(null));
+ Template t = null;
+ // FIXME
+ //Template.buildTemplate("org/ibex/builtin/proxy_authorization.ibex", Stream.getInputStream((JS)Main.builtin.get("org/ibex/builtin/proxy_authorization.ibex")), new Ibex(null));
t.apply(b);
b.put("realm", realm);
b.put("proxyIP", proxyIP);
*/
private static byte[] lmHash(String password) {
/*
- byte[] oemPassword = password.toUpperCase().getBytes("US-ASCII");
+ byte[] oemPassword = password.toUpperCase().getBytes("UTF8");
int length = java.lang.Math.min(oemPassword.length, 14);
byte[] keyBytes = new byte[14];
System.arraycopy(oemPassword, 0, keyBytes, 0, length);
Key lowKey = createDESKey(keyBytes, 0);
Key highKey = createDESKey(keyBytes, 7);
- byte[] magicConstant = "KGS!@#$%".getBytes("US-ASCII");
+ byte[] magicConstant = "KGS!@#$%".getBytes("UTF8");
Cipher des = Cipher.getInstance("DES/ECB/NoPadding");
des.init(Cipher.ENCRYPT_MODE, lowKey);
byte[] lowHash = des.doFinal(magicConstant);