In CoyoteConnector.initialize() there's an assumption that if the factory is an instance of CoyoteServerSocketFactory, it's gonna be SSL, and it sets secure=true. Then in Http11ConnectionHandler.checkSocketFactory() in the Http11Protocol.java, it interprets that "secure" flag as SSL and uses SSLImplementation to get the socket factory.
In our case, the scheme is not ssl, so unfortunately this doesn't work. Http11Protocol just wasn't written to accept a socket factory object, and the one it makes from the passed classname is of a different type than CoyoteConnector's socket factory. It's not enough to make the types the same, it really should take a whole factory object, since the factory's attributes need to be set from the conf. On Wed, 2004-03-24 at 16:03, Jim Hopp wrote: > We have a similar need (though for a different reason) and extend > CoyoteServerSocketFactory. We're running TC 4.1.29. > > Here's our Connector element: > <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" > port="7002" > scheme="https" > secure="true" > address="127.0.0.1" > enableLookups="false"> > <Factory className="nyw.catalina.NYWCoyoteServerSocketFactory" > clientAuth="true"/> > </Connector> > > Works great. > > -Jim > > Anton Ushakov wrote: > > Hello Tomcat Developers! > > > > I'm working with Tomcat 4.1.29 and I'd like to use my own > > ServerSocketFactory, as I'm working on a custom implementation of httpg > > (HTTP over GSSAPI authenticated sockets). This seems impossible by > > design, which I think may be a bug. > > > > Instead of using the deprecated HttpConnector I'm trying to use the > > CoyoteConnector. The trouble is, with CoyoteConnector there is no way to > > override the ServerSocketFactory to be used. My > > CustomServerSocketFactory implements > > org.apache.catalina.net.ServerSocketFactory, and I tried using the > > following in server.xml: > > > > <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" > > port="6688" minProcessors="5" maxProcessors="75" > > enableLookups="true" redirectPort="8443" > > acceptCount="100" debug="50" connectionTimeout="20000" > > scheme="httpg" > > useURIValidationHack="false" disableUploadTimeout="true"> > > <Factory className="my.own.CustomServerSocketFactory" > > principal="service/[EMAIL PROTECTED]" > > keytab="/etc/keytab" /> > > </Connector> > > > > > > This will successfully set the factory in CoyoteConnector, but it does > > NOT propagate to org.apache.coyote.http11.Http11Protocol, and the actual > > factory getting used at runtime is the default one in Http11Protocol. > > The CoyoteConnector's "factory" datamember is totally ignored. > > > > I would think that in org/apache/coyote/tomcat4/CoyoteConnector.java > > around lines 1111-1135 there should be something to propagate the socket > > factory to the protocolHandler. However even then, Http11Protocol > > insists on using org.apache.tomcat.util.net.ServerSocketFactory, not > > the org.apache.catalina.net.ServerSocketFactory required by the > > CoyoteConnector. (?) > > > > Bottom line - how is one supposed to specify a custom > > ServerSocketFactory with the CoyoteConnector? > > > > Bill Barker has emailed me a suggestion of using the > > socketFactory="fully.qualified.name.of.MyOwnServerSocketFactory" > > attribute on the <Connector> element. While I appreciate the response, > > that doesn't set the factory datamember in the Connector, and neither > > does it change the socketFactory in the protocolHandler. > > > > I appreciate your help on this > > > > -anton > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]