1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jboss.netty.channel.socket.http;
17
18 import java.net.SocketAddress;
19
20 import org.jboss.netty.buffer.ChannelBuffer;
21 import org.jboss.netty.channel.AbstractChannelSink;
22 import org.jboss.netty.channel.ChannelEvent;
23 import org.jboss.netty.channel.ChannelFuture;
24 import org.jboss.netty.channel.ChannelPipeline;
25 import org.jboss.netty.channel.ChannelState;
26 import org.jboss.netty.channel.ChannelStateEvent;
27 import org.jboss.netty.channel.MessageEvent;
28
29
30
31
32
33
34
35 final class HttpTunnelingClientSocketPipelineSink extends AbstractChannelSink {
36
37 HttpTunnelingClientSocketPipelineSink() {
38 super();
39 }
40
41 public void eventSunk(
42 ChannelPipeline pipeline, ChannelEvent e) throws Exception {
43 HttpTunnelingClientSocketChannel channel = (HttpTunnelingClientSocketChannel) e.getChannel();
44 ChannelFuture future = e.getFuture();
45 if (e instanceof ChannelStateEvent) {
46 ChannelStateEvent stateEvent = (ChannelStateEvent) e;
47 ChannelState state = stateEvent.getState();
48 Object value = stateEvent.getValue();
49 switch (state) {
50 case OPEN:
51 if (Boolean.FALSE.equals(value)) {
52 channel.closeReal(future);
53 }
54 break;
55 case BOUND:
56 if (value != null) {
57 channel.bindReal((SocketAddress) value, future);
58 } else {
59 channel.unbindReal(future);
60 }
61 break;
62 case CONNECTED:
63 if (value != null) {
64 channel.connectReal((SocketAddress) value, future);
65 } else {
66 channel.closeReal(future);
67 }
68 break;
69 case INTEREST_OPS:
70 channel.setInterestOpsReal(((Integer) value).intValue(), future);
71 break;
72 }
73 } else if (e instanceof MessageEvent) {
74 channel.writeReal(((ChannelBuffer) ((MessageEvent) e).getMessage()), future);
75 }
76 }
77 }