-
Notifications
You must be signed in to change notification settings - Fork 232
/
DontFragmentAttribute.java
112 lines (100 loc) · 3.08 KB
/
DontFragmentAttribute.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
* ice4j, the OpenSource Java Solution for NAT and Firewall Traversal.
* Maintained by the SIP Communicator community (http://sip-communicator.org).
*
* Distributable under LGPL license. See terms of license at gnu.org.
*/
package org.ice4j.attribute;
import org.ice4j.*;
/**
* The DONT-FRAGMENT attribute is used to inform TURN
* server (if it supports this attribute) that it should set DF bit to 1
* in IPv4 headers when relaying client data.
*
* @author Sebastien Vincent
*/
public class DontFragmentAttribute extends Attribute
{
/**
* Attribute name.
*/
public static final String NAME = "DONT-FRAGMENT";
/**
* The length of the data contained by this attribute.
*/
public static final char DATA_LENGTH = 0;
/**
* Constructor.
*/
DontFragmentAttribute()
{
super(DONT_FRAGMENT);
}
/**
* Compares two STUN Attributes. Attributes are considered equal when their
* type, length, and all data are the same.
* @param obj the object to compare this attribute with.
* @return true if the attributes are equal and false otherwise.
*/
public boolean equals(Object obj)
{
if (! (obj instanceof DontFragmentAttribute)
|| obj == null)
{
return false;
}
return true;
}
/**
* Returns the human readable name of this attribute. Attribute names do
* not really matter from the protocol point of view. They are only used
* for debugging and readability.
* @return this attribute's name.
*/
public String getName()
{
return NAME;
}
/**
* Returns the length of this attribute's body.
* @return the length of this attribute's value (8 bytes).
*/
public char getDataLength()
{
return DATA_LENGTH;
}
/**
* Returns a binary representation of this attribute.
* @return a binary representation of this attribute.
*/
public byte[] encode()
{
/* there is no data */
byte binValue[] = new byte[HEADER_LENGTH];
//Type
binValue[0] = (byte)(getAttributeType() >> 8);
binValue[1] = (byte)(getAttributeType() & 0x00FF);
//Length
binValue[2] = (byte)(getDataLength() >> 8);
binValue[3] = (byte)(getDataLength() & 0x00FF);
return binValue;
}
/**
* Sets this attribute's fields according to attributeValue array.
* @param attributeValue a binary array containing this attribute's field
* values and NOT containing the attribute header.
* @param offset the position where attribute values begin (most often
* offset is equal to the index of the first byte after
* length)
* @param length the length of the binary array.
* @throws StunException if attrubteValue contains invalid data.
*/
void decodeAttributeBody(byte[] attributeValue, char offset, char length)
throws StunException
{
if(length != 0)
{
throw new StunException("length invalid");
}
}
}