/* * Copyright (C) 2005 Luca Veltri - University of Parma - Italy * * This file is part of MjSip (http://www.mjsip.org) * * MjSip is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * MjSip is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MjSip; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author(s): * Luca Veltri (luca.veltri@unipr.it) */ package org.zoolu.sip.header; import org.zoolu.sip.address.*; import org.zoolu.sip.provider.SipParser; /** Abstract EndPointHeader is the base Class for SIP Headers such as FromHeader, ToHeader. * The "tag" parameter is used in the EndPointHeader. * It serves as a general mechanism to identify a dialog, * which is the combination of the Call-ID along with two tags, one from * each participant in the dialog. */ public abstract class EndPointHeader extends NameAddressHeader { /** EndPoint parameters that should be removed from the returned NameAddress. * This tries to resolve a bug (?) of SIP when using SIP URL parameters in a name-address * within an EndPointHeader that may have some header parameters. */ static final String[] ENDPOINT_PARAMS={"tag","expires"}; /** Creates a new EndPointHeader. */ //public EndPointHeader(String hname) //{ super(hname); //} /** Creates a new EndPointHeader. */ public EndPointHeader(String hname, NameAddress nameaddr) { super(hname,nameaddr); } /** Creates a new EndPointHeader. */ public EndPointHeader(String hname, SipURL url) { super(hname,url); } /** Creates a new EndPointHeader. */ public EndPointHeader(String hname, NameAddress nameaddr, String tag) { super(hname,nameaddr); if (tag!=null) setParameter("tag",tag); } /** Creates a new EndPointHeader. */ public EndPointHeader(String hname, SipURL url, String tag) { super(hname,url); if (tag!=null) setParameter("tag",tag); } /** Creates a new EndPointHeader. */ public EndPointHeader(Header hd) { super(hd); } /** Gets 'tag' parameter. */ public String getTag() { return this.getParameter("tag"); } /** Whether it has 'tag' parameter. */ public boolean hasTag() { return this.hasParameter("tag"); } /** Gets NameAddress from the EndPointHeader. * <br> It extends the NameAddressHeader.getNameAddress() method, by removing * eventual EndPointHeader field parameters (e.g. 'tag' param) from the returnerd NameAddress. * @return the end point NameAddress or null if NameAddress does not exist * (that leads to the wildcard in case of ContactHeader) */ public NameAddress getNameAddress() { NameAddress naddr=(new SipParser(value)).getNameAddress(); // patch for removing eventual 'tag' or other EndPointHeader parameters from NameAddress SipURL url=naddr.getAddress(); for (int i=0; i< ENDPOINT_PARAMS.length; i++) { if (url.hasParameter(ENDPOINT_PARAMS[i])) { url.removeParameter(ENDPOINT_PARAMS[i]); naddr=new NameAddress(naddr.getDisplayName(),url); } } return naddr; } }