Index: src/xml/XMLParser.java =================================================================== --- src/xml/XMLParser.java (revision 1384) +++ src/xml/XMLParser.java (working copy) @@ -70,11 +70,7 @@ tagName=new StringBuffer(); } - public void parse(byte indata[], int size) throws XMLException{ - int dptr=0; - while (size>0) { - size--; - char c=(char)(indata[dptr++] &0xff); + public void parse(char c) throws XMLException { switch (state) { case PLAIN_TEXT: { //parsing plain text @@ -88,22 +84,22 @@ tagName.setLength(0); attr=new Vector(); - continue; + break; } - sbuf.append(c); continue; + sbuf.append(c); break; } case ATRNAME: { - if (c=='?') continue; - if (c==' ') continue; - if (c=='=') continue; - if (c=='\'') { state=ATRVALQS; atrName=sbuf.toString(); sbuf.setLength(0); continue; } - if (c=='\"') { state=ATRVALQD; atrName=sbuf.toString(); sbuf.setLength(0); continue; } + if (c=='?') break; + if (c==' ') break; + if (c=='=') break; + if (c=='\'') { state=ATRVALQS; atrName=sbuf.toString(); sbuf.setLength(0); break; } + if (c=='\"') { state=ATRVALQD; atrName=sbuf.toString(); sbuf.setLength(0); break; } if (c!='>' && c!='/') { sbuf.append(c); - continue; + break; } else { state=TAGNAME; sbuf.setLength(0); @@ -112,7 +108,7 @@ case TAGNAME: { - if (c=='?') continue; + if (c=='?') break; if (c=='/') { state=ENDTAGNAME; sbuf.setLength(0); @@ -121,24 +117,23 @@ eventListener.tagStart(tn, attr); sbuf.append(tn); } - continue; + break; } - if (c==' ') { state=ATRNAME; continue; } + if (c==' ') { state=ATRNAME; break; } if (c=='>') { state=PLAIN_TEXT; if (eventListener.tagStart(tagName.toString(), attr)) state=BASE64_INIT; - continue; + break; } tagName.append(c); if (c=='[') { if (tagName.toString().equals("![CDATA[")) state=CDATA; - continue; } - continue; + break; } case CDATA: @@ -146,27 +141,27 @@ sbuf.append(c); if (c=='>') { int e3=sbuf.length()-3; - if (e3 < 0) continue; - if (sbuf.charAt(e3) != ']') continue; - if (sbuf.charAt(e3+1) != ']') continue; - //if (sbuf[e3] != '>') continue; + if (e3 < 0) break; + if (sbuf.charAt(e3) != ']') break; + if (sbuf.charAt(e3+1) != ']') break; + //if (sbuf[e3] != '>') break; sbuf.setLength(e3); state=PLAIN_TEXT; - continue; + break; } - continue; + break; } case ENDTAGNAME: { - if (c==' ') continue; + if (c==' ') break; if (c=='>') { state=PLAIN_TEXT; eventListener.tagEnd(sbuf.toString()); sbuf.setLength(0); - continue; + break; } sbuf.append(c); - continue; + break; } case ATRVALQS: @@ -176,10 +171,10 @@ attr.addElement(atrName); attr.addElement(parsePlainText(sbuf)); sbuf.setLength(0); - continue; + break; } sbuf.append(c); - continue; + break; } case ATRVALQD: { @@ -188,10 +183,10 @@ attr.addElement(atrName); attr.addElement(parsePlainText(sbuf)); sbuf.setLength(0); - continue; + break; } sbuf.append(c); - continue; + break; } case BASE64_INIT: @@ -223,7 +218,7 @@ sbuf.setLength(0); tagName.setLength(0); state=TAGNAME; - continue; + break; } if (base64>=0) ibuf=(ibuf<<6)+base64; @@ -238,12 +233,11 @@ } - continue; + break; } } } - }; private String parsePlainText(StringBuffer sb) throws XMLException { //1. output text length will be not greather than source Index: src/io/Utf8IOStream.java =================================================================== --- src/io/Utf8IOStream.java (revision 1384) +++ src/io/Utf8IOStream.java (working copy) @@ -109,23 +109,8 @@ } - public int read(byte buf[]) throws IOException { - int avail=inpStream.available(); - - if (avail==0) -//#if !ZLIB -//# //trying to fix phillips 9@9 -//# if (!Config.getInstance().istreamWaiting) avail=1; -//# else -//#endif - return 0; - - if (avail>buf.length) avail=buf.length; - - avail=inpStream.read(buf, 0, avail); - - bytesRecv+=avail; - return avail; + public int read() throws IOException { + return inpStream.read(); } Index: src/com/alsutton/jabber/JabberStream.java =================================================================== --- src/com/alsutton/jabber/JabberStream.java (revision 1384) +++ src/com/alsutton/jabber/JabberStream.java (working copy) @@ -180,20 +180,16 @@ try { XMLParser parser = new XMLParser( this ); - byte cbuf[]=new byte[512]; + int c; while (true) { - int length=iostream.read(cbuf); - - if (length==0) { - try { Thread.sleep(100); } catch (Exception e) {}; - continue; - } + if ((c = iostream.read()) == -1) + break; - parser.parse(cbuf, length); + parser.parse((char)c); } - //dispatcher.broadcastTerminatedConnection( null ); + dispatcher.broadcastTerminatedConnection(null); } catch( Exception e ) { System.out.println("Exception in parser:"); e.printStackTrace();