1/*
2* Conditions Of Use
3*
4* This software was developed by employees of the National Institute of
5* Standards and Technology (NIST), an agency of the Federal Government.
6* Pursuant to title 15 Untied States Code Section 105, works of NIST
7* employees are not subject to copyright protection in the United States
8* and are considered to be in the public domain.  As a result, a formal
9* license is not needed to use the software.
10*
11* This software is provided by NIST as a service and is expressly
12* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15* AND DATA ACCURACY.  NIST does not warrant or make any representations
16* regarding the use of the software or the results thereof, including but
17* not limited to the correctness, accuracy, reliability or usefulness of
18* the software.
19*
20* Permission to use this software is contingent upon your acceptance
21* of the terms of this agreement
22*
23* .
24*
25*/
26/*******************************************************************************
27* Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
28*******************************************************************************/
29package gov.nist.javax.sip.header;
30import javax.sip.header.*;
31import javax.sip.InvalidArgumentException;
32
33/**
34 * MaxForwards SIPHeader
35 *
36 * @version 1.2 $Revision: 1.8 $ $Date: 2009/07/17 18:57:32 $
37 *
38 * @author M. Ranganathan   <br/>
39 * @author Olivier Deruelle <br/>
40 *
41 */
42public class MaxForwards extends SIPHeader implements MaxForwardsHeader {
43
44    /**
45     * Comment for <code>serialVersionUID</code>
46     */
47    private static final long serialVersionUID = -3096874323347175943L;
48    /** maxForwards field.
49     */
50    protected int maxForwards;
51
52    /** Default constructor.
53     */
54    public MaxForwards() {
55        super(NAME);
56    }
57
58  public MaxForwards( int m ) throws InvalidArgumentException {
59        super(NAME);
60        this.setMaxForwards( m );
61    }
62
63    /** get the MaxForwards field.
64     * @return the maxForwards member.
65     */
66    public int getMaxForwards() {
67        return maxForwards;
68    }
69
70    /**
71         * Set the maxForwards member
72         * @param maxForwards maxForwards parameter to set
73         */
74    public void setMaxForwards(int maxForwards)
75        throws InvalidArgumentException {
76        if (maxForwards < 0 || maxForwards > 255)
77            throw new InvalidArgumentException(
78                "bad max forwards value " + maxForwards);
79        this.maxForwards = maxForwards;
80    }
81
82    /**
83         * Encode into a string.
84         * @return encoded string.
85         *
86         */
87    public String encodeBody() {
88        return encodeBody(new StringBuffer()).toString();
89    }
90
91    protected StringBuffer encodeBody(StringBuffer buffer) {
92        return buffer.append(maxForwards);
93    }
94
95    /** Boolean function
96     * @return true if MaxForwards field reached zero.
97     */
98    public boolean hasReachedZero() {
99        return maxForwards == 0;
100    }
101
102    /** decrement MaxForwards field one by one.
103     */
104    public void decrementMaxForwards() throws TooManyHopsException {
105        if (maxForwards > 0)
106            maxForwards--;
107        else throw new TooManyHopsException ("has already reached 0!");
108    }
109
110    public boolean equals(Object other) {
111        if (this==other) return true;
112        if (other instanceof MaxForwardsHeader) {
113            final MaxForwardsHeader o = (MaxForwardsHeader) other;
114            return this.getMaxForwards() == o.getMaxForwards();
115        }
116        return false;
117    }
118}
119