HttpHeaders.smali 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. .class public final Lokhttp3/internal/http/HttpHeaders;
  2. .super Ljava/lang/Object;
  3. .source ""
  4. # static fields
  5. .field private static final PARAMETER:Ljava/util/regex/Pattern;
  6. .field private static final QUOTED_STRING:Ljava/lang/String; = "\"([^\"]*)\""
  7. .field private static final TOKEN:Ljava/lang/String; = "([^ \"=]*)"
  8. # direct methods
  9. .method static constructor <clinit>()V
  10. .locals 1
  11. const-string v0, " +([^ \"=]*)=(:?\"([^\"]*)\"|([^ \"=]*)) *(:?,|$)"
  12. invoke-static {v0}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
  13. move-result-object v0
  14. sput-object v0, Lokhttp3/internal/http/HttpHeaders;->PARAMETER:Ljava/util/regex/Pattern;
  15. return-void
  16. .end method
  17. .method private constructor <init>()V
  18. .locals 0
  19. invoke-direct {p0}, Ljava/lang/Object;-><init>()V
  20. return-void
  21. .end method
  22. .method public static contentLength(Lokhttp3/Headers;)J
  23. .locals 2
  24. const-string v0, "Content-Length"
  25. invoke-virtual {p0, v0}, Lokhttp3/Headers;->get(Ljava/lang/String;)Ljava/lang/String;
  26. move-result-object p0
  27. invoke-static {p0}, Lokhttp3/internal/http/HttpHeaders;->stringToLong(Ljava/lang/String;)J
  28. move-result-wide v0
  29. return-wide v0
  30. .end method
  31. .method public static contentLength(Lokhttp3/Response;)J
  32. .locals 2
  33. invoke-virtual {p0}, Lokhttp3/Response;->headers()Lokhttp3/Headers;
  34. move-result-object p0
  35. invoke-static {p0}, Lokhttp3/internal/http/HttpHeaders;->contentLength(Lokhttp3/Headers;)J
  36. move-result-wide v0
  37. return-wide v0
  38. .end method
  39. .method public static hasBody(Lokhttp3/Response;)Z
  40. .locals 8
  41. invoke-virtual {p0}, Lokhttp3/Response;->request()Lokhttp3/Request;
  42. move-result-object v0
  43. invoke-virtual {v0}, Lokhttp3/Request;->method()Ljava/lang/String;
  44. move-result-object v0
  45. const-string v1, "HEAD"
  46. invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  47. move-result v0
  48. const/4 v1, 0x0
  49. if-eqz v0, :cond_0
  50. return v1
  51. :cond_0
  52. invoke-virtual {p0}, Lokhttp3/Response;->code()I
  53. move-result v0
  54. const/16 v2, 0x64
  55. const/4 v3, 0x1
  56. if-lt v0, v2, :cond_1
  57. const/16 v2, 0xc8
  58. if-lt v0, v2, :cond_2
  59. :cond_1
  60. const/16 v2, 0xcc
  61. if-eq v0, v2, :cond_2
  62. const/16 v2, 0x130
  63. if-eq v0, v2, :cond_2
  64. return v3
  65. :cond_2
  66. invoke-static {p0}, Lokhttp3/internal/http/HttpHeaders;->contentLength(Lokhttp3/Response;)J
  67. move-result-wide v4
  68. const-wide/16 v6, -0x1
  69. cmp-long v0, v4, v6
  70. if-nez v0, :cond_4
  71. const-string v0, "Transfer-Encoding"
  72. invoke-virtual {p0, v0}, Lokhttp3/Response;->header(Ljava/lang/String;)Ljava/lang/String;
  73. move-result-object p0
  74. const-string v0, "chunked"
  75. invoke-virtual {v0, p0}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
  76. move-result p0
  77. if-eqz p0, :cond_3
  78. goto :goto_0
  79. :cond_3
  80. return v1
  81. :cond_4
  82. :goto_0
  83. return v3
  84. .end method
  85. .method public static hasVaryAll(Lokhttp3/Headers;)Z
  86. .locals 1
  87. invoke-static {p0}, Lokhttp3/internal/http/HttpHeaders;->varyFields(Lokhttp3/Headers;)Ljava/util/Set;
  88. move-result-object p0
  89. const-string v0, "*"
  90. invoke-interface {p0, v0}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z
  91. move-result p0
  92. return p0
  93. .end method
  94. .method public static hasVaryAll(Lokhttp3/Response;)Z
  95. .locals 0
  96. invoke-virtual {p0}, Lokhttp3/Response;->headers()Lokhttp3/Headers;
  97. move-result-object p0
  98. invoke-static {p0}, Lokhttp3/internal/http/HttpHeaders;->hasVaryAll(Lokhttp3/Headers;)Z
  99. move-result p0
  100. return p0
  101. .end method
  102. .method public static parseChallenges(Lokhttp3/Headers;Ljava/lang/String;)Ljava/util/List;
  103. .locals 13
  104. .annotation system Ldalvik/annotation/Signature;
  105. value = {
  106. "(",
  107. "Lokhttp3/Headers;",
  108. "Ljava/lang/String;",
  109. ")",
  110. "Ljava/util/List<",
  111. "Lokhttp3/Challenge;",
  112. ">;"
  113. }
  114. .end annotation
  115. new-instance v0, Ljava/util/ArrayList;
  116. invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
  117. invoke-virtual {p0, p1}, Lokhttp3/Headers;->values(Ljava/lang/String;)Ljava/util/List;
  118. move-result-object p0
  119. invoke-interface {p0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
  120. move-result-object p0
  121. :cond_0
  122. :goto_0
  123. invoke-interface {p0}, Ljava/util/Iterator;->hasNext()Z
  124. move-result p1
  125. if-eqz p1, :cond_8
  126. invoke-interface {p0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
  127. move-result-object p1
  128. check-cast p1, Ljava/lang/String;
  129. const/16 v1, 0x20
  130. invoke-virtual {p1, v1}, Ljava/lang/String;->indexOf(I)I
  131. move-result v1
  132. const/4 v2, -0x1
  133. if-ne v1, v2, :cond_1
  134. goto :goto_0
  135. :cond_1
  136. const/4 v2, 0x0
  137. invoke-virtual {p1, v2, v1}, Ljava/lang/String;->substring(II)Ljava/lang/String;
  138. move-result-object v7
  139. sget-object v2, Lokhttp3/internal/http/HttpHeaders;->PARAMETER:Ljava/util/regex/Pattern;
  140. invoke-virtual {v2, p1}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
  141. move-result-object v8
  142. const/4 v2, 0x0
  143. move-object v9, v2
  144. move-object v10, v9
  145. :goto_1
  146. invoke-virtual {v8, v1}, Ljava/util/regex/Matcher;->find(I)Z
  147. move-result v1
  148. if-eqz v1, :cond_5
  149. const/4 v2, 0x1
  150. const/4 v11, 0x1
  151. invoke-virtual {v8, v11}, Ljava/util/regex/Matcher;->start(I)I
  152. move-result v3
  153. const/4 v5, 0x0
  154. const/4 v6, 0x5
  155. const-string v4, "realm"
  156. move-object v1, p1
  157. invoke-virtual/range {v1 .. v6}, Ljava/lang/String;->regionMatches(ZILjava/lang/String;II)Z
  158. move-result v1
  159. const/4 v12, 0x3
  160. if-eqz v1, :cond_2
  161. invoke-virtual {v8, v12}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
  162. move-result-object v1
  163. move-object v9, v1
  164. goto :goto_2
  165. :cond_2
  166. const/4 v2, 0x1
  167. invoke-virtual {v8, v11}, Ljava/util/regex/Matcher;->start(I)I
  168. move-result v3
  169. const/4 v5, 0x0
  170. const/4 v6, 0x7
  171. const-string v4, "charset"
  172. move-object v1, p1
  173. invoke-virtual/range {v1 .. v6}, Ljava/lang/String;->regionMatches(ZILjava/lang/String;II)Z
  174. move-result v1
  175. if-eqz v1, :cond_3
  176. invoke-virtual {v8, v12}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
  177. move-result-object v1
  178. move-object v10, v1
  179. :cond_3
  180. :goto_2
  181. if-eqz v9, :cond_4
  182. if-eqz v10, :cond_4
  183. goto :goto_3
  184. :cond_4
  185. invoke-virtual {v8}, Ljava/util/regex/Matcher;->end()I
  186. move-result v1
  187. goto :goto_1
  188. :cond_5
  189. :goto_3
  190. if-nez v9, :cond_6
  191. goto :goto_0
  192. :cond_6
  193. new-instance p1, Lokhttp3/Challenge;
  194. invoke-direct {p1, v7, v9}, Lokhttp3/Challenge;-><init>(Ljava/lang/String;Ljava/lang/String;)V
  195. if-eqz v10, :cond_7
  196. const-string v1, "UTF-8"
  197. invoke-virtual {v10, v1}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
  198. move-result v1
  199. if-eqz v1, :cond_0
  200. sget-object v1, Lokhttp3/internal/Util;->UTF_8:Ljava/nio/charset/Charset;
  201. invoke-virtual {p1, v1}, Lokhttp3/Challenge;->withCharset(Ljava/nio/charset/Charset;)Lokhttp3/Challenge;
  202. move-result-object p1
  203. :cond_7
  204. invoke-interface {v0, p1}, Ljava/util/List;->add(Ljava/lang/Object;)Z
  205. goto :goto_0
  206. :cond_8
  207. return-object v0
  208. .end method
  209. .method public static parseSeconds(Ljava/lang/String;I)I
  210. .locals 3
  211. :try_start_0
  212. invoke-static {p0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
  213. move-result-wide p0
  214. :try_end_0
  215. .catch Ljava/lang/NumberFormatException; {:try_start_0 .. :try_end_0} :catch_0
  216. const-wide/32 v0, 0x7fffffff
  217. cmp-long v2, p0, v0
  218. if-lez v2, :cond_0
  219. const p0, 0x7fffffff
  220. return p0
  221. :cond_0
  222. const-wide/16 v0, 0x0
  223. cmp-long v2, p0, v0
  224. if-gez v2, :cond_1
  225. const/4 p0, 0x0
  226. return p0
  227. :cond_1
  228. long-to-int p1, p0
  229. :catch_0
  230. return p1
  231. .end method
  232. .method public static receiveHeaders(Lokhttp3/CookieJar;Lokhttp3/HttpUrl;Lokhttp3/Headers;)V
  233. .locals 1
  234. sget-object v0, Lokhttp3/CookieJar;->NO_COOKIES:Lokhttp3/CookieJar;
  235. if-ne p0, v0, :cond_0
  236. return-void
  237. :cond_0
  238. invoke-static {p1, p2}, Lokhttp3/Cookie;->parseAll(Lokhttp3/HttpUrl;Lokhttp3/Headers;)Ljava/util/List;
  239. move-result-object p2
  240. invoke-interface {p2}, Ljava/util/List;->isEmpty()Z
  241. move-result v0
  242. if-eqz v0, :cond_1
  243. return-void
  244. :cond_1
  245. invoke-interface {p0, p1, p2}, Lokhttp3/CookieJar;->saveFromResponse(Lokhttp3/HttpUrl;Ljava/util/List;)V
  246. return-void
  247. .end method
  248. .method public static skipUntil(Ljava/lang/String;ILjava/lang/String;)I
  249. .locals 2
  250. :goto_0
  251. invoke-virtual {p0}, Ljava/lang/String;->length()I
  252. move-result v0
  253. if-ge p1, v0, :cond_1
  254. invoke-virtual {p0, p1}, Ljava/lang/String;->charAt(I)C
  255. move-result v0
  256. invoke-virtual {p2, v0}, Ljava/lang/String;->indexOf(I)I
  257. move-result v0
  258. const/4 v1, -0x1
  259. if-eq v0, v1, :cond_0
  260. goto :goto_1
  261. :cond_0
  262. add-int/lit8 p1, p1, 0x1
  263. goto :goto_0
  264. :cond_1
  265. :goto_1
  266. return p1
  267. .end method
  268. .method public static skipWhitespace(Ljava/lang/String;I)I
  269. .locals 2
  270. :goto_0
  271. invoke-virtual {p0}, Ljava/lang/String;->length()I
  272. move-result v0
  273. if-ge p1, v0, :cond_1
  274. invoke-virtual {p0, p1}, Ljava/lang/String;->charAt(I)C
  275. move-result v0
  276. const/16 v1, 0x20
  277. if-eq v0, v1, :cond_0
  278. const/16 v1, 0x9
  279. if-eq v0, v1, :cond_0
  280. goto :goto_1
  281. :cond_0
  282. add-int/lit8 p1, p1, 0x1
  283. goto :goto_0
  284. :cond_1
  285. :goto_1
  286. return p1
  287. .end method
  288. .method private static stringToLong(Ljava/lang/String;)J
  289. .locals 2
  290. const-wide/16 v0, -0x1
  291. if-nez p0, :cond_0
  292. return-wide v0
  293. :cond_0
  294. :try_start_0
  295. invoke-static {p0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
  296. move-result-wide v0
  297. :try_end_0
  298. .catch Ljava/lang/NumberFormatException; {:try_start_0 .. :try_end_0} :catch_0
  299. :catch_0
  300. return-wide v0
  301. .end method
  302. .method public static varyFields(Lokhttp3/Headers;)Ljava/util/Set;
  303. .locals 8
  304. .annotation system Ldalvik/annotation/Signature;
  305. value = {
  306. "(",
  307. "Lokhttp3/Headers;",
  308. ")",
  309. "Ljava/util/Set<",
  310. "Ljava/lang/String;",
  311. ">;"
  312. }
  313. .end annotation
  314. invoke-static {}, Ljava/util/Collections;->emptySet()Ljava/util/Set;
  315. move-result-object v0
  316. invoke-virtual {p0}, Lokhttp3/Headers;->size()I
  317. move-result v1
  318. const/4 v2, 0x0
  319. move-object v3, v0
  320. const/4 v0, 0x0
  321. :goto_0
  322. if-ge v0, v1, :cond_3
  323. invoke-virtual {p0, v0}, Lokhttp3/Headers;->name(I)Ljava/lang/String;
  324. move-result-object v4
  325. const-string v5, "Vary"
  326. invoke-virtual {v5, v4}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z
  327. move-result v4
  328. if-nez v4, :cond_0
  329. goto :goto_2
  330. :cond_0
  331. invoke-virtual {p0, v0}, Lokhttp3/Headers;->value(I)Ljava/lang/String;
  332. move-result-object v4
  333. invoke-interface {v3}, Ljava/util/Set;->isEmpty()Z
  334. move-result v5
  335. if-eqz v5, :cond_1
  336. new-instance v3, Ljava/util/TreeSet;
  337. sget-object v5, Ljava/lang/String;->CASE_INSENSITIVE_ORDER:Ljava/util/Comparator;
  338. invoke-direct {v3, v5}, Ljava/util/TreeSet;-><init>(Ljava/util/Comparator;)V
  339. :cond_1
  340. const-string v5, ","
  341. invoke-virtual {v4, v5}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
  342. move-result-object v4
  343. array-length v5, v4
  344. const/4 v6, 0x0
  345. :goto_1
  346. if-ge v6, v5, :cond_2
  347. aget-object v7, v4, v6
  348. invoke-virtual {v7}, Ljava/lang/String;->trim()Ljava/lang/String;
  349. move-result-object v7
  350. invoke-interface {v3, v7}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
  351. add-int/lit8 v6, v6, 0x1
  352. goto :goto_1
  353. :cond_2
  354. :goto_2
  355. add-int/lit8 v0, v0, 0x1
  356. goto :goto_0
  357. :cond_3
  358. return-object v3
  359. .end method
  360. .method private static varyFields(Lokhttp3/Response;)Ljava/util/Set;
  361. .locals 0
  362. .annotation system Ldalvik/annotation/Signature;
  363. value = {
  364. "(",
  365. "Lokhttp3/Response;",
  366. ")",
  367. "Ljava/util/Set<",
  368. "Ljava/lang/String;",
  369. ">;"
  370. }
  371. .end annotation
  372. invoke-virtual {p0}, Lokhttp3/Response;->headers()Lokhttp3/Headers;
  373. move-result-object p0
  374. invoke-static {p0}, Lokhttp3/internal/http/HttpHeaders;->varyFields(Lokhttp3/Headers;)Ljava/util/Set;
  375. move-result-object p0
  376. return-object p0
  377. .end method
  378. .method public static varyHeaders(Lokhttp3/Headers;Lokhttp3/Headers;)Lokhttp3/Headers;
  379. .locals 5
  380. invoke-static {p1}, Lokhttp3/internal/http/HttpHeaders;->varyFields(Lokhttp3/Headers;)Ljava/util/Set;
  381. move-result-object p1
  382. invoke-interface {p1}, Ljava/util/Set;->isEmpty()Z
  383. move-result v0
  384. if-eqz v0, :cond_0
  385. new-instance p0, Lokhttp3/Headers$Builder;
  386. invoke-direct {p0}, Lokhttp3/Headers$Builder;-><init>()V
  387. invoke-virtual {p0}, Lokhttp3/Headers$Builder;->build()Lokhttp3/Headers;
  388. move-result-object p0
  389. return-object p0
  390. :cond_0
  391. new-instance v0, Lokhttp3/Headers$Builder;
  392. invoke-direct {v0}, Lokhttp3/Headers$Builder;-><init>()V
  393. const/4 v1, 0x0
  394. invoke-virtual {p0}, Lokhttp3/Headers;->size()I
  395. move-result v2
  396. :goto_0
  397. if-ge v1, v2, :cond_2
  398. invoke-virtual {p0, v1}, Lokhttp3/Headers;->name(I)Ljava/lang/String;
  399. move-result-object v3
  400. invoke-interface {p1, v3}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z
  401. move-result v4
  402. if-eqz v4, :cond_1
  403. invoke-virtual {p0, v1}, Lokhttp3/Headers;->value(I)Ljava/lang/String;
  404. move-result-object v4
  405. invoke-virtual {v0, v3, v4}, Lokhttp3/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)Lokhttp3/Headers$Builder;
  406. :cond_1
  407. add-int/lit8 v1, v1, 0x1
  408. goto :goto_0
  409. :cond_2
  410. invoke-virtual {v0}, Lokhttp3/Headers$Builder;->build()Lokhttp3/Headers;
  411. move-result-object p0
  412. return-object p0
  413. .end method
  414. .method public static varyHeaders(Lokhttp3/Response;)Lokhttp3/Headers;
  415. .locals 1
  416. invoke-virtual {p0}, Lokhttp3/Response;->networkResponse()Lokhttp3/Response;
  417. move-result-object v0
  418. invoke-virtual {v0}, Lokhttp3/Response;->request()Lokhttp3/Request;
  419. move-result-object v0
  420. invoke-virtual {v0}, Lokhttp3/Request;->headers()Lokhttp3/Headers;
  421. move-result-object v0
  422. invoke-virtual {p0}, Lokhttp3/Response;->headers()Lokhttp3/Headers;
  423. move-result-object p0
  424. invoke-static {v0, p0}, Lokhttp3/internal/http/HttpHeaders;->varyHeaders(Lokhttp3/Headers;Lokhttp3/Headers;)Lokhttp3/Headers;
  425. move-result-object p0
  426. return-object p0
  427. .end method
  428. .method public static varyMatches(Lokhttp3/Response;Lokhttp3/Headers;Lokhttp3/Request;)Z
  429. .locals 2
  430. invoke-static {p0}, Lokhttp3/internal/http/HttpHeaders;->varyFields(Lokhttp3/Response;)Ljava/util/Set;
  431. move-result-object p0
  432. invoke-interface {p0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
  433. move-result-object p0
  434. :cond_0
  435. invoke-interface {p0}, Ljava/util/Iterator;->hasNext()Z
  436. move-result v0
  437. if-eqz v0, :cond_1
  438. invoke-interface {p0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
  439. move-result-object v0
  440. check-cast v0, Ljava/lang/String;
  441. invoke-virtual {p1, v0}, Lokhttp3/Headers;->values(Ljava/lang/String;)Ljava/util/List;
  442. move-result-object v1
  443. invoke-virtual {p2, v0}, Lokhttp3/Request;->headers(Ljava/lang/String;)Ljava/util/List;
  444. move-result-object v0
  445. invoke-static {v1, v0}, Lokhttp3/internal/Util;->equal(Ljava/lang/Object;Ljava/lang/Object;)Z
  446. move-result v0
  447. if-nez v0, :cond_0
  448. const/4 p0, 0x0
  449. return p0
  450. :cond_1
  451. const/4 p0, 0x1
  452. return p0
  453. .end method