1 /*
2 * ====================================================================
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 * ====================================================================
20 *
21 * This software consists of voluntary contributions made by many
22 * individuals on behalf of the Apache Software Foundation. For more
23 * information on the Apache Software Foundation, please see
24 * <http://www.apache.org/>.
25 *
26 */
27
28 package org.apache.http.impl.nio.codecs;
29
30 import org.apache.http.HttpException;
31 import org.apache.http.HttpRequest;
32 import org.apache.http.HttpRequestFactory;
33 import org.apache.http.ParseException;
34 import org.apache.http.RequestLine;
35 import org.apache.http.annotation.NotThreadSafe;
36 import org.apache.http.config.MessageConstraints;
37 import org.apache.http.impl.DefaultHttpRequestFactory;
38 import org.apache.http.message.BasicLineParser;
39 import org.apache.http.message.LineParser;
40 import org.apache.http.message.ParserCursor;
41 import org.apache.http.nio.NHttpMessageParser;
42 import org.apache.http.nio.reactor.SessionInputBuffer;
43 import org.apache.http.params.HttpParams;
44 import org.apache.http.util.Args;
45 import org.apache.http.util.CharArrayBuffer;
46
47 /**
48 * Default {@link NHttpMessageParser} implementation for {@link HttpRequest}s.
49 *
50 * @since 4.1
51 */
52 @SuppressWarnings("deprecation")
53 @NotThreadSafe
54 public class DefaultHttpRequestParser extends AbstractMessageParser<HttpRequest> {
55
56 private final HttpRequestFactory requestFactory;
57
58 /**
59 * Creates an instance of this class.
60 *
61 * @param buffer the session input buffer.
62 * @param parser the line parser.
63 * @param params HTTP parameters.
64 *
65 * @deprecated (4.3) use
66 * {@link DefaultHttpRequestParser#DefaultHttpRequestParser(
67 * SessionInputBuffer, LineParser, HttpRequestFactory, MessageConstraints)}
68 */
69 @Deprecated
70 public DefaultHttpRequestParser(
71 final SessionInputBuffer buffer,
72 final LineParser parser,
73 final HttpRequestFactory requestFactory,
74 final HttpParams params) {
75 super(buffer, parser, params);
76 Args.notNull(requestFactory, "Request factory");
77 this.requestFactory = requestFactory;
78 }
79
80 /**
81 * Creates an instance of DefaultHttpRequestParser.
82 *
83 * @param buffer the session input buffer.
84 * @param parser the line parser. If <code>null</code> {@link BasicLineParser#INSTANCE} will
85 * be used.
86 * @param requestFactory the request factory. If <code>null</code>
87 * {@link DefaultHttpRequestFactory#INSTANCE} will be used.
88 * @param constraints Message constraints. If <code>null</code>
89 * {@link MessageConstraints#DEFAULT} will be used.
90 *
91 * @since 4.3
92 */
93 public DefaultHttpRequestParser(
94 final SessionInputBuffer buffer,
95 final LineParser parser,
96 final HttpRequestFactory requestFactory,
97 final MessageConstraints constraints) {
98 super(buffer, parser, constraints);
99 this.requestFactory = requestFactory != null ? requestFactory : DefaultHttpRequestFactory.INSTANCE;
100 }
101
102 /**
103 * @since 4.3
104 */
105 public DefaultHttpRequestParser(final SessionInputBuffer buffer, final MessageConstraints constraints) {
106 this(buffer, null, null, constraints);
107 }
108
109 /**
110 * @since 4.3
111 */
112 public DefaultHttpRequestParser(final SessionInputBuffer buffer) {
113 this(buffer, null);
114 }
115
116 @Override
117 protected HttpRequest createMessage(final CharArrayBuffer buffer)
118 throws HttpException, ParseException {
119 final ParserCursor cursor = new ParserCursor(0, buffer.length());
120 final RequestLine requestLine = lineParser.parseRequestLine(buffer, cursor);
121 return this.requestFactory.newHttpRequest(requestLine);
122 }
123
124 }