This commit is contained in:
@@ -16,8 +16,8 @@ import java.util.*;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import org.redkale.convert.json.JsonConvert;
|
import org.redkale.convert.json.JsonConvert;
|
||||||
import org.redkale.net.*;
|
import org.redkale.net.*;
|
||||||
import org.redkale.util.*;
|
|
||||||
import org.redkale.util.AnyValue.DefaultAnyValue;
|
import org.redkale.util.AnyValue.DefaultAnyValue;
|
||||||
|
import org.redkale.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Http请求包 与javax.servlet.http.HttpServletRequest 基本类似。 <br>
|
* Http请求包 与javax.servlet.http.HttpServletRequest 基本类似。 <br>
|
||||||
@@ -109,40 +109,41 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int readHeader(final ByteBuffer buffer) {
|
protected int readHeader(final ByteBuffer buffer) {
|
||||||
if (!readLine(buffer, array)) return -1;
|
ByteArray bytes = array;
|
||||||
|
if (!readLine(buffer, bytes)) return -1;
|
||||||
Charset charset = this.context.getCharset();
|
Charset charset = this.context.getCharset();
|
||||||
int index = 0;
|
int index = 0;
|
||||||
int offset = array.find(index, ' ');
|
int offset = bytes.find(index, ' ');
|
||||||
if (offset <= 0) return -1;
|
if (offset <= 0) return -1;
|
||||||
this.method = array.toString(index, offset, charset).trim();
|
this.method = bytes.toString(index, offset, charset);
|
||||||
index = ++offset;
|
index = ++offset;
|
||||||
offset = array.find(index, ' ');
|
offset = bytes.find(index, ' ');
|
||||||
if (offset <= 0) return -1;
|
if (offset <= 0) return -1;
|
||||||
int off = array.find(index, '#');
|
int off = bytes.find(index, '#');
|
||||||
if (off > 0) offset = off;
|
if (off > 0) offset = off;
|
||||||
int qst = array.find(index, offset, (byte) '?');
|
int qst = bytes.find(index, offset, (byte) '?');
|
||||||
if (qst > 0) {
|
if (qst > 0) {
|
||||||
this.requestURI = array.toDecodeString(index, qst - index, charset).trim();
|
this.requestURI = bytes.toDecodeString(index, qst - index, charset);
|
||||||
this.queryBytes = array.getBytes(qst + 1, offset - qst - 1);
|
this.queryBytes = bytes.getBytes(qst + 1, offset - qst - 1);
|
||||||
try {
|
try {
|
||||||
addParameter(array, qst + 1, offset - qst - 1);
|
addParameter(bytes, qst + 1, offset - qst - 1);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
this.context.getLogger().log(Level.WARNING, "HttpRequest.addParameter error: " + array.toString(), e);
|
this.context.getLogger().log(Level.WARNING, "HttpRequest.addParameter error: " + bytes.toString(), e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.requestURI = array.toDecodeString(index, offset - index, charset).trim();
|
this.requestURI = bytes.toDecodeString(index, offset - index, charset);
|
||||||
this.queryBytes = new byte[0];
|
this.queryBytes = new byte[0];
|
||||||
}
|
}
|
||||||
index = ++offset;
|
index = ++offset;
|
||||||
this.protocol = array.toString(index, array.size() - index, charset).trim();
|
this.protocol = bytes.toString(index, bytes.size() - index, charset);
|
||||||
while (readLine(buffer, array)) {
|
while (readLine(buffer, bytes)) {
|
||||||
if (array.size() < 2) break;
|
if (bytes.size() < 2) break;
|
||||||
index = 0;
|
index = 0;
|
||||||
offset = array.find(index, ':');
|
offset = bytes.find(index, ':');
|
||||||
if (offset <= 0) return -1;
|
if (offset <= 0) return -1;
|
||||||
String name = array.toString(index, offset, charset).trim();
|
String name = bytes.toString(index, offset, charset);
|
||||||
index = offset + 1;
|
index = offset + 1;
|
||||||
String value = array.toString(index, array.size() - index, charset).trim();
|
String value = bytes.toString(index, bytes.size() - index, charset);
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case "Content-Type":
|
case "Content-Type":
|
||||||
case "content-type":
|
case "content-type":
|
||||||
@@ -181,14 +182,14 @@ public class HttpRequest extends Request<HttpContext> {
|
|||||||
if (this.contentType != null && this.contentType.contains("boundary=")) this.boundary = true;
|
if (this.contentType != null && this.contentType.contains("boundary=")) this.boundary = true;
|
||||||
if (this.boundary) this.keepAlive = false; //文件上传必须设置keepAlive为false,因为文件过大时用户不一定会skip掉多余的数据
|
if (this.boundary) this.keepAlive = false; //文件上传必须设置keepAlive为false,因为文件过大时用户不一定会skip掉多余的数据
|
||||||
|
|
||||||
array.clear();
|
bytes.clear();
|
||||||
if (this.contentLength > 0 && (this.contentType == null || !this.boundary)) {
|
if (this.contentLength > 0 && (this.contentType == null || !this.boundary)) {
|
||||||
if (this.contentLength > context.getMaxbody()) return -1;
|
if (this.contentLength > context.getMaxbody()) return -1;
|
||||||
array.write(buffer, Math.min((int) this.contentLength, buffer.remaining()));
|
bytes.write(buffer, Math.min((int) this.contentLength, buffer.remaining()));
|
||||||
int lr = (int) this.contentLength - array.size();
|
int lr = (int) this.contentLength - bytes.size();
|
||||||
return lr > 0 ? lr : 0;
|
return lr > 0 ? lr : 0;
|
||||||
}
|
}
|
||||||
if (buffer.hasRemaining() && (this.boundary || !this.keepAlive)) array.write(buffer, buffer.remaining()); //文件上传、HTTP1.0或Connection:close
|
if (buffer.hasRemaining() && (this.boundary || !this.keepAlive)) bytes.write(buffer, buffer.remaining()); //文件上传、HTTP1.0或Connection:close
|
||||||
//暂不考虑是keep-alive且存在body却没有指定Content-Length的情况
|
//暂不考虑是keep-alive且存在body却没有指定Content-Length的情况
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user