267472 TCP/IP monitor does not display request messages properly
diff --git a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
index 49ec8db..eafb836 100644
--- a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
+++ b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
@@ -15,6 +15,7 @@
 <h3>Plugin(s) replaced:</h3>
 <ul><li>org.eclipse.wst.internet.monitor.core</li></ul>
 <p>Bug <a href='https://bugs.eclipse.org/267125'>267125</a>. TCP/IP monitor causes connections to hang</p>
+<p>Bug <a href='https://bugs.eclipse.org/267472'>267472</a>. TCP/IP monitor does not display request messages properly</p>
 
 
 </body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.server_core.feature.patch/feature.properties b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
index 0f976d8..0ffc7d0 100644
--- a/features/org.eclipse.wst.server_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
@@ -28,6 +28,7 @@
 Contains fixes described in the following bugillia(s):\n\
 \n\
 Bug https://bugs.eclipse.org/267125 TCP/IP monitor causes connections to hang\n\
+Bug https://bugs.eclipse.org/267472 TCP/IP monitor does not display request messages properly\n\
 \n\
 
 # "copyright" property - text of the "Feature Update Copyright"
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
index 503bb68..2acbbe1 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
@@ -198,7 +198,15 @@
 		
 		if (isRequest) {
 			if (contentLength != -1) {
+				byte[] b2 = null;
+				int b2Index = 0;
+				if (contentLength < 1024 * 1024)
+					b2 = new byte[contentLength];
 				byte[] b = removeFromBuffer(Math.min(buffer.length, bufferIndex + contentLength));
+				if (b2 != null) {
+					System.arraycopy(b, 0, b2, 0, b.length);
+					b2Index += b.length;
+				}
 				int bytesLeft = contentLength - b.length;
 				Trace.trace(Trace.PARSING, "[Request] bytesLeft: "+ bytesLeft);
 				out.write(b);
@@ -207,13 +215,20 @@
 				while (bytesLeft > 0) {  
 					n = in.read(readBuffer, 0, Math.min(readBuffer.length, bytesLeft));
 					bytesLeft -= n;
+					if (b2 != null) {
+						System.arraycopy(readBuffer, 0, b2, b2Index, n);
+						b2Index += n;
+					}
 					out.write(readBuffer, 0, n);					
 					Trace.trace(Trace.PARSING,  "[Request] bytes read: "+ n + " bytesLeft: "+ bytesLeft);
 				}
 				
-				b = Messages.errorContentSize.getBytes();
-				conn.addRequest(b, false);
-				setHTTPBody(b);
+				// restore the byte array for display
+				if (b2 == null)
+					b2 = Messages.errorContentSize.getBytes();
+				
+				conn.addRequest(b2, false);
+				setHTTPBody(b2);
 			} else if (transferEncoding != -1 && transferEncoding != ENCODING_IDENTITY) {
 				parseChunk();
 			}
@@ -270,7 +285,15 @@
 		
 		// spec 4.4.3
 		if (contentLength != -1) {
+			byte[] b2 = null;
+			int b2Index = 0;
+			if (contentLength < 1024 * 1024)
+				b2 = new byte[contentLength];
 			byte[] b = removeFromBuffer(Math.min(buffer.length, bufferIndex + contentLength));
+			if (b2 != null) {
+				System.arraycopy(b, 0, b2, 0, b.length);
+				b2Index += b.length;
+			}
 			int bytesLeft = contentLength - b.length;
 			Trace.trace(Trace.PARSING,"bytesLeft: "+ bytesLeft);
 			out.write(b);
@@ -279,16 +302,23 @@
 			while (bytesLeft > 0) {
 				n = in.read(readBuffer, 0, Math.min(readBuffer.length, bytesLeft));
 				bytesLeft -= n;
+				if (b2 != null) {
+					System.arraycopy(readBuffer, 0, b2, b2Index, n);
+					b2Index += n;
+				}
 				Trace.trace(Trace.PARSING,"bytes read: "+n + " bytesLeft: "+ bytesLeft);
 				out.write(readBuffer, 0, n);
 			}
+						
+			// restore the byte array for display
+			if (b2 == null)
+				b2 = Messages.errorContentSize.getBytes();
 			
-			b = Messages.errorContentSize.getBytes();
 			if (isRequest)
-				conn.addRequest(b, false);
+				conn.addRequest(b2, false);
 			else
-				conn.addResponse(b, false);
-			setHTTPBody(b);
+				conn.addResponse(b2, false);
+			setHTTPBody(b2);
 			return;
 		}