001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *  http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing,
013     * software distributed under the License is distributed on an
014     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     * KIND, either express or implied.  See the License for the
016     * specific language governing permissions and limitations
017     * under the License.
018     */
019    package org.apache.geronimo.tomcat.connector;
020    
021    import java.util.Map;
022    
023    import org.apache.geronimo.gbean.GBeanInfo;
024    import org.apache.geronimo.gbean.GBeanInfoBuilder;
025    import org.apache.geronimo.management.geronimo.WebManager;
026    import org.apache.geronimo.system.serverinfo.ServerInfo;
027    import org.apache.geronimo.tomcat.TomcatContainer;
028    
029    public class Http11APRConnectorGBean extends BaseHttp11ConnectorGBean implements Http11APRProtocol {
030    
031        private String certificateFile;
032        private String certificateKeyFile;
033        private String caCertificateFile;
034        private String caCertificatePath;
035        private String certificateChainFile;
036        private String revocationPath;
037        private String revocationFile;
038        
039        public Http11APRConnectorGBean(String name, Map initParams, String host, int port, TomcatContainer container, ServerInfo serverInfo) throws Exception {
040            super(name, initParams, "org.apache.coyote.http11.Http11AprProtocol", host, port, container, serverInfo);
041        }
042    
043        @Override
044        public int getDefaultPort() {
045            return 80;
046        }
047    
048        @Override
049        public String getGeronimoProtocol() {
050            return WebManager.PROTOCOL_HTTP;
051        }
052    
053        public int getPollTime() {
054            Object value = connector.getAttribute("pollTime");
055            return value == null ? 2000 : new Integer(value.toString()).intValue();
056        }
057    
058        public int getPollerSize() {
059            Object value = connector.getAttribute("pollerSize");
060            return value == null ? 8192 : new Integer(value.toString()).intValue();
061        }
062    
063        public int getSendfileSize() {
064            Object value = connector.getAttribute("sendfileSize");
065            return value == null ? 8192 : new Integer(value.toString()).intValue();
066        }
067    
068        public String getSslCACertificateFile() {
069            return caCertificateFile;
070        }
071    
072        public String getSslCACertificatePath() {
073            return caCertificatePath;
074        }
075    
076        public String getSslCertificateChainFile() {
077            return certificateChainFile; 
078        }
079    
080        public String getSslCertificateFile() {
081            return certificateFile; 
082        }
083    
084        public String getSslCertificateKeyFile() {
085            return certificateKeyFile; 
086        }
087    
088        public String getSslCipherSuite() {
089            return (String) connector.getAttribute("SSLCipherSuite");
090        }
091        
092        public String getSslProtocol() {
093            return (String) connector.getAttribute("SSLProtocol");
094        }
095    
096        public String getSslCARevocationFile() {
097            return revocationFile;
098        }
099    
100        public String getSslCARevocationPath() {
101            return revocationPath;
102        }
103    
104        public String getSslVerifyClient() {
105            return (String) connector.getAttribute("SSLVerifyClient");
106        }
107    
108        public int getSslVerifyDepth() {
109            Object value = connector.getAttribute("SSLVerifyDepth");
110            return value == null ? 10 : new Integer(value.toString()).intValue();
111        }
112    
113        public boolean getUseSendfile() {
114            Object value = connector.getAttribute("useSendfile");
115            return value == null ? true : new Boolean(value.toString()).booleanValue();
116        }
117        
118        public String getSslPassword() {
119            return (String) connector.getAttribute("SSLPassword");
120        }
121    
122        public void setPollTime(int pollTime) {
123            connector.setAttribute("pollTime", pollTime);
124        }
125    
126        public void setPollerSize(int pollerSize) {
127            connector.setAttribute("pollerSize", pollerSize);
128        }
129    
130        public void setSendfileSize(int sendfileSize) {
131            connector.setAttribute("sendfileSize", sendfileSize);
132        }
133    
134        public void setSslCACertificateFile(String sslCACertificateFile) {
135            if (sslCACertificateFile != null && sslCACertificateFile.equals(""))
136                sslCACertificateFile = null;
137            caCertificateFile = sslCACertificateFile;
138            if (caCertificateFile == null)
139                connector.setAttribute("SSLCACertificateFile", null);
140            else
141                connector.setAttribute("SSLCACertificateFile", serverInfo.resolveServerPath(caCertificateFile));
142        }
143    
144        public void setSslCACertificatePath(String sslCACertificatePath) {
145            if (sslCACertificatePath != null && sslCACertificatePath.equals(""))
146                sslCACertificatePath = null;
147            caCertificatePath = sslCACertificatePath;
148            if (caCertificatePath == null)
149                connector.setAttribute("SSLCACertificatePath", null);
150            else
151                connector.setAttribute("SSLCACertificatePath", serverInfo.resolveServerPath(caCertificatePath));
152        }
153    
154        public void setSslCertificateChainFile(String sslCertificateChainFile) {
155            if (sslCertificateChainFile != null && sslCertificateChainFile.equals(""))
156                sslCertificateChainFile = null;
157            certificateChainFile = sslCertificateChainFile;
158            if (certificateChainFile == null)
159                connector.setAttribute("SSLCertificateChainFile", null);
160            else
161                connector.setAttribute("SSLCertificateChainFile", serverInfo.resolveServerPath(certificateChainFile));
162        }
163    
164        public void setSslCertificateFile(String sslCertificateFile) {
165            if (sslCertificateFile != null && sslCertificateFile.equals(""))
166                sslCertificateFile = null;
167            certificateFile = sslCertificateFile;
168            if (certificateFile == null)
169                connector.setAttribute("SSLCertificateFile", null);
170            else
171                connector.setAttribute("SSLCertificateFile", serverInfo.resolveServerPath(certificateFile));
172        }
173    
174        public void setSslCertificateKeyFile(String sslCertificateKeyFile) {
175            if (sslCertificateKeyFile != null && sslCertificateKeyFile.equals(""))
176                sslCertificateKeyFile = null;
177            certificateKeyFile = sslCertificateKeyFile;
178            if (certificateKeyFile == null)
179                connector.setAttribute("SSLCertificateKeyFile", null);
180            else
181                connector.setAttribute("SSLCertificateKeyFile", serverInfo.resolveServerPath(certificateKeyFile));
182        }
183    
184        public void setSslCipherSuite(String sslCipherSuite) {
185            connector.setAttribute("SSLCipherSuite", sslCipherSuite);
186        }
187    
188        public void setSslPassword(String sslPassword) {
189            if (sslPassword != null && sslPassword.equals(""))
190                sslPassword = null;
191            connector.setAttribute("SSLPassword", sslPassword);
192        }
193        
194        public void setSslProtocol(String sslProtocol) {
195            connector.setAttribute("SSLProtocol", sslProtocol);
196        }
197    
198        public void setSslCARevocationFile(String sslCARevocationFile) {
199            if (sslCARevocationFile!= null && sslCARevocationFile.equals("")) 
200                sslCARevocationFile = null;
201            revocationFile = sslCARevocationFile;
202            if (revocationFile == null)
203                connector.setAttribute("SSLCARevocationFile", null);
204            else
205                connector.setAttribute("SSLCARevocationFile", serverInfo.resolveServerPath(revocationFile));
206        }
207    
208        public void setSslCARevocationPath(String sslCARevocationPath) {
209            if (sslCARevocationPath!= null && sslCARevocationPath.equals("")) 
210                sslCARevocationPath = null;
211            revocationPath = sslCARevocationPath;
212            if (revocationPath == null)
213                connector.setAttribute("SSLCARevocationPath", null);
214            else
215                connector.setAttribute("SSLCARevocationPath", serverInfo.resolveServerPath(revocationPath));
216    
217        }
218    
219        public void setSslVerifyClient(String sslVerifyClient) {
220            connector.setAttribute("SSLVerifyClient", sslVerifyClient);
221        }
222    
223        public void setSslVerifyDepth(int sslVerifyDepth) {
224            connector.setAttribute("SSLVerifyDepth", sslVerifyDepth);
225        }
226    
227        public void setUseSendfile(boolean useSendfile) {
228            connector.setAttribute("useSendfile", useSendfile);
229        }
230        
231        public static final GBeanInfo GBEAN_INFO;
232    
233        static {
234            GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic("Tomcat Connector HTTP APR", Http11APRConnectorGBean.class, BaseHttp11ConnectorGBean.GBEAN_INFO);
235            infoFactory.addInterface(Http11APRProtocol.class, 
236                    new String[] {
237                        //APR Attributes
238                        "pollTime",
239                        "pollerSize",
240                        "useSendfile",
241                        "sendfileSize",
242                        //SSL Attributes
243                        "sslProtocol",
244                        "sslCipherSuite",
245                        "sslCertificateFile",
246                        "sslCertificateKeyFile",
247                        "sslPassword",
248                        "sslVerifyClient",
249                        "sslVerifyDepth",
250                        "sslCACertificateFile",
251                        "sslCACertificatePath",
252                        "sslCertificateChainFile",
253                        "sslCARevocationFile",
254                        "sslCARevocationPath"
255                    },
256                    new String[] {
257                        //APR Attributes
258                        "pollTime",
259                        "pollerSize",
260                        "useSendfile",
261                        "sendfileSize",
262                        //SSL Attributes
263                        "sslProtocol",
264                        "sslCipherSuite",
265                        "sslCertificateFile",
266                        "sslCertificateKeyFile",
267                        "sslPassword",
268                        "sslVerifyClient",
269                        "sslVerifyDepth",
270                        "sslCACertificateFile",
271                        "sslCACertificatePath",
272                        "sslCertificateChainFile",
273                        "sslCARevocationFile",
274                        "sslCARevocationPath"
275                    }
276            );
277            infoFactory.setConstructor(new String[] { "name", "initParams", "host", "port", "TomcatContainer", "ServerInfo"});
278            GBEAN_INFO = infoFactory.getBeanInfo();
279        }
280        
281        public static GBeanInfo getGBeanInfo() {
282            return GBEAN_INFO;
283        }
284    
285    }