Пример #1
0
func (gae *GAEHttpConnection) handleHttpRes(conn *SessionConnection, req *event.HTTPRequestEvent, ev *event.HTTPResponseEvent) (*http.Response, error) {
	originRange := req.RawReq.Header.Get("Range")
	contentRange := ev.GetHeader("Content-Range")
	if ev.Status == 206 && len(contentRange) > 0 && strings.EqualFold(req.Method, "GET") {
		_, end, length := util.ParseContentRangeHeaderValue(contentRange)
		if len(originRange) > 0 {
			_, oe := util.ParseRangeHeaderValue(originRange)
			if oe > 0 {
				length = oe + 1
			}
		}
		if length > end+1 {
			gae.doRangeFetch(req.RawReq, ev.ToResponse())
			return nil, nil
		}
		if len(originRange) == 0 {
			ev.Status = 200
			ev.RemoveHeader("Content-Range")
		}
	}
	httpres := ev.ToResponse()
	err := httpres.Write(conn.LocalRawConn)
	return httpres, err
}