]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
* released 1.2.5-pre1 v1.2.5-pre1
authorwilly tarreau <willy@wtap.(none)>
Sun, 18 Dec 2005 00:07:29 +0000 (01:07 +0100)
committerwilly tarreau <willy@wtap.(none)>
Sun, 18 Dec 2005 00:07:29 +0000 (01:07 +0100)
* build fixes for appsession
* documentation for appsession

doc/haproxy-en.txt
doc/haproxy-fr.txt
haproxy.c
include/appsession.h [new file with mode: 0644]
src/hashpjw.c

index 2cb73d2bbdcbc2993748487760d78b347df7f8c9..ab14dcf1e4482fbdf93ff84377d05cdeea8188d7 100644 (file)
@@ -100,6 +100,7 @@ the following ones :
   - debug
   - quiet
   - pidfile <file>
+  - stats
 
 1.1) Event logging
 ------------------
@@ -623,6 +624,33 @@ Example : the 'SERVERID' cookie can be either 'server01' or 'server02'
 Warning : the syntax has changed since version 1.0 !
 ---------
 
+2.11) Application Cookies
+-------------------------
+Since 1.2.4 it is possible to catch the cookie that comes from an
+application server in order to apply "application session stickyness".
+The server's response is searched for 'appsession' cookie, the first
+'len' bytes are used for matching and it is stored for a period of
+'timeout'.
+The syntax is:
+
+    appsession <SESSIONCOOKIE> len <MATCHLENGTH> timeout <HOLDTIME>
+
+- <SESSIONCOOKIE> is the cookie, the server uses for it's session-handling
+- <MATCHLENGTH> how many bytes/characters should be used for matching equal
+                sessions 
+- <HOLDTIME> after this inactivaty time, in ms, the cookie will be deleted 
+             from the sessionstore
+
+The appsession is only per 'listen' section possible.
+
+Example :
+---------
+    listen http_proxy :80
+       mode http
+        appsession JSESSIONID len 52 timeout 300000
+        .
+        .
+
 3) Autonomous load balancer
 ===========================
 
@@ -1448,8 +1476,8 @@ Example :
        mode http
        cookie SERVERID insert nocache indirect
        balance roundrobin
-       server 192.168.1.1:80 cookie server01 check
-       server 192.168.1.2:80 cookie server02 check
+       server srv1 192.168.1.1:80 cookie server01 check
+       server srv2 192.168.1.2:80 cookie server02 check
 
 The other solution brought by versions 1.1.30 and 1.2.3 is to reuse a cookie
 from the server, and prefix the server's name to it. In this case, don't forget
@@ -1460,8 +1488,8 @@ request will have its cookie fixed.
        mode http
        cookie JSESSIONID prefix
        balance roundrobin
-       server 192.168.1.1:80 cookie srv1 check
-       server 192.168.1.2:80 cookie srv2 check
+       server srv1 192.168.1.1:80 cookie srv1 check
+       server srv2 192.168.1.2:80 cookie srv2 check
        option httpclose
 
 
index 28687bb71634bde72f28fb5ae3b7dc3df2b96b53..1db2bc4674535243f258ccda54bd573a5ffe4ff0 100644 (file)
@@ -1497,8 +1497,8 @@ Exemple :
        mode http
        cookie SERVERID insert nocache indirect
        balance roundrobin
-       server 192.168.1.1:80 cookie server01 check
-       server 192.168.1.2:80 cookie server02 check
+       server srv1 192.168.1.1:80 cookie server01 check
+       server srv2 192.168.1.2:80 cookie server02 check
 
 L'autre solution apportée par les versions 1.1.30 et 1.2.3 est de réutiliser un
 cookie en provenance du serveur et de lui préfixer l'identifiant du serveur.
@@ -1510,8 +1510,8 @@ puisse corriger le nom du cookie dans toutes les futures requ
        mode http
        cookie JSESSIONID prefix
        balance roundrobin
-       server 192.168.1.1:80 cookie srv1 check
-       server 192.168.1.2:80 cookie srv2 check
+       server srv1 192.168.1.1:80 cookie srv1 check
+       server srv2 192.168.1.2:80 cookie srv2 check
        option httpclose
 
 
