1 /** 2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 * SPDX-License-Identifier: Apache-2.0. 4 */ 5 6 package software.amazon.awssdk.crt.http; 7 8 import java.nio.ByteBuffer; 9 10 /** 11 * Response handler implementation used by the native http layer 12 */ 13 class HttpStreamResponseHandlerNativeAdapter { 14 private HttpStreamResponseHandler responseHandler; 15 private HttpStreamBaseResponseHandler responseBaseHandler; 16 HttpStreamResponseHandlerNativeAdapter(HttpStreamResponseHandler responseHandler)17 HttpStreamResponseHandlerNativeAdapter(HttpStreamResponseHandler responseHandler) { 18 this.responseHandler = responseHandler; 19 this.responseBaseHandler = null; 20 } 21 HttpStreamResponseHandlerNativeAdapter(HttpStreamBaseResponseHandler responseBaseHandler)22 HttpStreamResponseHandlerNativeAdapter(HttpStreamBaseResponseHandler responseBaseHandler) { 23 this.responseBaseHandler = responseBaseHandler; 24 this.responseHandler = null; 25 } 26 onResponseHeaders(HttpStreamBase stream, int responseStatusCode, int blockType, ByteBuffer headersBlob)27 void onResponseHeaders(HttpStreamBase stream, int responseStatusCode, int blockType, ByteBuffer headersBlob) { 28 HttpHeader[] headersArray = HttpHeader.loadHeadersFromMarshalledHeadersBlob(headersBlob); 29 if (this.responseBaseHandler != null) { 30 responseBaseHandler.onResponseHeaders(stream, responseStatusCode, blockType, headersArray); 31 } else { 32 responseHandler.onResponseHeaders((HttpStream) stream, responseStatusCode, blockType, headersArray); 33 } 34 } 35 onResponseHeadersDone(HttpStreamBase stream, int blockType)36 void onResponseHeadersDone(HttpStreamBase stream, int blockType) { 37 if (this.responseBaseHandler != null) { 38 responseBaseHandler.onResponseHeadersDone(stream, blockType); 39 } else { 40 responseHandler.onResponseHeadersDone((HttpStream) stream, blockType); 41 } 42 } 43 onResponseBody(HttpStreamBase stream, ByteBuffer bodyBytesIn)44 int onResponseBody(HttpStreamBase stream, ByteBuffer bodyBytesIn) { 45 byte[] body = new byte[bodyBytesIn.limit()]; 46 bodyBytesIn.get(body); 47 if (this.responseBaseHandler != null) { 48 return responseBaseHandler.onResponseBody(stream, body); 49 } else { 50 return responseHandler.onResponseBody((HttpStream) stream, body); 51 } 52 } 53 onMetrics(HttpStreamBase stream, HttpStreamMetrics metrics)54 void onMetrics(HttpStreamBase stream, HttpStreamMetrics metrics) { 55 if (this.responseBaseHandler != null) { 56 responseBaseHandler.onMetrics(stream, metrics); 57 } else { 58 responseHandler.onMetrics((HttpStream) stream, metrics); 59 } 60 } 61 onResponseComplete(HttpStreamBase stream, int errorCode)62 void onResponseComplete(HttpStreamBase stream, int errorCode) { 63 if (this.responseBaseHandler != null) { 64 responseBaseHandler.onResponseComplete(stream, errorCode); 65 } else { 66 responseHandler.onResponseComplete((HttpStream) stream, errorCode); 67 } 68 } 69 } 70