1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.transport.socket.apr;
21
22 import java.net.InetSocketAddress;
23
24 import org.apache.mina.core.filterchain.DefaultIoFilterChain;
25 import org.apache.mina.core.filterchain.IoFilterChain;
26 import org.apache.mina.core.service.IoHandler;
27 import org.apache.mina.core.service.IoProcessor;
28 import org.apache.mina.core.service.IoService;
29 import org.apache.mina.core.session.AbstractIoSession;
30 import org.apache.mina.core.session.IoSession;
31 import org.apache.tomcat.jni.Address;
32 import org.apache.tomcat.jni.Socket;
33
34
35
36
37
38
39 public abstract class AprSession extends AbstractIoSession {
40
41
42 private long descriptor;
43
44
45 private final IoService service;
46
47
48 private final IoProcessor<AprSession> processor;
49
50
51 private final IoFilterChain filterChain = new DefaultIoFilterChain(this);
52
53
54 private final IoHandler handler;
55
56
57 private final InetSocketAddress remoteAddress;
58 private final InetSocketAddress localAddress;
59
60
61 private boolean readable = true;
62 private boolean writable = true;
63 private boolean interestedInRead;
64 private boolean interestedInWrite;
65
66
67
68
69
70
71
72
73
74 AprSession(
75 IoService service, IoProcessor<AprSession> processor, long descriptor) throws Exception {
76 this.service = service;
77 this.processor = processor;
78 this.handler = service.getHandler();
79 this.descriptor = descriptor;
80
81 long ra = Address.get(Socket.APR_REMOTE, descriptor);
82 long la = Address.get(Socket.APR_LOCAL, descriptor);
83
84 this.remoteAddress = new InetSocketAddress(Address.getip(ra), Address.getInfo(ra).port);
85 this.localAddress = new InetSocketAddress(Address.getip(la), Address.getInfo(la).port);
86 }
87
88
89
90
91
92
93
94
95
96
97
98 AprSession(
99 IoService service, IoProcessor<AprSession> processor,
100 long descriptor, InetSocketAddress remoteAddress) throws Exception {
101 this.service = service;
102 this.processor = processor;
103 this.handler = service.getHandler();
104 this.descriptor = descriptor;
105
106 long la = Address.get(Socket.APR_LOCAL, descriptor);
107
108 this.remoteAddress = remoteAddress;
109 this.localAddress = new InetSocketAddress(Address.getip(la), Address.getInfo(la).port);
110 }
111
112
113
114
115
116 long getDescriptor() {
117 return descriptor;
118 }
119
120
121
122
123
124 void setDescriptor(long desc) {
125 this.descriptor = desc;
126 }
127
128
129
130
131 @Override
132 public IoProcessor<AprSession> getProcessor() {
133 return processor;
134 }
135
136
137
138
139 public InetSocketAddress getLocalAddress() {
140 return localAddress;
141 }
142
143
144
145
146 public InetSocketAddress getRemoteAddress() {
147 return remoteAddress;
148 }
149
150
151
152
153 public IoFilterChain getFilterChain() {
154 return filterChain;
155 }
156
157
158
159
160 public IoHandler getHandler() {
161 return handler;
162 }
163
164
165
166
167 public IoService getService() {
168 return service;
169 }
170
171
172
173
174 @Override
175 public InetSocketAddress getServiceAddress() {
176 return (InetSocketAddress) super.getServiceAddress();
177 }
178
179
180
181
182
183 boolean isReadable() {
184 return readable;
185 }
186
187
188
189
190
191 void setReadable(boolean readable) {
192 this.readable = readable;
193 }
194
195
196
197
198
199 boolean isWritable() {
200 return writable;
201 }
202
203
204
205
206
207 void setWritable(boolean writable) {
208 this.writable = writable;
209 }
210
211
212
213
214
215
216 boolean isInterestedInRead() {
217 return interestedInRead;
218 }
219
220
221
222
223
224
225 void setInterestedInRead(boolean isOpRead) {
226 this.interestedInRead = isOpRead;
227 }
228
229
230
231
232
233
234 boolean isInterestedInWrite() {
235 return interestedInWrite;
236 }
237
238
239
240
241
242
243 void setInterestedInWrite(boolean isOpWrite) {
244 this.interestedInWrite = isOpWrite;
245 }
246 }