Ox-Proxy
Ox pulls from YouTube and Jango and NoAdRadio
Ox needs youtubedown.fast
#!/usr/bin/env bash
exec 2> /dev/null
unset -v OXEN ; # OXEN=127.0.0.1:80
if which gsed > /dev/null ; then gsed=gsed ; else gsed=sed ; fi
if which ggrep > /dev/null ; then ggrep=ggrep ; else ggrep=grep ; fi
pull=($( $gsed -b '/^\r$/q' | $ggrep -E -s -o -m 2 '(^GET /((youtube|oxen)/[-0-9a-zA-Z_]{11}|timeloop|crossdomain|(jango|noadradio)/[0-9]+)|^Range: bytes=[-0-9]+)' ))
if [[ ${pull[0]:0:1} != G ]] ; then
times > >( TIMES="$( tr \\n ' ' )" ; { echo -e -n "HTTP/1.1 302 OX Follow\r\nServer: GNU bash " ; echo -E -n "${BASH_VERSION}" ; echo -e -n "\r\nX-Runtime: " ; echo -E -n "${TIMES}" ; echo -e "\r\nConnection: close\r\nLocation: http://xdraid.noip.me/\r\nContent-Type: application/octet-stream\r\nContent-Length: 0\r\n\r" ; } > >( cat ) )
exit 0 ; fi
case ${pull[1]:1:1} in y )
if [[ ${pull[2]:0:1} == R ]] ; then r=-r ; range=${pull[3]:6} ; else r= ; range= ; fi
if [[ ${#OXEN} -ne 0 ]] ; then
curl -q -f -g -i -k -L -s $r $range http://${OXEN}/oxen/${pull[1]:9} | $gsed -b -n '/^HTTP\/1\.1 20[60] [PO]/,$ {szHTTP/1.1 206 Partial ContentzHTTP/1.1 206 OX Parcel\r\nContent-Type: audio/mp4z;szHTTP/1.1 200 OKzHTTP/1.1 200 OX\r\nContent-Type: audio/mp4z;szContent-Type: video/mp4zContent-Type: video/mp4\r\nContent-Type: audio/mp4z;p}'
exit 0
else
stringy="$( if [[ ${#BASH_SOURCE[0]} -ne 0 ]] ; then cd "$(dirname "${BASH_SOURCE[0]}")" ; else cd "$(dirname "$0")" ; fi ; perl -X ./youtubedown.fast http://youtu.be/${pull[1]:9} )"
if [[ ${#stringy} -eq 0 ]] ; then
stringy="$( if [[ ${#BASH_SOURCE[0]} -ne 0 ]] ; then cd "$(dirname "${BASH_SOURCE[0]}")" ; else cd "$(dirname "$0")" ; fi ; perl -X -mIO::Socket::INET6 ./youtubedown.fast http://youtu.be/${pull[1]:9} )"
fi
curl -q -f -g -i -k -L -s $r $range --url "${stringy}" | $gsed -b -n '/^HTTP\/1\.1 20[60] [PO]/,$ {szHTTP/1.1 206 Partial ContentzHTTP/1.1 206 OX Parcel\r\nContent-Type: audio/mp4z;szHTTP/1.1 200 OKzHTTP/1.1 200 OX\r\nContent-Type: audio/mp4z;szContent-Type: video/mp4zContent-Type: video/mp4\r\nContent-Type: audio/mp4z;p}'
exit 0
fi
;; o )
stringy="$( if [[ ${#BASH_SOURCE[0]} -ne 0 ]] ; then cd "$(dirname "${BASH_SOURCE[0]}")" ; else cd "$(dirname "$0")" ; fi ; perl -X ./youtubedown.fast http://youtu.be/${pull[1]:6} )"
if [[ ${#stringy} -eq 0 ]] ; then
stringy="$( if [[ ${#BASH_SOURCE[0]} -ne 0 ]] ; then cd "$(dirname "${BASH_SOURCE[0]}")" ; else cd "$(dirname "$0")" ; fi ; perl -X -mIO::Socket::INET6 ./youtubedown.fast http://youtu.be/${pull[1]:6} )"
fi
if [[ ${#stringy} -ne 0 ]] ; then
times > >( TIMES="$( tr \\n ' ' )" ; { echo -e -n "HTTP/1.1 302 OX Follow\r\nServer: GNU bash " ; echo -E -n "${BASH_VERSION}" ; echo -e -n "\r\nX-Runtime: " ; echo -E -n "${TIMES}" ; echo -e -n "\r\nConnection: close\r\nLocation: " ; echo -E -n "${stringy}" ; echo -e "\r\nContent-Type: application/octet-stream\r\nContent-Length: 0\r\n\r" ; } > >( cat ) )
exit 0
else
times > >( TIMES="$( tr \\n ' ' )" ; { echo -e -n "HTTP/1.1 404 OX Lost\r\nServer: GNU bash " ; echo -E -n "${BASH_VERSION}" ; echo -e -n "\r\nX-Runtime: " ; echo -E -n "${TIMES}" ; echo -e "\r\nConnection: close\r\nContent-Type: application/octet-stream\r\nContent-Length: 0\r\n\r" ; } > >( cat ) )
exit 0
fi
;; t )
times > >( TIMES="$( tr \\n ' ' )" ; { echo -e -n "HTTP/1.1 200 OX\r\nServer: GNU bash " ; echo -E -n "${BASH_VERSION}" ; echo -e -n "\r\nX-Runtime: " ; echo -E -n "${TIMES}" ; echo -e "\r\nConnection: close\r\nContent-Type: audio/mpeg\r\nContent-Duration: 1.2\r\nX-Content-Duration: 1.2\r\n\r" ; base64 -d <( echo -E -n "SUQzAgAAAAARHVRQMQAAFgBBbmRyZXcgSm9obiBIYXJkd2ljawBUQ00AACcATm9uZSAoanVzdCBkaWdpdGFsbHkgY3JlYXRlZCBzaWxlbmNlKQBUQUwAAAsAU2lsZW50IENEAFRZRQAABgAyMDAzAENPTQAAEABlbmdpVHVuUEdBUAAwAABURU4AABEAaVR1bmVzIHY3LjMuMi42AENPTQAAaABlbmdpVHVuTk9STQAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMzQgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAAQ09NAACCAGVuZ2lUdW5TTVBCACAwMDAwMDAwMCAwMDAwMDIxMCAwMDAwMDY5RiAwMDAwMDAwMDAwMDAyQjExIDAwMDAwMDAwIDAwMDAwMzBGIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwAFRUMgAADgBTaWxlbmNlIDAxIHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jEMAAAAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4xDAJwAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MQwE4AAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jEsB1AAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MQwJ0AAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jEMDEAAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4xDA6wAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MSwP8AAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4xDA/wAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MQwP8AAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jEMD/AAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4xLA/wAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jEMD/AAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4xDA/wAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MQwP8AAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jEsD/AAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MQwP8AAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jEMD/AAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4xDA/wAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MSwP8AAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4xDA/wAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+MQwP8AAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/jEMD/AAABvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" ) ; } > >( cat ) )
exit 0
;; c )
times > >( TIMES="$( tr \\n ' ' )" ; { echo -e -n "HTTP/1.1 200 OX\r\nServer: GNU bash " ; echo -E -n "${BASH_VERSION}" ; echo -e -n "\r\nX-Runtime: " ; echo -E -n "${TIMES}" ; echo -e -n "\r\nConnection: close\r\nLast-Modified: Thu, 05 November 2015 12:34:56 GMT\r\nContent-Type: text/x-cross-domain-policy\r\nContent-Length: 96\r\n\r\n<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" /></cross-domain-policy>" ; } > >( cat ) )
exit 0
;; j )
stringy="$( curl -q -f -g -k -L -s -o /dev/null -c - http://www.jango.com/stations/1/tunein?song_id=${pull[1]:7} | curl -q -f -g -k -L -s -b - http://www.jango.com/streams/info | $gsed -b 'sz"//z"http://zg' )"
;; n )
stringy="$( curl -q -f -g -k -L -s -o /dev/null -c - http://www.jango.com/stations/1/tunein?song_id=${pull[1]:11} | curl -q -f -g -k -L -s -b - http://www.jango.com/streams/info | $gsed -b 'sz"//z"http://zg' )"
;; esac
times > >( TIMES="$( tr \\n ' ' )" ; { echo -e -n "HTTP/1.1 200 OX\r\nServer: GNU bash " ; echo -E -n "${BASH_VERSION}" ; echo -e -n "\r\nX-Runtime: " ; echo -E -n "${TIMES}" ; echo -e -n "\r\nConnection: close\r\nContent-Type: application/json; charset=utf-8\r\nContent-Length: " ; echo -E -n "${#stringy}" ; echo -e "\r\n\r" ; echo -E -n "${stringy}" ; } > >( cat ) )
exit 0
#!/usr/bin/env bash
unset -v DIAGNOSTICS ; DIAGNOSTICS="-d -d"
unset -v PORT ; PORT=80
unset -v READ_BUFFER ; READ_BUFFER=,readbytes=1000000
unset -v RELAY ; # RELAY=127.0.0.0:80
unset -v RETRY_COUNT ; # RETRY_COUNT=,syncnt=1
if [[ ${#RELAY} -ne 0 ]] ; then OX=tcp:${RELAY},keepalive,linger=60,nodelay${RETRY_COUNT} ; else OX=exec:./ox-proxy.sh,nofork ; fi
if socat ${DIAGNOSTICS} -u open:/dev/null,readbytes=1 open:/dev/null,su=nobody ; then su_nobody=",su=nobody" ; else su_nobody= ; fi
( if [[ ${#BASH_SOURCE[0]} -ne 0 ]] ; then cd "$(dirname "${BASH_SOURCE[0]}")" ; else cd "$(dirname "$0")" ; fi ; socat ${DIAGNOSTICS} -T 60 tcp-l:${PORT},fork,keepalive,linger=60,nodelay${READ_BUFFER},reuseaddr${su_nobody} ${OX} )
exit 0