[DOC] imported lots of internal documentations

Those documentations provide nothing to users nor contributors
but at least now I know where they are.
diff --git a/doc/design-thoughts/backends-v0.txt b/doc/design-thoughts/backends-v0.txt
new file mode 100644
index 0000000..d350e22
--- /dev/null
+++ b/doc/design-thoughts/backends-v0.txt
@@ -0,0 +1,27 @@
+1 type générique "entité", avec les attributs suivants :
+
+  - frontend *f
+  - l7switch *s
+  - backend  *b
+
+des types spécifiques sont simplement des entités avec certains
+de ces champs remplis et pas forcément tous :
+
+  listen   = f [s] b
+  frontend = f [s]
+  l7switch = s
+  backend  = [s] b
+
+Ensuite, les traitements sont évalués dans l'ordre :
+  - listen   -> s'il a des règles de l7, on les évalue, et potentiellement on branche vers d'autres listen, l7 ou back, ou on travaille avec le back local.
+  - frontend -> s'il a des règles de l7, on les évalue, et potentiellement on branche vers d'autres listen, l7 ou back
+  - l7switch -> on évalue ses règles, potentiellement on branche vers d'autres listen, l7 ou backends
+  - backend  -> s'il a des règles l7, on les évalue (quitte à changer encore de backend) puis on traite.
+
+Les requêtes sont traitées dans l'ordre des chaînages f->s*->b, et les réponses doivent être
+traitées dans l'ordre inverse b->s*->f. Penser aux réécritures de champs Host à l'aller et
+Location en retour.
+
+D'autre part, prévoir des "profils" plutôt que des blocs de nouveaux paramètres par défaut.
+Ca permettra d'avoir plein de jeux de paramètres par défaut à utiliser dans chacun de ces
+types.
diff --git a/doc/backends.txt b/doc/design-thoughts/backends.txt
similarity index 100%
rename from doc/backends.txt
rename to doc/design-thoughts/backends.txt
diff --git a/doc/design-thoughts/be-fe-changes.txt b/doc/design-thoughts/be-fe-changes.txt
new file mode 100644
index 0000000..f242f8a
--- /dev/null
+++ b/doc/design-thoughts/be-fe-changes.txt
@@ -0,0 +1,74 @@
+- PR_O_TRANSP => FE  !!! devra peut-être changer vu que c'est un complément du mode dispatch.
+- PR_O_NULLNOLOG => FE
+- PR_O_HTTP_CLOSE => FE. !!! mettre BE aussi !!!
+- PR_O_TCP_CLI_KA => FE
+
+- PR_O_FWDFOR => BE.  FE aussi ?
+- PR_O_FORCE_CLO => BE
+- PR_O_PERSIST => BE
+- PR_O_COOK_RW, PR_O_COOK_INS, PR_O_COOK_PFX, PR_O_COOK_POST => BE
+- PR_O_COOK_NOC, PR_O_COOK_IND => BE
+- PR_O_ABRT_CLOSE => BE
+- PR_O_REDISP => BE
+- PR_O_BALANCE, PR_O_BALANCE_RR, PR_O_BALANCE_SH => BE
+- PR_O_CHK_CACHE => BE
+- PR_O_TCP_SRV_KA => BE
+- PR_O_BIND_SRC => BE
+- PR_O_TPXY_MASK => BE
+
+
+- PR_MODE_TCP : BE côté serveur, FE côté client
+
+- nbconn -> fe->nbconn, be->nbconn.
+  Pb: rendre impossible le fait que (fe == be) avant de faire ça,
+  sinon on va compter les connexions en double. Ce ne sera possible
+  que lorsque les FE et BE seront des entités distinctes. On va donc
+  commencer par laisser uniquement fe->nbconn (vu que le fe ne change
+  pas), et modifier ceci plus tard, ne serait-ce que pour prendre en
+  compte correctement les minconn/maxconn.
+  => solution : avoir beconn et feconn dans chaque proxy.
+
+- failed_conns, failed_secu (réponses bloquées), failed_resp... : be
+  Attention: voir les cas de ERR_SRVCL, il semble que parfois on
+  indique ça alors qu'il y a un write error côté client (ex: ligne
+  2044 dans proto_http).
+
+  => be et pas be->beprm
+
+- logs du backup : ->be (idem)
+
+- queue : be
+
+- logs/debug : srv toujours associé à be (ex: proxy->id:srv->id). Rien
+  pour le client pour le moment. D'une manière générale, les erreurs
+  provoquées côté serveur vont sur BE et celles côté client vont sur
+  FE.
+- logswait & LW_BYTES : FE (puisqu'on veut savoir si on logue tout de suite)
+
+- messages d'erreurs personnalisés (errmsg, ...) -> fe
+
+- monitor_uri -> fe
+- uri_auth  -> (fe->firpm puis be->fiprm). Utilisation de ->be
+
+- req_add, req_exp => fe->fiprm, puis be->fiprm
+- req_cap, rsp_cap -> fe->fiprm
+- rsp_add, rsp_exp => be->fiprm, devrait être fait ensuite aussi sur fe->fiprm
+- capture_name, capture_namelen : fe->fiprm
+
+  Ce n'est pas la solution idéale, mais au moins la capture et configurable
+  par les filtres du FE et ne bouge pas lorsque le BE est réassigné. Cela
+  résoud aussi un pb d'allocation mémoire.
+
+
+- persistance (appsessions, cookiename, ...) -> be
+- stats:scope "." = fe (celui par lequel on arrive)
+  !!!ERREUR!!! => utiliser be pour avoir celui qui a été validé par
+  l'uri_auth.
+
+
+--------- corrections à effectuer ---------
+
+- remplacement de headers : parser le header et éventuellement le supprimer puis le(les) rajouter.
+- session->proto.{l4state,l7state,l7substate} pour CLI et SRV
+- errorloc : si définie dans backend, la prendre, sinon dans front.
+- logs : faire be sinon fe.
diff --git a/doc/buffers.fig b/doc/design-thoughts/buffers.fig
similarity index 100%
rename from doc/buffers.fig
rename to doc/design-thoughts/buffers.fig
diff --git a/doc/design-thoughts/config-language.txt b/doc/design-thoughts/config-language.txt
new file mode 100644
index 0000000..539c7a5
--- /dev/null
+++ b/doc/design-thoughts/config-language.txt
@@ -0,0 +1,117 @@
+Prévoir des commandes en plusieurs mots clés.
+Par exemple :
+
+  timeout connection XXX
+  connection scale XXX
+
+On doit aussi accepter les préfixes :
+
+  tim co XXX
+  co sca XXX
+
+Prévoir de ranger les combinaisons dans un tableau. On doit même
+pouvoir effectuer un mapping simplifiant le parseur.
+
+
+Pour les filtres :
+
+
+    <direction> <where> <what> <operator> <pattern> <action> [ <args>* ]
+
+    <direction> = [ req | rsp ]
+    <where>     = [ in | out ]
+    <what>      = [ line | LINE | METH | URI | h(hdr) | H(hdr) | c(cookie) | C(cookie) ]
+    <operator>  = [ == | =~ | =* | =^ | =/ | != | !~ | !* | !^ | !/ ]
+    <pattern>   = "<string>"
+    <action>    = [ allow | permit | deny | delete | replace | switch | add | set | redir ]
+    <args>      = optionnal action args
+
+    exemples:
+
+        req in URI     =^ "/images" switch images
+        req in h(host) =* ".mydomain.com" switch mydomain
+        req in h(host) =~ "localhost(.*)" replace "www\1"
+
+    alternative :
+
+    <direction> <where> <action> [not] <what> [<operator> <pattern> [ <args>* ]]
+
+        req in  switch   URI     =^ "/images" images
+        req in  switch   h(host) =* ".mydomain.com" mydomain
+        req in  replace  h(host) =~ "localhost(.*)" "www\1"
+        req in  delete   h(Connection)
+        req in  deny not line =~ "((GET|HEAD|POST|OPTIONS) /)|(OPTIONS *)"
+        req out set      h(Connection) "close"
+        req out add      line "Server: truc"
+
+
+    <direction> <action> <where> [not] <what> [<operator> <pattern> [ <args>* ]] ';' <action2> <what2>
+
+        req in  switch   URI     =^ "/images/" images ; replace "/"
+        req in  switch   h(host) =* ".mydomain.com" mydomain
+        req in  replace  h(host) =~ "localhost(.*)" "www\1"
+        req in  delete   h(Connection)
+        req in  deny not line =~ "((GET|HEAD|POST|OPTIONS) /)|(OPTIONS *)"
+        req out set      h(Connection) "close"
+        req out add      line == "Server: truc"
+
+
+Extension avec des ACL :
+
+        req in acl(meth_valid)   METH =~ "(GET|POST|HEAD|OPTIONS)"  
+        req in acl(meth_options) METH == "OPTIONS" 
+        req in acl(uri_slash)    URI  =^ "/" 
+        req in acl(uri_star)     URI  == "*" 
+
+        req in deny acl !(meth_options && uri_star || meth_valid && uri_slash)
+
+Peut-être plus simplement :
+
+        acl meth_valid   METH =~ "(GET|POST|HEAD|OPTIONS)"  
+        acl meth_options METH == "OPTIONS" 
+        acl uri_slash    URI  =^ "/" 
+        acl uri_star     URI  == "*" 
+
+        req in  deny not acl(meth_options uri_star, meth_valid uri_slash)
+
+        req in  switch   URI     =^ "/images/" images ; replace "/"
+        req in  switch   h(host) =* ".mydomain.com" mydomain
+        req in  replace  h(host) =~ "localhost(.*)" "www\1"
+        req in  delete   h(Connection)
+        req in  deny not line =~ "((GET|HEAD|POST|OPTIONS) /)|(OPTIONS *)"
+        req out set      h(Connection) "close"
+        req out add      line == "Server: truc"
+
+Prévoir le cas du "if" pour exécuter plusieurs actions :
+
+        req in  if URI =^ "/images/" then replace "/" ; switch images
+
+Utiliser les noms en majuscules/minuscules pour indiquer si on veut prendre
+en compte la casse ou non :
+
+        if uri  =^ "/watch/"       setbe watch   rebase "/watch/" "/"
+        if uri  =* ".jpg"          setbe images
+        if uri  =~ ".*dll.*"       deny
+        if HOST =* ".mydomain.com" setbe mydomain
+        etc...
+
+Another solution would be to have a dedicated keyword to URI remapping. It
+would both rewrite the URI and optionally switch to another backend.
+
+        uriremap "/watch/"  "/"       watch
+        uriremap "/chat/"   "/"       chat
+        uriremap "/event/"  "/event/" event
+
+Or better :
+
+        uriremap "/watch/"  watch  "/"
+        uriremap "/chat/"   chat   "/"
+        uriremap "/event/"  event
+
+For the URI, using a regex is sometimes useful (eg: providing a set of possible prefixes.
+
+
+Sinon, peut-être que le "switch" peut prendre un paramètre de mapping pour la partie matchée :
+
+        req in  switch   URI     =^ "/images/" images:"/"
+
diff --git a/doc/design-thoughts/cttproxy-changes.txt b/doc/design-thoughts/cttproxy-changes.txt
new file mode 100644
index 0000000..6f34f3d
--- /dev/null
+++ b/doc/design-thoughts/cttproxy-changes.txt
@@ -0,0 +1,101 @@
+Nécessite CAP_NET_ADMIN (12)
+On peut donc aussi mettre CAP_NET_BIND_SERVICE (10) pour autoriser les ports < 1024
+
+
+charger le module :
+# modprobe ip_conntrack hashsize=65536
+# modprobe iptable_tproxy hashsize=65536
+# echo 15 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait 
+# echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait 
+
+
+Si on utilise "usesrc client", alors on rencontre ce problème en cas
+de réutilisation d'un port :
+
+# dmesg
+IP_TPROXY: error applying NAT mapping, hooknum=4 0103000a:e5a2 -> 05000001:d204
+IP_TPROXY: error applying NAT mapping, hooknum=4 0103000a:e5a2 -> 05000001:d204
+
+Solution retenue pour la configuration :
+
+  You have to write "usesrc XXXX" on the "source" line. "XXXX" is either
+  an IP address or the keyword "clientip" to reuse the client's IP with
+  a dynamically allocated port, or "client" to reuse both the client's IP
+  and port (dangerous). But due to the way cttproxy works, the source address
+  is mandatory. Eg:
+
+  backend static
+      source 192.168.1.254 usesrc clientip
+      server static1 192.168.1.10 source 192.168.1.254 usesrc clientip
+
+
+---- Anciennes réflexions ----
+
+Il faudrait donc peut-être toujours avoir un port dynamique, ou bien
+traiter le TIME_WAIT correctement en appliquant natdel => corrige pratiquement
+toujours le problème (mais réduire les timeouts semble important)
+
+
+  source 10.1.2.3 present 10.2.3.4
+  source 10.1.2.3 present same_ip
+  source 10.1.2.3 present same
+  source 10.1.2.3:5000 present same
+
+  source 10.1.2.3 appear_as 10.2.3.4
+  source 10.1.2.3 appear_as same_ip
+  source 10.1.2.3 appear_as same
+  source 10.1.2.3:5000 appear_as same
+
+  source 10.1.2.3 {keepsrc | keepip | usesrc 1.2.3.4}
+
+  source 10.1.2.3 snat { client | clientip | 1.2.3.4 }
+  source 10.1.2.3 extbind same
+  source 10.1.2.3 intercept same
+  source 10.1.2.3 spoof same
+  source 10.1.2.3 showsrc same
+  source 10.1.2.3 usesrc same
+  source 10.1.2.3 setsrc same
+  source 10.1.2.3 withsrc same
+  source 10.1.2.3 usesrc clientip:sameport
+  source 10.1.2.3 alias same
+  source 10.1.2.3 as same
+  source 10.1.2.3 outgoing same
+  source 10.1.2.3 public same
+  source 10.1.2.3:5000 pretend same
+
+  source 10.1.2.3=same
+  source 10.1.2.3=10.2.3.4
+
+  source 10.1.2.3^same
+  source 10.1.2.3^10.2.3.4
+
+  source 10.1.2.3@same
+  source 10.1.2.3@10.2.3.4
+
+  source 10.1.2.3!same
+  source 10.1.2.3!10.2.3.4
+
+  source 10.1.2.3|same
+  source 10.1.2.3|10.2.3.4
+
+  source 10.1.2.3(same)
+  source 10.1.2.3(10.2.3.4)
+
+  source 10.1.2.3~same
+  source 10.1.2.3~10.2.3.4
+
+A l'inverse, si "source" contient l'adresse vue :
+
+  source same bindto 1.2.3.4
+  source 2.3.4.5 bindto 1.2.3.4
+
+Problème: si "bindto" est oublié, le bind sur 2.3.4.5 ne fonctionnera pas.
+
+Pour l'adresse de listen (avec "bind"), il serait bien que l'adresse
+translatée apparaisse au même niveau que l'IP afin que les plages et
+listes continuent de fonctionner par association.
+
+Différences entre source et bind :
+  - source: 1 seule IP source, éventuellement un port, plus tard une plage
+  - bind  : liste de (IP source facultatives, port obligatoire, parfois une plage)
+
diff --git a/doc/how-it-works.txt b/doc/design-thoughts/how-it-works.txt
similarity index 100%
rename from doc/how-it-works.txt
rename to doc/design-thoughts/how-it-works.txt
diff --git a/doc/design-thoughts/sess_par_sec.txt b/doc/design-thoughts/sess_par_sec.txt
new file mode 100644
index 0000000..e936374
--- /dev/null
+++ b/doc/design-thoughts/sess_par_sec.txt
@@ -0,0 +1,13 @@
+Graphe des nombres de traitements par seconde unité de temps avec 
+  - un algo linéaire et très peu coûteux unitairement (0.01 ut)
+  - un algo en log(2) et 5 fois plus coûteux (0.05 ut)
+
+set yrange [0:1]
+plot [0:1000] 1/(1+0.01*x), 1/(1+0.05*log(x+1)/log(2))
+
+Graphe de la latence induite par ces traitements en unités de temps :
+
+set yrange [0:1000]
+plot [0:1000] x/(1+0.01*x), x/(1+0.05*log(x+1)/log(2))
+
+
diff --git a/doc/internals/connection-scale.txt b/doc/internals/connection-scale.txt
new file mode 100644
index 0000000..7c3d902
--- /dev/null
+++ b/doc/internals/connection-scale.txt
@@ -0,0 +1,44 @@
+Problème des connexions simultanées avec un backend
+
+Pour chaque serveur, 3 cas possibles :
+
+  - pas de limite (par défaut)
+  - limite statique (maxconn)
+  - limite dynamique (maxconn/(ratio de px->conn), avec minconn)
+
+On a donc besoin d'une limite sur le proxy dans le cas de la limite
+dynamique, afin de fixer un seuil et un ratio. Ce qui compte, c'est
+le point après lequel on passe d'un régime linéaire à un régime
+saturé.
+
+On a donc 3 phases :
+
+  - régime minimal  (0..srv->minconn)
+  - régime linéaire (srv->minconn..srv->maxconn)
+  - régime saturé (srv->maxconn..)
+
+Le minconn pourrait aussi ressortir du serveur ?
+En pratique, on veut :
+  - un max par serveur
+  - un seuil global auquel les serveurs appliquent le max
+  - un seuil minimal en-dessous duquel le nb de conn est
+    maintenu. Cette limite a un sens par serveur (jamais moins de X conns)
+    mais aussi en global (pas la peine de faire du dynamique en dessous de
+    X conns à répartir). La difficulté en global, c'est de savoir comment
+    on calcule le nombre min associé à chaque serveur, vu que c'est un ratio
+    défini à partir du max.
+
+Ca revient à peu près à la même chose que de faire 2 états :
+
+  - régime linéaire avec un offset (srv->minconn..srv->maxconn)
+  - régime saturé (srv->maxconn..)
+
+Sauf que dans ce cas, le min et le max sont bien par serveur, et le seuil est
+global et correspond à la limite de connexions au-delà de laquel on veut
+tourner à plein régime sur l'ensemble des serveurs. On peut donc parler de
+passage en mode "full", "saturated", "optimal". On peut également parler de
+la fin de la partie "scalable", "dynamique".
+
+=> fullconn 1000 par exemple ?
+
+
diff --git a/doc/internals/header-parser-speed.txt b/doc/internals/header-parser-speed.txt
new file mode 100644
index 0000000..285e2fa
--- /dev/null
+++ b/doc/internals/header-parser-speed.txt
@@ -0,0 +1,92 @@
+TEST 3:
+
+  printf "GET /\r\nbla: truc\r\n\r\n"
+
+
+NO SPEEDUP :
+
+WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071080, r=0x8071094
+WHL: hdr_st=0x01, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071080, r=0x8071094
+WHL: hdr_st=0x32, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071086, r=0x8071094
+WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071087, r=0x8071094
+WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071091, r=0x8071094
+WHL: hdr_st=0x03, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8071092, lr=0x8071092, r=0x8071094
+WHL: hdr_st=0x34, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8071092, lr=0x8071093, r=0x8071094
+WHL: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8071092, lr=0x8071093, r=0x8071094
+END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8071092, lr=0x8071094, r=0x8071094
+=> 9 trans
+
+
+FULL SPEEDUP :
+
+WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x806a770, lr=0x806a770, r=0x806a784
+WHL: hdr_st=0x32, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x806a770, lr=0x806a776, r=0x806a784
+WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806a777, lr=0x806a777, r=0x806a784
+WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806a777, lr=0x806a781, r=0x806a784
+WHL: hdr_st=0x26, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x806a782, lr=0x806a783, r=0x806a784
+END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x806a782, lr=0x806a784, r=0x806a784
+=> 6 trans
+
+
+
+TEST 4:
+
+
+  printf "GET /\nbla: truc\n\n"
+
+
+NO SPEEDUP :
+
+WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x80750d0, lr=0x80750d0, r=0x80750e1
+WHL: hdr_st=0x01, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x80750d0, lr=0x80750d0, r=0x80750e1
+WHL: hdr_st=0x02, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x80750d0, lr=0x80750d5, r=0x80750e1
+WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x80750d6, lr=0x80750d6, r=0x80750e1
+WHL: hdr_st=0x04, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x80750d6, lr=0x80750df, r=0x80750e1
+WHL: hdr_st=0x03, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x80750e0, lr=0x80750e0, r=0x80750e1
+WHL: hdr_st=0x04, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x80750e0, lr=0x80750e0, r=0x80750e1
+WHL: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x80750e0, lr=0x80750e0, r=0x80750e1
+END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x80750e0, lr=0x80750e1, r=0x80750e1
+=> 9 trans
+
+
+FULL SPEEDUP :
+
+WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8072010, lr=0x8072010, r=0x8072021
+WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8072016, lr=0x8072016, r=0x8072021
+END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x8072020, lr=0x8072021, r=0x8072021
+=> 3 trans
+
+
+TEST 5:
+
+
+  printf "GET /\r\nbla: truc\r\n  truc2\r\n\r\n"
+
+
+NO SPEEDUP :
+
+WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071080, r=0x807109d
+WHL: hdr_st=0x01, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071080, r=0x807109d
+WHL: hdr_st=0x32, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x8071080, lr=0x8071086, r=0x807109d
+WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071087, r=0x807109d
+WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071091, r=0x807109d
+WHL: hdr_st=0x05, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071092, r=0x807109d
+WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x8071094, r=0x807109d
+WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x8071087, lr=0x807109a, r=0x807109d
+WHL: hdr_st=0x03, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x807109b, lr=0x807109b, r=0x807109d
+WHL: hdr_st=0x34, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x807109b, lr=0x807109c, r=0x807109d
+WHL: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x807109b, lr=0x807109c, r=0x807109d
+END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x807109b, lr=0x807109d, r=0x807109d
+=> 12 trans
+
+
+FULL SPEEDUP :
+
+WHL: hdr_st=0x00, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x806dfc0, lr=0x806dfc0, r=0x806dfdd
+WHL: hdr_st=0x32, hdr_used=1 hdr_tail=0 hdr_last=1, h=0x806dfc0, lr=0x806dfc6, r=0x806dfdd
+WHL: hdr_st=0x03, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806dfc7, lr=0x806dfc7, r=0x806dfdd
+WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806dfc7, lr=0x806dfd1, r=0x806dfdd
+WHL: hdr_st=0x34, hdr_used=2 hdr_tail=1 hdr_last=2, h=0x806dfc7, lr=0x806dfda, r=0x806dfdd
+WHL: hdr_st=0x26, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x806dfdb, lr=0x806dfdc, r=0x806dfdd
+END: hdr_st=0x06, hdr_used=3 hdr_tail=2 hdr_last=3, h=0x806dfdb, lr=0x806dfdd, r=0x806dfdd
+=> 7 trans
diff --git a/doc/http-parsing.txt b/doc/internals/http-parsing.txt
similarity index 100%
rename from doc/http-parsing.txt
rename to doc/internals/http-parsing.txt
diff --git a/doc/internals/repartition-be-fe-fi.txt b/doc/internals/repartition-be-fe-fi.txt
new file mode 100644
index 0000000..261d073
--- /dev/null
+++ b/doc/internals/repartition-be-fe-fi.txt
@@ -0,0 +1,20 @@
+- session : ajouter ->fiprm et ->beprm comme raccourcis
+- px->maxconn: ne s'applique qu'au FE. Pour le BE, on utilise fullconn,
+  initialisé par défaut à la même chose que maxconn.
+
+
+     \ from:   proxy       session       server           actuellement
+field \
+rules          px->fiprm   sess->fiprm   -
+srv,cookies    px->beprm   sess->beprm   srv->px
+options(log)   px->        sess->fe      -
+options(fe)    px->        sess->fe      -
+options(be)    px->beprm   sess->beprm   srv->px
+captures       px->        sess->fe      -                ->fiprm
+
+
+logs           px->        sess->fe      srv->px
+errorloc       px->        sess->beprm|fe -
+maxconn        px->        sess->fe       -               ->be
+fullconn       px->        sess->beprm   srv->px          -
+
diff --git a/doc/stats-v2.txt b/doc/internals/stats-v2.txt
similarity index 100%
rename from doc/stats-v2.txt
rename to doc/internals/stats-v2.txt
diff --git a/doc/internals/todo.cttproxy b/doc/internals/todo.cttproxy
new file mode 100644
index 0000000..ad5bc99
--- /dev/null
+++ b/doc/internals/todo.cttproxy
@@ -0,0 +1,5 @@
+  - check TPROXY_VERSION if lstchk_tproxy
+  - check capabilities for CAP_NET_ADMIN if lstchk_tproxy
+  - add capabilities support to the global conf (cap_bind_service)
+  - add support for non-local listen address
+