better exception handling in XmppConnection.connect. (never return without throwing exception. use finally to release wake lock. use status.server_not_found instead of status.offline when necessary
This commit is contained in:
		
							parent
							
								
									d2a4855a1e
								
							
						
					
					
						commit
						090e6ecf09
					
				|  | @ -20,6 +20,7 @@ import java.io.IOException; | ||||||
| import java.io.InputStream; | import java.io.InputStream; | ||||||
| import java.io.OutputStream; | import java.io.OutputStream; | ||||||
| import java.math.BigInteger; | import java.math.BigInteger; | ||||||
|  | import java.net.ConnectException; | ||||||
| import java.net.IDN; | import java.net.IDN; | ||||||
| import java.net.InetAddress; | import java.net.InetAddress; | ||||||
| import java.net.InetSocketAddress; | import java.net.InetSocketAddress; | ||||||
|  | @ -158,9 +159,7 @@ public class XmppConnection implements Runnable { | ||||||
| 			Bundle result = DNSHelper.getSRVRecord(account.getServer()); | 			Bundle result = DNSHelper.getSRVRecord(account.getServer()); | ||||||
| 			ArrayList<Parcelable> values = result.getParcelableArrayList("values"); | 			ArrayList<Parcelable> values = result.getParcelableArrayList("values"); | ||||||
| 			if ("timeout".equals(result.getString("error"))) { | 			if ("timeout".equals(result.getString("error"))) { | ||||||
| 				Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": dns timeout"); | 				throw new IOException("timeout in dns"); | ||||||
| 				this.changeStatus(Account.State.OFFLINE); |  | ||||||
| 				return; |  | ||||||
| 			} else if (values != null) { | 			} else if (values != null) { | ||||||
| 				int i = 0; | 				int i = 0; | ||||||
| 				boolean socketError = true; | 				boolean socketError = true; | ||||||
|  | @ -200,23 +199,13 @@ public class XmppConnection implements Runnable { | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				if (socketError) { | 				if (socketError) { | ||||||
| 					this.changeStatus(Account.State.SERVER_NOT_FOUND); | 					throw new UnknownHostException(); | ||||||
| 					if (wakeLock.isHeld()) { |  | ||||||
| 						try { |  | ||||||
| 							wakeLock.release(); |  | ||||||
| 						} catch (final RuntimeException ignored) { |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
| 					return; |  | ||||||
| 				} | 				} | ||||||
| 			} else if (result.containsKey("error") | 			} else if (result.containsKey("error") | ||||||
| 					&& "nosrv".equals(result.getString("error", null))) { | 					&& "nosrv".equals(result.getString("error", null))) { | ||||||
| 				socket = new Socket(account.getServer().getDomainpart(), 5222); | 				socket = new Socket(account.getServer().getDomainpart(), 5222); | ||||||
| 			} else { | 			} else { | ||||||
| 				Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() | 				throw new IOException("timeout in dns"); | ||||||
| 						+ ": timeout in DNS resolution"); |  | ||||||
| 				changeStatus(Account.State.OFFLINE); |  | ||||||
| 				return; |  | ||||||
| 			} | 			} | ||||||
| 			OutputStream out = socket.getOutputStream(); | 			OutputStream out = socket.getOutputStream(); | ||||||
| 			tagWriter.setOutputStream(out); | 			tagWriter.setOutputStream(out); | ||||||
|  | @ -230,9 +219,7 @@ public class XmppConnection implements Runnable { | ||||||
| 					processStream(nextTag); | 					processStream(nextTag); | ||||||
| 					break; | 					break; | ||||||
| 				} else { | 				} else { | ||||||
| 					Log.d(Config.LOGTAG, | 					throw new IOException("unknown tag on connect"); | ||||||
| 							"found unexpected tag: " + nextTag.getName()); |  | ||||||
| 					return; |  | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			if (socket.isConnected()) { | 			if (socket.isConnected()) { | ||||||
|  | @ -240,25 +227,15 @@ public class XmppConnection implements Runnable { | ||||||
| 			} | 			} | ||||||
| 		} catch (UnknownHostException e) { | 		} catch (UnknownHostException e) { | ||||||
| 			this.changeStatus(Account.State.SERVER_NOT_FOUND); | 			this.changeStatus(Account.State.SERVER_NOT_FOUND); | ||||||
| 			if (wakeLock.isHeld()) { | 		} catch (final ConnectException e) { | ||||||
| 				try { | 			this.changeStatus(Account.State.SERVER_NOT_FOUND); | ||||||
| 					wakeLock.release(); |  | ||||||
| 				} catch (final RuntimeException ignored) { |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} catch (final IOException | XmlPullParserException e) { | 		} catch (final IOException | XmlPullParserException e) { | ||||||
| 			Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage()); | 			Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage()); | ||||||
| 			this.changeStatus(Account.State.OFFLINE); | 			this.changeStatus(Account.State.OFFLINE); | ||||||
| 			if (wakeLock.isHeld()) { |  | ||||||
| 				try { |  | ||||||
| 					wakeLock.release(); |  | ||||||
| 				} catch (final RuntimeException ignored) { |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} catch (NoSuchAlgorithmException e) { | 		} catch (NoSuchAlgorithmException e) { | ||||||
| 			Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage()); | 			Log.d(Config.LOGTAG, account.getJid().toBareJid().toString() + ": " + e.getMessage()); | ||||||
| 			this.changeStatus(Account.State.OFFLINE); | 			this.changeStatus(Account.State.OFFLINE); | ||||||
| 			Log.d(Config.LOGTAG, "compression exception " + e.getMessage()); | 		} finally { | ||||||
| 			if (wakeLock.isHeld()) { | 			if (wakeLock.isHeld()) { | ||||||
| 				try { | 				try { | ||||||
| 					wakeLock.release(); | 					wakeLock.release(); | ||||||
|  | @ -266,7 +243,6 @@ public class XmppConnection implements Runnable { | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 iNPUTmice
						iNPUTmice