13 final static int LEN = 10;
15 public Parser(Socket as, Worker aworker) throws IOException, RegAppletException {
17 is = s.getInputStream();
20 public void read() throws MITCipherException, RegAppletException, IOException {
23 if (type == 0x45 || type == 0x50) {
25 len = (len << 8) + is.read();
30 j = is.read(data, i, len - i);
32 throw new IOException("Short read");
36 if (type == 0x45) data = encap.decrypt(data);
37 else System.arraycopy(data, 8, data, 0, data.length-8);
39 throw new IOException("Unknown type code in data stream, or I/O Error");
41 String [] pdat = pparse(data);
42 if (!pdat[0].equals("v1")) {
43 throw new IOException("bad version number");
45 if (pdat[3].equals("c")) worker.applet.clear();
46 else if (!pdat[3].equals("d")&& !pdat[1].equals("INIT"))
47 throw new RegAppletException("Bad response from server.");
48 if (pdat[1].equals("GETW")) {
49 if (!pdat[2].equals("")) {
50 worker.setState(Worker.DIALOG, Worker.SENDWORDS);
51 worker.applet.showMessage(pdat[2], true);
53 worker.setState(Worker.SENDWORDS);
54 worker.applet.showWordsDiag();
56 } else if (pdat[1].equals("GETL")) {
57 if (!pdat[4].equals("")) {
58 worker.applet.guesslogin = pdat[4];
59 } else worker.applet.guesslogin = "";
60 if (!pdat[2].equals("")) {
61 worker.setState(Worker.DIALOG, Worker.SENDLOGIN);
62 worker.applet.showMessage(pdat[2], true);
64 worker.setState(Worker.SENDLOGIN);
65 worker.applet.showLoginDiag();
67 } else if (pdat[1].equals("GETP")) {
68 if (!pdat[2].equals("")) {
69 worker.setState(Worker.DIALOG, Worker.SENDPASSWD);
70 worker.applet.showMessage(pdat[2], true);
72 worker.setState(Worker.SENDPASSWD);
73 worker.applet.showPassDiag();
75 } else if (pdat[1].equals("GETN")) {
76 if (!pdat[2].equals("")) {
77 worker.setState(Worker.DIALOG, Worker.SENDNAME);
78 worker.applet.showMessage(pdat[2], true);
80 worker.setState(Worker.SENDNAME);
81 worker.applet.showNameDiag();
83 } else if (pdat[1].equals("INIT")) {
84 worker.applet.clear(); // Clear sensitive data *now*
85 if (!pdat[2].equals("")) {
86 worker.setState(Worker.DIALOG, Worker.INIT);
87 worker.applet.showMessage(pdat[2], true);
89 if (worker.applet.isStandalone) {
93 worker.applet.showInit();
97 protected String [] pparse(byte [] data) throws IOException {
98 String [] retval = new String [LEN];
102 for (j = 0; j < LEN; j++) retval[j] = "";
103 for (j = 0; j < data.length; j++) {
105 retval[i] = new String(data, 0, k, j - k);
108 throw new IOException("Too many tokens in string");