Change tabbing for everything....
[IRC.git] / Robust / src / Benchmarks / Spider / BRTag / Spider.java
1 task Startup(StartupObject s {initialstate}) {
2     String firstmachine=s.parameters[0];
3     String firstpage=s.parameters[1];
4     QueryList ql=new QueryList() {initialized};
5     tag t=new tag(connect);
6     Socket sock=new Socket(){}{t};
7     Query firstquery=new Query(firstmachine, firstpage){}{t};
8     taskexit(s{!initialstate});
9 }
10
11 task requestQuery(Query q{!requested}{connect t}, Socket s{}{connect t}) {
12     String hostname=q.getHostName();
13     q.makeConnection(s);
14     StringBuffer req=new StringBuffer("GET "); 
15     req.append("/");
16     req.append(q.getPath());
17     req.append(" HTTP/1.1\r\nHost:");
18     req.append(q.getHostName());
19     req.append("\r\n\r\n");
20     s.write(req.toString().getBytes());
21     taskexit(q{requested});
22 }
23
24 task readResponse(Query q{requested && ! received}{connect t},Socket s{IOPending}{connect t}) {
25     //    state 0 - nothing
26     //    state 1 - \r
27     //    state 2 - \r\n
28     //    state 3 - \r\n\r
29     //    state 4 - \r\n\r\n
30     if (q.state<4) {
31         if (q.state==0) {
32             byte[] b=new byte[1];
33             int numchars=s.read(b);
34             if ((numchars==1) && (b[0]=='\r'))
35                 q.state++;
36         } else if (q.state==1) {
37             byte[] b=new byte[1];
38             int numchars=s.read(b);
39             if (numchars==1) {
40                 if (b[0]=='\n')
41                     q.state++;
42                 else
43                     q.state=0;
44             }
45         } else if (q.state==2) {
46             byte[] b=new byte[1];
47             int numchars=s.read(b);
48             if (numchars==1) {
49                 if (b[0]=='\r')
50                     q.state++;
51                 else
52                     q.state=0;
53             }
54         } else if (q.state==3) {
55             byte[] b=new byte[1];
56             int numchars=s.read(b);
57             if (numchars==1) {
58                 if (b[0]=='\n')
59                     q.state++;
60                 else
61                     q.state=0;
62             }
63         }
64     } else {
65         byte[] buffer=new byte[1024];
66         int numchars=s.read(buffer);
67         if (numchars==0) {
68             s.close();
69             taskexit(q{received});
70         } else {
71             String curr=(new String(buffer)).subString(0,numchars);
72             q.response.append(curr);
73         }
74     }
75 }
76
77 task processPage(Query q{received&&!processed}, QueryList ql{initialized}) {
78     int index=0;
79     String href=new String("href=\"");
80     String searchstr=q.response.toString();
81     boolean cont=true;
82     q.outputFile();
83
84     while(cont) {
85         int mindex=searchstr.indexOf(href,index);
86         if (mindex!=-1) {
87
88         int endquote=searchstr.indexOf('"', mindex+href.length());
89         if (endquote!=-1) {
90             String match=searchstr.subString(mindex+href.length(), endquote);
91             String match2=q.makewebcanonical(match);
92             if (match2!=null&&!ql.checkQuery(match2)) {
93                 ql.addQuery(match2);
94                 System.printString(q.getHostName(match));
95                 System.printString("        ");
96                 System.printString(q.getPathName(match));
97                 System.printString("\n");
98                 tag t=new tag(connect);
99                 Socket s=new Socket(){}{t};
100                 Query newq=new Query(q.getHostName(match), q.getPathName(match)){}{t};
101             }
102             index=endquote;
103         } else cont=false;
104         } else cont=false;
105     }
106     taskexit(q{processed});
107 }