⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wapbrowser.java~2~

📁 封装了SQL、Socket、WAP、MIME等功能的通用组件
💻 JAVA~2~
📖 第 1 页 / 共 2 页
字号:
package org.lazybug.wap.browser;

import java.io.*;
import java.util.ArrayList;
import com.lazybug.mime.MimeUtility;
import com.lazybug.util.Base64;
import com.lazybug.util.Tools;
import com.lazybug.util.ConfigUtil;
import com.lazybug.util.Log;
import com.lazybug.wap.*;
import net.sourceforge.jwap.wsp.pdu.CWSPHeaders;
import net.sourceforge.jwap.util.wbxml.WBXMLDecoder;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.xml.serialize.OutputFormat;
import org.w3c.dom.Document;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: Kehaoinfo</p>
 *
 * @author David Lau
 * @version 1.0
 */
public class WAPBrowser extends WAPSession
{
    /*是否已经应答*/
    private boolean reply = false;
    /*是否要中止*/
    private boolean abort = false;
    /*当前浏览*/
    private String title;
    /*是否需要过滤*/
   // private boolean filter = true;
    /*上下文路径*/
    private String context = "#";
    /*User Agent 标识*/
    private String userAgent = "";
    /**/
    public static String LocalProxy;
    /*预览缓冲区*/
    private byte previewBuffer[];

    public WAPBrowser()
    {
        LocalProxy = ConfigUtil.getString("local_proxy");
    }

    /**
     * 得到结果在指示的回调函数
     */
    public synchronized void s_methodResult_ind( int status, byte[] headers, byte[] body )
    {
        this.setStatus(status);
        this.setResBody(body);
        if( headers.length > 0 )
        {
            this.setResHdr(WAPMethodManager.decode2Headers( headers ));
            this.setContentType(getResHdr().getHeader( "Content-Type" ));
            WAPSessionManager.getInstance().writeReplyLog(
                getPort(),getStatus(), body.length, getReqUri(), getResHdr().toString());
        }
        else
        {
            WAPSessionManager.getInstance().writeReplyLog(
                getPort(),getStatus(), body.length, getReqUri(), getBodyString());
        }

        Log.logMessage(this, "s_methodResult_ind(tid=" + this.getSid() + ", status=" +
                WAPConstainer.WAP_STATUS[status] + ", content-type="+getResCt()+
                ", uri="+getBrowserUrl()+")" );
        //System.out.println( "Antwort erhalten:" + status );
        //System.out.println( "  " + body.length + " bytes" );
        this.setReply(true);
        this.notifyAll();
    }

    /**
     *  中止会话
     */
    public synchronized void s_abort_ind()
    {
        Log.logWarning(this, "s_abort_ind(tid=" + this.getSid()+", uri="+getBrowserUrl()+")");
        this.setAbort(true);
        this.notifyAll();
    }

    /**
     * 等待会话响应
     */
    public synchronized void waitReply()
    {
        if( !this.isReply() )
        {
            try
            {
                wait();
            }
            catch( InterruptedException e )
            {
                e.printStackTrace();
            }
        }
    }

    /**
     * 解压标题
     * @param wml
     * @return  标题
     */
    public String decodeTitle( String wml )
    {
        int i = wml.indexOf( "title=" );
        if( i == -1 )
        {
            i = wml.indexOf("<title>");
            if( i != -1 )
            {
                int j = wml.indexOf("</title>", i);
                if( j != -1 )
                {
                    setTitle(wml.substring(i+7, j));
                }
            }

            if( this.getTitle() == null )
                setTitle("Unspecify");
            return this.getTitle();
        }
        i += 6;
        int j = 0;
        if( wml.charAt( i ) == '\'' || wml.charAt( i ) == '"' )
        {
            j = wml.indexOf(wml.charAt(i), i+1);
            if( j == -1 ) {
                setTitle("Unspecify");
                return this.getTitle();
            }
            i += 1;
        }
        else
        {
            int m = wml.indexOf('>', i);
            int n = wml.indexOf(' ', i);
            if( m ==-1 && n == -1 )
            {
                if( j == -1 )
                {
                    setTitle("Unspecify");
                    return this.getTitle();
                }
            }
            else
            {
                j = m>n?n:m;
            }
        }
        this.setTitle(wml.substring(i, j));
        return this.title;
    }

