X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FXMLRPC.java;h=30cc98cb986c99b3f63ef8d6d5a253f23c8c2a2a;hb=6306453b7699b9a9eba4e2108d673928ad5a431c;hp=efe4959a5be79d714d4d7486665df0dec5245909;hpb=027607da259f292060d80e0ed90d2b0e896acd86;p=org.ibex.core.git diff --git a/src/org/xwt/XMLRPC.java b/src/org/xwt/XMLRPC.java index efe4959..30cc98c 100644 --- a/src/org/xwt/XMLRPC.java +++ b/src/org/xwt/XMLRPC.java @@ -74,6 +74,7 @@ class XMLRPC extends XML implements Function { // Methods to Recieve and parse XML-RPC Response //////////////////////////////////////////////////// public void startElement(String name, String[] keys, Object[] vals, int line, int col) { + content.reset(); if (name.equals("fault")) fault = true; else if (name.equals("struct")) objects.setElementAt(new JSObject(false), objects.size() - 1); else if (name.equals("array")) objects.setElementAt(null, objects.size() - 1); @@ -184,11 +185,11 @@ class XMLRPC extends XML implements Function { } else if (o instanceof ByteStream) { try { - sb.append(" "); + sb.append(" \n"); InputStream is = ((ByteStream)o).getInputStream(); - byte[] buf = new byte[96]; + byte[] buf = new byte[54]; while(true) { - int numread = is.read(buf, 0, 96); + int numread = is.read(buf, 0, 54); if (numread == -1) break; byte[] writebuf = buf; if (numread < buf.length) { @@ -196,10 +197,9 @@ class XMLRPC extends XML implements Function { System.arraycopy(buf, 0, writebuf, 0, numread); } sb.append(" "); - sb.append(Base64.encode(writebuf)); + sb.append(new String(Base64.encode(writebuf))); sb.append("\n"); } - sb.append(((Boolean)o).booleanValue() ? "1" : "0"); sb.append("\n \n"); } catch (IOException e) { if (Log.on) Log.log(this, "caught IOException while attempting to send a ByteStream via XML-RPC"); @@ -227,6 +227,26 @@ class XMLRPC extends XML implements Function { } sb.append("\n"); + } else if (o instanceof NativeDate) { + sb.append(" "); + NativeDate nd = (NativeDate)o; + Date d = new Date(nd.getRawTime()); + sb.append(d.getYear() + 1900); + if (d.getMonth() + 1 < 10) sb.append('0'); + sb.append(d.getMonth() + 1); + if (d.getDate() < 10) sb.append('0'); + sb.append(d.getDate()); + sb.append('T'); + if (d.getHours() < 10) sb.append('0'); + sb.append(d.getHours()); + sb.append(':'); + if (d.getMinutes() < 10) sb.append('0'); + sb.append(d.getMinutes()); + sb.append(':'); + if (d.getSeconds() < 10) sb.append('0'); + sb.append(d.getSeconds()); + sb.append("\n"); + } else if (o instanceof NativeArray) { if (tracker.get(o) != null) throw new JavaScriptException("attempted to send multi-ref data structure via XML-RPC"); tracker.put(o, Boolean.TRUE); @@ -293,13 +313,11 @@ class XMLRPC extends XML implements Function { new BufferedReader(new FilterReader(new InputStreamReader(new Filter(http.getInputStream()))) { public int read() throws IOException { int i = super.read(); - System.out.println("X " + i); if (Log.on) Log.log(this, "recv: " + ((char)i)); return i; } public int read(char[] c, int off, int len) throws IOException { int ret = super.read(c, off, len); - System.out.println("Y " + ret); if (ret == -1) return ret; if (Log.on) Log.log(this, "recv: " + new String(c, off, ret)); return ret; @@ -344,19 +362,10 @@ class XMLRPC extends XML implements Function { public final Object call(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args) throws JavaScriptException { - // put ourselves in the background - Thread thread = Thread.currentThread(); - if (!(thread instanceof ThreadMessage)) { - if (Log.on) Log.log(this, "RPC calls may only be made from background threads"); - return null; - } - ThreadMessage mythread = (ThreadMessage)thread; - mythread.setPriority(Thread.MIN_PRIORITY); - mythread.done.release(); + if (!ThreadMessage.suspendThread()) return null; try { return call(args); - } catch (IOException se) { if (Log.on) Log.log(this, se); if (Log.on) Log.log(this, " at " + cx.interpreterSourceFile + ":" + cx.interpreterLine); @@ -369,12 +378,8 @@ class XMLRPC extends XML implements Function { if (Log.on) Log.log(this, " at " + cx.interpreterSourceFile + ":" + cx.interpreterLine); } throw jse; - } finally { - // okay, let ourselves be brought to the foreground - MessageQueue.add(mythread); - mythread.setPriority(Thread.NORM_PRIORITY); - mythread.go.block(); + ThreadMessage.resumeThread(); } }