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

📄 wapcodepage.java

📁 WAP Stack implementation jwap.sourceforge.net
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            return;        }        hdrs.write(Encoding.encodeHeader(wk, Encoding.textString(value.trim())));    }    public void encodeMaxForwards(OutputStream hdrs, short wk, String value)        throws IOException {        if (value == null) {            return;        }        hdrs.write(Encoding.encodeHeader(wk,                Encoding.integerValue(Long.parseLong(value))));    }    public void encodeReferer(OutputStream hdrs, short wk, String value)        throws IOException {        if (value == null) {            return;        }        hdrs.write(Encoding.encodeHeader(wk, Encoding.uriValue(value.trim())));    }    public void encodeUserAgent(OutputStream hdrs, short wk, String value)        throws IOException {        if (value == null) {            return;        }        hdrs.write(Encoding.encodeHeader(wk, Encoding.textString(value.trim())));    }    public Header decode(byte[] data) throws HeaderParseException, IOException {        WSPDecoder d = new WSPDecoder(data);        int c1 = d.getUint8();        String key = null;        String val = null;        if ((c1 & 0x80) != 0) {            c1 = c1 & 0x7f;            key = transTable.code2str(c1);            if(log.isDebugEnabled()) {              log.debug("code2str(0x"+Integer.toHexString(c1)+")="+key);            }            byte[] fieldValue = d.getBytes(data.length - 1);                         if(key == null ) {                key="0x"+Integer.toHexString(c1);                log.warn(key+": unknown header");            } else {                try {                  val = decodeHeaderField(key, fieldValue);                } catch( NoSuchMethodException nsme ) {                    log.warn("'"+key+"': Header decoding not yet implemented :-(");                } catch (Exception e) {                    log.warn("Unable to decode header " + key, e);                }            }        } else {            d.seek(-1);            key = d.getCString();            val = d.getCString();        }        return new Header(key, val);    }    public String decodeAcceptLanguage(byte[] data) throws IOException {        WSPDecoder d = new WSPDecoder(data);        String retval = null;        int c1 = d.getUint8();        if (c1 > 31) {            // Constrained encoding            if ((c1 & 0x80) != 0) {                // Short integer                c1 = c1 & 0x7f;                retval = TransTable.getTable(TT_LNG).code2str(c1);            } else {                d.seek(-1);                retval = d.getCString();            }        } else {            // General form         }        return retval;    }        public String decodeDate(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        Date dt = d.getDateValue();        return fmt.format(dt);    }        public String decodeServer(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        return d.getTextString();    }        public String decodeContentId(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        // remove quote        d.seek(1);        return d.getCString();    }        public String decodeContentDisposition(byte[] data) {        StringBuffer sb = new StringBuffer();        WSPDecoder d = new WSPDecoder(data);        long l = d.getValueLength();        int o = d.getUint8();        switch(o) {            case 128:                sb.append("Form-Data");                break;            case 129:                sb.append("Attachment");                break;            case 130:                sb.append("Inline");                break;            default:                d.seek(-1);                sb.append(d.getTextString());                break;        }        // TODO Parse parameters...        byte[] parms = d.getBytes(d.getRemainingOctets());        return sb.toString();    }        public String decodeContentLength(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        return Long.toString(d.getIntegerValue());    }        public String decodeContentLocation(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        return d.getCString();    }        public String decodeContentType(byte[] data) {        String retval = null;        WSPDecoder d = new WSPDecoder(data);        int o = d.getUint8();        if( o <= 31 ) { // General Form          d.seek(-1);          long len = d.getValueLength();          if( len == 0 ) {            	return "";          }          o = d.getUint8();          if( (o & 0x80) != 0 ) {              // Short-Integer              short wk = (short) (o&0x7f);              retval = TransTable.getTable(TT_CTYPES).code2str(wk);                      } else if( o <= 30 ) { // long-integer              d.seek(-1);              int wk = (int) d.getLongInteger();              retval = TransTable.getTable(TT_CTYPES).code2str(wk);                      } else { // *TEXT EOF              d.seek(-1);              retval = d.getTextString();          }          byte[] params = d.getBytes(d.getRemainingOctets());          if( params.length > 0 ) {              WSPDecoder param = new WSPDecoder(params);              StringBuffer buf = new StringBuffer();              buf.append(retval);              while( !param.isEOF() ) {                  String code = null;                  try {                      int c = (int) param.getIntegerValue();                      TransTable wkp = TransTable.getTable(TT_WKPARMS);                      code = wkp.code2str((int)c);                      String val= null;                      switch(c){                          case 0x01: // charset                            int charset = param.getUint8();                            if( (charset & 0x80) != 0 ) { // Short integer                                charset = charset & 0x7f;                                // Lookup charset                                val = TransTable.getTable(TT_CHARSETS).code2str(charset);                            }                             break;                          case 0x05: // name version 1.1                          case 0x06: // fileName version 1.1                          case 0x07: // name version 1.4                          case 0x08: // fileName version 1.4                          case 0x09: // type                          case 0x0A: // start                          case 0x0B: // start info                          case 0x0C: // comment                          case 0x0D: // domain                          case 0x0F: // path                          case 0x12: // MAC                            val = param.getCString();                            break;                      }                      if( val!=null ) {                        buf.append("; ").append(code).append("=").append(val);                      }                  } catch (Exception e){                      log.info("decodeContentType: parameter decoding failed, ignoring parameter "+code,e);                  }              }              retval = buf.toString();          }        } else { // Constrained encoding          if( (o & 0x80) != 0 ) { // Short integer            short wk = (short) (o&0x7f);            retval = TransTable.getTable(TT_CTYPES).code2str(wk);                      } else { // *Text EOF             d.seek(-1);            retval = d.getTextString();          }        }        return retval;    }        public String decodeConnection(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        int o = d.getUint8();        if( o == 128 ) {            return "CLOSE";           }        d.seek(-1);        return d.getCString();    }        public String decodeVia(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        return d.getTextString();    }        public String decodeWarning(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        int o = d.getUint8(), code=0;        String agent = null, txt = null;                if( (o & 0x80) != 0  ) {            // Warn-Code            code = o & 0x7f;        } else {            d.getValueLength();            code = d.getShortInteger();            agent = d.getTextString();            txt = d.getTextString();           }        String cTxt = null;        switch( code ) {            case 10: cTxt = "110 Response is stale"; break;            case 11: cTxt = "111 Revalidation failed"; break;            case 12: cTxt = "112 Disconnected operation"; break;            case 13: cTxt = "113 Heuristic expiration"; break;            case 99: cTxt = "199 Miscellaneous (persistent) warning"; break;            case 14: cTxt = "214 Transformation applied"; break;            default: cTxt = Integer.toString(code);        }        StringBuffer sb = new StringBuffer(cTxt);        if( agent != null ) {            sb.append("; agent=\"").append(agent).append('"');        }        if( txt != null ) {            sb.append("; text=").append(txt);        }        return sb.toString();    }            public String decodeExpires(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        Date dt = d.getDateValue();        return fmt.format(dt);     }        public String decodeCacheControl(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        String ret = null;        int o = d.getUint8();        if( o  <= 31 ) { // value-length cache-directive            log.warn("decoding cache-control (value-length cache-directive) not yet implemented");        } else  if( (o & 0x80) != 0 ) {            ret = TransTable.getTable(TT_CCONTROL).code2str(o);        } else { // Token-Text            ret = d.getCString();        }        return ret;    }    public String decodeLocation(byte[] data) {        WSPDecoder d = new WSPDecoder(data);        return d.getTextString();    }}

⌨️ 快捷键说明

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