Disable galLookup on error (not supported by Exchange 2007)

git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@245 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
mguessan 2008-12-23 15:20:50 +00:00
parent 441955eadc
commit 738ff861ea
1 changed files with 26 additions and 21 deletions

View File

@ -83,6 +83,8 @@ public class ExchangeSession {
private final ExchangeSessionFactory.PoolKey poolKey; private final ExchangeSessionFactory.PoolKey poolKey;
private boolean disableGalLookup = false;
ExchangeSessionFactory.PoolKey getPoolKey() { ExchangeSessionFactory.PoolKey getPoolKey() {
return poolKey; return poolKey;
} }
@ -304,7 +306,7 @@ public class ExchangeSession {
String result = null; String result = null;
// get user mail URL from html body // get user mail URL from html body
BufferedReader optionsPageReader = null; BufferedReader optionsPageReader = null;
GetMethod optionsMethod = new GetMethod(path+"?ae=Options&t=About"); GetMethod optionsMethod = new GetMethod(path + "?ae=Options&t=About");
try { try {
wdr.retrieveSessionInstance().executeMethod(optionsMethod); wdr.retrieveSessionInstance().executeMethod(optionsMethod);
optionsPageReader = new BufferedReader(new InputStreamReader(optionsMethod.getResponseBodyAsStream())); optionsPageReader = new BufferedReader(new InputStreamReader(optionsMethod.getResponseBodyAsStream()));
@ -317,7 +319,7 @@ public class ExchangeSession {
if (line != null) { if (line != null) {
int start = line.toLowerCase().indexOf(MAILBOX_BASE) + MAILBOX_BASE.length(); int start = line.toLowerCase().indexOf(MAILBOX_BASE) + MAILBOX_BASE.length();
int end = line.indexOf("<", start); int end = line.indexOf("<", start);
result = "/exchange/"+line.substring(start, end)+"/"; result = "/exchange/" + line.substring(start, end) + "/";
} }
} catch (IOException e) { } catch (IOException e) {
LOGGER.error("Error parsing options page at " + optionsMethod.getPath()); LOGGER.error("Error parsing options page at " + optionsMethod.getPath());
@ -1200,26 +1202,29 @@ public class ExchangeSession {
} }
public void galLookup(Map<String, String> person) { public void galLookup(Map<String, String> person) {
GetMethod getMethod = null; if (!disableGalLookup) {
try { GetMethod getMethod = null;
getMethod = new GetMethod(URIUtil.encodePathQuery("/public/?Cmd=gallookup&ADDR=" + person.get("EM"))); try {
int status = wdr.retrieveSessionInstance().executeMethod(getMethod); getMethod = new GetMethod(URIUtil.encodePathQuery("/public/?Cmd=gallookup&ADDR=" + person.get("EM")));
if (status != HttpStatus.SC_OK) { int status = wdr.retrieveSessionInstance().executeMethod(getMethod);
throw new IOException(status + "Unable to find users from: " + getMethod.getURI()); if (status != HttpStatus.SC_OK) {
} throw new IOException(status + "Unable to find users from: " + getMethod.getURI());
Map<String, Map<String, String>> results = XMLStreamUtil.getElementContentsAsMap(getMethod.getResponseBodyAsStream(), "person", "alias"); }
// add detailed information Map<String, Map<String, String>> results = XMLStreamUtil.getElementContentsAsMap(getMethod.getResponseBodyAsStream(), "person", "alias");
if (results.size() > 0) { // add detailed information
Map<String, String> fullperson = results.get(person.get("AN")); if (results.size() > 0) {
for (Map.Entry<String, String> entry : fullperson.entrySet()) { Map<String, String> fullperson = results.get(person.get("AN"));
person.put(entry.getKey(), entry.getValue()); for (Map.Entry<String, String> entry : fullperson.entrySet()) {
person.put(entry.getKey(), entry.getValue());
}
}
} catch (IOException e) {
LOGGER.warn("Unable to gallookup person: " + person + ", disable GalLookup");
disableGalLookup = true;
} finally {
if (getMethod != null) {
getMethod.releaseConnection();
} }
}
} catch (IOException e) {
LOGGER.warn("Unable to gallookup person: " + person);
} finally {
if (getMethod != null) {
getMethod.releaseConnection();
} }
} }
} }