HTTP server no adhears to the correct carrage return of \r\n
This commit is contained in:
parent
7209d677a4
commit
8a7bc3362e
3 changed files with 47 additions and 43 deletions
|
|
@ -10,7 +10,7 @@ plugins {
|
|||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2025 Ziver Koc
|
||||
* Copyright (c) 2025-2026 Ziver Koc
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
@ -82,6 +82,7 @@ java {
|
|||
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs << "-Xlint:deprecation"
|
||||
options.compilerArgs << "-Xlint:unchecked"
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Ziver Koc
|
||||
* Copyright (c) 2020-2026 Ziver Koc
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
@ -24,8 +24,6 @@
|
|||
|
||||
package zutil.net.http;
|
||||
|
||||
import zutil.converter.Converter;
|
||||
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.util.HashMap;
|
||||
|
|
@ -37,6 +35,8 @@ import java.util.HashMap;
|
|||
* @author Ziver
|
||||
*/
|
||||
public class HttpPrintStream extends OutputStream {
|
||||
protected static final String LINE_SEPARATOR = "\r\n";
|
||||
|
||||
/**
|
||||
* Specifies if the HTTP message is a request (client) or a response (server).
|
||||
*/
|
||||
|
|
@ -60,7 +60,7 @@ public class HttpPrintStream extends OutputStream {
|
|||
|
||||
|
||||
/**
|
||||
* Creates an new instance of HttpPrintStream with
|
||||
* Creates a new instance of HttpPrintStream with
|
||||
* message type of RESPONSE and buffering disabled.
|
||||
*
|
||||
* @param out is the OutputStream where the data will be written to
|
||||
|
|
@ -70,7 +70,7 @@ public class HttpPrintStream extends OutputStream {
|
|||
}
|
||||
|
||||
/**
|
||||
* Creates an new instance of HttpPrintStream with
|
||||
* Creates a new instance of HttpPrintStream with
|
||||
* message type buffering disabled.
|
||||
*
|
||||
* @param out is the OutputStream where the data will be written to
|
||||
|
|
@ -101,6 +101,8 @@ public class HttpPrintStream extends OutputStream {
|
|||
* is enabled until you close or flush the stream.
|
||||
* This function will flush the stream if buffering is
|
||||
* disabled.
|
||||
*
|
||||
* @param enable true if buffering is enabled, false otherwise
|
||||
*/
|
||||
public void enableBuffering(boolean enable) {
|
||||
if (enable && !isBufferEnabled()) {
|
||||
|
|
@ -181,7 +183,7 @@ public class HttpPrintStream extends OutputStream {
|
|||
}
|
||||
|
||||
/**
|
||||
* Adds an header value
|
||||
* Adds a header value
|
||||
*
|
||||
* @param key is the header name
|
||||
* @param value is the value of the header
|
||||
|
|
@ -206,18 +208,18 @@ public class HttpPrintStream extends OutputStream {
|
|||
* Prints a new line
|
||||
*/
|
||||
public void println() {
|
||||
printOrBuffer(System.lineSeparator());
|
||||
printOrBuffer(LINE_SEPARATOR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints with a new line
|
||||
*/
|
||||
public void println(String s) {
|
||||
printOrBuffer(s + System.lineSeparator());
|
||||
printOrBuffer(s + LINE_SEPARATOR);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints an string
|
||||
* Prints a string
|
||||
*/
|
||||
public void print(String s) {
|
||||
printOrBuffer(s);
|
||||
|
|
@ -248,12 +250,13 @@ public class HttpPrintStream extends OutputStream {
|
|||
header.getResponseStatusCode() + " " +
|
||||
header.getResponseStatusString());
|
||||
}
|
||||
out.println();
|
||||
out.print(LINE_SEPARATOR);
|
||||
|
||||
// Send headers
|
||||
|
||||
for (String key : header.getHeaderMap().keySet()) {
|
||||
out.println(key + ": " + header.getHeader(key));
|
||||
out.print(key + ": " + header.getHeader(key));
|
||||
out.print(LINE_SEPARATOR);
|
||||
}
|
||||
|
||||
// Send cookies
|
||||
|
|
@ -264,16 +267,16 @@ public class HttpPrintStream extends OutputStream {
|
|||
for (String key : header.getCookieMap().keySet()) {
|
||||
out.print(" " + key + "=" + header.getCookie(key) + ";");
|
||||
}
|
||||
out.println();
|
||||
out.print(LINE_SEPARATOR);
|
||||
} else {
|
||||
for (String key : header.getCookieMap().keySet()) {
|
||||
out.print(HttpHeader.HEADER_SET_COOKIE + ": " + key + "=" + header.getCookie(key) + ";");
|
||||
out.println();
|
||||
out.print(LINE_SEPARATOR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
out.println();
|
||||
out.print(LINE_SEPARATOR);
|
||||
header = null;
|
||||
|
||||
// Check for errors
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Ziver Koc
|
||||
* Copyright (c) 2020-2026 Ziver Koc
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
@ -39,8 +39,8 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"GET / HTTP/1.0" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"GET / HTTP/1.0" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -54,8 +54,8 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"POST / HTTP/1.0" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"POST / HTTP/1.0" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -69,8 +69,8 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"GET /test/path/to/page?param=aa&tt=aa HTTP/1.0" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"GET /test/path/to/page?param=aa&tt=aa HTTP/1.0" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -84,9 +84,9 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"GET / HTTP/1.0" + System.lineSeparator() +
|
||||
"Cookie: Test=value;" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"GET / HTTP/1.0" + HttpPrintStream.LINE_SEPARATOR +
|
||||
"Cookie: Test=value;" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -101,9 +101,9 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"GET / HTTP/1.0" + System.lineSeparator() +
|
||||
"Cookie: Test1=value1; Test2=value2;" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"GET / HTTP/1.0" + HttpPrintStream.LINE_SEPARATOR +
|
||||
"Cookie: Test1=value1; Test2=value2;" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -116,8 +116,8 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"HTTP/1.0 200 OK" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"HTTP/1.0 200 OK" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -131,8 +131,8 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"HTTP/1.0 400 Bad Request" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"HTTP/1.0 400 Bad Request" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -146,9 +146,9 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"HTTP/1.0 200 OK" + System.lineSeparator() +
|
||||
"Set-Cookie: Test=value;" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"HTTP/1.0 200 OK" + HttpPrintStream.LINE_SEPARATOR +
|
||||
"Set-Cookie: Test=value;" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -163,10 +163,10 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"HTTP/1.0 200 OK" + System.lineSeparator() +
|
||||
"Set-Cookie: Test1=value1;" + System.lineSeparator() +
|
||||
"Set-Cookie: Test2=value2;" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"HTTP/1.0 200 OK" + HttpPrintStream.LINE_SEPARATOR +
|
||||
"Set-Cookie: Test1=value1;" + HttpPrintStream.LINE_SEPARATOR +
|
||||
"Set-Cookie: Test2=value2;" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
@ -182,10 +182,10 @@ public class HttpPrintStreamTest {
|
|||
|
||||
httpOut.flush();
|
||||
assertEquals(
|
||||
"HTTP/1.0 200 OK" + System.lineSeparator() +
|
||||
"Test1: value1" + System.lineSeparator() +
|
||||
"Test2: value2" + System.lineSeparator() +
|
||||
System.lineSeparator(),
|
||||
"HTTP/1.0 200 OK" + HttpPrintStream.LINE_SEPARATOR +
|
||||
"Test1: value1" + HttpPrintStream.LINE_SEPARATOR +
|
||||
"Test2: value2" + HttpPrintStream.LINE_SEPARATOR +
|
||||
HttpPrintStream.LINE_SEPARATOR,
|
||||
out.toString()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue