📄 wapbrowser.java~1~
字号:
package com.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, "&", "&");//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, "&", "&");
//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 + -