/*
 * 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.dialog;


import org.zoolu.sip.address.*;
import org.zoolu.sip.message.*;
import org.zoolu.sip.header.*;
import org.zoolu.sip.provider.*;
import org.zoolu.tools.Log;
import org.zoolu.tools.LogLevel;
import org.zoolu.tools.AssertException;


import java.util.Vector;


/** Class DialogInfo maintains a complete information status of a generic SIP dialog.
  * It has the following attributes:
  * <ul>
  * <li>sip-provider</li>
  * <li>call-id</li>
  * <li>local and remote URLs</li>
  * <li>local and remote contact URLs</li>
  * <li>local and remote cseqs</li>
  * <li>local and remote tags</li> 
  * <li>dialog-id</li>
  * <li>route set</li>
  * </ul>
  */
public class DialogInfo
{  
   
   // ************************ Private attributes ************************

   /** Local name */
   NameAddress local_name;

   /** Remote name */
   NameAddress remote_name;

   /** Local contact url */
   NameAddress local_contact;

   /** Remote contact url */
   NameAddress remote_contact;

   /** Call-id */
   String call_id;

   /** Local tag */
   String local_tag;

   /** Remote tag */
   String remote_tag;
   /** Sets the remote tag */

   /** Local CSeq number */
   long local_cseq;

   /** Remote CSeq number */
   long remote_cseq;

   /** Route set (Vector of NameAddresses) */
   Vector route; 


   // **************************** Costructors *************************** 

   /** Creates a new empty DialogInfo */
   public DialogInfo()
   {  this.local_name=null;
      this.remote_name=null;
      this.local_contact=null;
      this.remote_contact=null;
      this.call_id=null;
      this.local_tag=null;
      this.remote_tag=null;
      this.local_cseq=-1;
      this.remote_cseq=-1;
      this.route=null; 
   }
 

   // ************************** Public methods **************************

   /** Sets the local name */
   public void setLocalName(NameAddress url) { local_name=url; }
   /** Gets the local name */
   public NameAddress getLocalName() { return local_name; }


   /** Sets the remote name */
   public void setRemoteName(NameAddress url) { remote_name=url; }
   /** Gets the remote name */
   public NameAddress getRemoteName() { return remote_name; }


   /** Sets the local contact url */
   public void setLocalContact(NameAddress name_address) { local_contact=name_address; }
   /** Gets the local contact url */
   public NameAddress getLocalContact() { return local_contact; }


   /** Sets the remote contact url */
   public void setRemoteContact(NameAddress name_address) { remote_contact=name_address; }
   /** Gets the remote contact url */
   public NameAddress getRemoteContact() { return remote_contact; }

  
   /** Sets the call-id */
   public void setCallID(String id) { call_id=id; }
   /** Gets the call-id */
   public String getCallID() { return call_id; }

   
   /** Sets the local tag */
   public void setLocalTag(String tag) { local_tag=tag; }
   /** Gets the local tag */
   public String getLocalTag() { return local_tag; }


   public void setRemoteTag(String tag) { remote_tag=tag; }
   /** Gets the remote tag */
   public String getRemoteTag() { return remote_tag; }

   
   /** Sets the local CSeq number */
   public void setLocalCSeq(long cseq) { local_cseq=cseq; }
   /** Increments the local CSeq number */
   public void incLocalCSeq() { local_cseq++; }
   /** Gets the local CSeq number */
   public long getLocalCSeq() { return local_cseq; }


   /** Sets the remote CSeq number */
   public void setRemoteCSeq(long cseq) { remote_cseq=cseq; }
   /** Increments the remote CSeq number */
   public void incRemoteCSeq() { remote_cseq++; }
   /** Gets the remote CSeq number */
   public long getRemoteCSeq() { return remote_cseq; }

   
   /** Sets the route set */
   public void setRoute(Vector r) { route=r; }
   /** Gets the route set */
   public Vector getRoute() { return route; }

}
