comparison controllers/externalwfs.go @ 357:3e96a15600b7

merge
author Thomas Junk <thomas.junk@intevation.de>
date Tue, 07 Aug 2018 18:00:53 +0200
parents e170075c22ac
children 55388227e7da
comparison
equal deleted inserted replaced
356:dc8052b60485 357:3e96a15600b7
146 from := resp.Header.Get("X-Gemma-From") 146 from := resp.Header.Get("X-Gemma-From")
147 to := resp.Header.Get("X-Gemma-To") 147 to := resp.Header.Get("X-Gemma-To")
148 resp.Header.Del("X-Gemma-From") 148 resp.Header.Del("X-Gemma-From")
149 resp.Header.Del("X-Gemma-To") 149 resp.Header.Del("X-Gemma-To")
150 150
151 xml := isXML(resp.Header) 151 if !isXML(resp.Header) {
152 return nil
153 }
154
155 log.Printf("rewrite from %s to %s\n", from, to)
156
157 pr, pw := io.Pipe()
158
159 var (
160 r io.ReadCloser
161 w io.WriteCloser
162 err error
163 )
152 164
153 reader, writer := encoding(resp.Header) 165 reader, writer := encoding(resp.Header)
154 166
155 if xml { 167 if r, err = reader(resp.Body); err != nil {
156 log.Printf("rewrite from %s to %s\n", from, to) 168 return err
157 169 }
158 pr, pw := io.Pipe() 170
159 171 if w, err = writer(pw); err != nil {
160 var ( 172 return err
161 r io.ReadCloser 173 }
162 w io.WriteCloser 174
163 err error 175 go func(force io.ReadCloser) {
164 ) 176 defer func() {
165 177 //r.Close()
166 if r, err = reader(resp.Body); err != nil { 178 w.Close()
167 return err 179 pw.Close()
168 } 180 force.Close()
169 181 }()
170 if w, err = writer(pw); err != nil { 182 if err := rewrite(w, r, from, to); err != nil {
171 return err 183 log.Printf("rewrite failed: %v\n", err)
172 } 184 return
173 185 }
174 go func(force io.ReadCloser) { 186 log.Println("rewrite successful")
175 defer func() { 187 }(resp.Body)
176 //r.Close() 188
177 w.Close() 189 resp.Body = pr
178 pw.Close() 190
179 force.Close()
180 }()
181 if err := rewrite(w, r, from, to); err != nil {
182 log.Printf("rewrite failed: %v\n", err)
183 return
184 }
185 log.Println("rewrite successful")
186 }(resp.Body)
187
188 resp.Body = pr
189 }
190 return nil 191 return nil
191 } 192 }
192 193
193 func isXML(h http.Header) bool { 194 func isXML(h http.Header) bool {
194 for _, t := range h["Content-Type"] { 195 for _, t := range h["Content-Type"] {