| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -657,6 +657,8 @@ open class ProxiedContentDownloader: NSObject, URLSessionTaskDelegate, URLSessio
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            return
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        let userAgent = "Signal iOS (+https://signal.org/download)"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if assetRequest.state == .waiting {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            // If asset request hasn't yet determined the resource size,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            // try to do so now, by requesting a small initial segment.
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -669,6 +671,7 @@ open class ProxiedContentDownloader: NSObject, URLSessionTaskDelegate, URLSessio
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            request.httpShouldUsePipelining = true
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let rangeHeaderValue = "bytes=\(segmentStart)-\(segmentStart + segmentLength - 1)"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            request.addValue(rangeHeaderValue, forHTTPHeaderField: "Range")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            request.addValue(userAgent, forHTTPHeaderField: "User-Agent")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            padRequestSize(request: &request)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let task = downloadSession.dataTask(with: request, completionHandler: { data, response, error -> Void in
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                self.handleAssetSizeResponse(assetRequest: assetRequest, data: data, response: response, error: error)
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -689,6 +692,7 @@ open class ProxiedContentDownloader: NSObject, URLSessionTaskDelegate, URLSessio
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            request.httpShouldUsePipelining = true
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let rangeHeaderValue = "bytes=\(assetSegment.segmentStart)-\(assetSegment.segmentStart + assetSegment.segmentLength - 1)"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            request.addValue(rangeHeaderValue, forHTTPHeaderField: "Range")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            request.addValue(userAgent, forHTTPHeaderField: "User-Agent")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            padRequestSize(request: &request)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            let task: URLSessionDataTask = downloadSession.dataTask(with: request)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            task.assetRequest = assetRequest
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -740,7 +744,7 @@ open class ProxiedContentDownloader: NSObject, URLSessionTaskDelegate, URLSessio
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            result += percentEncodedQuery.count
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if let allHTTPHeaderFields = request.allHTTPHeaderFields {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if allHTTPHeaderFields.count != 1 {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if allHTTPHeaderFields.count != 2 {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                owsFailDebug("Request has unexpected number of headers.")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            for (key, value) in allHTTPHeaderFields {
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |