1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.mimo.netty.example.icap.simple;
15
16 import java.nio.charset.Charset;
17
18 import org.jboss.netty.buffer.ChannelBuffer;
19 import org.jboss.netty.channel.ChannelHandlerContext;
20 import org.jboss.netty.channel.MessageEvent;
21 import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
22 import org.jboss.netty.handler.codec.http.HttpHeaders;
23
24 import ch.mimo.netty.handler.codec.icap.DefaultIcapResponse;
25 import ch.mimo.netty.handler.codec.icap.IcapHeaders;
26 import ch.mimo.netty.handler.codec.icap.IcapMessageElementEnum;
27 import ch.mimo.netty.handler.codec.icap.IcapMethod;
28 import ch.mimo.netty.handler.codec.icap.IcapRequest;
29 import ch.mimo.netty.handler.codec.icap.IcapResponse;
30 import ch.mimo.netty.handler.codec.icap.IcapResponseStatus;
31 import ch.mimo.netty.handler.codec.icap.IcapVersion;
32
33 public class IcapServerHandler extends SimpleChannelUpstreamHandler {
34
35 @Override
36 public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
37 IcapRequest request = (IcapRequest)e.getMessage();
38
39 System.out.println(request.toString());
40
41 IcapResponse response = new DefaultIcapResponse(IcapVersion.ICAP_1_0,IcapResponseStatus.OK);
42 IcapMessageElementEnum bodyType = request.getBodyType();
43 if(bodyType == null) {
44 bodyType = IcapMessageElementEnum.NULLBODY;
45 }
46
47 if(!request.getMethod().equals(IcapMethod.RESPMOD) & request.getHttpRequest() != null) {
48 request.getHttpRequest().addHeader(HttpHeaders.Names.VIA,"icap://my.icap.server");
49 response.setHttpRequest(request.getHttpRequest());
50 }
51 if(request.getHttpResponse() != null) {
52 request.getHttpResponse().addHeader(HttpHeaders.Names.VIA,"icap://my.icap.server");
53 response.setHttpResponse(request.getHttpResponse());
54 }
55 response.addHeader(IcapHeaders.Names.ISTAG,"SimpleServer-version-1.0");
56
57 ChannelBuffer buffer = null;
58 switch (bodyType) {
59 case NULLBODY:
60
61 break;
62 case REQBODY:
63
64 buffer = request.getHttpRequest().getContent();
65 break;
66 case RESBODY:
67
68 buffer = request.getHttpResponse().getContent();
69 break;
70 default:
71
72 break;
73 }
74
75
76
77
78
79
80 if(buffer != null) {
81 System.out.println(buffer.toString(Charset.defaultCharset()));
82 }
83
84 ctx.getChannel().write(response);
85 }
86
87 }