1 package testcase;
2
3 import org.apache.mina.core.buffer.IoBuffer;
4 import org.apache.mina.core.session.IoSession;
5 import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
6 import org.apache.mina.filter.codec.ProtocolDecoderOutput;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9 import static testcase.MinaRegressionTest.MSG_SIZE;
10 import static testcase.MinaRegressionTest.OPEN;
11
12 public class MyRequestDecoder extends CumulativeProtocolDecoder {
13 private static final Logger logger = LoggerFactory.getLogger(MyRequestDecoder.class);
14
15 @Override
16 protected boolean doDecode(final IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
17 if (!session.containsAttribute(OPEN)) {
18 logger.error("!decoding for closed session {}", session.getId());
19 }
20
21 new Thread(new Runnable() {
22 public void run() {
23 try {
24 logger.debug( "Sleep for 500 ms for session {}", session.getId() );
25 Thread.sleep(500);
26 logger.debug( "Wake up now from a 500 ms sleep for session {}", session.getId() );
27 } catch (InterruptedException ignore) {}
28 session.close(true);
29 }
30 }).start();
31
32
33 logger.debug( "Sleep for 1000 ms for session {}", session.getId() );
34 Thread.sleep(1000);
35 logger.debug( "Wake up now from a 1000 ms sleep for session {}", session.getId() );
36
37 if (!session.containsAttribute(OPEN)) {
38 logger.error("!session {} closed before decoding completes!", session.getId());
39 int i = 0;
40
41 try
42 {
43 int j = 2 / i;
44 }
45 catch ( Exception e )
46 {
47
48 }
49 }
50
51
52 if (in.remaining() < MSG_SIZE) return false;
53
54 logger.info("Done decoding for session {}", session.getId());
55
56 if (in.hasRemaining() && !session.isClosing() && session.isConnected()) {
57 IoBuffer tmp = IoBuffer.allocate(in.remaining());
58 tmp.put(in);
59 tmp.flip();
60 out.write(tmp);
61 return true;
62 }
63
64 return false;
65 }
66 }