    /**
     * 本地转换WML脚本中的链接
     * @param wml
     * @return 转换后的WML文件
     */
    public String decodeGoScript( String wml )
    {
        if( wml == null ) return null;
        /*int i = 0;
        int token = 0;
        while( true )
        {
            i = wml.indexOf( "<go", token );
            //System.out.println("Seek:"+i+","+token);
            if( i == -1 )
            {
                break;
            }

            int k = wml.indexOf( ">", i );
            i = wml.indexOf( "href=", i );
            if( i > k )
            {
                //System.out.println(i+" > "+ k);
                token = k;
            }
            else
            {
                i += 5;
                int m = 0, n = 0;
                if( wml.charAt( i ) == '\'' || wml.charAt( i ) == '"' )
                {
                    m = i + 1;
                    n = wml.indexOf(wml.charAt(i), m);
                    if( n == -1 ) return null;

                    //System.out.println(" sljdflsfd 0--==== "+wml.substring(m, n));
                }
                else
                {
                    m = i;
                    n = wml.indexOf(' ', m);
                    if( n != -1 && k > n )
                    {
                        n = wml.indexOf('>', m);
                        if( n != k ) return null;
                    }
                    n -= 1;
                }
                String src = wml.substring(m, n).toLowerCase();
                StringBuffer sb = new StringBuffer();
                sb.append(wml.substring(0, m));
                String link = Tools.checkHttpUri(src, this.getRelUri());
                //System.out.println("[LINK] : "+link);

                if( link == null )
                {
                    sb.append("#" );
                    k = 1;
                }
                else
                {
                    String ecrui = LocalProxy + Base64.encode(link.getBytes()) ;
                    sb.append(ecrui);
                    //System.out.println("[ENCODED] : "+ecrui);
                    k = ecrui.length();
                    WAPSessionManager.getInstance().writeUriLog(link, ecrui);
                }
                sb.append(wml.substring(n));
                //System.out.print("m="+m+"  k="+k+"   begin"+token);
                wml = sb.toString();
                //System.out.println("  end="+token);

                token = m+k;
            }
        }*/

        wml = Tools.replaceStr(wml, "<go", "<a");
        wml = Tools.replaceStr(wml, "</go>", "</a>");
        //System.out.println( wml );
        return wml;
    }

