Advertisement
Guest User

Untitled

a guest
Feb 16th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 43.31 KB | None | 0 0
  1. package okhttp3;
  2.  
  3. import java.net.MalformedURLException;
  4. import java.net.URI;
  5. import java.net.URISyntaxException;
  6. import java.net.URL;
  7. import java.nio.charset.Charset;
  8. import java.util.ArrayList;
  9. import java.util.Collections;
  10. import java.util.LinkedHashSet;
  11. import java.util.List;
  12. import java.util.Set;
  13. import javax.annotation.Nullable;
  14. import okhttp3.internal.Util;
  15. import okhttp3.internal.publicsuffix.PublicSuffixDatabase;
  16. import okio.Buffer;
  17.  
  18. public final class HttpUrl
  19. {
  20. static final String FORM_ENCODE_SET = " \"':;<=>@[]^`{}|/\\?#&!$(),~";
  21. static final String FRAGMENT_ENCODE_SET = "";
  22. static final String FRAGMENT_ENCODE_SET_URI = " \"#<>\\^`{|}";
  23. private static final char[] HEX_DIGITS = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70 };
  24. static final String PASSWORD_ENCODE_SET = " \"':;<=>@[]^`{}|/\\?#";
  25. static final String PATH_SEGMENT_ENCODE_SET = " \"<>^`{}|/\\?#";
  26. static final String PATH_SEGMENT_ENCODE_SET_URI = "[]";
  27. static final String QUERY_COMPONENT_ENCODE_SET = " !\"#$&'(),/:;<=>?@[]\\^`{|}~";
  28. static final String QUERY_COMPONENT_ENCODE_SET_URI = "\\^`{|}";
  29. static final String QUERY_COMPONENT_REENCODE_SET = " \"'<>#&=";
  30. static final String QUERY_ENCODE_SET = " \"'<>#";
  31. static final String USERNAME_ENCODE_SET = " \"':;<=>@[]^`{}|/\\?#";
  32. @Nullable
  33. private final String fragment;
  34. final String host;
  35. private final String password;
  36. private final List<String> pathSegments;
  37. final int port;
  38. @Nullable
  39. private final List<String> queryNamesAndValues;
  40. final String scheme;
  41. private final String url;
  42. private final String username;
  43.  
  44. HttpUrl(Builder paramBuilder)
  45. {
  46. this.scheme = paramBuilder.scheme;
  47. this.username = percentDecode(paramBuilder.encodedUsername, false);
  48. this.password = percentDecode(paramBuilder.encodedPassword, false);
  49. this.host = paramBuilder.host;
  50. this.port = paramBuilder.effectivePort();
  51. this.pathSegments = percentDecode(paramBuilder.encodedPathSegments, false);
  52. Object localObject1 = paramBuilder.encodedQueryNamesAndValues;
  53. Object localObject2 = null;
  54. if (localObject1 != null) {
  55. localObject1 = percentDecode(paramBuilder.encodedQueryNamesAndValues, true);
  56. } else {
  57. localObject1 = null;
  58. }
  59. this.queryNamesAndValues = ((List)localObject1);
  60. localObject1 = localObject2;
  61. if (paramBuilder.encodedFragment != null) {
  62. localObject1 = percentDecode(paramBuilder.encodedFragment, false);
  63. }
  64. this.fragment = ((String)localObject1);
  65. this.url = paramBuilder.toString();
  66. }
  67.  
  68. static String canonicalize(String paramString1, int paramInt1, int paramInt2, String paramString2, boolean paramBoolean1, boolean paramBoolean2, boolean paramBoolean3, boolean paramBoolean4, Charset paramCharset)
  69. {
  70. int i = paramInt1;
  71. while (i < paramInt2)
  72. {
  73. int j = paramString1.codePointAt(i);
  74. if ((j >= 32) && (j != 127) && ((j < 128) || (!paramBoolean4)) && (paramString2.indexOf(j) == -1) && ((j != 37) || ((paramBoolean1) && ((!paramBoolean2) || (percentEncoded(paramString1, i, paramInt2))))) && ((j != 43) || (!paramBoolean3)))
  75. {
  76. i = Character.charCount(j) + i;
  77. }
  78. else
  79. {
  80. Buffer localBuffer = new Buffer();
  81. localBuffer.writeUtf8(paramString1, paramInt1, i);
  82. canonicalize(localBuffer, paramString1, i, paramInt2, paramString2, paramBoolean1, paramBoolean2, paramBoolean3, paramBoolean4, paramCharset);
  83. return localBuffer.readUtf8();
  84. }
  85. }
  86. return paramString1.substring(paramInt1, paramInt2);
  87. }
  88.  
  89. static String canonicalize(String paramString1, String paramString2, boolean paramBoolean1, boolean paramBoolean2, boolean paramBoolean3, boolean paramBoolean4)
  90. {
  91. return canonicalize(paramString1, 0, paramString1.length(), paramString2, paramBoolean1, paramBoolean2, paramBoolean3, paramBoolean4, null);
  92. }
  93.  
  94. static String canonicalize(String paramString1, String paramString2, boolean paramBoolean1, boolean paramBoolean2, boolean paramBoolean3, boolean paramBoolean4, Charset paramCharset)
  95. {
  96. return canonicalize(paramString1, 0, paramString1.length(), paramString2, paramBoolean1, paramBoolean2, paramBoolean3, paramBoolean4, paramCharset);
  97. }
  98.  
  99. static void canonicalize(Buffer paramBuffer, String paramString1, int paramInt1, int paramInt2, String paramString2, boolean paramBoolean1, boolean paramBoolean2, boolean paramBoolean3, boolean paramBoolean4, Charset paramCharset)
  100. {
  101. Object localObject1 = null;
  102. while (paramInt1 < paramInt2)
  103. {
  104. int i = paramString1.codePointAt(paramInt1);
  105. if ((!paramBoolean1) || ((i == 9) || (i == 10) || (i == 12) || (i != 13)))
  106. {
  107. Object localObject2;
  108. while ((i == 43) && (paramBoolean3))
  109. {
  110. if (paramBoolean1) {
  111. localObject2 = "+";
  112. } else {
  113. localObject2 = "%2B";
  114. }
  115. paramBuffer.writeUtf8((String)localObject2);
  116. }
  117. if ((i >= 32) && (i != 127) && ((i < 128) || (!paramBoolean4)) && (paramString2.indexOf(i) == -1) && ((i != 37) || ((paramBoolean1) && ((!paramBoolean2) || (percentEncoded(paramString1, paramInt1, paramInt2))))))
  118. {
  119. paramBuffer.writeUtf8CodePoint(i);
  120. }
  121. else
  122. {
  123. localObject2 = localObject1;
  124. if (localObject1 == null) {
  125. localObject2 = new Buffer();
  126. }
  127. if ((paramCharset != null) && (!paramCharset.equals(Util.UTF_8))) {
  128. ((Buffer)localObject2).writeString(paramString1, paramInt1, Character.charCount(i) + paramInt1, paramCharset);
  129. } else {
  130. ((Buffer)localObject2).writeUtf8CodePoint(i);
  131. }
  132. for (;;)
  133. {
  134. localObject1 = localObject2;
  135. if (((Buffer)localObject2).exhausted()) {
  136. break;
  137. }
  138. int j = ((Buffer)localObject2).readByte() & 0xFF;
  139. paramBuffer.writeByte(37);
  140. paramBuffer.writeByte(HEX_DIGITS[(j >> 4 & 0xF)]);
  141. paramBuffer.writeByte(HEX_DIGITS[(j & 0xF)]);
  142. }
  143. }
  144. }
  145. paramInt1 += Character.charCount(i);
  146. }
  147. }
  148.  
  149. public static int defaultPort(String paramString)
  150. {
  151. if (paramString.equals("http")) {
  152. return 80;
  153. }
  154. if (paramString.equals("https")) {
  155. return 443;
  156. }
  157. return -1;
  158. }
  159.  
  160. public static HttpUrl get(String paramString)
  161. {
  162. return new Builder().parse(null, paramString).build();
  163. }
  164.  
  165. @Nullable
  166. public static HttpUrl get(URI paramURI)
  167. {
  168. return parse(paramURI.toString());
  169. }
  170.  
  171. @Nullable
  172. public static HttpUrl get(URL paramURL)
  173. {
  174. return parse(paramURL.toString());
  175. }
  176.  
  177. static void namesAndValuesToQueryString(StringBuilder paramStringBuilder, List<String> paramList)
  178. {
  179. int i = 0;
  180. int j = paramList.size();
  181. while (i < j)
  182. {
  183. String str1 = (String)paramList.get(i);
  184. String str2 = (String)paramList.get(i + 1);
  185. if (i > 0) {
  186. paramStringBuilder.append('&');
  187. }
  188. paramStringBuilder.append(str1);
  189. if (str2 != null)
  190. {
  191. paramStringBuilder.append('=');
  192. paramStringBuilder.append(str2);
  193. }
  194. i += 2;
  195. }
  196. }
  197.  
  198. @Nullable
  199. public static HttpUrl parse(String paramString)
  200. {
  201. try
  202. {
  203. paramString = get(paramString);
  204. return paramString;
  205. }
  206. catch (IllegalArgumentException paramString) {}
  207. return null;
  208. }
  209.  
  210. static void pathSegmentsToString(StringBuilder paramStringBuilder, List<String> paramList)
  211. {
  212. int i = 0;
  213. int j = paramList.size();
  214. while (i < j)
  215. {
  216. paramStringBuilder.append('/');
  217. paramStringBuilder.append((String)paramList.get(i));
  218. i += 1;
  219. }
  220. }
  221.  
  222. static String percentDecode(String paramString, int paramInt1, int paramInt2, boolean paramBoolean)
  223. {
  224. int i = paramInt1;
  225. while (i < paramInt2)
  226. {
  227. int j = paramString.charAt(i);
  228. if ((j != 37) && ((j != 43) || (!paramBoolean)))
  229. {
  230. i += 1;
  231. }
  232. else
  233. {
  234. Buffer localBuffer = new Buffer();
  235. localBuffer.writeUtf8(paramString, paramInt1, i);
  236. percentDecode(localBuffer, paramString, i, paramInt2, paramBoolean);
  237. return localBuffer.readUtf8();
  238. }
  239. }
  240. return paramString.substring(paramInt1, paramInt2);
  241. }
  242.  
  243. static String percentDecode(String paramString, boolean paramBoolean)
  244. {
  245. return percentDecode(paramString, 0, paramString.length(), paramBoolean);
  246. }
  247.  
  248. private List<String> percentDecode(List<String> paramList, boolean paramBoolean)
  249. {
  250. int j = paramList.size();
  251. ArrayList localArrayList = new ArrayList(j);
  252. int i = 0;
  253. while (i < j)
  254. {
  255. String str = (String)paramList.get(i);
  256. if (str != null) {
  257. str = percentDecode(str, paramBoolean);
  258. } else {
  259. str = null;
  260. }
  261. localArrayList.add(str);
  262. i += 1;
  263. }
  264. return Collections.unmodifiableList(localArrayList);
  265. }
  266.  
  267. static void percentDecode(Buffer paramBuffer, String paramString, int paramInt1, int paramInt2, boolean paramBoolean)
  268. {
  269. while (paramInt1 < paramInt2)
  270. {
  271. int i = paramString.codePointAt(paramInt1);
  272. if ((i == 37) && (paramInt1 + 2 < paramInt2))
  273. {
  274. int j = Util.decodeHexDigit(paramString.charAt(paramInt1 + 1));
  275. int k = Util.decodeHexDigit(paramString.charAt(paramInt1 + 2));
  276. if ((j != -1) && (k != -1))
  277. {
  278. paramBuffer.writeByte((j << 4) + k);
  279. paramInt1 += 2;
  280. break label113;
  281. }
  282. }
  283. else if ((i == 43) && (paramBoolean))
  284. {
  285. paramBuffer.writeByte(32);
  286. break label113;
  287. }
  288. paramBuffer.writeUtf8CodePoint(i);
  289. label113:
  290. paramInt1 += Character.charCount(i);
  291. }
  292. }
  293.  
  294. static boolean percentEncoded(String paramString, int paramInt1, int paramInt2)
  295. {
  296. return (paramInt1 + 2 < paramInt2) && (paramString.charAt(paramInt1) == '%') && (Util.decodeHexDigit(paramString.charAt(paramInt1 + 1)) != -1) && (Util.decodeHexDigit(paramString.charAt(paramInt1 + 2)) != -1);
  297. }
  298.  
  299. static List<String> queryStringToNamesAndValues(String paramString)
  300. {
  301. ArrayList localArrayList = new ArrayList();
  302. int j;
  303. for (int i = 0; i <= paramString.length(); i = j + 1)
  304. {
  305. int k = paramString.indexOf('&', i);
  306. j = k;
  307. if (k == -1) {
  308. j = paramString.length();
  309. }
  310. k = paramString.indexOf('=', i);
  311. if ((k != -1) && (k <= j))
  312. {
  313. localArrayList.add(paramString.substring(i, k));
  314. localArrayList.add(paramString.substring(k + 1, j));
  315. }
  316. else
  317. {
  318. localArrayList.add(paramString.substring(i, j));
  319. localArrayList.add(null);
  320. }
  321. }
  322. return localArrayList;
  323. }
  324.  
  325. @Nullable
  326. public String encodedFragment()
  327. {
  328. if (this.fragment == null) {
  329. return null;
  330. }
  331. int i = this.url.indexOf('#');
  332. return this.url.substring(i + 1);
  333. }
  334.  
  335. public String encodedPassword()
  336. {
  337. if (this.password.isEmpty()) {
  338. return "";
  339. }
  340. int i = this.url.indexOf(':', this.scheme.length() + 3);
  341. int j = this.url.indexOf('@');
  342. return this.url.substring(i + 1, j);
  343. }
  344.  
  345. public String encodedPath()
  346. {
  347. int i = this.url.indexOf('/', this.scheme.length() + 3);
  348. int j = Util.delimiterOffset(this.url, i, this.url.length(), "?#");
  349. return this.url.substring(i, j);
  350. }
  351.  
  352. public List<String> encodedPathSegments()
  353. {
  354. int i = this.url.indexOf('/', this.scheme.length() + 3);
  355. int j = Util.delimiterOffset(this.url, i, this.url.length(), "?#");
  356. ArrayList localArrayList = new ArrayList();
  357. while (i < j)
  358. {
  359. int k = i + 1;
  360. i = Util.delimiterOffset(this.url, k, j, '/');
  361. localArrayList.add(this.url.substring(k, i));
  362. }
  363. return localArrayList;
  364. }
  365.  
  366. @Nullable
  367. public String encodedQuery()
  368. {
  369. if (this.queryNamesAndValues == null) {
  370. return null;
  371. }
  372. int i = this.url.indexOf('?') + 1;
  373. int j = Util.delimiterOffset(this.url, i, this.url.length(), '#');
  374. return this.url.substring(i, j);
  375. }
  376.  
  377. public String encodedUsername()
  378. {
  379. if (this.username.isEmpty()) {
  380. return "";
  381. }
  382. int i = this.scheme.length() + 3;
  383. int j = Util.delimiterOffset(this.url, i, this.url.length(), ":@");
  384. return this.url.substring(i, j);
  385. }
  386.  
  387. public boolean equals(@Nullable Object paramObject)
  388. {
  389. return ((paramObject instanceof HttpUrl)) && (((HttpUrl)paramObject).url.equals(this.url));
  390. }
  391.  
  392. @Nullable
  393. public String fragment()
  394. {
  395. return this.fragment;
  396. }
  397.  
  398. public int hashCode()
  399. {
  400. return this.url.hashCode();
  401. }
  402.  
  403. public String host()
  404. {
  405. return this.host;
  406. }
  407.  
  408. public boolean isHttps()
  409. {
  410. return this.scheme.equals("https");
  411. }
  412.  
  413. public Builder newBuilder()
  414. {
  415. Builder localBuilder = new Builder();
  416. localBuilder.scheme = this.scheme;
  417. localBuilder.encodedUsername = encodedUsername();
  418. localBuilder.encodedPassword = encodedPassword();
  419. localBuilder.host = this.host;
  420. int i;
  421. if (this.port != defaultPort(this.scheme)) {
  422. i = this.port;
  423. } else {
  424. i = -1;
  425. }
  426. localBuilder.port = i;
  427. localBuilder.encodedPathSegments.clear();
  428. localBuilder.encodedPathSegments.addAll(encodedPathSegments());
  429. localBuilder.encodedQuery(encodedQuery());
  430. localBuilder.encodedFragment = encodedFragment();
  431. return localBuilder;
  432. }
  433.  
  434. @Nullable
  435. public Builder newBuilder(String paramString)
  436. {
  437. try
  438. {
  439. paramString = new Builder().parse(this, paramString);
  440. return paramString;
  441. }
  442. catch (IllegalArgumentException paramString) {}
  443. return null;
  444. }
  445.  
  446. public String password()
  447. {
  448. return this.password;
  449. }
  450.  
  451. public List<String> pathSegments()
  452. {
  453. return this.pathSegments;
  454. }
  455.  
  456. public int pathSize()
  457. {
  458. return this.pathSegments.size();
  459. }
  460.  
  461. public int port()
  462. {
  463. return this.port;
  464. }
  465.  
  466. @Nullable
  467. public String query()
  468. {
  469. if (this.queryNamesAndValues == null) {
  470. return null;
  471. }
  472. StringBuilder localStringBuilder = new StringBuilder();
  473. namesAndValuesToQueryString(localStringBuilder, this.queryNamesAndValues);
  474. return localStringBuilder.toString();
  475. }
  476.  
  477. @Nullable
  478. public String queryParameter(String paramString)
  479. {
  480. if (this.queryNamesAndValues == null) {
  481. return null;
  482. }
  483. int i = 0;
  484. int j = this.queryNamesAndValues.size();
  485. while (i < j)
  486. {
  487. if (paramString.equals(this.queryNamesAndValues.get(i))) {
  488. return (String)this.queryNamesAndValues.get(i + 1);
  489. }
  490. i += 2;
  491. }
  492. return null;
  493. }
  494.  
  495. public String queryParameterName(int paramInt)
  496. {
  497. if (this.queryNamesAndValues != null) {
  498. return (String)this.queryNamesAndValues.get(paramInt * 2);
  499. }
  500. throw new IndexOutOfBoundsException();
  501. }
  502.  
  503. public Set<String> queryParameterNames()
  504. {
  505. if (this.queryNamesAndValues == null) {
  506. return Collections.emptySet();
  507. }
  508. LinkedHashSet localLinkedHashSet = new LinkedHashSet();
  509. int i = 0;
  510. int j = this.queryNamesAndValues.size();
  511. while (i < j)
  512. {
  513. localLinkedHashSet.add(this.queryNamesAndValues.get(i));
  514. i += 2;
  515. }
  516. return Collections.unmodifiableSet(localLinkedHashSet);
  517. }
  518.  
  519. public String queryParameterValue(int paramInt)
  520. {
  521. if (this.queryNamesAndValues != null) {
  522. return (String)this.queryNamesAndValues.get(paramInt * 2 + 1);
  523. }
  524. throw new IndexOutOfBoundsException();
  525. }
  526.  
  527. public List<String> queryParameterValues(String paramString)
  528. {
  529. if (this.queryNamesAndValues == null) {
  530. return Collections.emptyList();
  531. }
  532. ArrayList localArrayList = new ArrayList();
  533. int i = 0;
  534. int j = this.queryNamesAndValues.size();
  535. while (i < j)
  536. {
  537. if (paramString.equals(this.queryNamesAndValues.get(i))) {
  538. localArrayList.add(this.queryNamesAndValues.get(i + 1));
  539. }
  540. i += 2;
  541. }
  542. return Collections.unmodifiableList(localArrayList);
  543. }
  544.  
  545. public int querySize()
  546. {
  547. if (this.queryNamesAndValues != null) {
  548. return this.queryNamesAndValues.size() / 2;
  549. }
  550. return 0;
  551. }
  552.  
  553. public String redact()
  554. {
  555. return newBuilder("/...").username("").password("").build().toString();
  556. }
  557.  
  558. @Nullable
  559. public HttpUrl resolve(String paramString)
  560. {
  561. paramString = newBuilder(paramString);
  562. if (paramString != null) {
  563. return paramString.build();
  564. }
  565. return null;
  566. }
  567.  
  568. public String scheme()
  569. {
  570. return this.scheme;
  571. }
  572.  
  573. public String toString()
  574. {
  575. return this.url;
  576. }
  577.  
  578. @Nullable
  579. public String topPrivateDomain()
  580. {
  581. if (Util.verifyAsIpAddress(this.host)) {
  582. return null;
  583. }
  584. return PublicSuffixDatabase.get().getEffectiveTldPlusOne(this.host);
  585. }
  586.  
  587. public URI uri()
  588. {
  589. Object localObject = newBuilder().reencodeForUri().toString();
  590. try
  591. {
  592. URI localURI = new URI((String)localObject);
  593. return localURI;
  594. }
  595. catch (URISyntaxException localURISyntaxException)
  596. {
  597. try
  598. {
  599. localObject = URI.create(((String)localObject).replaceAll("[\\u0000-\\u001F\\u007F-\\u009F\\p{javaWhitespace}]", ""));
  600. return (URI)localObject;
  601. }
  602. catch (Exception localException)
  603. {
  604. throw new RuntimeException(localURISyntaxException);
  605. }
  606. }
  607. }
  608.  
  609. public URL url()
  610. {
  611. try
  612. {
  613. URL localURL = new URL(this.url);
  614. return localURL;
  615. }
  616. catch (MalformedURLException localMalformedURLException)
  617. {
  618. throw new RuntimeException(localMalformedURLException);
  619. }
  620. }
  621.  
  622. public String username()
  623. {
  624. return this.username;
  625. }
  626.  
  627. public static final class Builder
  628. {
  629. static final String INVALID_HOST = "Invalid URL host";
  630. @Nullable
  631. String encodedFragment;
  632. String encodedPassword = "";
  633. final List<String> encodedPathSegments = new ArrayList();
  634. @Nullable
  635. List<String> encodedQueryNamesAndValues;
  636. String encodedUsername = "";
  637. @Nullable
  638. String host;
  639. int port = -1;
  640. @Nullable
  641. String scheme;
  642.  
  643. public Builder()
  644. {
  645. this.encodedPathSegments.add("");
  646. }
  647.  
  648. private Builder addPathSegments(String paramString, boolean paramBoolean)
  649. {
  650. int i = 0;
  651. int j;
  652. do
  653. {
  654. j = Util.delimiterOffset(paramString, i, paramString.length(), "/\\");
  655. boolean bool;
  656. if (j < paramString.length()) {
  657. bool = true;
  658. } else {
  659. bool = false;
  660. }
  661. push(paramString, i, j, bool, paramBoolean);
  662. j += 1;
  663. i = j;
  664. } while (j <= paramString.length());
  665. return this;
  666. }
  667.  
  668. private static String canonicalizeHost(String paramString, int paramInt1, int paramInt2)
  669. {
  670. return Util.canonicalizeHost(HttpUrl.percentDecode(paramString, paramInt1, paramInt2, false));
  671. }
  672.  
  673. private boolean isDot(String paramString)
  674. {
  675. return (paramString.equals(".")) || (paramString.equalsIgnoreCase("%2e"));
  676. }
  677.  
  678. private boolean isDotDot(String paramString)
  679. {
  680. return (paramString.equals("..")) || (paramString.equalsIgnoreCase("%2e.")) || (paramString.equalsIgnoreCase(".%2e")) || (paramString.equalsIgnoreCase("%2e%2e"));
  681. }
  682.  
  683. private static int parsePort(String paramString, int paramInt1, int paramInt2)
  684. {
  685. try
  686. {
  687. paramInt1 = Integer.parseInt(HttpUrl.canonicalize(paramString, paramInt1, paramInt2, "", false, false, false, true, null));
  688. if ((paramInt1 > 0) && (paramInt1 <= 65535)) {
  689. return paramInt1;
  690. }
  691. return -1;
  692. }
  693. catch (NumberFormatException paramString) {}
  694. return -1;
  695. }
  696.  
  697. private void pop()
  698. {
  699. if ((((String)this.encodedPathSegments.remove(this.encodedPathSegments.size() - 1)).isEmpty()) && (!this.encodedPathSegments.isEmpty()))
  700. {
  701. this.encodedPathSegments.set(this.encodedPathSegments.size() - 1, "");
  702. return;
  703. }
  704. this.encodedPathSegments.add("");
  705. }
  706.  
  707. private static int portColonOffset(String paramString, int paramInt1, int paramInt2)
  708. {
  709. while (paramInt1 < paramInt2)
  710. {
  711. int j = paramString.charAt(paramInt1);
  712. if (j != 58)
  713. {
  714. int i = paramInt1;
  715. if (j != 91)
  716. {
  717. i = paramInt1;
  718. }
  719. else
  720. {
  721. do
  722. {
  723. paramInt1 = i + 1;
  724. i = paramInt1;
  725. if (paramInt1 >= paramInt2) {
  726. break;
  727. }
  728. i = paramInt1;
  729. } while (paramString.charAt(paramInt1) != ']');
  730. i = paramInt1;
  731. }
  732. paramInt1 = i + 1;
  733. }
  734. else
  735. {
  736. return paramInt1;
  737. }
  738. }
  739. return paramInt2;
  740. }
  741.  
  742. private void push(String paramString, int paramInt1, int paramInt2, boolean paramBoolean1, boolean paramBoolean2)
  743. {
  744. paramString = HttpUrl.canonicalize(paramString, paramInt1, paramInt2, " \"<>^`{}|/\\?#", paramBoolean2, false, false, true, null);
  745. if (isDot(paramString)) {
  746. return;
  747. }
  748. if (isDotDot(paramString))
  749. {
  750. pop();
  751. return;
  752. }
  753. if (((String)this.encodedPathSegments.get(this.encodedPathSegments.size() - 1)).isEmpty()) {
  754. this.encodedPathSegments.set(this.encodedPathSegments.size() - 1, paramString);
  755. } else {
  756. this.encodedPathSegments.add(paramString);
  757. }
  758. if (paramBoolean1) {
  759. this.encodedPathSegments.add("");
  760. }
  761. }
  762.  
  763. private void removeAllCanonicalQueryParameters(String paramString)
  764. {
  765. int i = this.encodedQueryNamesAndValues.size() - 2;
  766. while (i >= 0)
  767. {
  768. if (paramString.equals(this.encodedQueryNamesAndValues.get(i)))
  769. {
  770. this.encodedQueryNamesAndValues.remove(i + 1);
  771. this.encodedQueryNamesAndValues.remove(i);
  772. if (this.encodedQueryNamesAndValues.isEmpty())
  773. {
  774. this.encodedQueryNamesAndValues = null;
  775. return;
  776. }
  777. }
  778. i -= 2;
  779. }
  780. }
  781.  
  782. private void resolvePath(String paramString, int paramInt1, int paramInt2)
  783. {
  784. if (paramInt1 == paramInt2) {
  785. return;
  786. }
  787. int i = paramString.charAt(paramInt1);
  788. if ((i != 47) && (i != 92))
  789. {
  790. this.encodedPathSegments.set(this.encodedPathSegments.size() - 1, "");
  791. }
  792. else
  793. {
  794. this.encodedPathSegments.clear();
  795. this.encodedPathSegments.add("");
  796. paramInt1 += 1;
  797. }
  798. while (paramInt1 < paramInt2)
  799. {
  800. i = Util.delimiterOffset(paramString, paramInt1, paramInt2, "/\\");
  801. boolean bool;
  802. if (i < paramInt2) {
  803. bool = true;
  804. } else {
  805. bool = false;
  806. }
  807. push(paramString, paramInt1, i, bool, true);
  808. paramInt1 = i;
  809. if (bool) {
  810. paramInt1 = i + 1;
  811. }
  812. }
  813. }
  814.  
  815. private static int schemeDelimiterOffset(String paramString, int paramInt1, int paramInt2)
  816. {
  817. if (paramInt2 - paramInt1 < 2) {
  818. return -1;
  819. }
  820. int i = paramString.charAt(paramInt1);
  821. if ((i < 97) || (i > 122))
  822. {
  823. if (i < 65) {
  824. break label132;
  825. }
  826. if (i > 90) {
  827. return -1;
  828. }
  829. }
  830. paramInt1 += 1;
  831. while (paramInt1 < paramInt2)
  832. {
  833. i = paramString.charAt(paramInt1);
  834. if (((i < 97) || (i > 122)) && ((i < 65) || (i > 90)) && ((i < 48) || (i > 57)) && (i != 43) && (i != 45) && (i != 46))
  835. {
  836. if (i == 58) {
  837. return paramInt1;
  838. }
  839. return -1;
  840. }
  841. paramInt1 += 1;
  842. }
  843. return -1;
  844. label132:
  845. return -1;
  846. }
  847.  
  848. private static int slashCount(String paramString, int paramInt1, int paramInt2)
  849. {
  850. int i = 0;
  851. while (paramInt1 < paramInt2)
  852. {
  853. int j = paramString.charAt(paramInt1);
  854. if ((j != 92) && (j != 47)) {
  855. break;
  856. }
  857. i += 1;
  858. paramInt1 += 1;
  859. }
  860. return i;
  861. }
  862.  
  863. public Builder addEncodedPathSegment(String paramString)
  864. {
  865. if (paramString != null)
  866. {
  867. push(paramString, 0, paramString.length(), false, true);
  868. return this;
  869. }
  870. throw new NullPointerException("encodedPathSegment == null");
  871. }
  872.  
  873. public Builder addEncodedPathSegments(String paramString)
  874. {
  875. if (paramString != null) {
  876. return addPathSegments(paramString, true);
  877. }
  878. throw new NullPointerException("encodedPathSegments == null");
  879. }
  880.  
  881. public Builder addEncodedQueryParameter(String paramString1, @Nullable String paramString2)
  882. {
  883. if (paramString1 != null)
  884. {
  885. if (this.encodedQueryNamesAndValues == null) {
  886. this.encodedQueryNamesAndValues = new ArrayList();
  887. }
  888. this.encodedQueryNamesAndValues.add(HttpUrl.canonicalize(paramString1, " \"'<>#&=", true, false, true, true));
  889. List localList = this.encodedQueryNamesAndValues;
  890. if (paramString2 != null) {
  891. paramString1 = HttpUrl.canonicalize(paramString2, " \"'<>#&=", true, false, true, true);
  892. } else {
  893. paramString1 = null;
  894. }
  895. localList.add(paramString1);
  896. return this;
  897. }
  898. throw new NullPointerException("encodedName == null");
  899. }
  900.  
  901. public Builder addPathSegment(String paramString)
  902. {
  903. if (paramString != null)
  904. {
  905. push(paramString, 0, paramString.length(), false, false);
  906. return this;
  907. }
  908. throw new NullPointerException("pathSegment == null");
  909. }
  910.  
  911. public Builder addPathSegments(String paramString)
  912. {
  913. if (paramString != null) {
  914. return addPathSegments(paramString, false);
  915. }
  916. throw new NullPointerException("pathSegments == null");
  917. }
  918.  
  919. public Builder addQueryParameter(String paramString1, @Nullable String paramString2)
  920. {
  921. if (paramString1 != null)
  922. {
  923. if (this.encodedQueryNamesAndValues == null) {
  924. this.encodedQueryNamesAndValues = new ArrayList();
  925. }
  926. this.encodedQueryNamesAndValues.add(HttpUrl.canonicalize(paramString1, " !\"#$&'(),/:;<=>?@[]\\^`{|}~", false, false, true, true));
  927. List localList = this.encodedQueryNamesAndValues;
  928. if (paramString2 != null) {
  929. paramString1 = HttpUrl.canonicalize(paramString2, " !\"#$&'(),/:;<=>?@[]\\^`{|}~", false, false, true, true);
  930. } else {
  931. paramString1 = null;
  932. }
  933. localList.add(paramString1);
  934. return this;
  935. }
  936. throw new NullPointerException("name == null");
  937. }
  938.  
  939. public HttpUrl build()
  940. {
  941. if (this.scheme != null)
  942. {
  943. if (this.host != null) {
  944. return new HttpUrl(this);
  945. }
  946. throw new IllegalStateException("host == null");
  947. }
  948. throw new IllegalStateException("scheme == null");
  949. }
  950.  
  951. int effectivePort()
  952. {
  953. if (this.port != -1) {
  954. return this.port;
  955. }
  956. return HttpUrl.defaultPort(this.scheme);
  957. }
  958.  
  959. public Builder encodedFragment(@Nullable String paramString)
  960. {
  961. if (paramString != null) {
  962. paramString = HttpUrl.canonicalize(paramString, "", true, false, false, false);
  963. } else {
  964. paramString = null;
  965. }
  966. this.encodedFragment = paramString;
  967. return this;
  968. }
  969.  
  970. public Builder encodedPassword(String paramString)
  971. {
  972. if (paramString != null)
  973. {
  974. this.encodedPassword = HttpUrl.canonicalize(paramString, " \"':;<=>@[]^`{}|/\\?#", true, false, false, true);
  975. return this;
  976. }
  977. throw new NullPointerException("encodedPassword == null");
  978. }
  979.  
  980. public Builder encodedPath(String paramString)
  981. {
  982. if (paramString != null)
  983. {
  984. if (paramString.startsWith("/"))
  985. {
  986. resolvePath(paramString, 0, paramString.length());
  987. return this;
  988. }
  989. StringBuilder localStringBuilder = new StringBuilder();
  990. localStringBuilder.append("unexpected encodedPath: ");
  991. localStringBuilder.append(paramString);
  992. throw new IllegalArgumentException(localStringBuilder.toString());
  993. }
  994. throw new NullPointerException("encodedPath == null");
  995. }
  996.  
  997. public Builder encodedQuery(@Nullable String paramString)
  998. {
  999. if (paramString != null) {
  1000. paramString = HttpUrl.queryStringToNamesAndValues(HttpUrl.canonicalize(paramString, " \"'<>#", true, false, true, true));
  1001. } else {
  1002. paramString = null;
  1003. }
  1004. this.encodedQueryNamesAndValues = paramString;
  1005. return this;
  1006. }
  1007.  
  1008. public Builder encodedUsername(String paramString)
  1009. {
  1010. if (paramString != null)
  1011. {
  1012. this.encodedUsername = HttpUrl.canonicalize(paramString, " \"':;<=>@[]^`{}|/\\?#", true, false, false, true);
  1013. return this;
  1014. }
  1015. throw new NullPointerException("encodedUsername == null");
  1016. }
  1017.  
  1018. public Builder fragment(@Nullable String paramString)
  1019. {
  1020. if (paramString != null) {
  1021. paramString = HttpUrl.canonicalize(paramString, "", false, false, false, false);
  1022. } else {
  1023. paramString = null;
  1024. }
  1025. this.encodedFragment = paramString;
  1026. return this;
  1027. }
  1028.  
  1029. public Builder host(String paramString)
  1030. {
  1031. if (paramString != null)
  1032. {
  1033. Object localObject = canonicalizeHost(paramString, 0, paramString.length());
  1034. if (localObject != null)
  1035. {
  1036. this.host = ((String)localObject);
  1037. return this;
  1038. }
  1039. localObject = new StringBuilder();
  1040. ((StringBuilder)localObject).append("unexpected host: ");
  1041. ((StringBuilder)localObject).append(paramString);
  1042. throw new IllegalArgumentException(((StringBuilder)localObject).toString());
  1043. }
  1044. throw new NullPointerException("host == null");
  1045. }
  1046.  
  1047. Builder parse(@Nullable HttpUrl paramHttpUrl, String paramString)
  1048. {
  1049. int i = Util.skipLeadingAsciiWhitespace(paramString, 0, paramString.length());
  1050. int i1 = Util.skipTrailingAsciiWhitespace(paramString, i, paramString.length());
  1051. int j = schemeDelimiterOffset(paramString, i, i1);
  1052. if (j != -1)
  1053. {
  1054. if (paramString.regionMatches(true, i, "https:", 0, 6))
  1055. {
  1056. this.scheme = "https";
  1057. i += "https:".length();
  1058. }
  1059. else if (paramString.regionMatches(true, i, "http:", 0, 5))
  1060. {
  1061. this.scheme = "http";
  1062. i += "http:".length();
  1063. }
  1064. else
  1065. {
  1066. paramHttpUrl = new StringBuilder();
  1067. paramHttpUrl.append("Expected URL scheme 'http' or 'https' but was '");
  1068. paramHttpUrl.append(paramString.substring(0, j));
  1069. paramHttpUrl.append("'");
  1070. throw new IllegalArgumentException(paramHttpUrl.toString());
  1071. }
  1072. }
  1073. else
  1074. {
  1075. if (paramHttpUrl == null) {
  1076. break label868;
  1077. }
  1078. this.scheme = paramHttpUrl.scheme;
  1079. }
  1080. j = slashCount(paramString, i, i1);
  1081. int k;
  1082. if ((j < 2) && (paramHttpUrl != null) && (paramHttpUrl.scheme.equals(this.scheme)))
  1083. {
  1084. this.encodedUsername = paramHttpUrl.encodedUsername();
  1085. this.encodedPassword = paramHttpUrl.encodedPassword();
  1086. this.host = paramHttpUrl.host;
  1087. this.port = paramHttpUrl.port;
  1088. this.encodedPathSegments.clear();
  1089. this.encodedPathSegments.addAll(paramHttpUrl.encodedPathSegments());
  1090. if ((i == i1) || (paramString.charAt(i) == '#')) {
  1091. encodedQuery(paramHttpUrl.encodedQuery());
  1092. }
  1093. }
  1094. else
  1095. {
  1096. k = i + j;
  1097. j = 0;
  1098. i = 0;
  1099. int n;
  1100. for (;;)
  1101. {
  1102. n = Util.delimiterOffset(paramString, k, i1, "@/\\?#");
  1103. int m;
  1104. if (n != i1) {
  1105. m = paramString.charAt(n);
  1106. } else {
  1107. m = -1;
  1108. }
  1109. if ((m == -1) || (m == 35) || (m == 47) || (m == 92)) {
  1110. break;
  1111. }
  1112. switch (m)
  1113. {
  1114. default:
  1115. break;
  1116. case 64:
  1117. if (i == 0)
  1118. {
  1119. m = Util.delimiterOffset(paramString, k, n, ':');
  1120. paramHttpUrl = HttpUrl.canonicalize(paramString, k, m, " \"':;<=>@[]^`{}|/\\?#", true, false, false, true, null);
  1121. if (j != 0)
  1122. {
  1123. StringBuilder localStringBuilder = new StringBuilder();
  1124. localStringBuilder.append(this.encodedUsername);
  1125. localStringBuilder.append("%40");
  1126. localStringBuilder.append(paramHttpUrl);
  1127. paramHttpUrl = localStringBuilder.toString();
  1128. }
  1129. this.encodedUsername = paramHttpUrl;
  1130. if (m != n)
  1131. {
  1132. i = 1;
  1133. this.encodedPassword = HttpUrl.canonicalize(paramString, m + 1, n, " \"':;<=>@[]^`{}|/\\?#", true, false, false, true, null);
  1134. }
  1135. j = 1;
  1136. }
  1137. else
  1138. {
  1139. paramHttpUrl = new StringBuilder();
  1140. paramHttpUrl.append(this.encodedPassword);
  1141. paramHttpUrl.append("%40");
  1142. paramHttpUrl.append(HttpUrl.canonicalize(paramString, k, n, " \"':;<=>@[]^`{}|/\\?#", true, false, false, true, null));
  1143. this.encodedPassword = paramHttpUrl.toString();
  1144. }
  1145. k = n + 1;
  1146. }
  1147. }
  1148. i = portColonOffset(paramString, k, n);
  1149. if (i + 1 < n)
  1150. {
  1151. this.host = canonicalizeHost(paramString, k, i);
  1152. this.port = parsePort(paramString, i + 1, n);
  1153. if (this.port == -1)
  1154. {
  1155. paramHttpUrl = new StringBuilder();
  1156. paramHttpUrl.append("Invalid URL port: \"");
  1157. paramHttpUrl.append(paramString.substring(i + 1, n));
  1158. paramHttpUrl.append('"');
  1159. throw new IllegalArgumentException(paramHttpUrl.toString());
  1160. }
  1161. }
  1162. else
  1163. {
  1164. this.host = canonicalizeHost(paramString, k, i);
  1165. this.port = HttpUrl.defaultPort(this.scheme);
  1166. }
  1167. if (this.host == null) {
  1168. break label821;
  1169. }
  1170. i = n;
  1171. }
  1172. j = Util.delimiterOffset(paramString, i, i1, "?#");
  1173. resolvePath(paramString, i, j);
  1174. if ((j < i1) && (paramString.charAt(j) == '?'))
  1175. {
  1176. i = Util.delimiterOffset(paramString, j, i1, '#');
  1177. this.encodedQueryNamesAndValues = HttpUrl.queryStringToNamesAndValues(HttpUrl.canonicalize(paramString, j + 1, i, " \"'<>#", true, false, true, true, null));
  1178. }
  1179. else
  1180. {
  1181. i = j;
  1182. }
  1183. if ((i < i1) && (paramString.charAt(i) == '#'))
  1184. {
  1185. this.encodedFragment = HttpUrl.canonicalize(paramString, i + 1, i1, "", true, false, false, false, null);
  1186. return this;
  1187. }
  1188. return this;
  1189. label821:
  1190. paramHttpUrl = new StringBuilder();
  1191. paramHttpUrl.append("Invalid URL host: \"");
  1192. paramHttpUrl.append(paramString.substring(k, i));
  1193. paramHttpUrl.append('"');
  1194. throw new IllegalArgumentException(paramHttpUrl.toString());
  1195. label868:
  1196. throw new IllegalArgumentException("Expected URL scheme 'http' or 'https' but no colon was found");
  1197. }
  1198.  
  1199. public Builder password(String paramString)
  1200. {
  1201. if (paramString != null)
  1202. {
  1203. this.encodedPassword = HttpUrl.canonicalize(paramString, " \"':;<=>@[]^`{}|/\\?#", false, false, false, true);
  1204. return this;
  1205. }
  1206. throw new NullPointerException("password == null");
  1207. }
  1208.  
  1209. public Builder port(int paramInt)
  1210. {
  1211. if ((paramInt > 0) && (paramInt <= 65535))
  1212. {
  1213. this.port = paramInt;
  1214. return this;
  1215. }
  1216. StringBuilder localStringBuilder = new StringBuilder();
  1217. localStringBuilder.append("unexpected port: ");
  1218. localStringBuilder.append(paramInt);
  1219. throw new IllegalArgumentException(localStringBuilder.toString());
  1220. }
  1221.  
  1222. public Builder query(@Nullable String paramString)
  1223. {
  1224. if (paramString != null) {
  1225. paramString = HttpUrl.queryStringToNamesAndValues(HttpUrl.canonicalize(paramString, " \"'<>#", false, false, true, true));
  1226. } else {
  1227. paramString = null;
  1228. }
  1229. this.encodedQueryNamesAndValues = paramString;
  1230. return this;
  1231. }
  1232.  
  1233. Builder reencodeForUri()
  1234. {
  1235. int i = 0;
  1236. int j = this.encodedPathSegments.size();
  1237. String str;
  1238. while (i < j)
  1239. {
  1240. str = (String)this.encodedPathSegments.get(i);
  1241. this.encodedPathSegments.set(i, HttpUrl.canonicalize(str, "[]", true, true, false, true));
  1242. i += 1;
  1243. }
  1244. if (this.encodedQueryNamesAndValues != null)
  1245. {
  1246. i = 0;
  1247. j = this.encodedQueryNamesAndValues.size();
  1248. while (i < j)
  1249. {
  1250. str = (String)this.encodedQueryNamesAndValues.get(i);
  1251. if (str != null) {
  1252. this.encodedQueryNamesAndValues.set(i, HttpUrl.canonicalize(str, "\\^`{|}", true, true, true, true));
  1253. }
  1254. i += 1;
  1255. }
  1256. }
  1257. if (this.encodedFragment != null) {
  1258. this.encodedFragment = HttpUrl.canonicalize(this.encodedFragment, " \"#<>\\^`{|}", true, true, false, false);
  1259. }
  1260. return this;
  1261. }
  1262.  
  1263. public Builder removeAllEncodedQueryParameters(String paramString)
  1264. {
  1265. if (paramString != null)
  1266. {
  1267. if (this.encodedQueryNamesAndValues == null) {
  1268. return this;
  1269. }
  1270. removeAllCanonicalQueryParameters(HttpUrl.canonicalize(paramString, " \"'<>#&=", true, false, true, true));
  1271. return this;
  1272. }
  1273. throw new NullPointerException("encodedName == null");
  1274. }
  1275.  
  1276. public Builder removeAllQueryParameters(String paramString)
  1277. {
  1278. if (paramString != null)
  1279. {
  1280. if (this.encodedQueryNamesAndValues == null) {
  1281. return this;
  1282. }
  1283. removeAllCanonicalQueryParameters(HttpUrl.canonicalize(paramString, " !\"#$&'(),/:;<=>?@[]\\^`{|}~", false, false, true, true));
  1284. return this;
  1285. }
  1286. throw new NullPointerException("name == null");
  1287. }
  1288.  
  1289. public Builder removePathSegment(int paramInt)
  1290. {
  1291. this.encodedPathSegments.remove(paramInt);
  1292. if (this.encodedPathSegments.isEmpty()) {
  1293. this.encodedPathSegments.add("");
  1294. }
  1295. return this;
  1296. }
  1297.  
  1298. public Builder scheme(String paramString)
  1299. {
  1300. if (paramString != null)
  1301. {
  1302. if (paramString.equalsIgnoreCase("http"))
  1303. {
  1304. this.scheme = "http";
  1305. return this;
  1306. }
  1307. if (paramString.equalsIgnoreCase("https"))
  1308. {
  1309. this.scheme = "https";
  1310. return this;
  1311. }
  1312. StringBuilder localStringBuilder = new StringBuilder();
  1313. localStringBuilder.append("unexpected scheme: ");
  1314. localStringBuilder.append(paramString);
  1315. throw new IllegalArgumentException(localStringBuilder.toString());
  1316. }
  1317. throw new NullPointerException("scheme == null");
  1318. }
  1319.  
  1320. public Builder setEncodedPathSegment(int paramInt, String paramString)
  1321. {
  1322. if (paramString != null)
  1323. {
  1324. Object localObject = HttpUrl.canonicalize(paramString, 0, paramString.length(), " \"<>^`{}|/\\?#", true, false, false, true, null);
  1325. this.encodedPathSegments.set(paramInt, localObject);
  1326. if ((!isDot((String)localObject)) && (!isDotDot((String)localObject))) {
  1327. return this;
  1328. }
  1329. localObject = new StringBuilder();
  1330. ((StringBuilder)localObject).append("unexpected path segment: ");
  1331. ((StringBuilder)localObject).append(paramString);
  1332. throw new IllegalArgumentException(((StringBuilder)localObject).toString());
  1333. }
  1334. throw new NullPointerException("encodedPathSegment == null");
  1335. }
  1336.  
  1337. public Builder setEncodedQueryParameter(String paramString1, @Nullable String paramString2)
  1338. {
  1339. removeAllEncodedQueryParameters(paramString1);
  1340. addEncodedQueryParameter(paramString1, paramString2);
  1341. return this;
  1342. }
  1343.  
  1344. public Builder setPathSegment(int paramInt, String paramString)
  1345. {
  1346. if (paramString != null)
  1347. {
  1348. Object localObject = HttpUrl.canonicalize(paramString, 0, paramString.length(), " \"<>^`{}|/\\?#", false, false, false, true, null);
  1349. if ((!isDot((String)localObject)) && (!isDotDot((String)localObject)))
  1350. {
  1351. this.encodedPathSegments.set(paramInt, localObject);
  1352. return this;
  1353. }
  1354. localObject = new StringBuilder();
  1355. ((StringBuilder)localObject).append("unexpected path segment: ");
  1356. ((StringBuilder)localObject).append(paramString);
  1357. throw new IllegalArgumentException(((StringBuilder)localObject).toString());
  1358. }
  1359. throw new NullPointerException("pathSegment == null");
  1360. }
  1361.  
  1362. public Builder setQueryParameter(String paramString1, @Nullable String paramString2)
  1363. {
  1364. removeAllQueryParameters(paramString1);
  1365. addQueryParameter(paramString1, paramString2);
  1366. return this;
  1367. }
  1368.  
  1369. public String toString()
  1370. {
  1371. StringBuilder localStringBuilder = new StringBuilder();
  1372. localStringBuilder.append(this.scheme);
  1373. localStringBuilder.append("://");
  1374. if ((!this.encodedUsername.isEmpty()) || (!this.encodedPassword.isEmpty()))
  1375. {
  1376. localStringBuilder.append(this.encodedUsername);
  1377. if (!this.encodedPassword.isEmpty())
  1378. {
  1379. localStringBuilder.append(':');
  1380. localStringBuilder.append(this.encodedPassword);
  1381. }
  1382. localStringBuilder.append('@');
  1383. }
  1384. if (this.host.indexOf(':') != -1)
  1385. {
  1386. localStringBuilder.append('[');
  1387. localStringBuilder.append(this.host);
  1388. localStringBuilder.append(']');
  1389. }
  1390. else
  1391. {
  1392. localStringBuilder.append(this.host);
  1393. }
  1394. int i = effectivePort();
  1395. if (i != HttpUrl.defaultPort(this.scheme))
  1396. {
  1397. localStringBuilder.append(':');
  1398. localStringBuilder.append(i);
  1399. }
  1400. HttpUrl.pathSegmentsToString(localStringBuilder, this.encodedPathSegments);
  1401. if (this.encodedQueryNamesAndValues != null)
  1402. {
  1403. localStringBuilder.append('?');
  1404. HttpUrl.namesAndValuesToQueryString(localStringBuilder, this.encodedQueryNamesAndValues);
  1405. }
  1406. if (this.encodedFragment != null)
  1407. {
  1408. localStringBuilder.append('#');
  1409. localStringBuilder.append(this.encodedFragment);
  1410. }
  1411. return localStringBuilder.toString();
  1412. }
  1413.  
  1414. public Builder username(String paramString)
  1415. {
  1416. if (paramString != null)
  1417. {
  1418. this.encodedUsername = HttpUrl.canonicalize(paramString, " \"':;<=>@[]^`{}|/\\?#", false, false, false, true);
  1419. return this;
  1420. }
  1421. throw new NullPointerException("username == null");
  1422. }
  1423. }
  1424. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement