home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Java / Java.zip / jload18.zip / location.java < prev    next >
Text File  |  2000-04-16  |  8KB  |  352 lines

  1. import java.io.*;
  2. import java.util.*;
  3. import java.net.*;
  4.  
  5. public final class location implements Cloneable
  6. {
  7.  
  8.  public String locbase; /* URL http://zero.org/ */
  9.  public String starturl[]; /* url pro zahajeni sosani */
  10.  public String name;  /* alias i.e. netmag */
  11.  public String aliases[]; /* aliases for location */
  12.  
  13.  /* don't start auto-fetching */
  14.  public boolean passive;
  15.  
  16.  /* default policy true=ACCEPT, false=REJECT */
  17.  public boolean accept; 
  18.  
  19.  public float priority; /* 0.0 - XX ? */
  20.  
  21.  public short depth;
  22.  
  23.  public final static byte ANY=3;
  24.  public final static byte SPECIFIED=1; 
  25.  public final static byte INCLUDING_DEFAULTS=2;
  26.  
  27.  public byte content;
  28.  public byte masks;
  29.  public byte action;
  30.  
  31.  /* default action string */  
  32.  public options actions;
  33.  public mask defaultmask;
  34.  
  35.  public mask ctmasks[];
  36.  public mask urlmasks[];
  37.  
  38.  public location(String loc,location def)
  39.  {
  40.   this(loc);
  41.   
  42.   // copy default location settings
  43.   passive=def.passive;
  44.   accept=def.accept;
  45.   priority=def.priority;
  46.   depth=def.depth;
  47.   content=def.content;
  48.   masks=def.masks;  
  49.   action=def.action;
  50.   
  51.   if(action==INCLUDING_DEFAULTS) actions=def.actions; // TODO: ???? is this OK??
  52.     else
  53.    actions=new options(""); 
  54.    
  55.    
  56.   defaultmask=new mask(actions);
  57.   
  58.  }
  59.  
  60.  public location(String loc)
  61.  {
  62.   /* location check */
  63.   if(!loc.endsWith("/")) throw new IllegalArgumentException("Location must end with /");
  64.   /* end loc. check */
  65.   
  66.   locbase=loc;
  67.   
  68.   aliases=null;
  69.   name=null;
  70.   starturl=null;
  71.   
  72.   actions=new options("");
  73.   
  74.   systemdefaults();
  75.   defaultmask=new mask(actions);
  76.  }
  77.  
  78.  private final void systemdefaults()
  79.  {
  80.   passive=true;
  81.   accept=true;
  82.   priority=1.0f;
  83.   depth=4;
  84.   content=INCLUDING_DEFAULTS;
  85.   masks=INCLUDING_DEFAULTS;  
  86.   action=INCLUDING_DEFAULTS;
  87.   
  88.   }
  89.  
  90.  /* server-options parser */
  91.  /* - for defaultoptions (options o) */
  92.  /* - for normal server (options o,options default) */
  93.  
  94.  public final void serveroptions(options o)
  95.  {
  96.   if(o.parsed.size()==0) return;
  97.   
  98.   StringTokenizer st=new StringTokenizer((String)o.parsed.elementAt(0));
  99.   
  100.   try
  101.   {
  102.    /* skip options */
  103.    st.nextToken();
  104.    
  105.    while(true)
  106.    {
  107.     String s;
  108.     boolean ok;
  109.     s=st.nextToken();
  110.     ok=true;
  111.     if(s.length()==1 && s.charAt(0)=='!')
  112.      {
  113.       ok=false;
  114.       s=st.nextToken();
  115.      }
  116.     // System.out.println("opt="+s);
  117.     /* */
  118.     if(s.equals("systemdefaults") && ok==true)
  119.      systemdefaults();
  120.     else if( s.equals("passive") || 
  121.              s.equals("nofetch") 
  122.            ) 
  123.                  passive=ok;
  124.     else if( s.equals("active") || 
  125.              s.equals("autostart") 
  126.            ) 
  127.                  passive=!ok;
  128.  
  129.     else if( s.equals("default") || 
  130.              s.equals("none") 
  131.            ) 
  132.                  ;
  133.                  
  134.     else if( s.equals("nodefaults") && ok==true
  135.            ) 
  136.             {
  137.           content=SPECIFIED;
  138.           masks=SPECIFIED;  
  139.           action=SPECIFIED;
  140.             }
  141.     else if( s.equals("reject")
  142.            ) 
  143.                  accept=!ok;
  144.     else if( s.equals("accept")
  145.            ) 
  146.                  accept=ok;
  147.                  
  148.     else if( s.equals("nodefaulturlmasks") || 
  149.              s.equals("nomasks") 
  150.            ) 
  151.                  if(ok) masks=SPECIFIED;
  152.                    else masks=INCLUDING_DEFAULTS;
  153.  
  154.     else if( s.equals("nodefaultcontentmasks") || 
  155.              s.equals("nocontent") 
  156.            ) 
  157.                  if(ok) content=SPECIFIED;
  158.                    else content=INCLUDING_DEFAULTS;
  159.  
  160.     else if( s.equals("nodefaultactions") || 
  161.              s.equals("noaction") 
  162.            ) 
  163.                  if(ok) action =SPECIFIED;
  164.                    else action =INCLUDING_DEFAULTS;
  165.                    
  166.     else if( s.equals("anycontent")
  167.            ) 
  168.                  if(ok) content = ANY;
  169.                    else content =INCLUDING_DEFAULTS;
  170.  
  171.     else if( s.equals("anyurl")
  172.            ) 
  173.                  if(ok) masks   = ANY;
  174.                    else masks   = INCLUDING_DEFAULTS;
  175.                                                            
  176.     else /* not known */
  177.      System.err.println("[CONFIG_ERROR] Unknown server option "+s);
  178.      
  179.      
  180.     st.nextToken();
  181.    
  182.    }
  183.   }
  184.   catch (NoSuchElementException eof)
  185.   {}
  186.  
  187.  }
  188.  
  189.  public final void setPriority(float f)
  190.  {
  191.   if(f<0) f=0;
  192.   priority=f;
  193.  }
  194.  
  195.  public final void setDepth(short d)
  196.  {
  197.   if(d<-1) d=-1;
  198.   depth=d;
  199.  }
  200.  
  201.  public final void setActions(options my, options xdefault)
  202.  {
  203.   if(my==null) return;
  204.   actions=my;
  205.   if(xdefault==null || action==SPECIFIED) { defaultmask=new mask(actions);return;}
  206.   my.addDefault(xdefault);
  207.   defaultmask=new mask(actions);
  208.  }
  209.  
  210.  public final void addActions(options add, boolean updatedefault)
  211.  {
  212.   if(add==null) return;
  213.   add.addDefault(actions);
  214.   actions=add;
  215.   if(updatedefault) defaultmask=new mask(actions);
  216.  }
  217.  
  218.  public final void addMask(options o)
  219.  {
  220.  // add defaults
  221.  o.addDefault(actions);
  222.  mask m;
  223.  m=new mask(o);
  224.  if(m.hasContent()) ctmasks=util.addMaskToArray(m,ctmasks);
  225.   else
  226.    urlmasks=util.addMaskToArray(m,urlmasks);
  227.  }
  228.  
  229.  public final void setName(String s)
  230.  {
  231.   if(s==null) return;
  232.   name=s;
  233.  }
  234.  
  235.  public final void addAlias(String s)
  236.  {
  237.   if(s==null) return;
  238.   if(!s.endsWith("/")) throw new IllegalArgumentException("Alias must end with /");
  239.   // s=s.toLowerCase();
  240.   // check 4 dupez
  241.      if(s.startsWith(locbase)) return;
  242.      if(aliases!=null)
  243.       for(int i=aliases.length-1;i>=0;i--)
  244.        if(s.startsWith(aliases[i])) return;
  245.        
  246.      aliases=util.addStringToArray(s,aliases);  
  247.  }
  248.  
  249.  public final void addStartURL(String start)
  250.  {
  251.   if(start==null) return;
  252.   if(start.indexOf("://")==-1) return;
  253.   URL u;
  254.   try
  255.   {
  256.     // check 4 dupez
  257.     if(starturl!=null)
  258.       for(int i=starturl.length-1;i>=0;i--)
  259.         if(starturl[i].equals(start)) return;
  260.     u=new URL(start);
  261.     start=u.getProtocol()+"://"+u.getHost()+
  262.      ( u.getPort()==-1?"":(":"+u.getPort())  )
  263.        +u.getFile();
  264.     starturl=util.addStringToArray(start,starturl);
  265.   }
  266.   catch (MalformedURLException badurl)
  267.   {}
  268.  
  269.  }
  270.  
  271.  public final boolean processURL(String frombase,String fromdir,short fdepth, boolean fdepthset,String url, String src)
  272.  {
  273.   // zjisti target  
  274.   byte target=mask.getTarget(frombase,fromdir,locbase,url);
  275.   // System.out.println("url="+url+" target="+target);
  276.   
  277.   // depth check
  278.   if(fdepth<0) return false;
  279.   if(src.equals("A") && fdepth<1) return false;
  280.   
  281.   if( masks==ANY )
  282.      if ( (target & mask.TARGET_ME)!=0)  
  283.        {
  284.          loader.pq.push(new request(url,this,defaultmask,--fdepth,fdepthset),priority*defaultmask.q);
  285.          return true;
  286.        }
  287.      else
  288.       return false; // bad target..ignoring for mask=any
  289.       
  290.  String ext=util.getExt(url);
  291.  // System.out.println("url="+url+" ext="+ext);
  292.  
  293.  if(urlmasks!=null)
  294.  {
  295.    for(int i=0;i<urlmasks.length;i++)
  296.     if(urlmasks[i].match(url,ext,src,target,locbase))
  297.      {
  298.          loader.pq.push(new request(url,this,urlmasks[i],--fdepth,fdepthset),priority*urlmasks[i].q);
  299.          return true;
  300.      }
  301.  }
  302.  if(masks==INCLUDING_DEFAULTS)
  303.  {
  304.    // System.out.println("go here:)");
  305.    for(int i=0;i<loader.def.urlmasks.length;i++)
  306.     if(loader.def.urlmasks[i].match(url,ext,src,target,locbase))
  307.      {
  308.          loader.pq.push(new request(url,this,loader.def.urlmasks[i],--fdepth,fdepthset),priority*loader.def.urlmasks[i].q);
  309.          return true;
  310.      }
  311.  }
  312.  
  313.  if(accept==true && (target&defaultmask.target)!=0)
  314.   {
  315.          loader.pq.push(new request(url,this,defaultmask,--fdepth,fdepthset),priority*defaultmask.q);
  316.          return true;
  317.   }  
  318.  else 
  319.   return false;
  320.     
  321.  }
  322.  
  323.  public final void transferAliases(location def)
  324.  {
  325.   if(def.aliases!=null) 
  326.     if(aliases==null)
  327.        { aliases=def.aliases;def.aliases=null;}
  328.      else
  329.       {
  330.        // apend it to me
  331.        for(int i=0;i<def.aliases.length;i++)
  332.          addAlias(def.aliases[i]);
  333.        def.aliases=null;
  334.       }
  335.  }
  336.  
  337.  public final void transferStartURL(location def)
  338.  {
  339.   if(def.starturl!=null)
  340.     if(starturl==null) { starturl=def.starturl;def.starturl=null;}
  341.      else
  342.      {
  343.        // apend it to me
  344.        for(int i=0;i<def.starturl.length;i++)
  345.          addStartURL(def.starturl[i]);
  346.        def.starturl=null;
  347.      
  348.      }
  349.  }
  350.   
  351. }
  352.