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});
11 task requestQuery(Query q{!requested}{connect t}, Socket s{}{connect t}) {
12 String hostname=q.getHostName();
14 StringBuffer req=new StringBuffer("GET ");
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});
24 task readResponse(Query q{requested && ! received}{connect t},Socket s{IOPending}{connect t}) {
33 int numchars=s.read(b);
34 if ((numchars==1) && (b[0]=='\r'))
36 } else if (q.state==1) {
38 int numchars=s.read(b);
45 } else if (q.state==2) {
47 int numchars=s.read(b);
54 } else if (q.state==3) {
56 int numchars=s.read(b);
65 byte[] buffer=new byte[1024];
66 int numchars=s.read(buffer);
69 taskexit(q{received});
71 String curr=(new String(buffer)).subString(0,numchars);
72 q.response.append(curr);
77 task processPage(Query q{received&&!processed}, QueryList ql{initialized}) {
79 String href=new String("href=\"");
80 String searchstr=q.response.toString();
85 int mindex=searchstr.indexOf(href,index);
88 int endquote=searchstr.indexOf('"', mindex+href.length());
90 String match=searchstr.subString(mindex+href.length(), endquote);
91 String match2=q.makewebcanonical(match);
92 if (match2!=null&&!ql.checkQuery(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};
106 taskexit(q{processed});