| // Copyright 2016 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package httplib |
| |
| import ( |
| "bytes" |
| "io/ioutil" |
| "net/url" |
| |
| go_http "net/http" |
| v23_http "v.io/v23/services/http" |
| ) |
| |
| func VDLRequestFromHTTPRequest(req *go_http.Request) v23_http.Request { |
| url := v23_http.Url{ |
| Scheme: req.URL.Scheme, |
| Opaque: req.URL.Opaque, |
| Host: req.URL.Host, |
| Path: req.URL.Path, |
| RawPath: req.URL.RawPath, |
| RawQuery: req.URL.RawQuery, |
| Fragment: req.URL.Fragment, |
| } |
| |
| body_buf := new(bytes.Buffer) |
| body_buf.ReadFrom(req.Body) |
| |
| ifc_req := v23_http.Request{ |
| Method: req.Method, |
| Url: url, |
| Proto: req.Proto, |
| ProtoMajor: int16(req.ProtoMajor), |
| ProtoMinor: int16(req.ProtoMinor), |
| Header: req.Header, |
| Body: body_buf.Bytes(), |
| ContentLength: req.ContentLength, |
| TransferEncoding: req.TransferEncoding, |
| Close: req.Close, |
| Host: req.Host, |
| Form: req.Form, |
| PostForm: req.PostForm, |
| Trailer: req.Trailer, |
| RemoteAddr: req.RemoteAddr, |
| RequestUri: req.RequestURI, |
| } |
| return ifc_req |
| } |
| |
| func HTTPRequestFromVDLRequest(req v23_http.Request) *go_http.Request { |
| url := &url.URL{ |
| Scheme: req.Url.Scheme, |
| Opaque: req.Url.Opaque, |
| User: nil, |
| Host: req.Url.Host, |
| Path: req.Url.Path, |
| RawPath: req.Url.RawPath, |
| RawQuery: req.Url.RawQuery, |
| Fragment: req.Url.Fragment, |
| } |
| |
| http_req := &go_http.Request{ |
| Method: req.Method, |
| URL: url, |
| Proto: req.Proto, |
| ProtoMajor: int(req.ProtoMajor), |
| ProtoMinor: int(req.ProtoMinor), |
| Header: req.Header, |
| Body: ioutil.NopCloser(bytes.NewReader(req.Body)), |
| ContentLength: req.ContentLength, |
| TransferEncoding: req.TransferEncoding, |
| Close: req.Close, |
| Host: req.Host, |
| Form: req.Form, |
| PostForm: req.PostForm, |
| MultipartForm: nil, |
| Trailer: req.Trailer, |
| RemoteAddr: req.RemoteAddr, |
| RequestURI: req.RequestUri, |
| } |
| return http_req |
| } |