home *** CD-ROM | disk | FTP | other *** search
Wrap
package netscape.netcast; import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; import java.util.ResourceBundle; import java.util.StringTokenizer; import java.util.Vector; import marimba.castanet.client.CastanetChannel; import marimba.castanet.client.CastanetFile; import marimba.castanet.client.CastanetObject; import marimba.castanet.client.CastanetTransmitter; import marimba.castanet.client.CastanetWorkspace; import netscape.applet.CastanetChannelInfo; import netscape.security.PrivilegeManager; import netscape.security.Target; public class NSCastanetTunerURLStreamHandler extends URLStreamHandler { public NSCastanetTunerURLStreamHandler() { NSCastanetWorkspace.getCastanetWorkspace(); } NSTunerStringConnection status(URL url, String txname, String chname, String msg) { CastanetWorkspace ws = NSCastanetWorkspace.getCastanetWorkspace(); CastanetTransmitter transmitter = ws.getTransmitter(txname); if (transmitter != null) { CastanetChannel channel = transmitter.getChannel(chname); if (channel != null) { chname = ((CastanetObject)channel).getName(); } } return new NSTunerStringConnection(url, "<title>" + chname + "</title><h1>" + msg + "</h1>"); } protected URLConnection openConnection(URL url) throws IOException { CastanetWorkspace ws = NSCastanetWorkspace.getCastanetWorkspace(); PrivilegeManager privMgr = PrivilegeManager.getPrivilegeManager(); if (privMgr != null) { Target target = Target.findTarget("MarimbaAppContextTarget"); if (target != null) { privMgr.enablePrivilege(target); } } CastanetChannelInfo.setWorkspacePath(((CastanetObject)ws).getDirectory().getAbsolutePath()); int port = url.getPort(); if (port < 0) { port = 80; } String txname = url.getHost() + ":" + port; String path = url.getFile(); if (path.startsWith("/")) { path = path.substring(1); } String cmd = null; int qmark = path.lastIndexOf(63); if (qmark >= 0) { cmd = path.substring(qmark + 1); path = path.substring(0, qmark); } int slash = path.indexOf(47); if (slash < 0) { slash = path.length(); } String chname = path.substring(0, slash); path = path.substring(slash); if (path.length() == 0) { path = "index.html"; } else if (path.endsWith("/")) { path = path + "index.html"; } if (path.startsWith("/")) { path = path.substring(1); } if (cmd != null) { if (cmd.equals("subscribe")) { new TunerCommand(3, txname, chname); throw new NSStatusException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Subscribing Castanet channel: ") + chname); } if (cmd.equals("start")) { new TunerCommand(0, txname, chname); throw new NSStatusException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Starting Castanet channel: ") + chname); } } CastanetTransmitter transmitter = ws.getTransmitter(txname); if (transmitter == null) { throw new FileNotFoundException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Transmitter not found: '") + txname + "'"); } else { CastanetChannel channel = transmitter.getChannel(chname); if (channel == null) { throw new FileNotFoundException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Channel not found: '") + chname + "'"); } else { while(path.startsWith("/")) { path = path.substring(1); } if (cmd == null) { ((CastanetObject)channel).notify(703, path); if (path.startsWith("../")) { path = path.substring(3); slash = path.indexOf(47); chname = slash < 0 ? path : path.substring(0, slash); path = path.substring(slash + 1); channel = transmitter.getChannel(chname); if (channel == null) { throw new FileNotFoundException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Channel not found: '") + chname + "'"); } } CastanetFile file = channel.getFile(path); if (file == null) { path = path.replace('\\', '/'); if ((file = channel.getFile(path)) == null) { throw new FileNotFoundException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("File not found: '") + path + "'"); } } String mime = null; slash = path.lastIndexOf(47); int dot = path.lastIndexOf(46); if (dot > slash) { String extention = path.substring(dot + 1); mime = channel.getChannelProperty("mime.type." + extention); } return new NSTunerURLConnection(url, file, path, mime); } else if (cmd.equals("stop")) { new TunerCommand(2, txname, chname); throw new NSStatusException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Stopping Castanet channel: ") + chname); } else if (cmd.equals("update")) { new TunerCommand(5, txname, chname); throw new NSStatusException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Updating Castanet channel: ") + chname); } else if (cmd.startsWith("log=")) { cmd = cmd.substring(4); int i = cmd.indexOf(44); String logstr = i < 0 ? cmd : cmd.substring(0, i); String urlstr = i < 0 ? cmd : cmd.substring(i + 1); try { if (urlstr.startsWith("castanet:")) { url = new URL(url.getProtocol() + ":" + urlstr.substring(9)); } else if (urlstr.indexOf(58) < 0) { if (txname.endsWith(":80")) { txname = url.getHost(); } i = path.lastIndexOf(47); if (i >= 0) { urlstr = path.substring(0, i) + "/" + urlstr; } url = new URL(url.getProtocol() + "://" + txname + "/" + chname + "/" + urlstr); } else { url = new URL(urlstr); } int strlen = logstr.length(); byte[] data = new byte[strlen]; logstr.getBytes(0, strlen, data, 0); channel.appendLog(data); return url.openConnection(); } catch (MalformedURLException var18) { throw new FileNotFoundException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Malformed URL: ") + urlstr); } } else if (!cmd.startsWith("start,")) { throw new FileNotFoundException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("No such command: '") + cmd + "'"); } else { String argstr = cmd.substring(6); Vector v = new Vector(); StringTokenizer t = new StringTokenizer(argstr, ","); while(t.hasMoreTokens()) { v.addElement(t.nextToken()); } String[] argv = new String[v.size()]; v.copyInto(argv); new TunerCommand(0, txname, chname, argv); throw new NSStatusException(ResourceBundle.getBundle("netscape.netcast.NetcasterCastanetResources").getString("Starting Castanet channel: ") + chname); } } } } }