.. 
.. 
.. Licensed 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.
.. 

%%%%%%%%%%%%%%%
Traffic Control
%%%%%%%%%%%%%%%

The vast majority of today's Internet traffic is media files being sent from a single source to many thousands or even millions of destinations.  Content Delivery Networks make that one-to-many distribution possible in an economical way. 

Traffic Control is an Open Source implementation of a Content Delivery Network. 

The following documentation sections are available:

CDN Basics 
==========
A review of the basic functionality of a Content Delivery Network. 

.. toctree::
   :maxdepth: 2

   basics/index


Traffic Control Overview
========================
An introduction to the Traffic Control architecture, components, and their integration.

.. toctree::
   :maxdepth: 0

   overview/index

Administrator's Guide
=====================
How to deploy and manage a Traffic Control CDN.

.. toctree::
   :maxdepth: 3

   admin/index

Developer's Guide
==================
A guide to the various internal and external APIs, and a introduction for the Traffic Control developer.

.. toctree::
   :maxdepth: 3

   development/index


FAQ
===

.. toctree::
   :maxdepth: 3

   faq/index

Indices and Tables
==================

.. toctree::
   :maxdepth: 3

   glossary.rst


