in Sources/Instrumentation/WKWebView/BodyCache/StreamingMultipartFormData.swift [450:498]
func read(buffer: UnsafeMutablePointer<UInt8>, maxLength: Int) -> Int {
var totalNumberOfBytesRead: Int = 0;
if (phase == .EncapsulationBoundaryPhase) {
if let boundary = boundary {
if let encapsulationBoundaryData = (self.hasInitialBoundary ? HTTPBodyPart.OTelJSBridgeMultipartFormInitialBoundary(boundary: boundary) : HTTPBodyPart.OTelJSBridgeMultipartFormEncapsulationBoundary(boundary: boundary)).data(using: self.stringEncoding) {
totalNumberOfBytesRead += self.readData(data: encapsulationBoundaryData,
intoBuffer: &buffer[totalNumberOfBytesRead],
maxLength: (maxLength - Int(totalNumberOfBytesRead)))
}
}
}
if (phase == .HeaderPhase) {
if let headersData = self.stringForHeaders()?.data(using: self.stringEncoding) {
totalNumberOfBytesRead += self.readData(data: headersData,
intoBuffer: &buffer[totalNumberOfBytesRead],
maxLength: (maxLength - Int(totalNumberOfBytesRead)))
}
}
if (phase == .BodyPhase) {
if let inputStream: InputStream = self.inputStream {
let numberOfBytesRead = inputStream.read(&buffer[totalNumberOfBytesRead],
maxLength: (maxLength - Int(totalNumberOfBytesRead)))
if -1 == numberOfBytesRead {
return -1
} else {
totalNumberOfBytesRead += numberOfBytesRead
if inputStream.streamStatus == .atEnd || inputStream.streamStatus == .closed || inputStream.streamStatus == .error {
let _ = self.transitionToNextPhase()
}
}
}
}
if (phase == .FinalBoundaryPhase) {
if let boundary = boundary {
if let closingBoundaryData = self.hasInitialBoundary ? HTTPBodyPart.OTelJSBridgeMultipartFormFinalBoundary(boundary: boundary).data(using: self.stringEncoding) : Data() {
totalNumberOfBytesRead += self.readData(data: closingBoundaryData,
intoBuffer: &buffer[totalNumberOfBytesRead],
maxLength: (maxLength - Int(totalNumberOfBytesRead)))
}
}
}
return totalNumberOfBytesRead;
}