* @param request
* @return The {@link NtpMessage}.
*/
public NtpMessage decode( ByteBuffer request )
{
NtpMessageModifier modifier = new NtpMessageModifier();
byte header = request.get();
modifier.setLeapIndicator( parseLeapIndicator( header ) );
modifier.setVersionNumber( parseVersionNumber( header ) );
modifier.setMode( parseMode( header ) );
modifier.setStratum( parseStratum( request ) );
modifier.setPollInterval( parsePollInterval( request ) );
modifier.setPrecision( parsePrecision( request ) );
modifier.setRootDelay( parseRootDelay( request ) );
modifier.setRootDispersion( parseRootDispersion( request ) );
modifier.setReferenceIdentifier( parseReferenceIdentifier( request ) );
modifier.setReferenceTimestamp( new NtpTimeStamp( request ) );
modifier.setOriginateTimestamp( new NtpTimeStamp( request ) );
byte[] unneededBytes = new byte[8];
request.get( unneededBytes );
modifier.setReceiveTimestamp( new NtpTimeStamp() );
modifier.setTransmitTimestamp( new NtpTimeStamp( request ) );
return modifier.getNtpMessage();
}