package mediaGate.generalFrontend.streamConnection;
import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.URI;
public class MediaGateURLConnection {
private URI localURL = null;
private Socket socket = null;
private int defaultConnectTimeout = -1;
private HTTPSocketTunnel sTunnel = null;
public MediaGateURLConnection(String url){
this(url,"",-1);
}
public MediaGateURLConnection(String url,String host, int port){
this(url,host,port,0);
}
public MediaGateURLConnection(String url,String host,int port,int timeout){
try{
readConnectionProperties();
if(port>-1){
sTunnel = new HTTPSocketTunnel(host,port,timeout);
sTunnel.connectURL(url);
} else {
localURL = new URI(url);
socket = createSocket(localURL.getHost(), localURL.getPort(), timeout);
if(!localURL.getPath().equals("")){
changeServerPath(new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))),localURL.getPath());
}
}
}catch(Exception error){
error.printStackTrace();
}
}
public BufferedInputStream getInputStream(){
try{
if(sTunnel != null){
return new BufferedInputStream(sTunnel.getInputStream());
}
if(socket != null){
return new BufferedInputStream(socket.getInputStream());
}
}catch(Exception error){}
return null;
}
public void closeConnection(){
try{
if(sTunnel != null){
sTunnel.closeServer();
} else {
socket.close();
}
}catch(Exception error){
error.printStackTrace();
}
}
private void readConnectionProperties(){
int vals[] = {0, 0};
String encs[] = { null };
vals[0] = Integer.getInteger("sun.net.client.defaultReadTimeout", 0).intValue();
vals[1] = Integer.getInteger("sun.net.client.defaultConnectTimeout", 0).intValue();
encs[0] = System.getProperty("file.encoding", "ISO8859_1");
defaultConnectTimeout = vals[1] == 0?-1:vals[1];
}
private class HTTPSocketTunnel {
private Socket sSocket = null;
private PrintWriter outputStream = null;
private HTTPSocketTunnel(String host,int port,int timeout){
try{
sSocket = createSocket(host,port,timeout);
sSocket.setSoTimeout(0);
outputStream = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sSocket.getOutputStream())));
}catch(Exception error){}
}
private void connectURL(String url){
changeServerPath(outputStream,url);
}
private InputStream getInputStream(){
try{
return sSocket.getInputStream();
}catch(Exception error){}
return null;
}
private void closeServer(){
try{
sSocket.close();
outputStream = null;
}catch(Exception error){}
}
}
private Socket createSocket(String url,int port, int timeout){
try{
Socket socket = new Socket();
if (timeout >= 0) {
socket.connect(new InetSocketAddress(url, port), timeout);
} else {
if (defaultConnectTimeout > 0) {
socket.connect(new InetSocketAddress(url, port), defaultConnectTimeout);
} else {
socket.connect(new InetSocketAddress(url, port));
}
}
return socket;
}catch(Exception error){
error.printStackTrace();
}
return null;
}
private void changeServerPath(PrintWriter out,String urlPath){
out.println("GET "+urlPath+" HTTP/1.0");
out.println();
out.flush();
}
}