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.protocol;
21
22
23 import java.io.IOException;
24
25 import org.apache.directory.server.kerberos.shared.io.encoder.ErrorMessageEncoder;
26 import org.apache.directory.server.kerberos.shared.io.encoder.KdcReplyEncoder;
27 import org.apache.directory.server.kerberos.shared.messages.ErrorMessage;
28 import org.apache.directory.server.kerberos.shared.messages.KdcReply;
29 import org.apache.mina.common.ByteBuffer;
30 import org.apache.mina.common.IoSession;
31 import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
32 import org.apache.mina.filter.codec.ProtocolEncoderOutput;
33
34
35
36
37
38
39 public class KerberosTcpEncoder extends ProtocolEncoderAdapter
40 {
41 private KdcReplyEncoder replyEncoder = new KdcReplyEncoder();
42 private ErrorMessageEncoder errorEncoder = new ErrorMessageEncoder();
43
44
45 public void encode( IoSession session, Object message, ProtocolEncoderOutput out ) throws IOException
46 {
47 ByteBuffer buf = ByteBuffer.allocate( 1024 );
48
49
50 buf.putInt( 0 );
51
52 if ( message instanceof KdcReply )
53 {
54 replyEncoder.encode( ( KdcReply ) message, buf.buf() );
55 }
56 else
57 {
58 if ( message instanceof ErrorMessage )
59 {
60 errorEncoder.encode( ( ErrorMessage ) message, buf.buf() );
61 }
62 }
63
64
65 int pos = buf.position();
66
67
68 int recordLength = buf.position() - 4;
69
70
71 buf.rewind();
72 buf.putInt( recordLength );
73
74
75 buf.position( pos );
76 buf.flip();
77
78 out.write( buf );
79 }
80 }