    public String decodeLinkResource( String wml )
    {
        if( wml == null ) return null;
        wml = Tools.decodeUnicode(wml, '%');
        int i = 0;
        int token = 0;
        while( true )
        {
            i = wml.indexOf( "<a", token );
            //System.out.println("Seek:"+i+","+token);
            if( i == -1 )
            {
                break;
            }

            int k = wml.indexOf( ">", i );
            i = wml.indexOf( "href=", i );
            if( i > k )
            {
                //System.out.println(i+" > "+ k);
                token = k;
            }
            else
            {
                char c = 0;
                i += 5;
                int m = 0, n = 0;
                if( (c = wml.charAt( i )) == '\'' || (c = wml.charAt( i )) == '"' )
                {
                    if( c == '\'' ) c = '"';
                    else c = '\'';
                    m = i + 1;
                    n = wml.indexOf(wml.charAt(i), m);
                    if( n == -1 ) return null;

                    //System.out.println(" sljdflsfd 0--==== "+wml.substring(m, n));
                }
                else
                {
                    m = i;
                    n = wml.indexOf(' ', m);
                    if( n != -1 && k > n )
                    {
                        n = wml.indexOf('>', m);
                        if( n != k ) return null;
                    }
                    n -= 1;
                }

                String src = wml.substring(m, n);//.toLowerCase();
                StringBuffer sb = new StringBuffer();
                sb.append(wml.substring(0, m));
                //System.out.println("[src] : "+src);
                String src_src = src;
                /*if( this.filter )
                {
                    //System.out.println("B:"+src);
                    i = src.lastIndexOf("url=");
                    k = src.lastIndexOf("misc_u=");

                    if( i > k )
                    {
                        src = src.substring(i+4);
                    }
                    else if( k > i )
                    {
                        src = src.substring(k+7);
                    }
                    //System.out.println("E:"+src);
                }*/

                String link = Tools.replaceStr(src, "&amp;", "&");//Tools.checkHttpUri(src, this.getRelUri());
                link = Tools.checkHttpUri(link, this.getRelUri());
                //System.out.println("[link] :"+link);
                if( link == null )
                {
                    sb.append("#" );
                    k = 1;
                }
                else
                {
                    /*String uri = null;
                    if( this.filter )
                    {
                        uri = LocalProxy + link;
                        WAPSessionManager.getInstance().writeUriLog(src_src, uri);
                    }
                    else
                    {
                        uri = LocalProxy + Base64.encode( link.getBytes() );
                        WAPSessionManager.getInstance().writeUriLog(link, uri);
                    }
                    sb.append(uri); */
                    //System.out.println("[ENCODED] : "+ecrui);
                    sb.append("javascript:openi(");
                    sb.append(c);
                    sb.append(link);
                    sb.append(c);
                    sb.append(")");
                    k = link.length();
                }
                sb.append(wml.substring(n));
                //System.out.print("m="+m+"  k="+k+"   begin"+token);
                wml = sb.toString();
                //System.out.println("  end="+token);

                token = m+k;
            }
        }
       // System.out.println(wml);
        return wml;
    }

    public String decodeImgResource( String wml )
    {
        if( wml == null ) return null;
        int i = 0;
        int token = 0;
        while( true )
        {
            i = wml.indexOf( "<img", token );
            //System.out.println("Seek:"+i+","+token);
            if( i == -1 )
            {
                break;
            }

            int k = wml.indexOf( ">", i );
            i = wml.indexOf( "src=", i );
            if( i > k )
            {
                //System.out.println(i+" > "+ k);
                token = k;
            }
            else
            {
                i += 4;//唯一变化的值
                int m = 0, n = 0;
                if( wml.charAt( i ) == '\'' || wml.charAt( i ) == '"' )
                {
                    m = i + 1;
                    n = wml.indexOf(wml.charAt(i), m);
                    if( n == -1 ) return null;
                }
                else
                {
                    m = i;
                    n = wml.indexOf(' ', m);
                    if( n != -1 && k > n )
                    {
                        n = wml.indexOf('>', m);
                        if( n != k ) return null;
                    }
                    n -= 1;
                }
                String src = wml.substring(m, n);//.toLowerCase();
                StringBuffer sb = new StringBuffer();
                sb.append(wml.substring(0, m));
                String link = Tools.checkHttpUri(src, this.getRelUri());
                link = Tools.replaceStr(link, "&amp;", "&");
                //System.out.println("[LINK] : "+link);
                if( link == null )
                {
                    sb.append("#" );
                    k = 1;
                }
                else
                {
                    String ecrui = LocalProxy + Base64.encode(link.getBytes()) ;
                    sb.append(ecrui);
                    //System.out.println("[ENCODED] : "+ecrui);
                    k = ecrui.length();
                    resArray.add(link);
                    WAPSessionManager.getInstance().writeUriLog(link, ecrui);
                }
                sb.append(wml.substring(n));
                //System.out.print("m="+m+"  k="+k+"   begin"+token);
                wml = sb.toString();
                //System.out.println("  end="+token);

                token = m+k;
            }
        }
        //System.out.println( wml );
        return wml;
    }
    /*检查网页是否需要重定向*/
    private String checkOnenterforward(String wml)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -