annotate webserver.rhope @ 179:64be565a40c6

Implement If method on List, fix Get Char to handle end of file, fix nested list pretty printing
author Mike Pavone <pavone@retrodev.com>
date Sat, 18 Jun 2011 11:11:58 -0700
parents 47ab97730865
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
1
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
2 Import net.rhope
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
3
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
4 _Dict Split[dict,entry,index,keydelim:out]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
5 {
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
6 parts <- [entry]Split[keydelim]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
7 out <- [dict]Set[[parts]Index[0],[parts]Index[1]]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
8 }
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
9
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
10 Dict Split[string,keydelim,entrydelim:out]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
11 {
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
12 out <- Fold[_Dict Split[?, ?, ?, keydelim], Dictionary[], [string]Split[entrydelim]]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
13 }
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
14
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
15 _Key Value Join[dict,key,key sep,val sep,string:out]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
16 {
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
17 new string <- [[[string]Append[String[key]]]Append[key sep]]Append[ String[[dict]Index[key]] ]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
18 [dict]Next[key]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
19 {
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
20 out <- _Key Value Join[dict, ~, key sep, val sep, [new string]Append[val sep]]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
21 }{
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
22 out <- Val[new string]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
23 }
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
24 }
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
25
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
26 Key Value Join[dict,key sep,val sep:out]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
27 {
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
28 [dict]First
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
29 {
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
30 out <- _Key Value Join[dict, ~, key sep, val sep, ""]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
31 }{
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
32 out <- ""
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
33 }
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
34 }
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 Get Content Type[path:out]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 parts <- [path]Split["."]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 ext <- [parts]Index[ [[parts]Length] - [1] ]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 If[ [ext] = ["html"] ]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 out <- "text/html; charset=ISO-8859-1"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 }{
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44 If[ [ext] = ["jpg"] ]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 out <- "image/jpeg"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 }{
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 If[ [ext] = ["gif"] ]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 out <- "image/gif"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 }{
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52 If[ [ext] = ["css"] ]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 out <- "text/css"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 }{
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 out <- "application/octet-stream"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 HTTP OK[client,type,content length,headers:out]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65 out <- HTTP Response[client, type, content length, headers, "200 OK"]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68 HTTP Response[client,type,content length,headers,code:out]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69 {
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
70 start headers <- [Dictionary[]]Set["Content-Type", type]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71 If[[content length] < [0]]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73 default headers <- [start headers]Set["Transfer-Encoding", "Chunked"]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74 }{
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75 default headers <- [start headers]Set["Content-Length", content length]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
76 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
77
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
78 out <- [
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79 [
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80 [
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 [
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 ["HTTP/1.1 "]Append[code]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
83 ]Append["\r\n"]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
84 ]Append[
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
85 [
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 Combine[headers, default headers]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 ]Key Value Join[": ", "\r\n"]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 ]
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
89 ]Append["\r\n\r\n"]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
90 ]Write to File[client]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93 HTTP Not Found[client]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
94 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
95 string <- "<html><head><title>Document Not Found</title></head><body>The document you requested is not available on this server.</body></html>"
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
96 HTTP Response[client, Get Content Type[".html"], [string]Length, Dictionary[], "404 Not Found"]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 {
147
f3686f60985d Sort of working port of framework. Transaction bug seems to be getting in the way. Going to work around, but want the old version in the repo so I can test later.
Mike Pavone <pavone@retrodev.com>
parents: 146
diff changeset
98 [[string]Write to File[~]]Close
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
102 Good Path?[path:yep,nope]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
103 {
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
104 nope <- If[[path]Starts With["."]] {}
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
105 { nope <- If[[path]Starts With["/"]] {}
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
106 { nope <- If[[path]Contains[".."]] {}
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
107 { nope,yep <- If[[path]Contains["//"]] }}}
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
108 }
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
109
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
110 Handle Request[client,type,query,headers,handler]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
111 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
112 parts <- [query]Split["?"]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113 path <- [parts]Index[0]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 [[path]Split["/"]]Index[1]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116 handlerpath <- ["/"]Append[~]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 }{
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118 handlerpath <- "/"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119 }
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
120 host <- [headers]Index["Host"] {}
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
121 {
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
122 host <- ""
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
123 }
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
124
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
125 the handler <- [handler]Index[[host]Append[handlerpath]] {}
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
126 {
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
127 the handler <- [handler]Index[handlerpath] {}
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
128 {
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
129 ,newpath <- [path]Slice[1]
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
130 Good Path?[newpath]
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
131 {
149
804e48af1027 Fix file not found handling
Mike Pavone <pavone@retrodev.com>
parents: 148
diff changeset
132 file,bad file <- Open[File[newpath],"r"]
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
133 content length <- Length[file]
149
804e48af1027 Fix file not found handling
Mike Pavone <pavone@retrodev.com>
parents: 148
diff changeset
134 ,bad file <- If[[content length] > [0]]
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
135 {
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
136 data <- [file]Read[content length]
147
f3686f60985d Sort of working port of framework. Transaction bug seems to be getting in the way. Going to work around, but want the old version in the repo so I can test later.
Mike Pavone <pavone@retrodev.com>
parents: 146
diff changeset
137 [[HTTP OK[client, Get Content Type[path], content length, Dictionary[]]
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
138 ]Write[data]
147
f3686f60985d Sort of working port of framework. Transaction bug seems to be getting in the way. Going to work around, but want the old version in the repo so I can test later.
Mike Pavone <pavone@retrodev.com>
parents: 146
diff changeset
139 ]Close
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
140 { Close[file] }
149
804e48af1027 Fix file not found handling
Mike Pavone <pavone@retrodev.com>
parents: 148
diff changeset
141 }
804e48af1027 Fix file not found handling
Mike Pavone <pavone@retrodev.com>
parents: 148
diff changeset
142 Val[bad file]
804e48af1027 Fix file not found handling
Mike Pavone <pavone@retrodev.com>
parents: 148
diff changeset
143 {
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
144 HTTP Not Found[client]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
145 }
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
146 }{
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
147 HTTP Not Found[client]
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
148 }
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
149 }
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
150 }
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
151
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
152 Val[the handler]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 If[[[parts]Length] > [1]]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156 queryvars <- Dict Split[[parts]Index[1], "=", "&"]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
157 }{
47
6202b866d72c Cleaned up constructor names and merged some other changes in to support the Rhope website
Mike Pavone <pavone@retrodev.com>
parents: 0
diff changeset
158 queryvars <- Dictionary[]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 }
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
160 [~]Call[client,path,type,queryvars,headers]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
165 Connection Start[con,address,handlers]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 {
165
47ab97730865 Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
167 Print["Connection Start"]
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
168 ,client <- [con]Read Delim[["\r\n"]Buffer >>]
165
47ab97730865 Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
169 { request <- String[~] } {}
47ab97730865 Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
170 {
47ab97730865 Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
171 Print["Error reading request line"]
47ab97730865 Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
172 Close[con]
47ab97730865 Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
173 }
142
7bbdc034e347 Fix some bugs. Get basic network code working (epoll listener + accept connections). Start porting webserver.
Mike Pavone <pavone@retrodev.com>
parents: 47
diff changeset
174 parts <- [request]Split[" "]
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
175 Print[[[request]Append[" "]]Append[address]]
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
176 [client]Read Delim[["\r\n\r\n"]Buffer >>]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
177 {
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
178 headers <- Map[Dict Split[String[~], ":", "\r\n"], Trim[?, " \t"]]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
179 }{
146
1f39e69446f9 Finished porting webserver
Mike Pavone <pavone@retrodev.com>
parents: 142
diff changeset
180 Handle Request[~, [parts]Index[0], [parts]Index[1], headers, handlers]
165
47ab97730865 Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
181 }{
47ab97730865 Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents: 149
diff changeset
182 Print["Error reading headers"]
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
183 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
184 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
185