diff --git a/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java b/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java index f6d7c783..846bd92c 100644 --- a/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java +++ b/src/audio/broadcast/icecast/IcecastTCPAudioBroadcaster.java @@ -240,19 +240,38 @@ public class IcecastTCPAudioBroadcaster extends IcecastAudioBroadcaster @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { - if(cause instanceof IOException && ((IOException) cause).getMessage().startsWith("Connection reset")) + if(cause instanceof IOException) { - IOException ioe = (IOException) cause; + IOException ioe = (IOException)cause; - if(ioe.getMessage() != null && ioe.getMessage().startsWith("Connection reset")) + if(ioe.getMessage() != null) { - mLog.info("Streaming connection reset by remote server - reestablishing connection"); - disconnect(); - connect(); + String reason = ioe.getMessage(); + + if(reason.startsWith("Connection reset")) + { + mLog.info("Streaming connection reset by remote server - reestablishing connection"); + disconnect(); + connect(); + } + else if(reason.startsWith("Operation timed out")) + { + mLog.info("Streaming connection timed out - resetting connection"); + disconnect(); + connect(); + } + else + { + setBroadcastState(BroadcastState.ERROR); + disconnect(); + mLog.error("Unrecognized IO error: " + reason + ". Streaming halted."); + } } else { - mLog.error("IO Exception", ioe); + setBroadcastState(BroadcastState.ERROR); + disconnect(); + mLog.error("Unspecified IO error - streaming halted."); } } else diff --git a/src/audio/broadcast/shoutcast/v1/ShoutcastV1AudioBroadcaster.java b/src/audio/broadcast/shoutcast/v1/ShoutcastV1AudioBroadcaster.java index 637a721e..3bc83071 100644 --- a/src/audio/broadcast/shoutcast/v1/ShoutcastV1AudioBroadcaster.java +++ b/src/audio/broadcast/shoutcast/v1/ShoutcastV1AudioBroadcaster.java @@ -241,19 +241,38 @@ public class ShoutcastV1AudioBroadcaster extends AudioBroadcaster @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { - if(cause instanceof IOException && ((IOException) cause).getMessage().startsWith("Connection reset")) + if(cause instanceof IOException) { - IOException ioe = (IOException) cause; + IOException ioe = (IOException)cause; - if(ioe.getMessage() != null && ioe.getMessage().startsWith("Connection reset")) + if(ioe.getMessage() != null) { - mLog.info("Streaming connection reset by remote server - reestablishing connection"); - disconnect(); - connect(); + String reason = ioe.getMessage(); + + if(reason.startsWith("Connection reset")) + { + mLog.info("Streaming connection reset by remote server - reestablishing connection"); + disconnect(); + connect(); + } + else if(reason.startsWith("Operation timed out")) + { + mLog.info("Streaming connection timed out - resetting connection"); + disconnect(); + connect(); + } + else + { + setBroadcastState(BroadcastState.ERROR); + disconnect(); + mLog.error("Unrecognized IO error: " + reason + ". Streaming halted."); + } } else { - mLog.error("IO Exception", ioe); + setBroadcastState(BroadcastState.ERROR); + disconnect(); + mLog.error("Unspecified IO error - streaming halted."); } } else diff --git a/src/audio/broadcast/shoutcast/v2/ShoutcastV2AudioBroadcaster.java b/src/audio/broadcast/shoutcast/v2/ShoutcastV2AudioBroadcaster.java index 95e2c6c1..786f6728 100644 --- a/src/audio/broadcast/shoutcast/v2/ShoutcastV2AudioBroadcaster.java +++ b/src/audio/broadcast/shoutcast/v2/ShoutcastV2AudioBroadcaster.java @@ -356,19 +356,38 @@ public class ShoutcastV2AudioBroadcaster extends AudioBroadcaster implements IBr @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { - if(cause instanceof IOException && ((IOException) cause).getMessage().startsWith("Connection reset")) + if(cause instanceof IOException) { - IOException ioe = (IOException) cause; + IOException ioe = (IOException)cause; - if(ioe.getMessage() != null && ioe.getMessage().startsWith("Connection reset")) + if(ioe.getMessage() != null) { - mLog.info("Streaming connection reset by remote server - reestablishing connection"); - disconnect(); - connect(); + String reason = ioe.getMessage(); + + if(reason.startsWith("Connection reset")) + { + mLog.info("Streaming connection reset by remote server - reestablishing connection"); + disconnect(); + connect(); + } + else if(reason.startsWith("Operation timed out")) + { + mLog.info("Streaming connection timed out - resetting connection"); + disconnect(); + connect(); + } + else + { + setBroadcastState(BroadcastState.ERROR); + disconnect(); + mLog.error("Unrecognized IO error: " + reason + ". Streaming halted."); + } } else { - mLog.error("IO Exception", ioe); + setBroadcastState(BroadcastState.ERROR); + disconnect(); + mLog.error("Unspecified IO error - streaming halted."); } } else