annotate modules/http.tp @ 153:075b1e71feff

A little more work on the HTTP module
author Mike Pavone <pavone@retrodev.com>
date Fri, 09 Aug 2013 21:01:11 -0700
parents 7f442b3e4448
children 55e0dca7d3d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
149
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #{
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 client:usingPort <- :address :port{
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #{
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 get <- :path {
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 sock <- socket connectTo: address onPort: port
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 sock send: "GET " . path . " HTTP/1.1\r\nHost: " . address . "\r\n\r\n"
153
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
7 resp <- ""
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
8 waiting <- true
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
9 headerText <- ""
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
10 rest <- ""
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
11 while: { waiting } do: {
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
12 data <- sock recv 4096
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
13 resp <- resp . data
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
14 pos <- resp find: "\r\n\r\n" else: { -1 }
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
15 if: pos >= 0 {
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
16 waiting <- false
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
17 headerText <- resp from: 0 withLength: pos
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
18 rest <- resp from: pos + 4
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
19 }
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
20 }
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
21 print: "Headers:\n" . headerText . "\n"
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
22 print: "Rest:\n" . rest . "\n"
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
23 _headers <- (headerText split: "\r\n") fold: (dict linear) with: :acc curLine{
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
24 //TODO: support multiple headers with the same name
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
25 part <- curLine partitionOn: ":"
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
26 acc set: (part before) (trim: (part after))
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
27 }
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
28 _closed <- false
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
29 #{
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
30
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
31 }
149
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 sock close
153
075b1e71feff A little more work on the HTTP module
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
33 rest
149
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 }
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 }
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 }
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 client <- :address {
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 client: address usingPort: 80
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 }
7f442b3e4448 Tiny bit of work on HTTP client and sample usage of it
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 }