1
1
package web
2
2
3
3
import (
4
- "container/vector"
5
4
"fmt"
6
5
"http"
7
6
"io"
@@ -68,7 +67,6 @@ func newRequest(hr *http.Request, hc http.ResponseWriter) *Request {
68
67
69
68
req := Request {
70
69
Method : hr .Method ,
71
- RawURL : hr .RawURL ,
72
70
URL : hr .URL ,
73
71
Proto : hr .Proto ,
74
72
ProtoMajor : hr .ProtoMajor ,
@@ -140,7 +138,6 @@ func newRequestCgi(headers http.Header, body io.Reader) *Request {
140
138
}
141
139
142
140
func parseForm (m map [string ][]string , query string ) (err os.Error ) {
143
- data := make (map [string ]* vector.StringVector )
144
141
for _ , kv := range strings .Split (query , "&" ) {
145
142
kvPair := strings .SplitN (kv , "=" , 2 )
146
143
@@ -154,16 +151,11 @@ func parseForm(m map[string][]string, query string) (err os.Error) {
154
151
err = e
155
152
}
156
153
157
- vec , ok := data [key ]
154
+ vec , ok := m [key ]
158
155
if ! ok {
159
- vec = new (vector.StringVector )
160
- data [key ] = vec
156
+ vec = []string {}
161
157
}
162
- vec .Push (value )
163
- }
164
-
165
- for k , vec := range data {
166
- m [k ] = vec .Copy ()
158
+ m [key ] = append (vec , value )
167
159
}
168
160
169
161
return
@@ -203,22 +195,27 @@ func (r *Request) parseParams() (err os.Error) {
203
195
r .Params = map [string ]string {}
204
196
json .Unmarshal (b , r .Params )
205
197
case "multipart/form-data" :
206
- _ , params := mime .ParseMediaType (ct )
198
+ _ , params , err := mime .ParseMediaType (ct )
199
+ if err != nil {
200
+ return err
201
+ }
207
202
boundary , ok := params ["boundary" ]
208
203
if ! ok {
209
204
return os .NewError ("Missing Boundary" )
210
205
}
206
+
211
207
reader := multipart .NewReader (r .Body , boundary )
212
208
r .Files = make (map [string ]filedata )
213
209
for {
214
210
part , err := reader .NextPart ()
211
+ if part == nil && err == os .EOF {
212
+ break
213
+ }
214
+
215
215
if err != nil {
216
216
return err
217
217
}
218
218
219
- if part == nil {
220
- break
221
- }
222
219
//read the data
223
220
data , _ := ioutil .ReadAll (part )
224
221
//check for the 'filename' param
@@ -227,15 +224,18 @@ func (r *Request) parseParams() (err os.Error) {
227
224
continue
228
225
}
229
226
name := part .FormName ()
230
- d , params := mime .ParseMediaType (v )
227
+ d , params , err := mime .ParseMediaType (v )
228
+ if err != nil {
229
+ return err
230
+ }
231
231
if d != "form-data" {
232
232
continue
233
233
}
234
234
if params ["filename" ] != "" {
235
235
r .Files [name ] = filedata {params ["filename" ], data }
236
236
} else {
237
- var params vector. StringVector = r .FullParams [name ]
238
- params . Push ( string (data ))
237
+ var params [] string = r .FullParams [name ]
238
+ params = append ( params , string (data ))
239
239
r .FullParams [name ] = params
240
240
}
241
241
@@ -244,6 +244,7 @@ func (r *Request) parseParams() (err os.Error) {
244
244
return & badStringError {"unknown Content-Type" , ct }
245
245
}
246
246
}
247
+
247
248
if queryParams != "" {
248
249
err = parseForm (r .FullParams , queryParams )
249
250
if err != nil {
0 commit comments