    001    /**
    002     * Copyright (C) 2010, Skype Limited
    003     *
    004     * All intellectual property rights, including but not limited to copyrights,
    005     * trademarks and patents, as well as know how and trade secrets contained in,
    006     * relating to, or arising from the internet telephony software of
    007     * Skype Limited (including its affiliates, "Skype"), including without
    008     * limitation this source code, Skype API and related material of such
    009     * software proprietary to Skype and/or its licensors ("IP Rights") are and
    010     * shall remain the exclusive property of Skype and/or its licensors.
    011     * The recipient hereby acknowledges and agrees that any unauthorized use of
    012     * the IP Rights is a violation of intellectual property laws.
    013     *
    014     * Skype reserves all rights and may take legal action against infringers of
    015     * IP Rights.
    016     *
    017     * The recipient agrees not to remove, obscure, make illegible or alter any
    018     * notices or indications of the IP Rights and/or Skype's rights and
    019     * ownership thereof.
    020     */
    021
    022    package com.skype.ipc;
    023
    024    import java.util.HashMap;
    025
    026    import com.skype.util.Log;
    027
    028    public abstract class AbstractTaggedInputMessage extends AbstractDecoder
    029    {
    030        private static final String      TAG = "AbstractTaggedInputMessage";
    031        private HashMap<Integer, Object> parms;
    032        protected boolean                invalid;
    033
    034        // CTOR
    035        public AbstractTaggedInputMessage(Transport in)
    036        {
    037            super(in);
    038            invalid = false;
    039            parms = new HashMap<Integer, Object>();
    040        }
    041
    042        // PROTECTED
    043        protected Object validateAndGetParm(int tag)
    044        {
    045            if (invalid) {
    046                Log.e(TAG, "validateAndGetParm called for invalid message. Returnvalue will be nonsense.");
    047                return null;
    048            }
    049            Object o = parms.get(tag);
    050            if (o == null) {
    051                return null;
    052            }
    053            if (o instanceof ResponseListElement) {
    054                Object oelement = ((ResponseListElement) o).GetNext();
    055                if (oelement == null) {
    056                    Log.e(TAG, "validateAndGetParm(" + tag + ") called for ResponseListElement while hasMore="
    057                            + ((ResponseListElement) o).HasMore() + ". Returnvalue will be nonsense.");
    058                }
    059                return oelement;
    060            }
    061            return o;
    062        }
    063
    064        protected void addParm(int key, Object o)
    065        {
    066            parms.put(key, o);
    067        }
    068
    069        // PUBLIC
    070
    071        // use this to check whether this Response can be used and read, or not
    072        public boolean isValid()
    073        {
    074            return (!invalid);
    075        }
    076
    077        public String GetAsString(int tag)
    078        {
    079            Object retval = validateAndGetParm(tag);
    080            if (retval == null) {
    081                // default value of an omitted String value
    082                Log.d(TAG, "Missing string value at tag=" + tag + ". Defaulting to \"\".");
    083                return new String("");
    084            }
    085            return (String) retval;
    086        }
    087
    088        public byte[] GetAsBinary(int tag)
    089        {
    090            Object retval = validateAndGetParm(tag);
    091            if (retval == null) {
    092                // default value of an omitted binary[] value
    093                Log.d(TAG, "Missing binary value at tag=" + tag + ". Defaulting to null.");
    094            }
    095            return (byte[]) retval;
    096        }
    097
    098        public int GetAsInt(int tag)
    099        {
    100            Object retval = validateAndGetParm(tag);
    101            if (retval == null) {
    102                // default value of an omitted integer value
    103                Log.d(TAG, "Missing integer value at tag=" + tag + ". Defaulting to 0.");
    104                return 0;
    105            }
    106            return ((Number) retval).intValue();
    107        }
    108
    109        public boolean GetAsBoolean(int tag)
    110        {
    111            Object retval = validateAndGetParm(tag);
    112            if (retval == null) {
    113                // default value of an omitted boolean value
    114                Log.d(TAG, "Missing boolean value at tag=" + tag + ". Defaulting to false.");
    115                return false;
    116            }
    117            return (((Number) retval).intValue() != 0);
    118        }
    119
    120        // returns oid of particular tagged list
    121        public int GetOid(int tag)
    122        {
    123            Object retval = validateAndGetParm(tag);
    124            if (retval == null) {
    125                // default value of an omitted integer value
    126                Log.d(TAG, "Missing oid value at tag=" + tag + ". Defaulting to NULL_VALUE.");
    127                return NULL_VALUE;
    128            }
    129            return ((Number) retval).intValue();
    130        }
    131
    132        // returns true, if there is more occurrences of the last piece of data
    133        // read. I.e. if GetAsInt
    134        public boolean HasMore(int tag)
    135        {
    136            Object o = parms.get(tag);
    137            if (o != null) {
    138                if (o instanceof ResponseListElement) {
    139                    return ((ResponseListElement) o).HasMore();
    140                }
    141            }
    142            return false;
    143        }
    144
    145    }