home *** CD-ROM | disk | FTP | other *** search
- package java.net;
-
- class URI$Parser {
- private String input;
- private boolean requireServerAuthority;
- private int ipv6byteCount;
- // $FF: synthetic field
- final URI this$0;
-
- URI$Parser(URI var1, String var2) {
- this.this$0 = var1;
- this.requireServerAuthority = false;
- this.ipv6byteCount = 0;
- this.input = var2;
- URI.access$002(var1, var2);
- }
-
- private void fail(String var1) throws URISyntaxException {
- throw new URISyntaxException(this.input, var1);
- }
-
- private void fail(String var1, int var2) throws URISyntaxException {
- throw new URISyntaxException(this.input, var1, var2);
- }
-
- private void failExpecting(String var1, int var2) throws URISyntaxException {
- this.fail("Expected " + var1, var2);
- }
-
- private void failExpecting(String var1, String var2, int var3) throws URISyntaxException {
- this.fail("Expected " + var1 + " following " + var2, var3);
- }
-
- private String substring(int var1, int var2) {
- return this.input.substring(var1, var2);
- }
-
- private char charAt(int var1) {
- return this.input.charAt(var1);
- }
-
- // $FF: renamed from: at (int, int, char) boolean
- private boolean method_0(int var1, int var2, char var3) {
- return var1 < var2 && this.charAt(var1) == var3;
- }
-
- // $FF: renamed from: at (int, int, java.lang.String) boolean
- private boolean method_1(int var1, int var2, String var3) {
- int var4 = var1;
- int var5 = var3.length();
- if (var5 > var2 - var1) {
- return false;
- } else {
- int var6;
- for(var6 = 0; var6 < var5 && this.charAt(var4++) == var3.charAt(var6); ++var6) {
- }
-
- return var6 == var5;
- }
- }
-
- private int scan(int var1, int var2, char var3) {
- return var1 < var2 && this.charAt(var1) == var3 ? var1 + 1 : var1;
- }
-
- private int scan(int var1, int var2, String var3, String var4) {
- int var5;
- for(var5 = var1; var5 < var2; ++var5) {
- char var6 = this.charAt(var5);
- if (var3.indexOf(var6) >= 0) {
- return -1;
- }
-
- if (var4.indexOf(var6) >= 0) {
- break;
- }
- }
-
- return var5;
- }
-
- private int scanEscape(int var1, int var2, char var3) throws URISyntaxException {
- if (var3 == '%') {
- if (var1 + 3 <= var2 && URI.access$300(this.charAt(var1 + 1), URI.access$100(), URI.access$200()) && URI.access$300(this.charAt(var1 + 2), URI.access$100(), URI.access$200())) {
- return var1 + 3;
- }
-
- this.fail("Malformed escape pair", var1);
- } else if (var3 > 128 && !Character.isSpaceChar(var3) && !Character.isISOControl(var3)) {
- return var1 + 1;
- }
-
- return var1;
- }
-
- private int scan(int var1, int var2, long var3, long var5) throws URISyntaxException {
- int var7 = var1;
-
- while(var7 < var2) {
- char var8 = this.charAt(var7);
- if (URI.access$300(var8, var3, var5)) {
- ++var7;
- } else {
- if ((var3 & 1L) == 0L) {
- break;
- }
-
- int var9 = this.scanEscape(var7, var2, var8);
- if (var9 <= var7) {
- break;
- }
-
- var7 = var9;
- }
- }
-
- return var7;
- }
-
- private void checkChars(int var1, int var2, long var3, long var5, String var7) throws URISyntaxException {
- int var8 = this.scan(var1, var2, var3, var5);
- if (var8 < var2) {
- this.fail("Illegal character in " + var7, var8);
- }
-
- }
-
- private void checkChar(int var1, long var2, long var4, String var6) throws URISyntaxException {
- this.checkChars(var1, var1 + 1, var2, var4, var6);
- }
-
- void parse(boolean var1) throws URISyntaxException {
- this.requireServerAuthority = var1;
- int var3 = this.input.length();
- int var4 = this.scan(0, var3, "/?#", ":");
- int var2;
- if (var4 >= 0 && this.method_0(var4, var3, ':')) {
- if (var4 == 0) {
- this.failExpecting("scheme name", 0);
- }
-
- this.checkChar(0, 0L, URI.access$400(), "scheme name");
- this.checkChars(1, var4, URI.access$500(), URI.access$600(), "scheme name");
- URI.access$702(this.this$0, this.substring(0, var4));
- ++var4;
- var2 = var4;
- if (this.method_0(var4, var3, '/')) {
- var4 = this.parseHierarchical(var4, var3);
- } else {
- int var5 = this.scan(var4, var3, "", "#");
- if (var5 <= var4) {
- this.failExpecting("scheme-specific part", var4);
- }
-
- this.checkChars(var4, var5, URI.access$800(), URI.access$900(), "opaque part");
- var4 = var5;
- }
- } else {
- var2 = 0;
- var4 = this.parseHierarchical(0, var3);
- }
-
- URI.access$1002(this.this$0, this.substring(var2, var4));
- if (this.method_0(var4, var3, '#')) {
- this.checkChars(var4 + 1, var3, URI.access$800(), URI.access$900(), "fragment");
- URI.access$1102(this.this$0, this.substring(var4 + 1, var3));
- var4 = var3;
- }
-
- if (var4 < var3) {
- this.fail("end of URI", var4);
- }
-
- }
-
- private int parseHierarchical(int var1, int var2) throws URISyntaxException {
- int var3 = var1;
- if (this.method_0(var1, var2, '/') && this.method_0(var1 + 1, var2, '/')) {
- var3 = var1 + 2;
- int var4 = this.scan(var3, var2, "", "/?#");
- if (var4 > var3) {
- var3 = this.parseAuthority(var3, var4);
- } else if (var4 >= var2) {
- this.failExpecting("authority", var3);
- }
- }
-
- int var7 = this.scan(var3, var2, "", "?#");
- this.checkChars(var3, var7, URI.access$1200(), URI.access$1300(), "path");
- URI.access$1402(this.this$0, this.substring(var3, var7));
- var3 = var7;
- if (this.method_0(var7, var2, '?')) {
- var3 = var7 + 1;
- var7 = this.scan(var3, var2, "", "#");
- this.checkChars(var3, var7, URI.access$800(), URI.access$900(), "query");
- URI.access$1502(this.this$0, this.substring(var3, var7));
- var3 = var7;
- }
-
- return var3;
- }
-
- private int parseAuthority(int var1, int var2) throws URISyntaxException {
- int var3 = var1;
- int var4 = var1;
- URISyntaxException var5 = null;
- boolean var6;
- if (this.scan(var1, var2, "", "]") > var1) {
- var6 = this.scan(var1, var2, URI.access$1600(), URI.access$1700()) == var2;
- } else {
- var6 = this.scan(var1, var2, URI.access$1800(), URI.access$1900()) == var2;
- }
-
- boolean var7 = this.scan(var1, var2, URI.access$2000(), URI.access$2100()) == var2;
- if (var7 && !var6) {
- URI.access$2202(this.this$0, this.substring(var1, var2));
- return var2;
- } else {
- if (var6) {
- try {
- var4 = this.parseServer(var3, var2);
- if (var4 < var2) {
- this.failExpecting("end of authority", var4);
- }
-
- URI.access$2202(this.this$0, this.substring(var3, var2));
- } catch (URISyntaxException var9) {
- URI.access$2302(this.this$0, (String)null);
- URI.access$2402(this.this$0, (String)null);
- URI.access$2502(this.this$0, -1);
- if (this.requireServerAuthority) {
- throw var9;
- }
-
- var5 = var9;
- var4 = var1;
- }
- }
-
- if (var4 < var2) {
- if (var7) {
- URI.access$2202(this.this$0, this.substring(var1, var2));
- } else {
- if (var5 != null) {
- throw var5;
- }
-
- this.fail("Illegal character in authority", var4);
- }
- }
-
- return var2;
- }
- }
-
- private int parseServer(int var1, int var2) throws URISyntaxException {
- int var3 = var1;
- int var4 = this.scan(var1, var2, "/?#", "@");
- if (var4 >= var1 && this.method_0(var4, var2, '@')) {
- this.checkChars(var1, var4, URI.access$2600(), URI.access$2700(), "user info");
- URI.access$2302(this.this$0, this.substring(var1, var4));
- var3 = var4 + 1;
- }
-
- if (this.method_0(var3, var2, '[')) {
- ++var3;
- var4 = this.scan(var3, var2, "/?#", "]");
- if (var4 > var3 && this.method_0(var4, var2, ']')) {
- int var5 = this.scan(var3, var4, "", "%");
- if (var5 > var3) {
- this.parseIPv6Reference(var3, var5);
- if (var5 + 1 == var4) {
- this.fail("scope id expected");
- }
-
- this.checkChars(var5 + 1, var4, URI.access$2800(), URI.access$2900(), "scope id");
- } else {
- this.parseIPv6Reference(var3, var4);
- }
-
- URI.access$2402(this.this$0, this.substring(var3 - 1, var4 + 1));
- var3 = var4 + 1;
- } else {
- this.failExpecting("closing bracket for IPv6 address", var4);
- }
- } else {
- var4 = this.parseIPv4Address(var3, var2);
- if (var4 <= var3) {
- var4 = this.parseHostname(var3, var2);
- }
-
- var3 = var4;
- }
-
- if (this.method_0(var3, var2, ':')) {
- ++var3;
- var4 = this.scan(var3, var2, "", "/");
- if (var4 > var3) {
- this.checkChars(var3, var4, URI.access$3000(), 0L, "port number");
-
- try {
- URI.access$2502(this.this$0, Integer.parseInt(this.substring(var3, var4)));
- } catch (NumberFormatException var6) {
- this.fail("Malformed port number", var3);
- }
-
- var3 = var4;
- }
- }
-
- if (var3 < var2) {
- this.failExpecting("port number", var3);
- }
-
- return var3;
- }
-
- private int scanByte(int var1, int var2) throws URISyntaxException {
- int var4 = this.scan(var1, var2, URI.access$3000(), 0L);
- if (var4 <= var1) {
- return var4;
- } else {
- return Integer.parseInt(this.substring(var1, var4)) > 255 ? var1 : var4;
- }
- }
-
- private int scanIPv4Address(int var1, int var2, boolean var3) throws URISyntaxException {
- int var6 = this.scan(var1, var2, URI.access$3000() | URI.access$3100(), 0L | URI.access$3200());
- if (var6 > var1 && (!var3 || var6 == var2)) {
- int var5;
- if ((var5 = this.scanByte(var1, var6)) > var1) {
- int var4 = var5;
- if ((var5 = this.scan(var5, var6, '.')) > var4) {
- var4 = var5;
- if ((var5 = this.scanByte(var5, var6)) > var4) {
- var4 = var5;
- if ((var5 = this.scan(var5, var6, '.')) > var4) {
- var4 = var5;
- if ((var5 = this.scanByte(var5, var6)) > var4) {
- var4 = var5;
- if ((var5 = this.scan(var5, var6, '.')) > var4) {
- var4 = var5;
- if ((var5 = this.scanByte(var5, var6)) > var4 && var5 >= var6) {
- return var5;
- }
- }
- }
- }
- }
- }
- }
-
- this.fail("Malformed IPv4 address", var5);
- return -1;
- } else {
- return -1;
- }
- }
-
- private int takeIPv4Address(int var1, int var2, String var3) throws URISyntaxException {
- int var4 = this.scanIPv4Address(var1, var2, true);
- if (var4 <= var1) {
- this.failExpecting(var3, var1);
- }
-
- return var4;
- }
-
- private int parseIPv4Address(int var1, int var2) {
- int var3;
- try {
- var3 = this.scanIPv4Address(var1, var2, false);
- } catch (URISyntaxException var5) {
- return -1;
- } catch (NumberFormatException var6) {
- return -1;
- }
-
- if (var3 > var1 && var3 < var2 && this.charAt(var3) != ':') {
- var3 = -1;
- }
-
- if (var3 > var1) {
- URI.access$2402(this.this$0, this.substring(var1, var3));
- }
-
- return var3;
- }
-
- private int parseHostname(int var1, int var2) throws URISyntaxException {
- int var3 = var1;
- int var5 = -1;
-
- int var7;
- do {
- var7 = this.scan(var3, var2, URI.access$2800(), URI.access$2900());
- if (var7 <= var3) {
- break;
- }
-
- var5 = var3;
- if (var7 > var3) {
- var3 = var7;
- var7 = this.scan(var7, var2, URI.access$2800() | URI.access$3300(), URI.access$2900() | URI.access$3400());
- if (var7 > var3) {
- if (this.charAt(var7 - 1) == '-') {
- this.fail("Illegal character in hostname", var7 - 1);
- }
-
- var3 = var7;
- }
- }
-
- var7 = this.scan(var3, var2, '.');
- if (var7 <= var3) {
- break;
- }
-
- var3 = var7;
- } while(var7 < var2);
-
- if (var3 < var2 && !this.method_0(var3, var2, ':')) {
- this.fail("Illegal character in hostname", var3);
- }
-
- if (var5 < 0) {
- this.failExpecting("hostname", var1);
- }
-
- if (var5 > var1 && !URI.access$300(this.charAt(var5), 0L, URI.access$400())) {
- this.fail("Illegal character in hostname", var5);
- }
-
- URI.access$2402(this.this$0, this.substring(var1, var3));
- return var3;
- }
-
- private int parseIPv6Reference(int var1, int var2) throws URISyntaxException {
- int var3 = var1;
- boolean var5 = false;
- int var4 = this.scanHexSeq(var1, var2);
- if (var4 > var1) {
- var3 = var4;
- if (this.method_1(var4, var2, "::")) {
- var5 = true;
- var3 = this.scanHexPost(var4 + 2, var2);
- } else if (this.method_0(var4, var2, ':')) {
- var3 = this.takeIPv4Address(var4 + 1, var2, "IPv4 address");
- this.ipv6byteCount += 4;
- }
- } else if (this.method_1(var1, var2, "::")) {
- var5 = true;
- var3 = this.scanHexPost(var1 + 2, var2);
- }
-
- if (var3 < var2) {
- this.fail("Malformed IPv6 address", var1);
- }
-
- if (this.ipv6byteCount > 16) {
- this.fail("IPv6 address too long", var1);
- }
-
- if (!var5 && this.ipv6byteCount < 16) {
- this.fail("IPv6 address too short", var1);
- }
-
- if (var5 && this.ipv6byteCount == 16) {
- this.fail("Malformed IPv6 address", var1);
- }
-
- return var3;
- }
-
- private int scanHexPost(int var1, int var2) throws URISyntaxException {
- if (var1 == var2) {
- return var1;
- } else {
- int var4 = this.scanHexSeq(var1, var2);
- int var3;
- if (var4 > var1) {
- var3 = var4;
- if (this.method_0(var4, var2, ':')) {
- var3 = var4 + 1;
- var3 = this.takeIPv4Address(var3, var2, "hex digits or IPv4 address");
- this.ipv6byteCount += 4;
- }
- } else {
- var3 = this.takeIPv4Address(var1, var2, "hex digits or IPv4 address");
- this.ipv6byteCount += 4;
- }
-
- return var3;
- }
- }
-
- private int scanHexSeq(int var1, int var2) throws URISyntaxException {
- int var4 = this.scan(var1, var2, URI.access$100(), URI.access$200());
- if (var4 <= var1) {
- return -1;
- } else if (this.method_0(var4, var2, '.')) {
- return -1;
- } else {
- if (var4 > var1 + 4) {
- this.fail("IPv6 hexadecimal digit sequence too long", var1);
- }
-
- this.ipv6byteCount += 2;
-
- int var3;
- for(var3 = var4; var3 < var2 && this.method_0(var3, var2, ':') && !this.method_0(var3 + 1, var2, ':'); var3 = var4) {
- ++var3;
- var4 = this.scan(var3, var2, URI.access$100(), URI.access$200());
- if (var4 <= var3) {
- this.failExpecting("digits for an IPv6 address", var3);
- }
-
- if (this.method_0(var4, var2, '.')) {
- --var3;
- break;
- }
-
- if (var4 > var3 + 4) {
- this.fail("IPv6 hexadecimal digit sequence too long", var3);
- }
-
- this.ipv6byteCount += 2;
- }
-
- return var3;
- }
- }
- }
-