2
* Copyright 2005-2012 Restlet S.A.S.
4
* The contents of this file are subject to the terms of one of the following
5
* open source licenses: Apache 2.0 or LGPL 3.0 or LGPL 2.1 or CDDL 1.0 or EPL
6
* 1.0 (the "Licenses"). You can select the license that you prefer but you may
7
* not use this file except in compliance with one of these Licenses.
9
* You can obtain a copy of the Apache 2.0 license at
10
* http://www.opensource.org/licenses/apache-2.0
12
* You can obtain a copy of the LGPL 3.0 license at
13
* http://www.opensource.org/licenses/lgpl-3.0
15
* You can obtain a copy of the LGPL 2.1 license at
16
* http://www.opensource.org/licenses/lgpl-2.1
18
* You can obtain a copy of the CDDL 1.0 license at
19
* http://www.opensource.org/licenses/cddl1
21
* You can obtain a copy of the EPL 1.0 license at
22
* http://www.opensource.org/licenses/eclipse-1.0
24
* See the Licenses for the specific language governing permissions and
25
* limitations under the Licenses.
27
* Alternatively, you can obtain a royalty free commercial license with less
28
* limitations, transferable or non-transferable, directly at
29
* http://www.restlet.com/products/restlet-framework
31
* Restlet is a registered trademark of Restlet S.A.S.
34
package org.restlet.ext.grizzly.internal;
36
import java.io.IOException;
37
import java.nio.ByteBuffer;
38
import java.nio.channels.SelectionKey;
40
import org.restlet.ext.grizzly.GrizzlyServerHelper;
41
import org.restlet.ext.grizzly.HttpsServerHelper;
43
import com.sun.grizzly.Context;
44
import com.sun.grizzly.ProtocolFilter;
45
import com.sun.grizzly.util.WorkerThread;
48
* HTTP parser filter for Grizzly.
50
* @author Jerome Louvel
52
public class HttpParserFilter implements ProtocolFilter {
54
/** The parent HTTP server helper. */
55
private volatile GrizzlyServerHelper helper;
61
* The parent HTTP server helper.
63
public HttpParserFilter(GrizzlyServerHelper helper) {
73
public boolean execute(Context context) throws IOException {
74
// Create the HTTP call
75
ByteBuffer byteBuffer = ((WorkerThread) Thread.currentThread())
79
if (byteBuffer.hasRemaining()) {
80
boolean keepAlive = false;
81
SelectionKey key = context.getSelectionKey();
82
GrizzlyServerCall serverCall = new GrizzlyServerCall(this.helper
83
.getHelped(), byteBuffer, key,
84
(this.helper instanceof HttpsServerHelper));
87
this.helper.handle(serverCall);
89
// TODO Should we use httpCall#isKeepAlive?
90
// TODO The "keepAlive" boolean is always set to false at this time.
91
// Prepare for additional calls?
94
.setKeyRegistrationState(Context.KeyRegistrationState.REGISTER);
97
.setKeyRegistrationState(Context.KeyRegistrationState.CANCEL);
104
// This is the last filter
109
* Post execute method.
112
* The call's context.
114
public boolean postExecute(Context context) throws IOException {