Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4925fac

Browse files
committed
minor clean up
1 parentcab08eb commit4925fac

File tree

2 files changed

+113
-12
lines changed

2 files changed

+113
-12
lines changed

‎client/src/main/java/Foo.java‎

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
importio.netty.buffer.ByteBuf;
2+
importio.netty.buffer.ByteBufAllocator;
3+
importio.netty.buffer.ByteBufUtil;
4+
importio.netty.buffer.Unpooled;
5+
importio.netty.handler.codec.http.DefaultFullHttpRequest;
6+
importio.netty.handler.codec.http.HttpHeaderNames;
7+
importio.netty.handler.codec.http.HttpHeaderValues;
8+
importio.netty.handler.codec.http.HttpHeaders;
9+
importio.netty.handler.codec.http.HttpMethod;
10+
importio.netty.handler.codec.http.HttpVersion;
11+
importio.netty.util.AsciiString;
12+
13+
importjava.util.Iterator;
14+
importjava.util.Map;
15+
16+
publicclassFoo {
17+
18+
publicstaticvoidmain(String[]args) {
19+
HttpVersionhttpVersion =HttpVersion.HTTP_1_0;
20+
HttpMethodmethod =HttpMethod.GET;
21+
ByteBufbuf =ByteBufAllocator.DEFAULT.buffer();
22+
ByteBufcontent =Unpooled.EMPTY_BUFFER;
23+
// new DefaultFullHttpRequest(httpVersion,method, urlAddress,content);
24+
DefaultFullHttpRequestnettyHttpRequest =newDefaultFullHttpRequest(httpVersion,method,"http://localhost/aaa/bbb",content);
25+
// 头里加入host信息
26+
nettyHttpRequest.headers().add(HttpHeaderNames.HOST,newAsciiString("192.168.3.52:8081"));
27+
nettyHttpRequest.headers().add(HttpHeaderNames.USER_AGENT,newAsciiString("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0"));
28+
nettyHttpRequest.headers().add(HttpHeaderNames.CONTENT_TYPE,newAsciiString("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"));
29+
nettyHttpRequest.headers().add(HttpHeaderNames.ACCEPT_LANGUAGE,newAsciiString("zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"));
30+
nettyHttpRequest.headers().add(HttpHeaderNames.ACCEPT_ENCODING,newAsciiString("gzip, deflate"));
31+
nettyHttpRequest.headers().add(HttpHeaderNames.CONTENT_LENGTH,HttpHeaderValues.ZERO);
32+
nettyHttpRequest.headers().add(HttpHeaderNames.CONNECTION,HttpHeaderValues.KEEP_ALIVE);
33+
try {
34+
longst =System.nanoTime();
35+
encodeHeaders(nettyHttpRequest.headers(),buf);
36+
longet =System.nanoTime();
37+
System.out.println("cost time :" + ((et -st) /1_000_000));
38+
}catch (Exceptione) {
39+
40+
}
41+
}
42+
43+
protectedstaticvoidencodeHeaders(HttpHeadersheaders,ByteBufbuf)throwsException {
44+
Iterator<Map.Entry<CharSequence,CharSequence>>iter =headers.iteratorCharSequence();
45+
while (iter.hasNext()) {
46+
Map.Entry<CharSequence,CharSequence>header =iter.next();
47+
longst =System.nanoTime();
48+
encoderHeader(header.getKey(),header.getValue(),buf);
49+
longet =System.nanoTime();
50+
System.out.println("encode header " +header.getKey() +" value " +header.getValue() +" cost time :" + ((et -st) /1_000_000));
51+
}
52+
}
53+
54+
publicstaticvoidencoderHeader(CharSequencename,CharSequencevalue,ByteBufbuf)throwsException {
55+
finalintnameLen =name.length();
56+
finalintvalueLen =value.length();
57+
finalintentryLen =nameLen +valueLen +4;
58+
buf.ensureWritable(entryLen);
59+
intoffset =buf.writerIndex();
60+
writeAscii(buf,offset,name,nameLen);
61+
offset +=nameLen;
62+
buf.setByte(offset++,':');
63+
buf.setByte(offset++,' ');
64+
writeAscii(buf,offset,value,valueLen);
65+
offset +=valueLen;
66+
buf.setByte(offset++,'\r');
67+
buf.setByte(offset++,'\n');
68+
buf.writerIndex(offset);
69+
}
70+
71+
privatestaticvoidwriteAscii(ByteBufbuf,intoffset,CharSequencevalue,intvalueLen) {
72+
if (valueinstanceofAsciiString) {
73+
longst =System.nanoTime();
74+
ByteBufUtil.copy((AsciiString)value,0,buf,offset,valueLen);
75+
longet =System.nanoTime();
76+
// System.out.println("writeAscii header "+value+" value cost time :"+(et-st));
77+
78+
}else {
79+
80+
writeCharSequence(buf,offset,value,valueLen);
81+
82+
}
83+
}
84+
85+
privatestaticvoidwriteCharSequence(ByteBufbuf,intoffset,CharSequencevalue,intvalueLen) {
86+
for (inti =0;i <valueLen; ++i) {
87+
buf.setByte(offset++,c2b(value.charAt(i)));
88+
}
89+
}
90+
}

