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

📄 cwspheaders.java

📁 WAP协议栈的JAVA实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * had already been set, the new value overwrites the previous one. The
     * containsHeader  method can be used to test for the presence of a header
     * before setting its value.
     */
    public void setIntHeader(String name, int value) {
        if (name == null) {
            return;
        }

        removeHeader(name);
        headers.addElement(new Header(name, new Integer(value)));
    }

    public void addIntHeader(String name, int value) {
        if (name == null) {
            return;
        }

        headers.addElement(new Header(name, new Integer(value)));
    }

    /**
     * Sets a WSP header with the given name and date-value. The date is specified
     * in terms of milliseconds since the epoch. If the header had already been
     * set, the new value overwrites the previous one. The containsHeader
     * method can be used to test for the presence of a header before setting
     * its value.
     */
    public void setDateHeader(String name, long value) {
        if (name == null) {
            return;
        }

        removeHeader(name);
        headers.addElement(new Header(name, new Long(value)));
    }

    public void addDateHeader(String name, long value) {
        if (name == null) {
            return;
        }

        headers.addElement(new Header(name, new Long(value)));
    }

    public String getHeader(String name) {
        if (name != null) {
            for (Enumeration e = headers.elements(); e.hasMoreElements();) {
                Header he = (Header) e.nextElement();
    
                if (name.equalsIgnoreCase(he.getName())) {
                    Object o = he.getValue();
    
                    return (o == null) ? null : o.toString();
                }
            }
        }
        return null;
    }

    public Enumeration getHeaders(String name) {
        Vector v = new Vector();

        if (name != null) {
            for (Enumeration e = headers.elements(); e.hasMoreElements();) {
                Header he = (Header) e.nextElement();

                if (name.equalsIgnoreCase(he.getName())) {
                    Object value = he.getValue();
                    if( value != null ) {
                        v.add(he.getValue().toString());
                    }
                }
            }
        }

        return v.elements();
    }

    public boolean containsHeader(String name) {
        if (name!=null) {
            for (Enumeration e = headers.elements(); e.hasMoreElements();) {
                Header he = (Header) e.nextElement();
    
                if (name.equalsIgnoreCase(he.getName())) {
                    return true;
                }
            }
        }
        return false;
    }

    public Enumeration getHeaderNames() {
        Vector v = new Vector();

        for (Enumeration e = headers.elements(); e.hasMoreElements();) {
            Header he = (Header) e.nextElement();

            if (!v.contains(he.getName())) {
                v.add(he.getName());
            }
        }

        return v.elements();
    }

    private void removeHeader(String name) {
        // Remove all occurences of the header first
        if( name != null ) {
            for (Enumeration e = headers.elements(); e.hasMoreElements();) {
                Header he = (Header) e.nextElement();
  
                if (name.equalsIgnoreCase(he.getName())) {
                    headers.removeElement(he);
                }
            }
        }
    }

    /*
     * Get the WSP representation of the headers
     */
    public byte[] getBytes() throws HeaderParseException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        try {
            for (Enumeration e = headers.elements(); e.hasMoreElements();) {
                Header he = (Header) e.nextElement();
                String hn = he.getName();
                Object hv = he.getValue();
                byte[] enc;

                if (hv instanceof String) {
                    enc = codePage.encode(hn, (String) hv);

                    if (enc != null) {
                        out.write(enc);
                    } else {
                        logger.warn(
                            "codePage.encode() returned null for header " +
                            he.toString());
                    }
                } else if (hv instanceof Long) {
                    enc = codePage.encode(hn, new Date(((Long) hv).longValue()));

                    if (enc != null) {
                        out.write(enc);
                    } else {
                        logger.warn(
                            "codePage.encode() returned null for header " +
                            he.toString());
                    }
                } else if (hv instanceof Integer) {
                    enc = codePage.encode(hn, ((Integer) hv).intValue());

                    if (enc != null) {
                        out.write(enc);
                    } else {
                        logger.warn(
                            "codePage.encode() returned null for header " +
                            he.toString());
                    }
                } else {
                    // logger.warn(hv.getClass().getName()+": Unsupported header value type"); 
                    enc = codePage.encode(hn, hv.toString());

                    if (enc != null) {
                        out.write(enc);
                    } else {
                        logger.warn(
                            "codePage.encode() returned null for header " +
                            he.toString());
                    }
                }
            }

            out.flush();
        } catch (IOException unknown) {
            // We assume that this never occurs when writing to a ByteArrayOutputStream...
        }

        return out.toByteArray();
    }

    /**
     * Return the size of a header field value
     */
    public static int getHeaderValueSize(WSPDecoder decoder) {
        int pos = decoder.seek(0);
        int val = decoder.getUint8();
        int ret = 0;

        // logger.debug("First octet of field value: "+val);

        if (val < 31) {
            // logger.debug("Number of octets to follow: "+val);
            ret = val + 1; 
        }
        else if (val == 31) { // an UIntVar follows...
            //logger.debug("UIntVar follows");
            ret = (int) decoder.getUintVar();
            ret += decoder.seek(0)-pos;
        }
        else if ( val < 128 ) {
            // logger.debug("Text-String, terminated by zero "); 
            val = 0;
            decoder.seek(-1);
            while ( decoder.getOctet() != 0) {
                val++;
            }

            val++; //skip the trailing \0
            ret=val;
        }
        else { // Else -> Encoded 7-bit value; this header has no more data
            //logger.debug("7-bit value; this header has no more data"); 
            ret=1;
        }
        
        decoder.pos(pos); // rollback to initial decoder position
        return ret;
    }

    public String toString() {
        StringBuffer sb = new StringBuffer();

        for (Enumeration e = getHeaderNames(); e.hasMoreElements();) {
            String key = (String) e.nextElement();

            for (Enumeration e2 = getHeaders(key); e2.hasMoreElements();) {
                String val = (String) e2.nextElement();
                sb.append("[").append(key).append(": ").append(val).append("]");
            }
        }

        return sb.toString();
    }
}

⌨️ 快捷键说明

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