MCPcopy Create free account
hub / github.com/OpenListTeam/OpenList / Proxy

Function Proxy

server/common/proxy.go:20–72  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request, link *model.Link, file model.Obj)

Source from the content-addressed store, hash-verified

18)
19
20func Proxy(w http.ResponseWriter, r *http.Request, link *model.Link, file model.Obj) error {
21 // if link.MFile != nil {
22 // attachHeader(w, file, link)
23 // http.ServeContent(w, r, file.GetName(), file.ModTime(), link.MFile)
24 // return nil
25 // }
26
27 if link.Concurrency > 0 || link.PartSize > 0 {
28 attachHeader(w, file, link)
29 size := link.ContentLength
30 if size <= 0 {
31 size = file.GetSize()
32 }
33 rrf, _ := stream.GetRangeReaderFromLink(size, link)
34 if link.RangeReader == nil {
35 r = r.WithContext(context.WithValue(r.Context(), conf.RequestHeaderKey, r.Header))
36 }
37 return net.ServeHTTP(w, r, file.GetName(), file.ModTime(), size, &model.RangeReadCloser{
38 RangeReader: rrf,
39 })
40 }
41
42 if link.RangeReader != nil {
43 attachHeader(w, file, link)
44 size := link.ContentLength
45 if size <= 0 {
46 size = file.GetSize()
47 }
48 return net.ServeHTTP(w, r, file.GetName(), file.ModTime(), size, &model.RangeReadCloser{
49 RangeReader: link.RangeReader,
50 })
51 }
52
53 //transparent proxy
54 header := net.ProcessHeader(r.Header, link.Header)
55 res, err := net.RequestHttp(r.Context(), r.Method, header, link.URL)
56 if err != nil {
57 return err
58 }
59 defer res.Body.Close()
60
61 maps.Copy(w.Header(), res.Header)
62 w.WriteHeader(res.StatusCode)
63 if r.Method == http.MethodHead {
64 return nil
65 }
66 _, err = utils.CopyWithBuffer(w, &stream.RateLimitReader{
67 Reader: res.Body,
68 Limiter: stream.ServerDownloadLimit,
69 Ctx: r.Context(),
70 })
71 return err
72}
73func attachHeader(w http.ResponseWriter, file model.Obj, link *model.Link) {
74 fileName := file.GetName()
75 w.Header().Set("Content-Disposition", utils.GenerateContentDisposition(fileName))

Callers 2

handleGetHeadPostMethod · 0.92
proxyFunction · 0.92

Calls 13

GetRangeReaderFromLinkFunction · 0.92
ServeHTTPFunction · 0.92
ProcessHeaderFunction · 0.92
RequestHttpFunction · 0.92
CopyWithBufferFunction · 0.92
attachHeaderFunction · 0.85
HeaderMethod · 0.80
WriteHeaderMethod · 0.80
GetSizeMethod · 0.65
GetNameMethod · 0.65
ModTimeMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected