summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGoogle Code Exporter <GoogleCodeExporter@users.noreply.github.com>2015-03-16 10:31:37 -0400
committerGoogle Code Exporter <GoogleCodeExporter@users.noreply.github.com>2015-03-16 10:31:37 -0400
commit440dfd392505c6ec941c152432964470cc4202bf (patch)
tree911ad375b6866c3fa8acf02d6f5598d1d572f1df
downloadlibproxy-git-wiki.tar.gz
Migrating wiki contents from Google Codewiki
-rw-r--r--Applications.md48
-rw-r--r--BuildingFromSource.md49
-rw-r--r--ConfigurationLogic.md55
-rw-r--r--Contact.md8
-rw-r--r--ContactTemplate.md24
-rw-r--r--EncryptionMatrix.md4
-rw-r--r--Features.md35
-rw-r--r--GetInvolved.md29
-rw-r--r--HowTo.md181
-rw-r--r--IgnorePatterns.md18
-rw-r--r--ProjectHome.md43
-rw-r--r--Releasing.md17
-rw-r--r--Roadmap.md9
-rw-r--r--Targets.md7
-rw-r--r--WindowsPort.md21
15 files changed, 548 insertions, 0 deletions
diff --git a/Applications.md b/Applications.md
new file mode 100644
index 0000000..6582de5
--- /dev/null
+++ b/Applications.md
@@ -0,0 +1,48 @@
+| _**Applications**_ -- A list of programs that should link to libproxy: | | | | | |
+|:------------------------------------------------------------------------|:|:|:|:|:|
+| **Name** | **Website** | **Maling list** | **Bug URL** | **Contacted?** | **Adopted?** |
+| libsoup | http://live.gnome.org/LibSoup | http://mail.gnome.org/mailman/listinfo/libsoup-list | http://bugzilla.gnome.org/show_bug.cgi?id=502103 | YES | YES |
+| libcurl | http://curl.haxx.se/libcurl/ | http://curl.haxx.se/mail/list.cgi?list=curl-library | http://sourceforge.net/tracker/index.php?func=detail&aid=1855054&group_id=976&atid=350976 | YES | no |
+| libneon | http://www.webdav.org/neon/ |
+
+&lt;mailinglist&gt;
+
+ |
+
+&lt;bug&gt;
+
+ | no | YES |
+| wget | http://www.gnu.org/software/wget/ | http://wget.addictivecode.org/MailingLists | http://lists.gnu.org/archive/html/bug-wget/2009-08/msg00032.html | YES | no |
+| Gnome | http://www.gnome.org | http://mail.gnome.org/mailman/listinfo/desktop-devel-list | http://bugzilla.gnome.org/ | yes | yes |
+| Pidgin | http://www.pidgin.im | http://pidgin.im/listinfo.html | http://developer.pidgin.im/ticket/4459 | YES | no |
+| Liferea | | | | no | no |
+| VideoLan Client | http://www.videolan.org | http://www.videolan.org/support/lists.html | http://article.gmane.org/gmane.comp.video.videolan.vlc.devel/43245 | yes | yes |
+| Telepathy Gabble | http://telepathy.freedesktop.org/ | | | yes | yes (GLib) |
+| Telepathy Butterfly | | | | yes | yes |
+| Telepathy Haze | | | http://developer.pidgin.im/ticket/4459 | yes | no |
+| Ekiga | | | | no | no |
+| X-Chat | | | | no | yes |
+| Konqueror | | | | no | no |
+| Vinegre | | | | no | no |
+| Rhythmbox | | | | no | no |
+| Sound Juicer | | | | no | no |
+| Subversion | | http://svn.haxx.se/dev/archive-2010-09/0620.shtml (via libneon) | http://subversion.tigris.org/issues/show_bug.cgi?id=3740 | yes | no |
+| Aria2 | http://aria2.sourceforge.net/ | | https://sourceforge.net/tracker/?func=detail&aid=2794235&group_id=159897&atid=813676 | yes | no |
+| KDE | http://www.kde.org | http://www.kde.org/mailinglists/ | http://bugs.kde.org/ | no | no |
+| Java | http://iced-tea.org/ | http://mail.openjdk.java.net/mailman/listinfo/distro-pkg-dev | | no | no |
+| Python | http://www.python.org | http://www.python.org/community/lists/ | | no | no |
+| .NET/Mono | | | | no | no |
+| Firefox | | | https://bugzilla.mozilla.org/show_bug.cgi?id=517655 | no | no |
+| _**Distributions**_ -- A list of operating systems that should provide libproxy: | | | | | |
+| **Name** | **Website** | **Mailing list** | **Bug URL** | **Contacted?** | **Packaged?** |
+| Ubuntu | http://www.ubuntu.com | | | no | yes / jaunty |
+| Fedora | http://www.fedoraproject.org | | [RedHat Bugzilla](https://bugzilla.redhat.com/show_bug.cgi?id=457035) | yes | yes |
+| Debian | http://www.debian.org | | | no | no |
+| OpenSUSE | http://www.opensuse.org | | [Novell Bugzilla](https://bugzilla.novell.com/show_bug.cgi?id=397249) | yes | yes / 11.2+ |
+| Mandriva | http://www.mandriva.com | | | no | yes |
+| Gentoo | http://www.gentoo.org | | [Gentoo Bugzilla](http://bugs.gentoo.org/show_bug.cgi?id=244028) | yes | yes |
+| Foresight Linux | http://www.foresightlinux.com | | | no | no |
+| FreeBSD | http://www.freebsd.org | | | no | no |
+| NetBSD | http://www.netbsd.org | | | no | no |
+| OpenBSD | http://www.openbsd.org | | | no | no |
+| OpenSolaris | http://www.opensolaris.org | | | no | yes | \ No newline at end of file
diff --git a/BuildingFromSource.md b/BuildingFromSource.md
new file mode 100644
index 0000000..7231010
--- /dev/null
+++ b/BuildingFromSource.md
@@ -0,0 +1,49 @@
+This site deals with compilation for Linux and similiar systems. If you're interested in a windows version, please have a look at [WindowsPort](WindowsPort.md).
+
+# Get the Code #
+```
+svn checkout http://libproxy.googlecode.com/svn/trunk/ libproxy
+```
+
+# Install the Build Requirements #
+Fedora:
+```
+yum install xulrunner-dev x11-dev xmu-dev gconf-dev dbus-dev networkmanager-dev
+```
+
+Ubuntu:
+```
+sudo apt-get install libmozjs-dev libxmu-dev libgconf2-dev libdbus-1-dev network-manager-dev xserver-xorg-dev
+```
+
+
+libproxy can be build with minimal dependencies or with several additional plugins. This matrix lists the necessary dependencies for all available plugins.
+
+| Plugin | Fedora | Ubuntu |
+|:-------|:-------|:-------|
+| NetworkManager Plugin| dbus-devel, NetworkManager-devel | libdbus-1-dev, network-manager-dev |
+| Gnome Config Plugin | GConf2-devel | libgconf2-dev |
+| KDE Config Plugin | kdelibs-devel | kdelibs5-dev |
+| PAC via Firefox/Xulrunner | xulrunner-devel | firefox-dev or libmozjs-dev |
+| PAC via WebKit | webkitgtk-devel | libwebkit-dev |
+
+Information on libproxy bindings coming soon...
+
+
+# Building the Code #
+
+For the most up-to-date information about building and configuring libproxy please refer to the [INSTALL](http://code.google.com/p/libproxy/source/browse/trunk/INSTALL) file.
+
+## Quick Start ##
+```
+1. mkdir build
+2. cd build
+3. cmake ..
+4. make
+5. make install
+```
+
+## Testing it Out ##
+```
+/usr/local/bin/proxy http://www.google.com
+```
diff --git a/ConfigurationLogic.md b/ConfigurationLogic.md
new file mode 100644
index 0000000..f21d8e1
--- /dev/null
+++ b/ConfigurationLogic.md
@@ -0,0 +1,55 @@
+# Introduction #
+
+As the proxy configuration predates libproxy, we need to consider previous implementation behavior to ensure consistency with user expectations. This wiki pages presents analyses of well known implementation base on the platform they run on.
+
+# Linux #
+
+On Linux the pioneer of proxy support is Mozilla browsers (former Netscape). But other browsers do support proxy and has it's own proxy configuration interpretation logic. Current Gnome proxy settings is a copy of Firefox settings.
+
+## Firefox ##
+
+When using Firefox internal manual settings, the proxy is selected base on the most specific proxy (e.g. HTTP before SOCKS). Only one proxy is selected, if connection to that proxy fails, then connection fails.
+
+ * IF protocol specific proxy is set THEN use it
+ * ELSE IF SOCKS proxy is set THEN use it
+ * ELSE use direct connection.
+
+## Firefox and Chromium (with Gnome settings) ##
+
+After some testing we found that Chromium mimics perfectly Firefox behavior when using system settings. When using manual proxy configuration mode, those browsers chooses a proxy base on the most generic solution (SOCKS) to the most specific (per protocol proxies), with an exception when a single proxy is set for all protocols. Only one protocol is selected and no fallback will occur in the case of failures. Those browsers support SOCKS, HTTP, HTTPS, FTP and Firefox also support Gopher. You can also set the configuration to use a specific PAC file or to automatically discover one (WPAD) but those does not contain any special logic. Next is the logic represent as pseudo code:
+
+ * IF not using same proxy for all protocols THEN
+ * IF SOCKS is set THEN use it
+ * ELSE IF protocol specific proxy is set THEN use it
+ * ELSE IF using same proxy for all protocols THEN
+ * IF SOCKS is set THEN use it
+ * IF no proxy has been set THEN use direct connection
+
+## Konqueror ##
+
+This is the default browser in the KDE desktop environment. This browser only support protocol specific proxy (no SOCKS), thus logic is very basic.
+
+# OS X #
+
+OS X uses it's own way for proxy settings. It supports protocols including SOCKS, HTTP, HTTPS, FTP, Gopher, RTSP, and automatic configuration through PAC files. For sake of simplicity, we have tested the logic with the default browser Safari.
+
+## Safari ##
+
+Safari interpret proxy logic differently from Firefox. If multiple proxy are configured, it try each of them until a connection is established. From our testing the order seems to be from most specific to most generic (starting with manual configuration). Next is the logic represented as pseudo code:
+
+ * DEFINE proxy\_list as list
+ * IF protocol specific proxy is set THEN add it to proxy\_list
+ * IF SOCKS proxy is set THEN append it to proxy\_list
+ * IF PAC auto-configuration is set THEN append it to proxy\_list
+ * FOREACH proxy in proxy\_list
+ * connect to proxy
+ * IF connection failed THEN continue
+ * ELSE stop
+
+# Windows #
+
+Windows user most often use Internet Explorer, Firefox or Opera for browsing. Analyses as shown that Firefox acts exactly the same as on Linux, except that same logic is applied for internal settings and system setting (IE settings). Internet explorer also act the same way, and Opera only support protocol specific proxies (no SOCKS). So essentially, if chooses choose the most specific proxy, and if that one fails the own connection fails.
+
+# Conclusion #
+
+Base on current result, we see that the most common logic is to select a proxy starting from the most specific (HTTP, FTP, etc.) to the least specific (SOCKS, PAC then WPAD). OS X pushes a bit further by trying all the configure proxy that match the protocol. This technique is interesting for libproxy since it warranty that connection will be possible for all cases covered by the others. The only difference with the Gnome environment is that OS X may connect through an HTTP server while Firefox and Chromium (on Gnome) would connect to a SOCKS server if both are available. \ No newline at end of file
diff --git a/Contact.md b/Contact.md
new file mode 100644
index 0000000..560090a
--- /dev/null
+++ b/Contact.md
@@ -0,0 +1,8 @@
+### IRC ###
+`#libproxy` on irc.freenode.net
+
+### Email ###
+Send an email to [libproxy@googlegroups.com](mailto:libproxy@googlegroups.com)
+
+
+Browse the list at http://groups.google.com/group/libproxy \ No newline at end of file
diff --git a/ContactTemplate.md b/ContactTemplate.md
new file mode 100644
index 0000000..7140a90
--- /dev/null
+++ b/ContactTemplate.md
@@ -0,0 +1,24 @@
+Use the following template when contacting a project or distribution to let them know about libproxy. Please replace BUG\_URL and NAME with the url to the bug report filed and your name, respectively.
+
+### BEGIN\_TEMPLATE ###
+Hello everyone!
+
+I would like to announce the release of version 0.2 of libproxy, an
+open-source library that provides functions to manage proxy
+configurations uniformly across applications and user sessions.
+libproxy has a stable API and modules to read configuration from
+GNOME, KDE, a file, or an environment variable (for compatibility with
+existing implementations). In addition, libproxy automatically adjusts
+for changing network topology via integration with `NetworkManager` and
+is able to autodetect proxy settings through WPAD and PAC compliance.
+
+Through these features, an application that links to libproxy will not
+have to worry about proxy configuration or even a change of networks:
+libproxy will automatically provide the correct proxy to use.
+
+Please have a look at http://libproxy.googlecode.com for more info. A
+bug requesting libproxy adoption has also been filed: BUG\_URL
+
+Thanks for your time!
+NAME
+### END\_TEMPLATE ### \ No newline at end of file
diff --git a/EncryptionMatrix.md b/EncryptionMatrix.md
new file mode 100644
index 0000000..2b85051
--- /dev/null
+++ b/EncryptionMatrix.md
@@ -0,0 +1,4 @@
+| | **Endpoint HTTP** | **Endpoint HTTPS** |
+|:|:------------------|:-------------------|
+| **Proxy HTTP** | http | http |
+| **Proxy HTTPS** | http | http | \ No newline at end of file
diff --git a/Features.md b/Features.md
new file mode 100644
index 0000000..c047e30
--- /dev/null
+++ b/Features.md
@@ -0,0 +1,35 @@
+# Features #
+| **Area** | **Version Added** | **Version Stablized** | **Dependencies** |
+|:---------|:------------------|:----------------------|:-----------------|
+| _**API**_ | | | |
+| Thread Safety | 0.2.2 | | |
+| External C API | 0.1 | 0.2 | |
+| External Python API | 0.2 | | |
+| External .NET API | 0.2 | | |
+| Internal API | 0.1 | | |
+| _**Core Features**_ | | | |
+| CLI Tool | 0.1 | | |
+| [Proxy Auto-Configuration (PAC)](http://en.wikipedia.org/wiki/Proxy_auto-config) | 0.1 | | |
+| [Web Proxy Auto-Discovery (WPAD)](http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol) | 0.1 | | |
+| Configuration Lockdown | 0.2 | | |
+| _**Configuration Plugins**_ | | | | **Config Type** |
+| Environment variable config plugin | 0.1 | 0.2 | | No type specified |
+| INI-style file config plugin | 0.2 | | | USER & SYSTEM |
+| GNOME config plugin | 0.1 | | x11, xmu, gconf | SESSION |
+| KDE config plugin | 0.2 | | x11, xmu | SESSION |
+| Windows registry config plugin | | | |
+| Mac OS X InternetConfig config plugin | | | |
+| LDAP config plugin | | | |
+| [dconf](http://live.gnome.org/dconf) config plugin | | | |
+| _**Javascript Plugins**_ | | | |
+| PAC via Firefox/Xulrunner | 0.1 | | firefox or xulrunner |
+| PAC via WebKit | 0.2.3 | | WebKit or JavaScriptCore |
+| PAC via Safari | | | |
+| PAC via Internet Explorer | | | |
+| _**Other Plugins**_ | | | |
+| NetworkManager plugin | 0.2 | | dbus |
+
+See BuildingFromSource for specific build dependencies and distro package requirements.
+
+# Proxy Authentication #
+Because proxy authentication is protocol specific, it is outside the scope of this library. libproxy tells you WHICH proxy servers to try to use, not HOW to use them. \ No newline at end of file
diff --git a/GetInvolved.md b/GetInvolved.md
new file mode 100644
index 0000000..86da962
--- /dev/null
+++ b/GetInvolved.md
@@ -0,0 +1,29 @@
+# I can code! #
+ * **Coding on libproxy**
+ 1. Check out the [TODO list](Roadmap.md)
+ 1. Make a patch
+ 1. Submit it for review
+
+ * **Adding libproxy support to other applications**
+ 1. Pick a [project that needs to support libproxy](Applications.md)
+ 1. Download the source code for that project
+ 1. Make a patch for the project to [support libproxy](HowTo.md)
+ 1. File the patch on the pre-existing bug (see the PR section below)
+ 1. Politely dialog with the project and advocate for adoption of your patch
+
+# I can do PR! #
+ 1. Pick a [project that needs to support libproxy](Applications.md)
+ 1. Fill in the various info in the [application table](Applications.md)
+ 1. File a bug against that project
+ 1. Paste the URL to that bug into the [application table](Applications.md)
+ 1. Fill out the [contact template](ContactTemplate.md) and email it to the project's mailing list
+ 1. Politely dialog with the project and advocate for libproxy adoption
+
+# I can write documentation! #
+ 1. Look for holes in the current documentation
+ 1. Edit the wiki
+
+# I can juggle 5 flaming chainsaws! #
+ 1. Cool!
+ 1. How much does medical insurance cost you?
+ 1. Actually, I don't think we have any use for this skill... \ No newline at end of file
diff --git a/HowTo.md b/HowTo.md
new file mode 100644
index 0000000..4e97b26
--- /dev/null
+++ b/HowTo.md
@@ -0,0 +1,181 @@
+# Programming #
+## C(++) ##
+### API ###
+There are only three functions in the external API:
+```
+/**
+ * Creates a new pxProxyFactory instance. This instance should be kept
+ * around as long as possible as it contains cached data to increase
+ * performance. Memory usage should be minimal (cache is small) and the
+ * cache lifespan is handled automatically.
+ *
+ * @return A new pxProxyFactory instance or NULL on error
+ */
+pxProxyFactory *px_proxy_factory_new(void);
+
+/**
+ * Get which proxies to use for the specified URL.
+ *
+ * A NULL-terminated array of proxy strings is returned.
+ * If the first proxy fails, the second should be tried, etc...
+ * Don't forget to free the strings/array when you are done.
+ * If an unrecoverable error occurs, this function returns NULL.
+ *
+ * Regarding performance: this method always blocks and may be called
+ * in a separate thread (is thread-safe). In most cases, the time
+ * required to complete this function call is simply the time required
+ * to read the configuration (i.e. from gconf, kconfig, etc).
+ *
+ * In the case of PAC, if no valid PAC is found in the cache (i.e.
+ * configuration has changed, cache is invalid, etc), the PAC file is
+ * downloaded and inserted into the cache. This is the most expensive
+ * operation as the PAC is retrieved over the network. Once a PAC exists
+ * in the cache, it is merely a javascript invocation to evaluate the PAC.
+ * One should note that DNS can be called from within a PAC during
+ * javascript invocation.
+ *
+ * In the case of WPAD, WPAD is used to automatically locate a PAC on the
+ * network. Currently, we only use DNS for this, but other methods may
+ * be implemented in the future. Once the PAC is located, normal PAC
+ * performance (described above) applies.
+ *
+ * The format of the returned proxy strings are as follows:
+ * - http://[username:password@]proxy:port
+ * - socks://[username:password@]proxy:port
+ * - socks5://[username:password@]proxy:port
+ * - socks4://[username:password@]proxy:port
+ * - <procotol>://[username:password@]proxy:port
+ * - direct://
+ * Please note that the username and password in the above URLs are optional
+ * and should be use to authenticate the connection if present.
+ *
+ * For SOCKS proxies, when the protocol version is specified (socks4:// or
+ * sock5://), it is expected that only this version is used. When only
+ * socks:// is set, the client MUST try SOCKS version 5 protocol and, on
+ * connection failure, fallback to SOCKS version 4.
+ *
+ * Other proxying protocols may exist. It is expected that the returned
+ * configuration scheme shall match the network service name of the
+ * proxy protocol or the service name of the protocol being proxied if the
+ * previous does not exist. As an example, on Mac OS X you can configure a
+ * RTSP streaming proxy. The expected returned configuration would be:
+ * - rtsp://[username:password@]proxy:port
+ *
+ * @url The URL we are trying to reach
+ * @return A NULL-terminated array of proxy strings to use
+ */
+char **px_proxy_factory_get_proxies(pxProxyFactory *self, const char *url);
+
+/**
+ * Frees the pxProxyFactory instance when no longer used.
+ */
+void px_proxy_factory_free(pxProxyFactory *self);
+```
+
+### Example ###
+Take a look at the simple pseudo-code below to get started. A complete functioning program is found in the source tarball at src/bin/proxy.c.
+
+```
+// This contains the libproxy public API
+#include <proxy.h>
+
+// A fake function that fetches the URL using the specified proxy.
+// This function is just a pseudo-summary of "whatever your application does"
+// Returns 1 on successful GET request.
+extern int fetch_url(char *url, char *proxy);
+
+int main()
+{
+ // Create a proxy factory instance
+ pxProxyFactory *pf = px_proxy_factory_new();
+ if (!pf) return 1;
+
+ // Get which proxies to use in order to fetch "http://www.google.com"
+ char **proxies = px_proxy_factory_get_proxies(pf, "http://www.google.com");
+
+ // Iterate over the returned proxies, attemping to fetch the URL
+ for (int i=0 ; proxies[i] ; i++)
+ if (fetch_url("http://www.google.com", proxies[i]))
+ break;
+
+ // Free the proxy list
+ for (int i=0 ; proxies[i] ; i++)
+ free(proxies[i]);
+ free(proxies);
+
+ // Free the proxy factory
+ px_proxy_factory_free(pf);
+
+ return 0;
+}
+```
+
+## Python ##
+
+```
+import libproxy
+
+URL = "http://www.google.com"
+
+pf = libproxy.ProxyFactory()
+for proxy in pf.getProxies(URL):
+ # Do something with the proxy
+ if fetch_url(URL, proxy):
+ break
+```
+
+# Controlling libproxy #
+## Module System ##
+**DISCLAIMER: The following has not been declared stable and may change or go away**
+
+In order to provide a wide variety of functionality while keeping the core of libproxy small, we use a module system. Most of our functionality is provided directly from the backend modules. There are 5 types of modules, each which provide a certain function:
+ 1. config - reads configuration
+ 1. ignore - determines whether or not a given ignore pattern matches the current URL
+ 1. network - determines whether or not the network topology has changed
+ 1. pacrunner - evaluates a PAC file in a given javascript interpreter
+ 1. wpad - implements the "guts" of the wpad detection
+
+All modules will be loaded at px\_proxy\_factory\_new() and will remain loaded until px\_proxy\_factory\_free() is called. There are two exceptions to this. The first is if the plugin type is declared as a singleton. This is only true in the case of pacrunners and allows us to have only the first javascript engine loaded in memory. The second case is a SESSION config module (discussed below). SESSION config modules MUST NOT allow instantiation if the application is not being loaded in the correct session. Thus, if you are running in GNOME, the KDE SESSION config module will not be loaded.
+
+### Blaclist/Whitelist ###
+**ATTENTION! USE THE FOLLOWING FEATURE WITH GREAT CARE! DO NOT USE IT FOR CONFIG MODULES!**
+
+If you want to blacklist certain modules you can use the PX\_MODULE\_BLACKLIST and/or PX\_MODULE\_WHITELIST environmental variables. For instance, if you are using libproxy in a webkit based browser, you will probably want to force the usage of the webkit pacrunner. This is done as follows:
+```
+export PX_MODULE_BLACKLIST=pacrunner_*
+export PX_MODULE_WHITELIST=pacrunner_webkit
+```
+
+This functionality exists primarily for our internal testing and for the web-browser case I listed above. For config modules use the PX\_CONFIG\_ORDER functionality described below.
+
+### Config Modules ###
+Config modules read proxy configuration from a source. Every config module has a type. There are three confnig types:
+ 1. SYSTEM - Defines configuration on a system-wide basis
+ 1. USER - Defines configuration on a user-wide basis
+ 1. SESSION - Defines configuration for this current login session only
+A module can also choose to have no config type.
+
+The config module sources (as of 0.3.0) are:
+ 1. direct - always return "direct://", this is the global fallback
+ 1. envvar - reads http\_proxy, https\_proxy, ftp\_proxy and no\_proxy environment variables
+ 1. file - reads /etc/proxy.conf (SYSTEM) and/or ~/.proxy.conf (USER)
+ 1. gnome - reads gconf (SESSION)
+ 1. kde - reads kconfig (SESSION)
+ 1. wpad - always returns "wpad://", this is used to fall back on autodetect if desired
+
+By default, modules are called in the following order:
+ 1. USER
+ 1. SESSION
+ 1. SYSTEM
+ 1. envvar
+ 1. wpad
+ 1. direct
+
+The order _within_ the categories is undefined and could be random. If a module says it can't find the configuration, the next module is tried.
+
+The module order can be manually specified through an environmental variable (PX\_CONFIG\_ORDER). The order indicated in this variable **does not replace** the internal order, but prepends to it. Thus, if you wanted to prefer (for forcing a module, see whitelist/blacklist above) the usage of envvar, you would specify the following which would put envvar first in the list:
+```
+export PX_CONFIG_ORDER=config_envvar
+```
+
+You can also lock-down the module order for all users on a system using /etc/proxy.conf. This feature is not yet documented (any volunteers!?). \ No newline at end of file
diff --git a/IgnorePatterns.md b/IgnorePatterns.md
new file mode 100644
index 0000000..09966ba
--- /dev/null
+++ b/IgnorePatterns.md
@@ -0,0 +1,18 @@
+| | **`libproxy`** | **`GNOME`** | **`KDE`** | **`Firefox`** | **`Env. Var.`** | **`IE`** | **`Safari`** |
+|:|:---------------|:------------|:----------|:--------------|:----------------|:---------|:-------------|
+| **`IPv4`** | **DONE** | Y | | Y | Y | | |
+| **`IPv4:80`** | **DONE** | N | | | Y | | |
+| **`IPv4/CIDR`** | **DONE** | Y | | Y | N | | |
+| **`IPv4/Netmask`** | **DONE** | N | | | N | | |
+| **`IPv6`** | **DONE** | Y | | Y | Y | | |
+| **`IPv6:80`** | **DONE** | N | | | Y | | |
+| **`IPv6/CIDR`** | **DONE** | Y | | Y | N | | |
+| **`IPv6/Netmask`** | **DONE** | N | | | N | | |
+| **`domain.com`** | **DONE** | Y | | Y | Y | | |
+| **`domain.com:80`** | **DONE** | N | | | Y | | |
+| **`.domain.com`** | **DONE** | N | | Y | N | | |
+| **`.domain.com:80`** | **DONE** | N | | | N | | |
+| **`*.domain.com`** | **DONE** | Y | | | N | | |
+| **`*.domain.com:80`** | **DONE** | N | | | N | | |
+| **`http://domain.com/foo`** | | N | | | N | | |
+| **`http://domain.com/f*`** | | N | | | N | | | \ No newline at end of file
diff --git a/ProjectHome.md b/ProjectHome.md
new file mode 100644
index 0000000..2e85eaf
--- /dev/null
+++ b/ProjectHome.md
@@ -0,0 +1,43 @@
+libproxy is a library that provides automatic proxy configuration management.
+
+# The Problem #
+
+**Problem statement**: _Applications suck at correctly and consistently supporting proxy configuration._
+
+Proxy configuration is problematic for a number of reasons:
+ 1. There are a variety of places to get configuration information
+ 1. There are a variety of proxy types
+ 1. Proxy auto-configuration (PAC) requires Javascript (which most applications don't have)
+ 1. Automatically determining PAC location requires an implementation of the WPAD protocol
+
+These issues make programming with support for proxies _hard_. Application developers only want to answer the question: **Given a network resource, how do I reach it?**
+Because this is their concern, most applications just give up and try to read the proxy from an environment variable. This is problematic because:
+ 1. Given the increased use of mobile computing, network switching frequently occurs during the lifetime of an application
+ 1. Each application is required to implement the (non-trivial) WPAD and PAC protocols, including a Javascript engine
+ 1. It prevents a network administrator from locking down settings on a particular host or user
+ 1. In most cases, the environmental variable is almost never correct by default
+
+# The Solution #
+libproxy exists to answer the question: **Given a network resource, how do I reach it?** It handles all the details, enabling you to get back to programming.
+
+GNOME? KDE? Command line? WPAD? PAC? Network changed? It doesn't matter! Just [ask libproxy what proxy to use](HowTo.md): you get simple code and your users get correct, consistant behavior and broad infrastructure compatibility.
+
+# Why use libproxy? #
+libproxy offers the following features:
+ * support for all major platforms: Windows, Mac and Linux/UNIX (see upcoming 0.4 release)
+ * extremely small core footprint
+ * no external dependencies within libproxy core (libproxy plugins may have dependencies)
+ * only 3 functions in the stable-ish external API (1.0 will offer full stability)
+ * dynamic adjustment to changing network topology
+ * a standard way of dealing with proxy settings across all scenarios
+ * a sublime sense of joy and accomplishment
+
+# Frequently Asked Questions #
+ * [What features does libproxy currently provide? Future plans?](Features.md)
+ * [Does libproxy support proxy authentication?](Features.md)
+ * [Which plugins get used in which order?](Features.md)
+ * [How do I use libproxy in my application?](HowTo.md)
+ * [What programs currently use libproxy?](Applications.md)
+ * [How can I help?](GetInvolved.md)
+ * [How can I donate?](https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=nathaniel%40natemccallum%2ecom&item_name=libproxy&no_shipping=1&cn=Thanks&tax=0&currency_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8)
+ * [How can I contact you?](Contact.md) \ No newline at end of file
diff --git a/Releasing.md b/Releasing.md
new file mode 100644
index 0000000..81e10be
--- /dev/null
+++ b/Releasing.md
@@ -0,0 +1,17 @@
+# Introduction #
+
+Instructions to make a libproxy release.
+
+
+# Details #
+
+ * Update NEWS file and version number in libproxy/CMakeLists.txt
+ * Commit those changes with comment "Version X.X.X"
+ * svn commit -m "Version X.X.X"
+ * Create a version tag
+ * svn copy https://libproxy.googlecode.com/svn/trunk https://libproxy.googlecode.com/svn/tags/libproxy-X.X.X -m "Version X.X.X"
+ * Create source packages
+ * cmake . && make package\_source
+ * Upload the ZIP and Tar.gz in the download section with lables Type-Source, OpSys-All and Featured
+ * Removed featured tag from previous files
+ * Send announcement email to libproxy@googlegroups.com \ No newline at end of file
diff --git a/Roadmap.md b/Roadmap.md
new file mode 100644
index 0000000..a7290e3
--- /dev/null
+++ b/Roadmap.md
@@ -0,0 +1,9 @@
+# Roadmap #
+
+Basic plan is as follows:
+ * v0.5 - Getting/setting credentials
+ * v0.6 - Implement all WPAD methods
+ * v0.7 - Full coverage by the testing suite
+ * v0.8 - 1.0 Alpha
+ * v0.9 - 1.0 Beta
+ * v1.0 - Yeah! \ No newline at end of file
diff --git a/Targets.md b/Targets.md
new file mode 100644
index 0000000..529d8e8
--- /dev/null
+++ b/Targets.md
@@ -0,0 +1,7 @@
+| | GNOME | KDE | Win32 | Mac OS X |
+|:|:------|:----|:------|:---------|
+| config | x | x | x | x |
+| ignore | x | x | x | x |
+| network | x | x | | ? |
+| pac | x | x | | x |
+| wpad | x | x | | x | \ No newline at end of file
diff --git a/WindowsPort.md b/WindowsPort.md
new file mode 100644
index 0000000..23de1f5
--- /dev/null
+++ b/WindowsPort.md
@@ -0,0 +1,21 @@
+# Introduction #
+
+libproxy 0.4 (not yet released) now contains a native Windows port. This port is targeted towards application developers who will want to ship libproxy bundled with their application.
+
+# What's working #
+
+ * It builds and links
+ * Applications can link against it
+ * We read configuration from the windows registry (ie Internet Options)
+
+# What's not working #
+ * PAC / WPAD: this is due to not yet building against mozjs or webkit. TODO
+ * Threading: this isn't a problem, just know that libproxy is not threadsafe on win32
+
+# Requirements #
+ * Visual C++ (any version)
+ * CMake >= 2.8
+ * Subversion
+
+# Compilation #
+Check out the latest trunk using SVN. Use CMake to generate the build files. The libproxy.sln file should be in your build directory. Double click it to load the project in Visual Studio. Build like normal. \ No newline at end of file