Open DSheirer opened 4 years ago
I am having the same problem here as well.
Wireshark: HTTP/1.1 200 OK
PUT / HTTP/1.1 Authorization: Basic obscured ice-genre: Public Accept: / ice-name: SPD ice-audio-info: samplerate=8000;quality=7;channels=1 User-Agent: sdrtrunk v0.4.0-beta.6 ice-public: 1 ice-bitrate: 16 ice-description: Police Content-Type: audio/mpeg
And the java error that is thrown
16:24:00.125 ERROR i.g.d.a.b.i.IcecastHTTPAudioBroadcaster - HTTP protocol decoder error [41MB/59MB 70%] org.apache.mina.filter.codec.ProtocolDecoderException: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 (Hexdump: 48 54 54 50 2F 31 2E 31 20 32 30 30 20 4F 4B 0D 0A 0D 0A) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:262) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:641) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1114) at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:121) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:641) at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:634) at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:539) at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$1200(AbstractPollingIoProcessor.java:68) at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1242) at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1231) at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:683) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source) Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at org.apache.mina.http.HttpClientDecoder.parseHttpReponseHead(HttpClientDecoder.java:221) at org.apache.mina.http.HttpClientDecoder.decode(HttpClientDecoder.java:108) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:253)
Not sure if this is the place to put this or not. This seems to have to do with the HTTP headers so my issue is certainly in the ballpark.
Today I tried to setup a reverse proxy of the Icecast server behind Apache2.
From various other posts on the internet, it seems this should be possible.
The issue I've run into is that the SDRTrunk Icecast client doesn't seem to be sending a "Host" header when it attempts to setup the mounts. This results in the apache proxy returning an HTTP 400 Bad Request.
The Apache logs show this: [Wed Aug 25 11:46:59.811305 2021] [core:debug] [pid 13265:tid 140322403243776] protocol.c(1445): [client 192.168.2.1:7347] AH00569: client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /regp25_worksscale
The MINA HttpClientDecoder expects that the response header will have HTTP:x.x format, but Icecast is sending HTTP/1.0 in the response header and this is causing the error message seen below.
See if you can add a response handler to take care of these HTTP/1.0 response and properly display the error message to the user.
15:57:15.859 ERROR i.g.d.a.b.i.IcecastHTTPAudioBroadcaster - HTTP protocol decoder error [68MB/169MB 40%] org.apache.mina.filter.codec.ProtocolDecoderException: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 (Hexdump: 48 54 54 50 2F 31 2E 30 20 34 30 33 20 46 6F 72 62 69 64 64 65 6E 0D 0A 53 65 72 76 65 72 3A 20 49 63 65 63 61 73 74 20 32 2E 34 2E 33 0D 0A 44 61 74 65 3A 20 54 68 75 2C 20 31 32 20 4D 61 72 20 32 30 32 30 20 32 32 3A 35 37 3A 31 35 20 47 4D 54 0D 0A 43 6F 6E 74 65 6E 74 2D 54 79 70 65 3A 20 74 65 78 74 2F 70 6C 61 69 6E 3B 20 63 68 61 72 73 65 74 3D 75 74 66 2D 38 0D 0A 43 61 63 68 65 2D 43 6F 6E 74 72 6F 6C 3A 20 6E 6F 2D 63 61 63 68 65 0D 0A 45 78 70 69 72 65 73 3A 20 4D 6F 6E 2C 20 32 36 20 4A 75 6C 20 31 39 39 37 20 30 35 3A 30 30 3A 30 30 20 47 4D 54 0D 0A 50 72 61 67 6D 61 3A 20 6E 6F 2D 63 61 63 68 65 0D 0A 41 63 63 65 73 73 2D 43 6F 6E 74 72 6F 6C 2D 41 6C 6C 6F 77 2D 4F 72 69 67 69 6E 3A 20 2A 0D 0A 0D 0A 74 6F 6F 20 6D 61 6E 79 20 73 6F 75 72 63 65 73 20 63 6F 6E 6E 65 63 74 65 64) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:262) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:641) at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:48) at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1114) at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:121) at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:641) at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:634) at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:539) at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$1200(AbstractPollingIoProcessor.java:68) at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1242) at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1231) at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:683) at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:830) Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at org.apache.mina.http.HttpClientDecoder.parseHttpReponseHead(HttpClientDecoder.java:221) at org.apache.mina.http.HttpClientDecoder.decode(HttpClientDecoder.java:108) at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:253) ... 15 common frames omitted