‎client/src/main/java/org/asynchttpclient/Realm.java‎

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
publicclassRealm {
3838

3939
privatestaticfinalStringDEFAULT_NC ="00000001";
40+
// MD5("")
4041
privatestaticfinalStringEMPTY_ENTITY_MD5 ="d41d8cd98f00b204e9800998ecf8427e";
4142

4243
privatefinalStringprincipal;
@@ -218,7 +219,7 @@ protected MessageDigest initialValue() {
218219
}
219220
}
220221
};
221-
222+
222223
privatestaticMessageDigestgetMessageDigest() {
223224
MessageDigestmd =DIGEST_TL.get();
224225
md.reset();
@@ -420,26 +421,35 @@ private byte[] md5FromRecycledStringBuilder(StringBuilder sb, MessageDigest md)
420421
returnmd.digest();
421422
}
422423

423-
privatebyte[]secretDigest(StringBuildersb,MessageDigestmd) {
424+
privatebyte[]ha1(StringBuildersb,MessageDigestmd) {
425+
// if algorithm is "MD5" or is unspecified => A1 = username ":" realm-value ":" passwd
426+
// if algorithm is "MD5-sess" => A1 = MD5( username-value ":" realm-value ":" passwd ) ":" nonce-value ":" cnonce-value
424427

425428
sb.append(principal).append(':').append(realmName).append(':').append(password);
426-
byte[]ha1 =md5FromRecycledStringBuilder(sb,md);
429+
byte[]core =md5FromRecycledStringBuilder(sb,md);
427430

428431
if (algorithm ==null ||algorithm.equals("MD5")) {
429-
returnha1;
432+
// A1 = username ":" realm-value ":" passwd
433+
returncore;
430434
}elseif ("MD5-sess".equals(algorithm)) {
431-
appendBase16(sb,ha1);
435+
// A1 = MD5(username ":" realm-value ":" passwd ) ":" nonce ":" cnonce
436+
appendBase16(sb,core);
432437
sb.append(':').append(nonce).append(':').append(cnonce);
433438
returnmd5FromRecycledStringBuilder(sb,md);
434439
}
435440

436441
thrownewUnsupportedOperationException("Digest algorithm not supported: " +algorithm);
437442
}
438443

439-
privatebyte[]dataDigest(StringBuildersb,StringdigestUri,MessageDigestmd) {
444+
privatebyte[]ha2(StringBuildersb,StringdigestUri,MessageDigestmd) {
440445

446+
// if qop is "auth" or is unspecified => A2 = Method ":" digest-uri-value
447+
// if qop is "auth-int" => A2 = Method ":" digest-uri-value ":" H(entity-body)
441448
sb.append(methodName).append(':').append(digestUri);
442449
if ("auth-int".equals(qop)) {
450+
// when qop == "auth-int", A2 = Method ":" digest-uri-value ":" H(entity-body)
451+
// but we don't have the request body here
452+
// we would need a new API
443453
sb.append(':').append(EMPTY_ENTITY_MD5);
444454

445455
}elseif (qop !=null && !qop.equals("auth")) {
@@ -449,7 +459,8 @@ private byte[] dataDigest(StringBuilder sb, String digestUri, MessageDigest md)
449459
returnmd5FromRecycledStringBuilder(sb,md);
450460
}
451461

452-
privatevoidappendDataBase(StringBuildersb) {
462+
privatevoidappendMiddlePart(StringBuildersb) {
463+
// request-digest = MD5(H(A1) ":" nonce ":" nc ":" cnonce ":" qop ":" H(A2))
453464
sb.append(':').append(nonce).append(':');
454465
if ("auth".equals(qop) ||"auth-int".equals(qop)) {
455466
sb.append(nc).append(':').append(cnonce).append(':').append(qop).append(':');
@@ -463,12 +474,12 @@ private void newResponse(MessageDigest md) {
463474
StringBuildersb =StringBuilderPool.DEFAULT.stringBuilder();
464475

465476
// WARNING: DON'T MOVE, BUFFER IS RECYCLED!!!!
466-
byte[]secretDigest =secretDigest(sb,md);
467-
byte[]dataDigest =dataDigest(sb,digestUri,md);
477+
byte[]ha1 =ha1(sb,md);
478+
byte[]ha2 =ha2(sb,digestUri,md);
468479

469-
appendBase16(sb,secretDigest);
470-
appendDataBase(sb);
471-
appendBase16(sb,dataDigest);
480+
appendBase16(sb,ha1);
481+
appendMiddlePart(sb);
482+
appendBase16(sb,ha2);
472483

473484
byte[]responseDigest =md5FromRecycledStringBuilder(sb,md);
474485
response =toHexString(responseDigest);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp