midori_http_parser 0.6.1.3 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.gitmodules +0 -3
- data/.travis.yml +12 -17
- data/Gemfile +5 -0
- data/{LICENSE-MIT → LICENSE} +5 -2
- data/midori_http_parser.gemspec +3 -9
- data/spec/spec_helper.rb +8 -1
- data/tasks/compile.rake +7 -13
- metadata +5 -74
- data/ext/ruby_http_parser/RubyHttpParserService.java +0 -18
- data/ext/ruby_http_parser/org/ruby_http_parser/RubyHttpParser.java +0 -495
- data/ext/ruby_http_parser/vendor/http-parser-java/AUTHORS +0 -32
- data/ext/ruby_http_parser/vendor/http-parser-java/LICENSE-MIT +0 -48
- data/ext/ruby_http_parser/vendor/http-parser-java/README.md +0 -183
- data/ext/ruby_http_parser/vendor/http-parser-java/TODO +0 -28
- data/ext/ruby_http_parser/vendor/http-parser-java/build.xml +0 -74
- data/ext/ruby_http_parser/vendor/http-parser-java/http_parser.c +0 -2175
- data/ext/ruby_http_parser/vendor/http-parser-java/http_parser.gyp +0 -79
- data/ext/ruby_http_parser/vendor/http-parser-java/http_parser.h +0 -304
- data/ext/ruby_http_parser/vendor/http-parser-java/src/Http-parser.java.iml +0 -22
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/FieldData.java +0 -41
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPCallback.java +0 -8
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPDataCallback.java +0 -34
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPErrorCallback.java +0 -12
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPException.java +0 -9
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPMethod.java +0 -113
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPParser.java +0 -36
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPParserUrl.java +0 -76
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/ParserSettings.java +0 -256
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/ParserType.java +0 -13
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/Util.java +0 -111
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/HTTPCallback.java +0 -5
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/HTTPDataCallback.java +0 -25
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/HTTPErrorCallback.java +0 -7
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/HTTPParser.java +0 -2171
- data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/lolevel/ParserSettings.java +0 -83
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Message.java +0 -374
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/ParseUrl.java +0 -51
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Requests.java +0 -69
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Responses.java +0 -52
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Test.java +0 -16
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestHeaderOverflowError.java +0 -48
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestLoaderNG.java +0 -212
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/TestNoOverflowLongBody.java +0 -62
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/UnitTest.java +0 -117
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Upgrade.java +0 -27
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Url.java +0 -127
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/Util.java +0 -236
- data/ext/ruby_http_parser/vendor/http-parser-java/src/test/http_parser/lolevel/WrongContentLength.java +0 -59
- data/ext/ruby_http_parser/vendor/http-parser-java/test.c +0 -3425
- data/ext/ruby_http_parser/vendor/http-parser-java/tests.dumped +0 -845
- data/ext/ruby_http_parser/vendor/http-parser-java/tests.utf8 +0 -17
- data/ext/ruby_http_parser/vendor/http-parser-java/tools/byte_constants.rb +0 -6
- data/ext/ruby_http_parser/vendor/http-parser-java/tools/const_char.rb +0 -13
- data/ext/ruby_http_parser/vendor/http-parser-java/tools/lowcase.rb +0 -15
- data/ext/ruby_http_parser/vendor/http-parser-java/tools/parse_tests.rb +0 -33
- data/ext/ruby_http_parser/vendor/http-parser/test_fast +0 -0
- data/ext/ruby_http_parser/vendor/http-parser/test_g +0 -0
data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPDataCallback.java
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
package http_parser;
|
2
|
-
|
3
|
-
import java.nio.ByteBuffer;
|
4
|
-
|
5
|
-
public abstract class HTTPDataCallback implements http_parser.lolevel.HTTPDataCallback{
|
6
|
-
/*
|
7
|
-
Very raw and extremly foolhardy! DANGER!
|
8
|
-
The whole Buffer concept is difficult enough to grasp as it is,
|
9
|
-
we pass in a buffer with an arbitrary position.
|
10
|
-
|
11
|
-
The interesting data is located at position pos and is len
|
12
|
-
bytes long.
|
13
|
-
|
14
|
-
The contract of this callback is that the buffer is
|
15
|
-
returned in the state that it was passed in, so implementing
|
16
|
-
this require good citizenship, you'll need to remember the current
|
17
|
-
position, change the position to get at the data you're interested
|
18
|
-
in and then set the position back to how you found it...
|
19
|
-
|
20
|
-
Therefore: there is an abstract implementation that implements
|
21
|
-
cb as described above, and provides a new callback
|
22
|
-
with signature @see cb(byte[], int, int)
|
23
|
-
*/
|
24
|
-
public int cb(http_parser.lolevel.HTTPParser p, ByteBuffer buf, int pos, int len) {
|
25
|
-
byte [] by = new byte[len];
|
26
|
-
int saved = buf.position();
|
27
|
-
buf.position(pos);
|
28
|
-
buf.get(by);
|
29
|
-
buf.position(saved);
|
30
|
-
return cb((HTTPParser)p, by, 0, len);
|
31
|
-
}
|
32
|
-
|
33
|
-
public abstract int cb(HTTPParser p, byte[] by, int pos, int len);
|
34
|
-
}
|
data/ext/ruby_http_parser/vendor/http-parser-java/src/impl/http_parser/HTTPErrorCallback.java
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
package http_parser;
|
2
|
-
|
3
|
-
|
4
|
-
import java.nio.ByteBuffer;
|
5
|
-
|
6
|
-
public abstract class HTTPErrorCallback implements http_parser.lolevel.HTTPErrorCallback{
|
7
|
-
public void cb (http_parser.lolevel.HTTPParser parser, String mes, ByteBuffer buf, int initial_position) {
|
8
|
-
this.cb((HTTPParser)parser, Util.error(mes, buf, initial_position));
|
9
|
-
}
|
10
|
-
|
11
|
-
public abstract void cb(HTTPParser parser, String error);
|
12
|
-
}
|
@@ -1,113 +0,0 @@
|
|
1
|
-
package http_parser;
|
2
|
-
|
3
|
-
import java.nio.charset.Charset;
|
4
|
-
|
5
|
-
public enum HTTPMethod {
|
6
|
-
HTTP_DELETE("DELETE")// = 0
|
7
|
-
, HTTP_GET("GET")
|
8
|
-
, HTTP_HEAD("HEAD")
|
9
|
-
, HTTP_POST("POST")
|
10
|
-
, HTTP_PUT("PUT")
|
11
|
-
, HTTP_PATCH("PATCH")
|
12
|
-
, HTTP_LINK("LINK")
|
13
|
-
, HTTP_UNLINK("UNLINK")
|
14
|
-
/* pathological */
|
15
|
-
, HTTP_CONNECT("CONNECT")
|
16
|
-
, HTTP_OPTIONS("OPTIONS")
|
17
|
-
, HTTP_TRACE("TRACE")
|
18
|
-
/* webdav */
|
19
|
-
, HTTP_COPY("COPY")
|
20
|
-
, HTTP_LOCK("LOCK")
|
21
|
-
, HTTP_MKCOL("MKCOL")
|
22
|
-
, HTTP_MOVE("MOVE")
|
23
|
-
, HTTP_PROPFIND("PROPFIND")
|
24
|
-
, HTTP_PROPPATCH("PROPPATCH")
|
25
|
-
, HTTP_UNLOCK("UNLOCK")
|
26
|
-
, HTTP_REPORT("REPORT")
|
27
|
-
, HTTP_MKACTIVITY("MKACTIVITY")
|
28
|
-
, HTTP_CHECKOUT("CHECKOUT")
|
29
|
-
, HTTP_MERGE("MERGE")
|
30
|
-
, HTTP_MSEARCH("M-SEARCH")
|
31
|
-
, HTTP_NOTIFY("NOTIFY")
|
32
|
-
, HTTP_SUBSCRIBE("SUBSCRIBE")
|
33
|
-
, HTTP_UNSUBSCRIBE("UNSUBSCRIBE")
|
34
|
-
, HTTP_PURGE("PURGE")
|
35
|
-
;
|
36
|
-
|
37
|
-
private static Charset ASCII;
|
38
|
-
static {
|
39
|
-
ASCII = Charset.forName("US-ASCII");;
|
40
|
-
}
|
41
|
-
public byte[] bytes;
|
42
|
-
|
43
|
-
HTTPMethod(String name) {
|
44
|
-
// good grief, Charlie Brown, the following is necessary because
|
45
|
-
// java is retarded:
|
46
|
-
// illegal reference to static field from initializer
|
47
|
-
// this.bytes = name.getBytes(ASCII);
|
48
|
-
// yet it's not illegal to reference static fields from
|
49
|
-
// methods called from initializer.
|
50
|
-
init(name);
|
51
|
-
}
|
52
|
-
public static HTTPMethod parse(String s) {
|
53
|
-
if ("HTTP_DELETE".equalsIgnoreCase(s)) {return HTTP_DELETE;}
|
54
|
-
else if ("DELETE".equalsIgnoreCase(s)) {return HTTP_DELETE;}
|
55
|
-
else if ("HTTP_GET".equalsIgnoreCase(s)) {return HTTP_GET;}
|
56
|
-
else if ("GET".equalsIgnoreCase(s)) {return HTTP_GET;}
|
57
|
-
else if ("HTTP_HEAD".equalsIgnoreCase(s)) {return HTTP_HEAD;}
|
58
|
-
else if ("HEAD".equalsIgnoreCase(s)) {return HTTP_HEAD;}
|
59
|
-
else if ("HTTP_POST".equalsIgnoreCase(s)) {return HTTP_POST;}
|
60
|
-
else if ("POST".equalsIgnoreCase(s)) {return HTTP_POST;}
|
61
|
-
else if ("HTTP_PUT".equalsIgnoreCase(s)) {return HTTP_PUT;}
|
62
|
-
else if ("PUT".equalsIgnoreCase(s)) {return HTTP_PUT;}
|
63
|
-
else if ("HTTP_PATCH".equalsIgnoreCase(s)) {return HTTP_PATCH;}
|
64
|
-
else if ("PATCH".equalsIgnoreCase(s)) {return HTTP_PATCH;}
|
65
|
-
else if ("HTTP_CONNECT".equalsIgnoreCase(s)) {return HTTP_CONNECT;}
|
66
|
-
else if ("CONNECT".equalsIgnoreCase(s)) {return HTTP_CONNECT;}
|
67
|
-
else if ("HTTP_OPTIONS".equalsIgnoreCase(s)) {return HTTP_OPTIONS;}
|
68
|
-
else if ("OPTIONS".equalsIgnoreCase(s)) {return HTTP_OPTIONS;}
|
69
|
-
else if ("HTTP_TRACE".equalsIgnoreCase(s)) {return HTTP_TRACE;}
|
70
|
-
else if ("TRACE".equalsIgnoreCase(s)) {return HTTP_TRACE;}
|
71
|
-
else if ("HTTP_COPY".equalsIgnoreCase(s)) {return HTTP_COPY;}
|
72
|
-
else if ("COPY".equalsIgnoreCase(s)) {return HTTP_COPY;}
|
73
|
-
else if ("HTTP_LINK".equalsIgnoreCase(s)) {return HTTP_LINK;}
|
74
|
-
else if ("LINK".equalsIgnoreCase(s)) {return HTTP_LINK;}
|
75
|
-
else if ("HTTP_LOCK".equalsIgnoreCase(s)) {return HTTP_LOCK;}
|
76
|
-
else if ("LOCK".equalsIgnoreCase(s)) {return HTTP_LOCK;}
|
77
|
-
else if ("HTTP_MKCOL".equalsIgnoreCase(s)) {return HTTP_MKCOL;}
|
78
|
-
else if ("MKCOL".equalsIgnoreCase(s)) {return HTTP_MKCOL;}
|
79
|
-
else if ("HTTP_MOVE".equalsIgnoreCase(s)) {return HTTP_MOVE;}
|
80
|
-
else if ("MOVE".equalsIgnoreCase(s)) {return HTTP_MOVE;}
|
81
|
-
else if ("HTTP_PROPFIND".equalsIgnoreCase(s)){return HTTP_PROPFIND;}
|
82
|
-
else if ("PROPFIND".equalsIgnoreCase(s)) {return HTTP_PROPFIND;}
|
83
|
-
else if ("HTTP_PROPPATCH".equalsIgnoreCase(s)){return HTTP_PROPPATCH;}
|
84
|
-
else if ("PROPPATCH".equalsIgnoreCase(s)) {return HTTP_PROPPATCH;}
|
85
|
-
else if ("HTTP_UNLINK".equalsIgnoreCase(s)) {return HTTP_UNLINK;}
|
86
|
-
else if ("UNLINK".equalsIgnoreCase(s)) {return HTTP_UNLINK;}
|
87
|
-
else if ("HTTP_UNLOCK".equalsIgnoreCase(s)) {return HTTP_UNLOCK;}
|
88
|
-
else if ("UNLOCK".equalsIgnoreCase(s)) {return HTTP_UNLOCK;}
|
89
|
-
else if ("HTTP_REPORT".equalsIgnoreCase(s)) {return HTTP_REPORT;}
|
90
|
-
else if ("REPORT".equalsIgnoreCase(s)){return HTTP_REPORT;}
|
91
|
-
else if ("HTTP_MKACTIVITY".equalsIgnoreCase(s)) {return HTTP_MKACTIVITY;}
|
92
|
-
else if ("MKACTIVITY".equalsIgnoreCase(s)){return HTTP_MKACTIVITY;}
|
93
|
-
else if ("HTTP_CHECKOUT".equalsIgnoreCase(s)) {return HTTP_CHECKOUT;}
|
94
|
-
else if ("CHECKOUT".equalsIgnoreCase(s)){return HTTP_CHECKOUT;}
|
95
|
-
else if ("HTTP_MERGE".equalsIgnoreCase(s)) {return HTTP_MERGE;}
|
96
|
-
else if ("MERGE".equalsIgnoreCase(s)){return HTTP_MERGE;}
|
97
|
-
else if ("HTTP_MSEARCH".equalsIgnoreCase(s)) {return HTTP_MSEARCH;}
|
98
|
-
else if ("M-SEARCH".equalsIgnoreCase(s)) {return HTTP_MSEARCH;}
|
99
|
-
else if ("HTTP_NOTIFY".equalsIgnoreCase(s)) {return HTTP_NOTIFY;}
|
100
|
-
else if ("NOTIFY".equalsIgnoreCase(s)) {return HTTP_NOTIFY;}
|
101
|
-
else if ("HTTP_SUBSCRIBE".equalsIgnoreCase(s)) {return HTTP_SUBSCRIBE;}
|
102
|
-
else if ("SUBSCRIBE".equalsIgnoreCase(s)) {return HTTP_SUBSCRIBE;}
|
103
|
-
else if ("HTTP_UNSUBSCRIBE".equalsIgnoreCase(s)) {return HTTP_UNSUBSCRIBE;}
|
104
|
-
else if ("UNSUBSCRIBE".equalsIgnoreCase(s)) {return HTTP_UNSUBSCRIBE;}
|
105
|
-
else if ("PATCH".equalsIgnoreCase(s)) {return HTTP_PATCH;}
|
106
|
-
else if ("PURGE".equalsIgnoreCase(s)) {return HTTP_PURGE;}
|
107
|
-
else {return null;}
|
108
|
-
}
|
109
|
-
void init (String name) {
|
110
|
-
ASCII = null == ASCII ? Charset.forName("US-ASCII") : ASCII;
|
111
|
-
this.bytes = name.getBytes(ASCII);
|
112
|
-
}
|
113
|
-
}
|
@@ -1,36 +0,0 @@
|
|
1
|
-
package http_parser;
|
2
|
-
|
3
|
-
import java.nio.ByteBuffer;
|
4
|
-
|
5
|
-
public class HTTPParser extends http_parser.lolevel.HTTPParser {
|
6
|
-
|
7
|
-
public HTTPParser() { super(); }
|
8
|
-
public HTTPParser(ParserType type) { super(type); }
|
9
|
-
|
10
|
-
public int getMajor() {
|
11
|
-
return super.http_major;
|
12
|
-
}
|
13
|
-
|
14
|
-
public int getMinor() {
|
15
|
-
return super.http_minor;
|
16
|
-
}
|
17
|
-
|
18
|
-
public int getStatusCode() {
|
19
|
-
return super.status_code;
|
20
|
-
}
|
21
|
-
|
22
|
-
public HTTPMethod getHTTPMethod() {
|
23
|
-
return super.method;
|
24
|
-
}
|
25
|
-
|
26
|
-
public boolean getUpgrade() {
|
27
|
-
return super.upgrade;
|
28
|
-
}
|
29
|
-
|
30
|
-
public boolean shouldKeepAlive() {
|
31
|
-
return super.http_should_keep_alive();
|
32
|
-
}
|
33
|
-
public void execute(ParserSettings settings, ByteBuffer data) {
|
34
|
-
this.execute(settings.getLoLevelSettings(), data);
|
35
|
-
}
|
36
|
-
}
|
@@ -1,76 +0,0 @@
|
|
1
|
-
package http_parser;
|
2
|
-
|
3
|
-
import http_parser.lolevel.*;
|
4
|
-
import http_parser.lolevel.HTTPParser;
|
5
|
-
|
6
|
-
import java.io.UnsupportedEncodingException;
|
7
|
-
import java.nio.ByteBuffer;
|
8
|
-
import java.util.Arrays;
|
9
|
-
|
10
|
-
/**
|
11
|
-
*/
|
12
|
-
public class HTTPParserUrl {
|
13
|
-
|
14
|
-
public int field_set;
|
15
|
-
public int port;
|
16
|
-
|
17
|
-
public FieldData[] field_data = new FieldData[]{
|
18
|
-
new FieldData(0,0),
|
19
|
-
new FieldData(0,0),
|
20
|
-
new FieldData(0,0),
|
21
|
-
new FieldData(0,0),
|
22
|
-
new FieldData(0,0),
|
23
|
-
new FieldData(0,0)
|
24
|
-
}; //UF_MAX
|
25
|
-
|
26
|
-
public HTTPParserUrl(){}
|
27
|
-
|
28
|
-
public HTTPParserUrl(int field_set, int port, FieldData[] field_data){
|
29
|
-
this.field_set = field_set;
|
30
|
-
this.port = port;
|
31
|
-
this.field_data = field_data;
|
32
|
-
}
|
33
|
-
|
34
|
-
public String getFieldValue(HTTPParser.UrlFields field, ByteBuffer data) throws UnsupportedEncodingException {
|
35
|
-
FieldData fd = this.field_data[field.getIndex()];
|
36
|
-
if(fd.off == 0 & fd.len == 0) return "";
|
37
|
-
byte[] dst = new byte[fd.len];
|
38
|
-
int current_pos = data.position();
|
39
|
-
data.position(fd.off);
|
40
|
-
data.get(dst,0,fd.len);
|
41
|
-
data.position(current_pos);
|
42
|
-
String v = new String(dst, "UTF8");
|
43
|
-
return v;
|
44
|
-
}
|
45
|
-
|
46
|
-
@Override
|
47
|
-
public boolean equals(Object o) {
|
48
|
-
if (this == o) return true;
|
49
|
-
if (o == null || getClass() != o.getClass()) return false;
|
50
|
-
|
51
|
-
HTTPParserUrl that = (HTTPParserUrl) o;
|
52
|
-
|
53
|
-
if (field_set != that.field_set) return false;
|
54
|
-
if (port != that.port) return false;
|
55
|
-
if (!Arrays.equals(field_data, that.field_data)) return false;
|
56
|
-
|
57
|
-
return true;
|
58
|
-
}
|
59
|
-
|
60
|
-
@Override
|
61
|
-
public int hashCode() {
|
62
|
-
int result = field_set;
|
63
|
-
result = 31 * result + port;
|
64
|
-
result = 31 * result + Arrays.hashCode(field_data);
|
65
|
-
return result;
|
66
|
-
}
|
67
|
-
|
68
|
-
@Override
|
69
|
-
public String toString() {
|
70
|
-
return "HTTPParserUrl{" +
|
71
|
-
"field_set=" + field_set +
|
72
|
-
", port=" + port +
|
73
|
-
", field_data=" + (field_data == null ? null : Arrays.asList(field_data)) +
|
74
|
-
'}';
|
75
|
-
}
|
76
|
-
}
|
@@ -1,256 +0,0 @@
|
|
1
|
-
package http_parser;
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
import primitive.collection.ByteList;
|
6
|
-
|
7
|
-
public class ParserSettings extends http_parser.lolevel.ParserSettings {
|
8
|
-
|
9
|
-
public HTTPCallback on_message_begin;
|
10
|
-
public HTTPDataCallback on_path;
|
11
|
-
public HTTPDataCallback on_query_string;
|
12
|
-
public HTTPDataCallback on_url;
|
13
|
-
public HTTPDataCallback on_fragment;
|
14
|
-
public HTTPCallback on_status_complete;
|
15
|
-
public HTTPDataCallback on_header_field;
|
16
|
-
public HTTPDataCallback on_header_value;
|
17
|
-
|
18
|
-
public HTTPCallback on_headers_complete;
|
19
|
-
public HTTPDataCallback on_body;
|
20
|
-
public HTTPCallback on_message_complete;
|
21
|
-
|
22
|
-
public HTTPErrorCallback on_error;
|
23
|
-
|
24
|
-
private HTTPCallback _on_message_begin;
|
25
|
-
private HTTPDataCallback _on_path;
|
26
|
-
private HTTPDataCallback _on_query_string;
|
27
|
-
private HTTPDataCallback _on_url;
|
28
|
-
private HTTPDataCallback _on_fragment;
|
29
|
-
private HTTPCallback _on_status_complete;
|
30
|
-
private HTTPDataCallback _on_header_field;
|
31
|
-
private HTTPDataCallback _on_header_value;
|
32
|
-
private HTTPCallback _on_headers_complete;
|
33
|
-
private HTTPDataCallback _on_body;
|
34
|
-
private HTTPCallback _on_message_complete;
|
35
|
-
private HTTPErrorCallback _on_error;
|
36
|
-
|
37
|
-
private http_parser.lolevel.ParserSettings settings;
|
38
|
-
|
39
|
-
protected ByteList field = new ByteList();
|
40
|
-
protected ByteList value = new ByteList();
|
41
|
-
protected ByteList body = new ByteList();
|
42
|
-
|
43
|
-
public ParserSettings() {
|
44
|
-
this.settings = new http_parser.lolevel.ParserSettings();
|
45
|
-
createMirrorCallbacks();
|
46
|
-
attachCallbacks();
|
47
|
-
}
|
48
|
-
|
49
|
-
protected http_parser.lolevel.ParserSettings getLoLevelSettings() {
|
50
|
-
return this.settings;
|
51
|
-
}
|
52
|
-
|
53
|
-
private void createMirrorCallbacks() {
|
54
|
-
this._on_message_begin = new HTTPCallback() {
|
55
|
-
public int cb(HTTPParser p) {
|
56
|
-
if (null != ParserSettings.this.on_message_begin) {
|
57
|
-
return ParserSettings.this.on_message_begin.cb(p);
|
58
|
-
}
|
59
|
-
return 0;
|
60
|
-
}
|
61
|
-
};
|
62
|
-
this._on_path = new HTTPDataCallback() {
|
63
|
-
@Override
|
64
|
-
public int cb(HTTPParser p, byte[] by, int pos, int len) {
|
65
|
-
if (null != ParserSettings.this.on_path) {
|
66
|
-
return ParserSettings.this.on_path.cb(p, by, pos, len);
|
67
|
-
}
|
68
|
-
return 0;
|
69
|
-
}
|
70
|
-
};
|
71
|
-
this._on_query_string = new HTTPDataCallback() {
|
72
|
-
@Override
|
73
|
-
public int cb(HTTPParser p, byte[] by, int pos, int len) {
|
74
|
-
if (null != ParserSettings.this.on_query_string) {
|
75
|
-
return ParserSettings.this.on_query_string.cb(p, by, pos, len);
|
76
|
-
}
|
77
|
-
return 0;
|
78
|
-
}
|
79
|
-
};
|
80
|
-
this._on_url = new HTTPDataCallback() {
|
81
|
-
@Override
|
82
|
-
public int cb(HTTPParser p, byte[] by, int pos, int len) {
|
83
|
-
if (null != ParserSettings.this.on_url) {
|
84
|
-
return ParserSettings.this.on_url.cb(p, by, pos, len);
|
85
|
-
}
|
86
|
-
return 0;
|
87
|
-
}
|
88
|
-
};
|
89
|
-
this._on_fragment = new HTTPDataCallback() {
|
90
|
-
@Override
|
91
|
-
public int cb(HTTPParser p, byte[] by, int pos, int len) {
|
92
|
-
if (null != ParserSettings.this.on_fragment) {
|
93
|
-
return ParserSettings.this.on_fragment.cb(p, by, pos, len);
|
94
|
-
}
|
95
|
-
return 0;
|
96
|
-
}
|
97
|
-
};
|
98
|
-
this._on_status_complete = new HTTPCallback() {
|
99
|
-
@Override
|
100
|
-
public int cb(HTTPParser p) {
|
101
|
-
if (null != ParserSettings.this.on_status_complete) {
|
102
|
-
return ParserSettings.this.on_status_complete.cb(p);
|
103
|
-
}
|
104
|
-
return 0;
|
105
|
-
}
|
106
|
-
};
|
107
|
-
this._on_error = new HTTPErrorCallback() {
|
108
|
-
@Override
|
109
|
-
public void cb(HTTPParser parser, String error) {
|
110
|
-
if (null != ParserSettings.this.on_error) {
|
111
|
-
ParserSettings.this.on_error.cb(parser, error);
|
112
|
-
} else {
|
113
|
-
throw new HTTPException(error);
|
114
|
-
}
|
115
|
-
|
116
|
-
}
|
117
|
-
};
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
// (on_header_field and on_header_value shortened to on_h_*)
|
122
|
-
// ------------------------ ------------ --------------------------------------------
|
123
|
-
// | State (prev. callback) | Callback | Description/action |
|
124
|
-
// ------------------------ ------------ --------------------------------------------
|
125
|
-
// | nothing (first call) | on_h_field | Allocate new buffer and copy callback data |
|
126
|
-
// | | | into it |
|
127
|
-
// ------------------------ ------------ --------------------------------------------
|
128
|
-
// | value | on_h_field | New header started. |
|
129
|
-
// | | | Copy current name,value buffers to headers |
|
130
|
-
// | | | list and allocate new buffer for new name |
|
131
|
-
// ------------------------ ------------ --------------------------------------------
|
132
|
-
// | field | on_h_field | Previous name continues. Reallocate name |
|
133
|
-
// | | | buffer and append callback data to it |
|
134
|
-
// ------------------------ ------------ --------------------------------------------
|
135
|
-
// | field | on_h_value | Value for current header started. Allocate |
|
136
|
-
// | | | new buffer and copy callback data to it |
|
137
|
-
// ------------------------ ------------ --------------------------------------------
|
138
|
-
// | value | on_h_value | Value continues. Reallocate value buffer |
|
139
|
-
// | | | and append callback data to it |
|
140
|
-
// ------------------------ ------------ --------------------------------------------
|
141
|
-
this._on_header_field = new HTTPDataCallback() {
|
142
|
-
@Override
|
143
|
-
public int cb(HTTPParser p, byte[] by, int pos, int len) {
|
144
|
-
// previous value complete, call on_value with full value, reset value.
|
145
|
-
if (0 != ParserSettings.this.value.size()) {
|
146
|
-
// check we're even interested...
|
147
|
-
if (null != ParserSettings.this.on_header_value) {
|
148
|
-
byte [] valueArr = ParserSettings.this.value.toArray();
|
149
|
-
int ret = ParserSettings.this.on_header_value.cb(p, valueArr, 0, valueArr.length);
|
150
|
-
if (0 != ret) {
|
151
|
-
return ret;
|
152
|
-
}
|
153
|
-
ParserSettings.this.value.clear();
|
154
|
-
}
|
155
|
-
}
|
156
|
-
|
157
|
-
if (null == ParserSettings.this.on_header_field) {
|
158
|
-
return 0;
|
159
|
-
}
|
160
|
-
|
161
|
-
ParserSettings.this.field.addAll(by);
|
162
|
-
return 0;
|
163
|
-
}
|
164
|
-
};
|
165
|
-
this._on_header_value = new HTTPDataCallback() {
|
166
|
-
@Override
|
167
|
-
public int cb(HTTPParser p, byte[] by, int pos, int len) {
|
168
|
-
|
169
|
-
// previous field complete, call on_field with full field value, reset field.
|
170
|
-
if (0 != ParserSettings.this.field.size()) {
|
171
|
-
// check we're even interested...
|
172
|
-
if (null != ParserSettings.this.on_header_field) {
|
173
|
-
byte [] fieldArr = ParserSettings.this.field.toArray();
|
174
|
-
int ret = ParserSettings.this.on_header_field.cb(p, fieldArr, 0, fieldArr.length);
|
175
|
-
if (0 != ret) {
|
176
|
-
return ret;
|
177
|
-
}
|
178
|
-
ParserSettings.this.field.clear();
|
179
|
-
}
|
180
|
-
}
|
181
|
-
|
182
|
-
if (null == ParserSettings.this.on_header_value) {
|
183
|
-
return 0;
|
184
|
-
}
|
185
|
-
ParserSettings.this.value.addAll(by);
|
186
|
-
return 0;
|
187
|
-
}
|
188
|
-
};
|
189
|
-
this._on_headers_complete = new HTTPCallback() {
|
190
|
-
@Override
|
191
|
-
public int cb(HTTPParser parser) {
|
192
|
-
// is there an uncompleted value ... ?
|
193
|
-
if (0 != ParserSettings.this.value.size()) {
|
194
|
-
// check we're even interested...
|
195
|
-
if (null != ParserSettings.this.on_header_value) {
|
196
|
-
byte [] valueArr = ParserSettings.this.value.toArray();
|
197
|
-
int ret = ParserSettings.this.on_header_value.cb(parser, valueArr, 0, valueArr.length);
|
198
|
-
if (0 != ret) {
|
199
|
-
return ret;
|
200
|
-
}
|
201
|
-
ParserSettings.this.value.clear();
|
202
|
-
}
|
203
|
-
}
|
204
|
-
if (null != ParserSettings.this.on_headers_complete) {
|
205
|
-
return ParserSettings.this.on_headers_complete.cb(parser);
|
206
|
-
}
|
207
|
-
return 0;
|
208
|
-
}
|
209
|
-
|
210
|
-
};
|
211
|
-
this._on_body = new HTTPDataCallback() {
|
212
|
-
@Override
|
213
|
-
public int cb(HTTPParser p, byte[] by, int pos, int len) {
|
214
|
-
if (null != ParserSettings.this.on_body) {
|
215
|
-
ParserSettings.this.body.addAll(by, pos, len);
|
216
|
-
}
|
217
|
-
return 0;
|
218
|
-
}
|
219
|
-
};
|
220
|
-
|
221
|
-
this._on_message_complete = new HTTPCallback() {
|
222
|
-
@Override
|
223
|
-
public int cb(HTTPParser parser) {
|
224
|
-
if (null != ParserSettings.this.on_body) {
|
225
|
-
byte [] body = ParserSettings.this.body.toArray();
|
226
|
-
int ret = ParserSettings.this.on_body.cb(parser, body, 0, body.length);
|
227
|
-
if (0!=ret) {
|
228
|
-
return ret;
|
229
|
-
}
|
230
|
-
ParserSettings.this.body.clear();
|
231
|
-
}
|
232
|
-
if (null != ParserSettings.this.on_message_complete) {
|
233
|
-
return ParserSettings.this.on_message_complete.cb(parser);
|
234
|
-
}
|
235
|
-
return 0;
|
236
|
-
}
|
237
|
-
};
|
238
|
-
|
239
|
-
}
|
240
|
-
|
241
|
-
private void attachCallbacks() {
|
242
|
-
// these are certainly set, because we mirror them ...
|
243
|
-
this.settings.on_message_begin = this._on_message_begin;
|
244
|
-
this.settings.on_path = this._on_path;
|
245
|
-
this.settings.on_query_string = this._on_query_string;
|
246
|
-
this.settings.on_url = this._on_url;
|
247
|
-
this.settings.on_fragment = this._on_fragment;
|
248
|
-
this.settings.on_status_complete = this._on_status_complete;
|
249
|
-
this.settings.on_header_field = this._on_header_field;
|
250
|
-
this.settings.on_header_value = this._on_header_value;
|
251
|
-
this.settings.on_headers_complete = this._on_headers_complete;
|
252
|
-
this.settings.on_body = this._on_body;
|
253
|
-
this.settings.on_message_complete = this._on_message_complete;
|
254
|
-
this.settings.on_error = this._on_error;
|
255
|
-
}
|
256
|
-
}
|