index 87c41457497f8e13fd72a11eb3fdb59972a18a86..1445d1b3b1cfcde3785200fada5861103eee8bd1 100644 (file)
--- a/haproxy.c
+++ b/haproxy.c
 #include <strings.h>
 #endif
 
-#define TBLSIZ 10
-#define TBLCHKINT 5000 /* The time between two calls of appsession_refresh in ms */
-
-/*
-  These Parts are copied from
-  
-  http://www.oreilly.com/catalog/masteralgoc/index.html
-  Mastering Algorithms with C
-  By Kyle Loudon
-  ISBN: 1-56592-453-3
-  Publishd by O'Reilly
-
-  We have added our own struct to these function.
- */
-
-#include <include/list.h>
-#include <include/chtbl.h>
-#include <include/hashpjw.h>
-/* end of copied parts */
-
-struct app_pool {
-    void **sessid;
-    void **serverid;
-    int ses_waste, ses_use, ses_msize;
-    int ser_waste, ser_use, ser_msize;
-};
-
-struct app_pool apools;
-int have_appsession;
-
-/* Callback for hash_lookup */
-int match_str(const void *key1, const void *key2);
-
-/* Callback for destroy */
-void destroy(void *data);
-
-#if defined(DEBUG_HASH)
-static void print_table(const CHTbl *htbl);
-#endif
+#include "include/appsession.h"
 
 #define HAPROXY_VERSION "1.2.4"
 #define HAPROXY_DATE   "2005/01/22"
@@ -2956,12 +2918,11 @@ int process_cli(struct session *t) {
                        srv = srv->next;
                    }/* end while(srv) */
                }/* end else of if (asession_temp->serverid == NULL) */
-               
-               method_checked = 1;
              }/* end if(strncasecmp(request_line,t->proxy->appsession_name,apssesion_name_len) == 0) */
              else {
                //fprintf(stderr,">>>>>>>>>>>>>>>>>>>>>>NO SESSION\n");
              }
+             method_checked = 1;
            }/* end if(!method_checked ...) */
            else{
              //printf("No Methode-Header with Session-String\n");
@@ -3311,7 +3272,6 @@ int process_cli(struct session *t) {
                            }/* end else if server == NULL */
                            
                            tv_delayfrom(&asession_temp->expire, &now, t->proxy->appsession_timeout);
-                           break;
                        }/* end if ((t->proxy->appsession_name != NULL) ... */
                    }
 
diff --git a/include/appsession.h b/include/appsession.h
new file mode 100644 (file)
index 0000000..8a31034
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _APPSESS_H
+#define _APPSESS_H
+
+#define TBLSIZ 10
+#define TBLCHKINT 5000 /* The time between two calls of appsession_refresh in ms */
+
+/*
+  These Parts are copied from
+  
+  http://www.oreilly.com/catalog/masteralgoc/index.html
+  Mastering Algorithms with C
+  By Kyle Loudon
+  ISBN: 1-56592-453-3
+  Publishd by O'Reilly
+
+  We have added our own struct to these function.
+ */
+
+#include <include/list.h>
+#include <include/chtbl.h>
+#include <include/hashpjw.h>
+/* end of copied parts */
+
+struct app_pool {
+    void **sessid;
+    void **serverid;
+    int ses_waste, ses_use, ses_msize;
+    int ser_waste, ser_use, ser_msize;
+};
+
+struct app_pool apools;
+int have_appsession;
+
+/* Callback for hash_lookup */
+int match_str(const void *key1, const void *key2);
+
+/* Callback for destroy */
+void destroy(void *data);
+
+#if defined(DEBUG_HASH)
+static void print_table(const CHTbl *htbl);
+#endif
+
+#endif
index ef7f209b14a9edc4cfc92d9319158b0f5e45f71d..a207eb91d84edc451c7265e87798581084962ae7 100644 (file)
@@ -28,7 +28,7 @@ int hashpjw(const void *key) {
 
   const char         *ptr;
   unsigned int        val;
-  AppSess *appsession_temp;
+  appsess *appsession_temp;
 
   /*****************************************************************************
    *                                                                            *
@@ -37,7 +37,7 @@ int hashpjw(const void *key) {
    *****************************************************************************/
 
   val = 0;
-  appsession_temp = (AppSess *)key;
+  appsession_temp = (appsess *)key;
   ptr = appsession_temp->sessid;
 
   while (*ptr != '\0') {