================================================================================
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
================================================================================


            Apache Tomcat Native Library

                        TODO


Java Tests and Examples
-----------------------

- "ant run-echo": what is the expected behaviour of this example.
  I couldn't get it to do something understandable.
  Document the example in the README.txt.

- "ant run-ssl-server": Could't we include a test certificate in the
  distribution?

- "ant run-ssl-server": What should the test produce, if run successfully?
  Document the example in the README.txt.

- "ant run-local-server": Creates a unix socket "\\.\PIPE\test" in the
  examples directory, then waits. How is the test expected to work?
  And the file name doesn't seem to be appropriate for Unix.
  Document the example in the README.txt.


Java Classes Source Distribution
--------------------------------

Check on how to handle the test and examples classes.
I think they have no other home.


Releasing
---------

- ZIP download seems to have group write permissions set
  (at least after I extract it on Solaris).
  It's a bit strange that permissions differ between the
  tar and zip archives.
