1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.kerberos.changepwd.io;
21
22
23 import java.nio.ByteBuffer;
24 import java.nio.InvalidMarkException;
25
26 import org.apache.directory.server.kerberos.changepwd.exceptions.ChangePasswordException;
27 import org.apache.directory.server.kerberos.changepwd.messages.AbstractPasswordMessage;
28 import org.apache.directory.server.kerberos.changepwd.messages.ChangePasswordError;
29 import org.apache.directory.server.kerberos.changepwd.messages.ChangePasswordReply;
30 import org.apache.directory.server.kerberos.changepwd.messages.ChangePasswordRequest;
31
32
33
34
35
36 public class ChangePasswordDecoder
37 {
38 public static AbstractPasswordMessage decode( ByteBuffer buf, boolean isTcp ) throws ChangePasswordException
39 {
40 if ( isTcp )
41 {
42
43
44 buf.getInt();
45 buf.mark();
46 }
47
48
49
50 try
51 {
52 return ChangePasswordRequest.decode( buf );
53 }
54 catch ( Exception e )
55 {
56 resetOrRewind( buf );
57 }
58
59 try
60 {
61 return ChangePasswordReply.decode( buf );
62 }
63 catch ( Exception e )
64 {
65 resetOrRewind( buf );
66 }
67
68 return ChangePasswordError.decode( buf );
69 }
70
71
72 private static void resetOrRewind( ByteBuffer buf )
73 {
74 try
75 {
76 buf.reset();
77 }
78 catch ( InvalidMarkException e )
79 {
80 buf.rewind();
81 }
82 }
83 }