home *** CD-ROM | disk | FTP | other *** search
- package netscape.netcast.application;
-
- import java.io.InputStream;
- import java.net.URL;
- import java.util.Hashtable;
- import java.util.Vector;
- import netscape.net.Cache;
- import netscape.net.CacheRequest;
- import netscape.palomar.htmllite.LiteParser;
- import netscape.palomar.sgml.SGMLAttribute;
- import netscape.palomar.sgml.SGMLElement;
- import netscape.palomar.sgml.SGMLTag;
- import netscape.palomar.sgml.SGMLTagImpl;
- import netscape.palomar.util.TreeEnumeration;
-
- class PageScan {
- private URL url;
- private URL site;
- private URL baseURL;
- boolean baseURLExists;
- boolean inSiteSpecified;
- private Vector images = new Vector();
- private Vector links = new Vector();
- private Vector resources = new Vector();
- private Vector frames = new Vector();
- private Vector layers = new Vector();
- private String lastModified;
- private int linkStatus;
- private static final int HREF = 1;
- private static final int FRAME = 2;
- private static final int LAYER = 3;
-
- public PageScan(URL var1, URL var2, boolean var3) {
- this.url = var2;
- this.site = var1;
- this.baseURL = var2;
- this.baseURLExists = false;
- this.inSiteSpecified = var3;
- this.lastModified = null;
- this.linkStatus = 1;
- }
-
- public Vector getLinks() {
- return this.links;
- }
-
- public Vector getImages() {
- return this.images;
- }
-
- public Vector getResources() {
- return this.resources;
- }
-
- public Vector getFrames() {
- return this.frames;
- }
-
- public Vector getLayers() {
- return this.layers;
- }
-
- public String getLastModified() {
- return this.lastModified;
- }
-
- public int getLinkStatus() {
- return this.linkStatus;
- }
-
- public void setLinkStatus(int var1) {
- this.linkStatus = var1;
- }
-
- private String getName() {
- return this.url.toString();
- }
-
- private static boolean inSite(URL var0, String var1) {
- try {
- String var2 = var0.getHost();
- URL var3 = new URL(var1);
- String var4 = var3.getHost();
- String var5 = "";
- String var6 = "";
- int var7 = var4.toLowerCase().indexOf(var2.toLowerCase());
- if (var7 >= 0) {
- return true;
- } else {
- var7 = var2.toLowerCase().indexOf(var4.toLowerCase());
- if (var7 >= 0) {
- return true;
- } else {
- int var8 = var2.indexOf(46);
- int var9 = var4.indexOf(46);
- if (var8 >= 0) {
- var5 = var2.substring(var8);
- if (var9 >= 0) {
- var6 = var4.substring(var9);
- return var5.equalsIgnoreCase(var6);
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- }
- } catch (Exception var10) {
- HTMLCrawler.printException(var10, "PageScan.Insite");
- return false;
- }
- }
-
- public void fetchInfo(Cache var1, Hashtable var2, int var3, HTMLCrawler var4) {
- try {
- String var6 = this.url.toString();
- CacheRequest var7 = new CacheRequest(var6);
- InputStream var5 = var1.getInputStream(var7);
- String var8 = var7.getLocation();
- if (var8 != null && !var8.equals(var6)) {
- URL var9 = new URL(var8);
- this.url = var9;
- this.baseURL = this.url;
- }
-
- this.lastModified = var7.getLastModified();
-
- try {
- int var18 = Integer.parseInt(var7.getContentLength());
- int var10 = var4.getTotalContentLength();
- var4.setTotalContentLength(var10 + var18);
- var10 = var4.getTotalContentLength();
- if (var10 > var3) {
- var4.setTotalContentLength(var10 - var18);
- var4.isURLRemoved = true;
- if (var5 != null) {
- var4.closeInputStream(var5);
- }
-
- return;
- }
- } catch (Exception var16) {
- HTMLCrawler.printException(var16, "PageScan.fetchInfo.cacheRequest");
- }
-
- String var19 = var7.getContentType();
- if (var5 != null) {
- if (var19 == null) {
- var4.closeInputStream(var5);
- } else if (var19.indexOf("text/html") < 0) {
- var4.closeInputStream(var5);
- } else {
- SGMLTag var21 = LiteParser.getParser().parseStream(var5);
- var4.closeInputStream(var5);
- if (var21 != null) {
- TreeEnumeration var11 = new TreeEnumeration(var21);
- if (var11 != null) {
- while(var11.hasMoreElements()) {
- SGMLElement var12 = (SGMLElement)var11.nextElement();
- if (var12 instanceof SGMLTag) {
- SGMLTagImpl var13 = (SGMLTagImpl)var12;
-
- try {
- if ("A".equals(var13.getTagType())) {
- this.processTagA(var13);
- } else if ("AREA".equals(var13.getTagType())) {
- this.processTagAREA(var13);
- } else if ("BASE".equals(var13.getTagType())) {
- this.processTagBASE(var13);
- } else if ("IMG".equals(var13.getTagType())) {
- this.processTagIMG(var13);
- } else if ("FRAME".equals(var13.getTagType())) {
- this.processTagFRAME(var13);
- } else if ("LAYER".equals(var13.getTagType())) {
- this.processTagLAYER(var13);
- } else if ("SCRIPT".equals(var13.getTagType())) {
- this.processTagSCRIPT(var13, var1, var2, var4, var3);
- } else if ("EMBED".equals(var13.getTagType())) {
- this.processTagEMBED(var13);
- } else if ("APPLET".equals(var13.getTagType())) {
- this.processTagAPPLET(var13);
- } else if ("META".equals(var13.getTagType())) {
- this.processTagMETA(var13);
- } else if ("LINK".equals(var13.getTagType())) {
- this.processTagLINK(var13, var1, var2, var4, var3);
- } else if ("STYLE".equals(var13.getTagType())) {
- this.processTagSTYLE(var13, var1, var2, var4, var3);
- } else if ("BODY".equals(var13.getTagType())) {
- this.processTagBODY(var13);
- }
- } catch (Exception var15) {
- HTMLCrawler.printException(var15, "Scanning the page");
- }
- }
- }
-
- }
- }
- }
- }
- } catch (Exception var17) {
- HTMLCrawler.printException(var17, "PageScan.fetchInfo");
- var4.isSiteValid = false;
- }
- }
-
- private void insertImage(String var1) {
- try {
- if (!this.inSiteSpecified || inSite(this.site, var1)) {
- this.images.addElement(var1);
- }
- } catch (Exception var3) {
- HTMLCrawler.printException(var3, "PageScan.insertImage");
- }
- }
-
- private void insertResource(String var1) {
- try {
- if (!this.inSiteSpecified || inSite(this.site, var1)) {
- this.resources.addElement(var1);
- }
- } catch (Exception var3) {
- HTMLCrawler.printException(var3, "PageScan.insertResource");
- }
- }
-
- private void insertURL(String var1, int var2) {
- try {
- if (var2 == 1) {
- this.links.addElement(var1);
- return;
- }
-
- if (var2 == 2) {
- this.frames.addElement(var1);
- return;
- }
-
- if (var2 == 3) {
- this.layers.addElement(var1);
- return;
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.insertURL");
- }
-
- }
-
- private void processTagA(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("HREF");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null) {
- if (this.baseURLExists) {
- this.processAttributeURL(this.baseURL, var3, 1);
- return;
- }
-
- this.processAttributeURL(this.url, var3, 1);
- return;
- }
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.processTagA");
- }
-
- }
-
- private void processTagAREA(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("HREF");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null) {
- if (this.baseURLExists) {
- this.processAttributeURL(this.baseURL, var3, 1);
- return;
- }
-
- this.processAttributeURL(this.url, var3, 1);
- return;
- }
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.processTagAREA");
- }
-
- }
-
- private void processTagBASE(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("HREF");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null) {
- this.baseURL = new URL(var3);
- this.baseURLExists = true;
- return;
- }
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.processTagBASE");
- }
-
- }
-
- private void processTagIMG(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("SRC");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null) {
- if (this.baseURLExists) {
- this.processAttributeInsertImage(this.baseURL, var3);
- return;
- }
-
- this.processAttributeInsertImage(this.url, var3);
- return;
- }
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.processTagIMG");
- }
-
- }
-
- private void processTagFRAME(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("SRC");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null) {
- if (this.baseURLExists) {
- this.processAttributeURL(this.baseURL, var3, 2);
- return;
- }
-
- this.processAttributeURL(this.url, var3, 2);
- return;
- }
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.processTagFRAME");
- }
-
- }
-
- private void processTagLAYER(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("SRC");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null) {
- if (this.baseURLExists) {
- this.processAttributeURL(this.baseURL, var3, 3);
- } else {
- this.processAttributeURL(this.url, var3, 3);
- }
- }
- }
-
- var2 = var1.getAttribute("BACKGROUND");
- if (var2 != null) {
- String var6 = var2.getUnicode();
- if (var6 != null) {
- if (this.baseURLExists) {
- this.processAttributeInsertImage(this.baseURL, var6);
- return;
- }
-
- this.processAttributeInsertImage(this.url, var6);
- return;
- }
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.processTagLAYER");
- }
-
- }
-
- private void processTagSCRIPT(SGMLTagImpl var1, Cache var2, Hashtable var3, HTMLCrawler var4, int var5) {
- try {
- SGMLAttribute var6 = var1.getAttribute("ARCHIVE");
- if (var6 != null) {
- String var7 = var6.getUnicode();
- if (var7 != null) {
- if (this.baseURLExists) {
- this.processAttributeInsertResource(this.baseURL, var7);
- } else {
- this.processAttributeInsertResource(this.url, var7);
- }
- }
- }
-
- var6 = var1.getAttribute("SRC");
- if (var6 != null) {
- String var18 = var6.getUnicode();
- if (var18 != null) {
- Object var8 = null;
- String var9 = "";
- URL var19;
- if (this.baseURLExists) {
- var19 = new URL(this.baseURL, var18);
- var9 = var19.toString();
- } else {
- var19 = new URL(this.url, var18);
- var9 = var19.toString();
- }
-
- CacheRequest var10 = new CacheRequest(var9);
- var10.setMimeTypeHint("application/x-javascript");
- InputStream var11 = var2.getInputStream(var10);
- String var12 = var10.getLastModified();
-
- try {
- int var13 = Integer.parseInt(var10.getContentLength());
- int var14 = var4.getTotalContentLength();
- var4.setTotalContentLength(var14 + var13);
- var14 = var4.getTotalContentLength();
- if (var14 > var5) {
- var4.setTotalContentLength(var14 - var13);
- var4.isURLRemoved = true;
- var4.closeInputStream(var11);
- return;
- }
-
- var4.readAllInputStream(var11);
- var4.closeInputStream(var11);
- } catch (Exception var15) {
- HTMLCrawler.printException(var15, "PageScan.processTagScript.cacheRequest");
- }
-
- LinkObject var21 = new LinkObject(var19, var12, this.linkStatus);
- var3.put(var9, var21);
- return;
- }
- }
- } catch (Exception var16) {
- HTMLCrawler.printException(var16, "PageScan.processTagSCRIPT");
- }
-
- }
-
- private void processTagEMBED(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("SRC");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null) {
- if (this.baseURLExists) {
- this.processAttributeInsertResource(this.baseURL, var3);
- return;
- }
-
- this.processAttributeInsertResource(this.url, var3);
- return;
- }
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.processTagEMBED");
- }
-
- }
-
- private void processTagAPPLET(SGMLTagImpl var1) {
- try {
- URL var2 = this.url;
- boolean var3 = false;
- SGMLAttribute var4 = var1.getAttribute("CODEBASE");
- if (var4 != null) {
- String var5 = var4.getUnicode();
- if (var5 != null) {
- var3 = true;
- if (var5.indexOf("://") >= 0) {
- var2 = new URL(var5);
- } else {
- String var6 = var5.concat("/");
- if (this.baseURLExists) {
- var2 = new URL(this.baseURL, var6);
- } else {
- var2 = new URL(this.url, var6);
- }
- }
- }
- }
-
- var4 = var1.getAttribute("ARCHIVE");
- if (var4 != null) {
- String var10 = var4.getUnicode();
- if (var10 != null) {
- if (var3) {
- this.processAttributeInsertResource(var2, var10);
- } else if (this.baseURLExists) {
- this.processAttributeInsertResource(this.baseURL, var10);
- } else {
- this.processAttributeInsertResource(this.url, var10);
- }
- }
- }
-
- var4 = var1.getAttribute("CODE");
- if (var4 != null) {
- String var11 = var4.getUnicode();
- if (var11 != null) {
- if (var3) {
- this.processAttributeInsertResource(var2, var11);
- return;
- }
-
- if (this.baseURLExists) {
- this.processAttributeInsertResource(this.baseURL, var11);
- return;
- }
-
- this.processAttributeInsertResource(this.url, var11);
- return;
- }
- }
- } catch (Exception var7) {
- HTMLCrawler.printException(var7, "PageScan.processTagAPPLET");
- }
-
- }
-
- private void processTagMETA(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("HTTP-EQUIV");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null && "refresh".equalsIgnoreCase(var3)) {
- SGMLAttribute var4 = var1.getAttribute("CONTENT");
- if (var4 != null) {
- String var5 = var4.getUnicode();
- if (var5 != null) {
- String var6 = var5.toUpperCase();
- int var7 = var6.indexOf("URL");
- if (var7 >= 0) {
- int var8 = var6.indexOf("=");
- if (var8 > var7 + 2) {
- var6 = var5.substring(var8 + 1);
- String var9 = var6.trim();
- int var10 = var9.length();
- if (var10 > 1 && var9.startsWith("'") && var9.endsWith("'")) {
- var6 = var9.substring(1, var10 - 1);
- var9 = var6;
- }
-
- this.insertURL(var9, 1);
- return;
- }
- }
- }
- }
- }
- }
- } catch (Exception var11) {
- HTMLCrawler.printException(var11, "PageScan.processTagMETA");
- }
-
- }
-
- private void processTagLINK(SGMLTagImpl var1, Cache var2, Hashtable var3, HTMLCrawler var4, int var5) {
- try {
- SGMLAttribute var6 = var1.getAttribute("REL");
- if (var6 != null) {
- String var7 = var6.getUnicode();
- if (var7 != null && "stylesheet".equalsIgnoreCase(var7)) {
- SGMLAttribute var8 = var1.getAttribute("HREF");
- if (var8 != null) {
- var7 = var8.getUnicode();
- if (var7 != null) {
- SGMLAttribute var9 = var1.getAttribute("TYPE");
- if (var9 != null) {
- String var10 = var9.getUnicode();
- if (var10 != null && "text/javascript".equalsIgnoreCase(var10)) {
- Object var11 = null;
- String var12 = "";
- URL var21;
- if (this.baseURLExists) {
- var21 = new URL(this.baseURL, var7);
- var12 = var21.toString();
- } else {
- var21 = new URL(this.url, var7);
- var12 = var21.toString();
- }
-
- CacheRequest var13 = new CacheRequest(var12);
- var13.setMimeTypeHint("text/javascript");
- InputStream var14 = var2.getInputStream(var13);
- String var15 = var13.getLastModified();
-
- try {
- int var16 = Integer.parseInt(var13.getContentLength());
- int var17 = var4.getTotalContentLength();
- var4.setTotalContentLength(var17 + var16);
- var17 = var4.getTotalContentLength();
- if (var17 > var5) {
- var4.setTotalContentLength(var17 - var16);
- var4.isURLRemoved = true;
- var4.closeInputStream(var14);
- return;
- }
-
- var4.readAllInputStream(var14);
- var4.closeInputStream(var14);
- } catch (Exception var18) {
- HTMLCrawler.printException(var18, "PageScan.processTagLink.cacheRequest");
- HTMLCrawler.printException(var18, "PageScan.processTagLink.cacheRequest");
- }
-
- LinkObject var23 = new LinkObject(var21, var15, this.linkStatus);
- var3.put(var12, var23);
- return;
- }
- }
-
- if (this.baseURLExists) {
- this.processAttributeInsertResource(this.baseURL, var7);
- return;
- }
-
- this.processAttributeInsertResource(this.url, var7);
- return;
- }
- }
- }
- }
- } catch (Exception var19) {
- HTMLCrawler.printException(var19, "PageScan.processTagLINK");
- }
-
- }
-
- private void processTagSTYLE(SGMLTagImpl var1, Cache var2, Hashtable var3, HTMLCrawler var4, int var5) {
- try {
- SGMLAttribute var6 = var1.getAttribute("SRC");
- if (var6 != null) {
- String var7 = var6.getUnicode();
- if (var7 != null) {
- SGMLAttribute var8 = var1.getAttribute("TYPE");
- if (var8 != null) {
- String var9 = var8.getUnicode();
- if (var9 != null && "text/javascript".equalsIgnoreCase(var9)) {
- Object var10 = null;
- String var11 = "";
- URL var19;
- if (this.baseURLExists) {
- var19 = new URL(this.baseURL, var7);
- var11 = var19.toString();
- } else {
- var19 = new URL(this.url, var7);
- var11 = var19.toString();
- }
-
- CacheRequest var12 = new CacheRequest(var11);
- var12.setMimeTypeHint("text/javascript");
- InputStream var13 = var2.getInputStream(var12);
- String var14 = var12.getLastModified();
-
- try {
- int var15 = Integer.parseInt(var12.getContentLength());
- int var16 = var4.getTotalContentLength();
- var4.setTotalContentLength(var16 + var15);
- var16 = var4.getTotalContentLength();
- if (var16 > var5) {
- var4.setTotalContentLength(var16 - var15);
- var4.isURLRemoved = true;
- var4.closeInputStream(var13);
- return;
- }
-
- var4.readAllInputStream(var13);
- var4.closeInputStream(var13);
- } catch (Exception var17) {
- HTMLCrawler.printException(var17, "PageScan.processTagStyle.cacheRequest");
- }
-
- LinkObject var21 = new LinkObject(var19, var14, this.linkStatus);
- var3.put(var11, var21);
- return;
- }
- }
-
- if (this.baseURLExists) {
- this.processAttributeInsertResource(this.baseURL, var7);
- return;
- }
-
- this.processAttributeInsertResource(this.url, var7);
- return;
- }
- }
- } catch (Exception var18) {
- HTMLCrawler.printException(var18, "PageScan.processTagSTYLE");
- }
-
- }
-
- private void processTagBODY(SGMLTagImpl var1) {
- try {
- SGMLAttribute var2 = var1.getAttribute("BACKGROUND");
- if (var2 != null) {
- String var3 = var2.getUnicode();
- if (var3 != null) {
- if (this.baseURLExists) {
- this.processAttributeInsertImage(this.baseURL, var3);
- return;
- }
-
- this.processAttributeInsertImage(this.url, var3);
- return;
- }
- }
- } catch (Exception var4) {
- HTMLCrawler.printException(var4, "PageScan.processTagBODY");
- }
-
- }
-
- private void processAttributeURL(URL var1, String var2, int var3) {
- try {
- int var4 = var2.length();
- if (var4 > 1 && var2.startsWith("'") && var2.endsWith("'")) {
- String var5 = var2.substring(1, var4 - 1);
- var2 = var5;
- }
-
- String var24 = var2.toLowerCase();
- int var6 = var24.indexOf("mailto");
- if (var6 < 0) {
- int var7 = var24.indexOf("mailbox");
- if (var7 < 0) {
- int var8 = var24.indexOf("news:");
- if (var8 < 0) {
- int var9 = var24.indexOf("#");
- if (var9 != 0) {
- if (var9 > 0) {
- var2 = var2.substring(0, var9);
- }
-
- URL var10 = new URL(var1, var2);
- String var11 = var10.toString();
- if (!var24.endsWith(".jpg") && !var24.endsWith(".jpeg") && !var24.endsWith(".gif") && !var24.endsWith(".xbm")) {
- if (var24.indexOf(".htm") < 0 && var24.indexOf(".html") < 0 && var24.indexOf(".shtml") < 0 && !var24.endsWith("/")) {
- String var12 = var10.getFile();
- String var13 = var12.toLowerCase();
- if (var12.length() == 1 && var12.endsWith("/")) {
- this.insertURL(var11, var3);
- } else if (var13.indexOf("cgi-bin") < 0 && var13.indexOf(".cgi") < 0) {
- int var14 = var12.lastIndexOf(47);
- if (var14 >= 0) {
- String var15 = var12.substring(var14);
- if (var15.length() > 1) {
- if (var14 >= 2) {
- String var16 = var12.substring(var14 - 2, var14);
- if (var16.equals(":/")) {
- this.insertURL(var11, var3);
- return;
- }
- }
-
- int var25 = var15.lastIndexOf(46);
- if (var25 >= 1) {
- String var17 = var15.substring(var25);
- int var18 = var17.length();
- if (var18 > 1) {
- boolean var19 = true;
-
- for(int var20 = 1; var20 < var18; ++var20) {
- char var21 = var17.charAt(var20);
- new Character(var21);
- if (!Character.isLetterOrDigit(var21)) {
- var19 = false;
- break;
- }
- }
-
- if (!var19) {
- this.insertURL(var11, var3);
- return;
- }
- }
-
- this.insertResource(var11);
- return;
- }
- }
- }
-
- this.insertURL(var11, var3);
- } else {
- this.insertURL(var11, var3);
- }
- } else {
- this.insertURL(var11, var3);
- }
- } else {
- this.insertImage(var11);
- }
- }
- }
- }
- }
- } catch (Exception var23) {
- HTMLCrawler.printException(var23, "PageScan.processAttributeURL");
- }
- }
-
- private void processAttributeInsertImage(URL var1, String var2) {
- try {
- URL var3 = new URL(var1, var2);
- String var4 = var3.toString();
- this.insertImage(var4);
- } catch (Exception var5) {
- HTMLCrawler.printException(var5, "PageScan.processAttributeInsertImage");
- }
- }
-
- private void processAttributeInsertResource(URL var1, String var2) {
- try {
- URL var3 = new URL(var1, var2);
- String var4 = var3.toString();
- this.insertResource(var4);
- } catch (Exception var5) {
- HTMLCrawler.printException(var5, "PageScan.processAttributeInsertResource");
- }
- }
- }
-