fixed parsing of unescaped jids with @ in local part
This commit is contained in:
parent
0aee863123
commit
7a21b2c5ed
|
@ -7,10 +7,21 @@ import org.jxmpp.jid.parts.Resourcepart;
|
||||||
import org.jxmpp.stringprep.XmppStringprepException;
|
import org.jxmpp.stringprep.XmppStringprepException;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public interface Jid extends Comparable<Jid>, Serializable, CharSequence {
|
public interface Jid extends Comparable<Jid>, Serializable, CharSequence {
|
||||||
|
|
||||||
|
Pattern JID = Pattern.compile("^((.*?)@)?([^/@]+)(/(.*))?$");
|
||||||
|
|
||||||
static Jid of(CharSequence local, CharSequence domain, CharSequence resource) {
|
static Jid of(CharSequence local, CharSequence domain, CharSequence resource) {
|
||||||
|
if (local == null) {
|
||||||
|
if (resource == null) {
|
||||||
|
return ofDomain(domain);
|
||||||
|
} else {
|
||||||
|
return ofDomainAndResource(domain, resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (resource == null) {
|
if (resource == null) {
|
||||||
return ofLocalAndDomain(local, domain);
|
return ofLocalAndDomain(local, domain);
|
||||||
}
|
}
|
||||||
|
@ -67,6 +78,18 @@ public interface Jid extends Comparable<Jid>, Serializable, CharSequence {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Jid ofDomainAndResource(CharSequence domain, CharSequence resource) {
|
||||||
|
try {
|
||||||
|
return new WrappedJid(
|
||||||
|
JidCreate.domainFullFrom(
|
||||||
|
Domainpart.from(domain.toString()),
|
||||||
|
Resourcepart.from(resource.toString())
|
||||||
|
));
|
||||||
|
} catch (XmppStringprepException e) {
|
||||||
|
throw new IllegalArgumentException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Jid ofLocalAndDomainEscaped(CharSequence local, CharSequence domain) {
|
static Jid ofLocalAndDomainEscaped(CharSequence local, CharSequence domain) {
|
||||||
try {
|
try {
|
||||||
return new WrappedJid(
|
return new WrappedJid(
|
||||||
|
@ -84,10 +107,11 @@ public interface Jid extends Comparable<Jid>, Serializable, CharSequence {
|
||||||
if (jid instanceof Jid) {
|
if (jid instanceof Jid) {
|
||||||
return (Jid) jid;
|
return (Jid) jid;
|
||||||
}
|
}
|
||||||
try {
|
Matcher matcher = JID.matcher(jid);
|
||||||
return new WrappedJid(JidCreate.fromUnescaped(jid));
|
if (matcher.matches()) {
|
||||||
} catch (XmppStringprepException e) {
|
return of(matcher.group(2), matcher.group(3), matcher.group(5));
|
||||||
throw new IllegalArgumentException(e);
|
} else {
|
||||||
|
throw new IllegalArgumentException("Could not parse JID: " + jid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue