]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MAJOR: sample: converts uint and sint in 64 bits signed integer
authorThierry FOURNIER <tfournier@arpalert.org>
Mon, 6 Jul 2015 21:43:03 +0000 (23:43 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 21 Jul 2015 22:48:23 +0000 (00:48 +0200)
This patch removes the 32 bits unsigned integer and the 32 bit signed
integer. It replaces these types by a unique type 64 bit signed.

This makes easy the usage of integer and clarify signed and unsigned use.
With the previous version, signed and unsigned are used ones in place of
others, and sometimes the converter loose the sign. For example, divisions
are processed with "unsigned", if one entry is negative, the result is
wrong.

Note that the integer pattern matching and dotted version pattern matching
are already working with signed 64 bits integer values.

There is one user-visible change : the "uint()" and "sint()" sample fetch
functions which used to return a constant integer have been replaced with
a new more natural, unified "int()" function. These functions were only
introduced in the latest 1.6-dev2 so there's no impact on regular
deployments.

18 files changed:
doc/configuration.txt
include/types/sample.h
src/acl.c
src/backend.c
src/compression.c
src/frontend.c
src/hlua.c
src/listener.c
src/map.c
src/pattern.c
src/payload.c
src/proto_http.c
src/proto_tcp.c
src/sample.c
src/ssl_sock.c
src/stick_table.c
src/stream.c
src/vars.c

index 7c90ff4fec7677b5fed3b48ad8368cfda8127021..2782c2046c501b6e8b8f722e078ead44003a14ab 100644 (file)
@@ -11030,12 +11030,12 @@ bool) which make it possible to report a match without having to write an ACL.
 The currently available list of transformation keywords include :
 
 add(<value>)
-  Adds <value> to the input value of type unsigned integer, and returns the
-  result as an unsigned integer.
+  Adds <value> to the input value of type signed integer, and returns the
+  result as a signed integer.
 
 and(<value>)
-  Performs a bitwise "AND" between <value> and the input value of type unsigned
-  integer, and returns the result as an unsigned integer.
+  Performs a bitwise "AND" between <value> and the input value of type signed
+  integer, and returns the result as an signed integer.
 
 base64
   Converts a binary input sample to a base64 string. It is used to log or
@@ -11043,7 +11043,7 @@ base64
   an SSL ID can be copied in a header).
 
 bool
-  Returns a boolean TRUE if the input value of type unsigned integer is
+  Returns a boolean TRUE if the input value of type signed integer is
   non-null, otherwise returns FALSE. Used in conjunction with and(), it can be
   used to report true/false for bit testing on input values (eg: verify the
   presence of a flag).
@@ -11054,8 +11054,8 @@ bytes(<offset>[,<length>])
   optionnaly truncated at the given length.
 
 cpl
-  Takes the input value of type unsigned integer, applies a twos-complement
-  (flips all bits) and returns the result as an unsigned integer.
+  Takes the input value of type signed integer, applies a ones-complement
+  (flips all bits) and returns the result as an signed integer.
 
 crc32([<avalanche>])
   Hashes a binary input sample into an unsigned 32-bit quantity using the CRC32
@@ -11090,9 +11090,9 @@ debug
   converter only exists when haproxy was built with debugging enabled.
 
 div(<value>)
-  Divides the input value of type unsigned integer by <value>, and returns the
-  result as an unsigned integer. If <value> is null, the largest unsigned
-  integer is returned (typically 2^32-1).
+  Divides the input value of type signed integer by <value>, and returns the
+  result as an signed integer. If <value> is null, the largest unsigned
+  integer is returned (typically 2^63-1).
 
 djb2([<avalanche>])
   Hashes a binary input sample into an unsigned 32-bit quantity using the DJB2
@@ -11106,7 +11106,7 @@ djb2([<avalanche>])
   "hash-type" directive.
 
 even
-  Returns a boolean TRUE if the input value of type unsigned integer is even
+  Returns a boolean TRUE if the input value of type signed integer is even
   otherwise returns FALSE. It is functionally equivalent to "not,and(1),bool".
 
 field(<index>,<delimiters>)
@@ -11285,33 +11285,33 @@ map_<match_type>_<output_type>(<map_file>[,<default_value>])
       `------------------------------------ leading spaces ignored
 
 mod(<value>)
-  Divides the input value of type unsigned integer by <value>, and returns the
-  remainder as an unsigned integer. If <value> is null, then zero is returned.
+  Divides the input value of type signed integer by <value>, and returns the
+  remainder as an signed integer. If <value> is null, then zero is returned.
 
 mul(<value>)
-  Multiplies the input value of type unsigned integer by <value>, and returns
-  the product as an unsigned integer. In case of overflow, the higher bits are
+  Multiplies the input value of type signed integer by <value>, and returns
+  the product as an signed integer. In case of overflow, the higher bits are
   lost, leading to seemingly strange values.
 
 neg
-  Takes the input value of type unsigned integer, computes the opposite value,
-  and returns the remainder as an unsigned integer. 0 is identity. This
-  operator is provided for reversed subtracts : in order to subtract the input
-  from a constant, simply perform a "neg,add(value)".
+  Takes the input value of type signed integer, computes the opposite value,
+  and returns the remainder as an signed integer. 0 is identity. This operator
+  is provided for reversed subtracts : in order to subtract the input from a
+  constant, simply perform a "neg,add(value)".
 
 not
-  Returns a boolean FALSE if the input value of type unsigned integer is
+  Returns a boolean FALSE if the input value of type signed integer is
   non-null, otherwise returns TRUE. Used in conjunction with and(), it can be
   used to report true/false for bit testing on input values (eg: verify the
   absence of a flag).
 
 odd
-  Returns a boolean TRUE if the input value of type unsigned integer is odd
+  Returns a boolean TRUE if the input value of type signed integer is odd
   otherwise returns FALSE. It is functionally equivalent to "and(1),bool".
 
 or(<value>)
-  Performs a bitwise "OR" between <value> and the input value of type unsigned
-  integer, and returns the result as an unsigned integer.
+  Performs a bitwise "OR" between <value> and the input value of type signed
+  integer, and returns the result as an signed integer.
 
 regsub(<regex>,<subst>[,<flags>])
   Applies a regex-based substitution to the input string. It does the same
@@ -11375,8 +11375,8 @@ set-var(<var name>)
   contain characters 'a-z', 'A-Z', '0-9' and '_'.
 
 sub(<value>)
-  Subtracts <value> from the input value of type unsigned integer, and returns
-  the result as an unsigned integer. Note: in order to subtract the input from
+  Subtracts <value> from the input value of type signed integer, and returns
+  the result as an signed integer. Note: in order to subtract the input from
   a constant, simply perform a "neg,add(value)".
 
 table_bytes_in_rate(<table>)
@@ -11558,7 +11558,7 @@ wt6([<avalanche>])
 
 xor(<value>)
   Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
-  of type unsigned integer, and returns the result as an unsigned integer.
+  of type signed integer, and returns the result as an signed integer.
 
 
 7.3.2. Fetching samples from internal states
@@ -11709,6 +11709,9 @@ fe_sess_rate([<frontend>]) : integer
             tcp-request content accept if ! too_fast
             tcp-request content accept if WAIT_END
 
+int(<integer>) : signed integer
+  Returns a signed integer.
+
 ipv4(<ipv4>) : ipv4
   Returns an ipv4.
 
@@ -11753,9 +11756,6 @@ rand([<range>]) : integer
   needed to take some routing decisions for example, or just for debugging
   purposes. This random must not be used for security purposes.
 
-sint(<sint>) : signed integer
-  Returns a signed integer.
-
 srv_conn([<backend>/]<server>) : integer
   Returns an integer value corresponding to the number of currently established
   connections on the designated server, possibly including the connection being
@@ -11806,9 +11806,6 @@ table_cnt([<table>]) : integer
   stick-table or in the designated stick-table. See also src_conn_cnt and
   table_avl for other entry counting methods.
 
-uint(<uint>) : unsigned integer
-  Returns an unsigned integer.
-
 var(<var-name>) : undefined
   Returns a variable with the stored type. If the variable is not set, the
   sample fetch fails. The name of the variable starts by an indication about its
index 22dfe599db0d34e27e5f840dc015343299314cf0..8f67cfb32d44d58b7118ff6abd2a86eb48f52299 100644 (file)
@@ -36,8 +36,7 @@ struct arg;
 enum {
        SMP_T_ANY = 0,   /* any type */
        SMP_T_BOOL,      /* boolean */
-       SMP_T_UINT,      /* unsigned 32bits integer type */
-       SMP_T_SINT,      /* signed 32bits integer type */
+       SMP_T_SINT,      /* signed 64bits integer type */
        SMP_T_ADDR,      /* ipv4 or ipv6, only used for input type compatibility */
        SMP_T_IPV4,      /* ipv4 type */
        SMP_T_IPV6,      /* ipv6 type */
@@ -237,8 +236,7 @@ struct sample {
        unsigned int flags;       /* SMP_F_* */
        int type;                 /* SMP_T_* */
        union {
-               unsigned int    uint;  /* used for unsigned 32bits integers and booleans */
-               int             sint;  /* used for signed 32bits integers */
+               long long int   sint;  /* used for signed 64bits integers */
                struct in_addr  ipv4;  /* used for ipv4 addresses */
                struct in6_addr ipv6;  /* used for ipv6 addresses */
                struct chunk    str;   /* used for char strings or buffers */
@@ -261,8 +259,7 @@ struct sample {
 struct sample_storage {
        int type;                 /* SMP_T_* */
        union {
-               unsigned int    uint;  /* used for unsigned 32bits integers and booleans */
-               int             sint;  /* used for signed 32bits integers */
+               long long int   sint;  /* used for signed 64bits integers */
                struct in_addr  ipv4;  /* used for ipv4 addresses */
                struct in6_addr ipv6;  /* used for ipv6 addresses */
                struct chunk    str;   /* used for char strings or buffers */
index d51bd9976894713089d58d4cbd4d85a93c89254d..2ee4d5096008c5cef0bbfbc2c490dce078eee889 100644 (file)
--- a/src/acl.c
+++ b/src/acl.c
@@ -390,7 +390,6 @@ struct acl_expr *parse_acl_expr(const char **args, char **err, struct arg_list *
                        expr->pat.expect_type = pat_match_types[PAT_MATCH_BOOL];
                        break;
                case SMP_T_SINT:
-               case SMP_T_UINT:
                        expr->pat.parse = pat_parse_fcts[PAT_MATCH_INT];
                        expr->pat.index = pat_index_fcts[PAT_MATCH_INT];
                        expr->pat.match = pat_match_fcts[PAT_MATCH_INT];
index 48c5e79d36c33a84522df7778a1f9e96b40c5876..35ff17545cd0ed9df3ff320b2cb4623af3bd6907 100644 (file)
@@ -1525,15 +1525,15 @@ smp_fetch_nbsrv(const struct arg *args, struct sample *smp, const char *kw, void
        struct proxy *px;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
+       smp->type = SMP_T_SINT;
        px = args->data.prx;
 
        if (px->srv_act)
-               smp->data.uint = px->srv_act;
+               smp->data.sint = px->srv_act;
        else if (px->lbprm.fbck)
-               smp->data.uint = 1;
+               smp->data.sint = 1;
        else
-               smp->data.uint = px->srv_bck;
+               smp->data.sint = px->srv_bck;
 
        return 1;
 }
@@ -1552,9 +1552,9 @@ smp_fetch_srv_is_up(const struct arg *args, struct sample *smp, const char *kw,
        smp->type = SMP_T_BOOL;
        if (!(srv->admin & SRV_ADMF_MAINT) &&
            (!(srv->check.state & CHK_ST_CONFIGURED) || (srv->state != SRV_ST_STOPPED)))
-               smp->data.uint = 1;
+               smp->data.sint = 1;
        else
-               smp->data.uint = 0;
+               smp->data.sint = 0;
        return 1;
 }
 
@@ -1568,8 +1568,8 @@ smp_fetch_connslots(const struct arg *args, struct sample *smp, const char *kw,
        struct server *iterator;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        for (iterator = args->data.prx->srv; iterator; iterator = iterator->next) {
                if (iterator->state == SRV_ST_STOPPED)
@@ -1577,11 +1577,11 @@ smp_fetch_connslots(const struct arg *args, struct sample *smp, const char *kw,
 
                if (iterator->maxconn == 0 || iterator->maxqueue == 0) {
                        /* configuration is stupid */
-                       smp->data.uint = -1;  /* FIXME: stupid value! */
+                       smp->data.sint = -1;  /* FIXME: stupid value! */
                        return 1;
                }
 
-               smp->data.uint += (iterator->maxconn - iterator->cur_sess)
+               smp->data.sint += (iterator->maxconn - iterator->cur_sess)
                                       +  (iterator->maxqueue - iterator->nbpend);
        }
 
@@ -1593,8 +1593,8 @@ static int
 smp_fetch_be_id(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TXN;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = smp->strm->be->uuid;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = smp->strm->be->uuid;
        return 1;
 }
 
@@ -1605,8 +1605,8 @@ smp_fetch_srv_id(const struct arg *args, struct sample *smp, const char *kw, voi
        if (!objt_server(smp->strm->target))
                return 0;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = objt_server(smp->strm->target)->puid;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = objt_server(smp->strm->target)->puid;
 
        return 1;
 }
@@ -1619,8 +1619,8 @@ static int
 smp_fetch_be_sess_rate(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = read_freq_ctr(&args->data.prx->be_sess_per_sec);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = read_freq_ctr(&args->data.prx->be_sess_per_sec);
        return 1;
 }
 
@@ -1632,8 +1632,8 @@ static int
 smp_fetch_be_conn(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = args->data.prx->beconn;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = args->data.prx->beconn;
        return 1;
 }
 
@@ -1645,8 +1645,8 @@ static int
 smp_fetch_queue_size(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = args->data.prx->totpend;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = args->data.prx->totpend;
        return 1;
 }
 
@@ -1665,7 +1665,7 @@ smp_fetch_avg_queue_size(const struct arg *args, struct sample *smp, const char
        struct proxy *px;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
+       smp->type = SMP_T_SINT;
        px = args->data.prx;
 
        if (px->srv_act)
@@ -1676,9 +1676,9 @@ smp_fetch_avg_queue_size(const struct arg *args, struct sample *smp, const char
                nbsrv = px->srv_bck;
 
        if (nbsrv > 0)
-               smp->data.uint = (px->totpend + nbsrv - 1) / nbsrv;
+               smp->data.sint = (px->totpend + nbsrv - 1) / nbsrv;
        else
-               smp->data.uint = px->totpend * 2;
+               smp->data.sint = px->totpend * 2;
 
        return 1;
 }
@@ -1691,8 +1691,8 @@ static int
 smp_fetch_srv_conn(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = args->data.srv->cur_sess;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = args->data.srv->cur_sess;
        return 1;
 }
 
@@ -1704,8 +1704,8 @@ static int
 smp_fetch_srv_sess_rate(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = read_freq_ctr(&args->data.srv->sess_per_sec);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = read_freq_ctr(&args->data.srv->sess_per_sec);
        return 1;
 }
 
@@ -1714,17 +1714,17 @@ smp_fetch_srv_sess_rate(const struct arg *args, struct sample *smp, const char *
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct sample_fetch_kw_list smp_kws = {ILH, {
-       { "avg_queue",     smp_fetch_avg_queue_size, ARG1(1,BE),  NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "be_conn",       smp_fetch_be_conn,        ARG1(1,BE),  NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "be_id",         smp_fetch_be_id,          0,           NULL, SMP_T_UINT, SMP_USE_BKEND, },
-       { "be_sess_rate",  smp_fetch_be_sess_rate,   ARG1(1,BE),  NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "connslots",     smp_fetch_connslots,      ARG1(1,BE),  NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "nbsrv",         smp_fetch_nbsrv,          ARG1(1,BE),  NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "queue",         smp_fetch_queue_size,     ARG1(1,BE),  NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "srv_conn",      smp_fetch_srv_conn,       ARG1(1,SRV), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "srv_id",        smp_fetch_srv_id,         0,           NULL, SMP_T_UINT, SMP_USE_SERVR, },
+       { "avg_queue",     smp_fetch_avg_queue_size, ARG1(1,BE),  NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "be_conn",       smp_fetch_be_conn,        ARG1(1,BE),  NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "be_id",         smp_fetch_be_id,          0,           NULL, SMP_T_SINT, SMP_USE_BKEND, },
+       { "be_sess_rate",  smp_fetch_be_sess_rate,   ARG1(1,BE),  NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "connslots",     smp_fetch_connslots,      ARG1(1,BE),  NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "nbsrv",         smp_fetch_nbsrv,          ARG1(1,BE),  NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "queue",         smp_fetch_queue_size,     ARG1(1,BE),  NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "srv_conn",      smp_fetch_srv_conn,       ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "srv_id",        smp_fetch_srv_id,         0,           NULL, SMP_T_SINT, SMP_USE_SERVR, },
        { "srv_is_up",     smp_fetch_srv_is_up,      ARG1(1,SRV), NULL, SMP_T_BOOL, SMP_USE_INTRN, },
-       { "srv_sess_rate", smp_fetch_srv_sess_rate,  ARG1(1,SRV), NULL, SMP_T_UINT, SMP_USE_INTRN, },
+       { "srv_sess_rate", smp_fetch_srv_sess_rate,  ARG1(1,SRV), NULL, SMP_T_SINT, SMP_USE_INTRN, },
        { /* END */ },
 }};
 
index e8f13bbb0b7db060733687f00a810ec523fdb971..ec5ab33b9512499a0f969c3693523dc7a744e938 100644 (file)
@@ -841,7 +841,7 @@ static int
 smp_fetch_res_comp(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->type = SMP_T_BOOL;
-       smp->data.uint = (smp->strm->comp_algo != NULL);
+       smp->data.sint = (smp->strm->comp_algo != NULL);
        return 1;
 }
 
index efd6383b43a005f4625d5b55ea7bc389d9284599..83e842564167e6f93437191eaccb7d0c254a54b0 100644 (file)
@@ -162,8 +162,8 @@ static int
 smp_fetch_fe_id(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_SESS;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = smp->sess->fe->uuid;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = smp->sess->fe->uuid;
        return 1;
 }
 
@@ -175,8 +175,8 @@ static int
 smp_fetch_fe_sess_rate(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = read_freq_ctr(&args->data.prx->fe_sess_per_sec);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = read_freq_ctr(&args->data.prx->fe_sess_per_sec);
        return 1;
 }
 
@@ -188,8 +188,8 @@ static int
 smp_fetch_fe_conn(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = args->data.prx->feconn;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = args->data.prx->feconn;
        return 1;
 }
 
@@ -198,9 +198,9 @@ smp_fetch_fe_conn(const struct arg *args, struct sample *smp, const char *kw, vo
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct sample_fetch_kw_list smp_kws = {ILH, {
-       { "fe_conn",      smp_fetch_fe_conn,      ARG1(1,FE), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "fe_id",        smp_fetch_fe_id,        0,          NULL, SMP_T_UINT, SMP_USE_FTEND, },
-       { "fe_sess_rate", smp_fetch_fe_sess_rate, ARG1(1,FE), NULL, SMP_T_UINT, SMP_USE_INTRN, },
+       { "fe_conn",      smp_fetch_fe_conn,      ARG1(1,FE), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "fe_id",        smp_fetch_fe_id,        0,          NULL, SMP_T_SINT, SMP_USE_FTEND, },
+       { "fe_sess_rate", smp_fetch_fe_sess_rate, ARG1(1,FE), NULL, SMP_T_SINT, SMP_USE_INTRN, },
        { /* END */ },
 }};
 
index a5df204e069c92e9e62070bf0fee4ee60f97d9e1..34e14e87d59b27282d20c1e30ddf5d6fffcfcbc0 100644 (file)
@@ -389,7 +389,6 @@ static int hlua_smp2lua(lua_State *L, struct sample *smp)
        switch (smp->type) {
        case SMP_T_SINT:
        case SMP_T_BOOL:
-       case SMP_T_UINT:
                lua_pushinteger(L, smp->data.sint);
                break;
 
@@ -467,7 +466,6 @@ static int hlua_smp2lua_str(lua_State *L, struct sample *smp)
 
        case SMP_T_SINT:
        case SMP_T_BOOL:
-       case SMP_T_UINT:
        case SMP_T_IPV4:
        case SMP_T_IPV6:
        case SMP_T_ADDR: /* This type is never used to qualify a sample. */
@@ -500,7 +498,7 @@ static int hlua_lua2smp(lua_State *L, int ud, struct sample *smp)
 
        case LUA_TBOOLEAN:
                smp->type = SMP_T_BOOL;
-               smp->data.uint = lua_toboolean(L, ud);
+               smp->data.sint = lua_toboolean(L, ud);
                break;
 
        case LUA_TSTRING:
@@ -516,7 +514,7 @@ static int hlua_lua2smp(lua_State *L, int ud, struct sample *smp)
        case LUA_TTHREAD:
        case LUA_TLIGHTUSERDATA:
                smp->type = SMP_T_BOOL;
-               smp->data.uint = 0;
+               smp->data.sint = 0;
                break;
        }
        return 1;
@@ -1336,7 +1334,7 @@ __LJMP static int hlua_map_new(struct lua_State *L)
        case PAT_MATCH_DOM: conv.in_type = SMP_T_STR;  break;
        case PAT_MATCH_END: conv.in_type = SMP_T_STR;  break;
        case PAT_MATCH_REG: conv.in_type = SMP_T_STR;  break;
-       case PAT_MATCH_INT: conv.in_type = SMP_T_UINT; break;
+       case PAT_MATCH_INT: conv.in_type = SMP_T_SINT; break;
        case PAT_MATCH_IP:  conv.in_type = SMP_T_ADDR; break;
        default:
                WILL_LJMP(luaL_error(L, "'new' doesn't support this match mode."));
@@ -1380,9 +1378,9 @@ __LJMP static inline int _hlua_map_lookup(struct lua_State *L, int str)
 
        MAY_LJMP(check_args(L, 2, "lookup"));
        desc = MAY_LJMP(hlua_checkmap(L, 1));
-       if (desc->pat.expect_type == SMP_T_UINT) {
-               smp.type = SMP_T_UINT;
-               smp.data.uint = MAY_LJMP(luaL_checkinteger(L, 2));
+       if (desc->pat.expect_type == SMP_T_SINT) {
+               smp.type = SMP_T_SINT;
+               smp.data.sint = MAY_LJMP(luaL_checkinteger(L, 2));
        }
        else {
                smp.type = SMP_T_STR;
index 4d070317c446ca34d0735efa6f5c78a394bb313a..254907c95be5ea5ff6822d328534608c6a4121ac 100644 (file)
@@ -593,8 +593,8 @@ void bind_dump_kws(char **out)
 static int
 smp_fetch_dconn(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-       smp->type = SMP_T_UINT;
-       smp->data.uint = smp->sess->listener->nbconn;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = smp->sess->listener->nbconn;
        return 1;
 }
 
@@ -602,8 +602,8 @@ smp_fetch_dconn(const struct arg *args, struct sample *smp, const char *kw, void
 static int
 smp_fetch_so_id(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-       smp->type = SMP_T_UINT;
-       smp->data.uint = smp->sess->listener->luid;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = smp->sess->listener->luid;
        return 1;
 }
 
@@ -789,8 +789,8 @@ static int bind_parse_process(char **args, int cur_arg, struct proxy *px, struct
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct sample_fetch_kw_list smp_kws = {ILH, {
-       { "dst_conn", smp_fetch_dconn, 0, NULL, SMP_T_UINT, SMP_USE_FTEND, },
-       { "so_id",    smp_fetch_so_id, 0, NULL, SMP_T_UINT, SMP_USE_FTEND, },
+       { "dst_conn", smp_fetch_dconn, 0, NULL, SMP_T_SINT, SMP_USE_FTEND, },
+       { "so_id",    smp_fetch_so_id, 0, NULL, SMP_T_SINT, SMP_USE_FTEND, },
        { /* END */ },
 }};
 
index a75605c7ce5f41201d2d307ede6bf5f0ef46c708..be33c2cc20e20ed77a4a942b44c4e957593164e9 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -67,28 +67,10 @@ int map_parse_str(const char *text, struct sample_storage *smp)
  */
 int map_parse_int(const char *text, struct sample_storage *smp)
 {
-       long long int value;
-       char *error;
-
-       /* parse interger and convert it. Return the value in 64 format. */
-       value = strtoll(text, &error, 10);
-       if (*error != '\0')
+       smp->type = SMP_T_SINT;
+       smp->data.sint = read_int64(&text, text + strlen(text));
+       if (*text != '\0')
                return 0;
-
-       /* check sign iand limits */
-       if (value < 0) {
-               if (value < INT_MIN)
-                       return 0;
-               smp->type = SMP_T_SINT;
-               smp->data.sint = value;
-       }
-       else {
-               if (value > UINT_MAX)
-                       return 0;
-               smp->type = SMP_T_UINT;
-               smp->data.uint = value;
-       }
-
        return 1;
 }
 
@@ -143,7 +125,7 @@ int sample_load_map(struct arg *arg, struct sample_conv *conv,
        /* Set the output parse method. */
        switch (desc->conv->out_type) {
        case SMP_T_STR:  desc->pat.parse_smp = map_parse_str;  break;
-       case SMP_T_UINT: desc->pat.parse_smp = map_parse_int;  break;
+       case SMP_T_SINT: desc->pat.parse_smp = map_parse_int;  break;
        case SMP_T_IPV4: desc->pat.parse_smp = map_parse_ip;   break;
        case SMP_T_IPV6: desc->pat.parse_smp = map_parse_ip6;  break;
        default:
@@ -186,8 +168,8 @@ static int sample_conv_map(const struct arg *arg_p, struct sample *smp, void *pr
                }
 
                /* Return just int sample containing 1. */
-               smp->type = SMP_T_UINT;
-               smp->data.uint= 1;
+               smp->type = SMP_T_SINT;
+               smp->data.sint = 1;
                return 1;
        }
 
@@ -204,9 +186,9 @@ static int sample_conv_map(const struct arg *arg_p, struct sample *smp, void *pr
                smp->data.str = arg_p[1].data.str;
                break;
 
-       case SMP_T_UINT:
-               smp->type = SMP_T_UINT;
-               smp->data.uint = arg_p[1].data.uint;
+       case SMP_T_SINT:
+               smp->type = SMP_T_SINT;
+               smp->data.sint = arg_p[1].data.uint;
                break;
 
        case SMP_T_IPV4:
@@ -248,18 +230,18 @@ static struct sample_conv_kw_list sample_conv_kws = {ILH, {
        { "map_dom",     sample_conv_map, ARG2(1,STR,STR), sample_load_map, SMP_T_STR,  SMP_T_STR,  (void *)PAT_MATCH_DOM },
        { "map_end",     sample_conv_map, ARG2(1,STR,STR), sample_load_map, SMP_T_STR,  SMP_T_STR,  (void *)PAT_MATCH_END },
        { "map_reg",     sample_conv_map, ARG2(1,STR,STR), sample_load_map, SMP_T_STR,  SMP_T_STR,  (void *)PAT_MATCH_REG },
-       { "map_int",     sample_conv_map, ARG2(1,STR,STR), sample_load_map, SMP_T_UINT, SMP_T_STR,  (void *)PAT_MATCH_INT },
+       { "map_int",     sample_conv_map, ARG2(1,STR,STR), sample_load_map, SMP_T_SINT, SMP_T_STR,  (void *)PAT_MATCH_INT },
        { "map_ip",      sample_conv_map, ARG2(1,STR,STR), sample_load_map, SMP_T_ADDR, SMP_T_STR,  (void *)PAT_MATCH_IP  },
 
-       { "map_str_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_UINT, (void *)PAT_MATCH_STR },
-       { "map_beg_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_UINT, (void *)PAT_MATCH_BEG },
-       { "map_sub_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_UINT, (void *)PAT_MATCH_SUB },
-       { "map_dir_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_UINT, (void *)PAT_MATCH_DIR },
-       { "map_dom_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_UINT, (void *)PAT_MATCH_DOM },
-       { "map_end_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_UINT, (void *)PAT_MATCH_END },
-       { "map_reg_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_UINT, (void *)PAT_MATCH_REG },
-       { "map_int_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_UINT, SMP_T_UINT, (void *)PAT_MATCH_INT },
-       { "map_ip_int",  sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_ADDR, SMP_T_UINT, (void *)PAT_MATCH_IP  },
+       { "map_str_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_SINT, (void *)PAT_MATCH_STR },
+       { "map_beg_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_SINT, (void *)PAT_MATCH_BEG },
+       { "map_sub_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_SINT, (void *)PAT_MATCH_SUB },
+       { "map_dir_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_SINT, (void *)PAT_MATCH_DIR },
+       { "map_dom_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_SINT, (void *)PAT_MATCH_DOM },
+       { "map_end_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_SINT, (void *)PAT_MATCH_END },
+       { "map_reg_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_STR,  SMP_T_SINT, (void *)PAT_MATCH_REG },
+       { "map_int_int", sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_SINT, SMP_T_SINT, (void *)PAT_MATCH_INT },
+       { "map_ip_int",  sample_conv_map, ARG2(1,STR,UINT), sample_load_map, SMP_T_ADDR, SMP_T_SINT, (void *)PAT_MATCH_IP  },
 
        { "map_str_ip",  sample_conv_map, ARG2(1,STR,IPV4), sample_load_map, SMP_T_STR,  SMP_T_IPV4, (void *)PAT_MATCH_STR },
        { "map_beg_ip",  sample_conv_map, ARG2(1,STR,IPV4), sample_load_map, SMP_T_STR,  SMP_T_IPV4, (void *)PAT_MATCH_BEG },
@@ -268,7 +250,7 @@ static struct sample_conv_kw_list sample_conv_kws = {ILH, {
        { "map_dom_ip",  sample_conv_map, ARG2(1,STR,IPV4), sample_load_map, SMP_T_STR,  SMP_T_IPV4, (void *)PAT_MATCH_DOM },
        { "map_end_ip",  sample_conv_map, ARG2(1,STR,IPV4), sample_load_map, SMP_T_STR,  SMP_T_IPV4, (void *)PAT_MATCH_END },
        { "map_reg_ip",  sample_conv_map, ARG2(1,STR,IPV4), sample_load_map, SMP_T_STR,  SMP_T_IPV4, (void *)PAT_MATCH_REG },
-       { "map_int_ip",  sample_conv_map, ARG2(1,STR,IPV4), sample_load_map, SMP_T_UINT, SMP_T_IPV4, (void *)PAT_MATCH_INT },
+       { "map_int_ip",  sample_conv_map, ARG2(1,STR,IPV4), sample_load_map, SMP_T_SINT, SMP_T_IPV4, (void *)PAT_MATCH_INT },
        { "map_ip_ip",   sample_conv_map, ARG2(1,STR,IPV4), sample_load_map, SMP_T_ADDR, SMP_T_IPV4, (void *)PAT_MATCH_IP  },
 
        { /* END */ },
index 9626c65371c3941c61e398f9ca12ea2f6a3f7fe4..7691b935b62c911ad8f0735bc524ce4108acf1b5 100644 (file)
@@ -125,9 +125,9 @@ struct pattern *(*pat_match_fcts[PAT_MATCH_NUM])(struct sample *, struct pattern
 
 /* Just used for checking configuration compatibility */
 int pat_match_types[PAT_MATCH_NUM] = {
-       [PAT_MATCH_FOUND] = SMP_T_UINT,
-       [PAT_MATCH_BOOL]  = SMP_T_UINT,
-       [PAT_MATCH_INT]   = SMP_T_UINT,
+       [PAT_MATCH_FOUND] = SMP_T_SINT,
+       [PAT_MATCH_BOOL]  = SMP_T_SINT,
+       [PAT_MATCH_INT]   = SMP_T_SINT,
        [PAT_MATCH_IP]    = SMP_T_ADDR,
        [PAT_MATCH_BIN]   = SMP_T_BIN,
        [PAT_MATCH_LEN]   = SMP_T_STR,
@@ -247,7 +247,7 @@ int pat_parse_int(const char *text, struct pattern *pattern, int mflags, char **
 {
        const char *ptr = text;
 
-       pattern->type = SMP_T_UINT;
+       pattern->type = SMP_T_SINT;
 
        /* Empty string is not valid */
        if (!*text)
@@ -332,7 +332,7 @@ int pat_parse_dotted_ver(const char *text, struct pattern *pattern, int mflags,
 {
        const char *ptr = text;
 
-       pattern->type = SMP_T_UINT;
+       pattern->type = SMP_T_SINT;
 
        /* Search ':' or '-' separator. */
        while (*ptr != '\0' && *ptr != ':' && *ptr != '-')
@@ -425,7 +425,7 @@ int pat_parse_ip(const char *text, struct pattern *pattern, int mflags, char **e
 /* always return false */
 struct pattern *pat_match_nothing(struct sample *smp, struct pattern_expr *expr, int fill)
 {
-       if (smp->data.uint) {
+       if (smp->data.sint) {
                if (fill) {
                        static_pattern.smp = NULL;
                        static_pattern.ref = NULL;
@@ -832,8 +832,8 @@ struct pattern *pat_match_int(struct sample *smp, struct pattern_expr *expr, int
 
        list_for_each_entry(lst, &expr->patterns, list) {
                pattern = &lst->pat;
-               if ((!pattern->val.range.min_set || pattern->val.range.min <= smp->data.uint) &&
-                   (!pattern->val.range.max_set || smp->data.uint <= pattern->val.range.max))
+               if ((!pattern->val.range.min_set || pattern->val.range.min <= smp->data.sint) &&
+                   (!pattern->val.range.max_set || smp->data.sint <= pattern->val.range.max))
                        return pattern;
        }
        return NULL;
@@ -2337,7 +2337,7 @@ struct pattern *pattern_exec_match(struct pattern_head *head, struct sample *smp
                        static_pattern.smp = NULL;
                        static_pattern.ref = NULL;
                        static_pattern.sflags = 0;
-                       static_pattern.type = SMP_T_UINT;
+                       static_pattern.type = SMP_T_SINT;
                        static_pattern.val.i = 1;
                }
                return &static_pattern;
index 852727a639819dd4cc4bb0cd8ca048a5f87d4299..c81c0b42e7f61cf27a6beefbf440a7df6bd8de5c 100644 (file)
@@ -36,7 +36,7 @@ smp_fetch_wait_end(const struct arg *args, struct sample *smp, const char *kw, v
                return 0;
        }
        smp->type = SMP_T_BOOL;
-       smp->data.uint = 1;
+       smp->data.sint = 1;
        return 1;
 }
 
@@ -50,8 +50,8 @@ smp_fetch_len(const struct arg *args, struct sample *smp, const char *kw, void *
        if (!chn->buf)
                return 0;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = chn->buf->i;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = chn->buf->i;
        smp->flags = SMP_F_VOLATILE | SMP_F_MAY_CHANGE;
        return 1;
 }
@@ -160,7 +160,7 @@ smp_fetch_req_ssl_ec_ext(const struct arg *args, struct sample *smp, const char
                /* Elliptic curves extension */
                if (ext_type == 10) {
                        smp->type = SMP_T_BOOL;
-                       smp->data.uint = 1;
+                       smp->data.sint = 1;
                        smp->flags = SMP_F_VOLATILE;
                        return 1;
                }
@@ -224,8 +224,8 @@ smp_fetch_ssl_hello_type(const struct arg *args, struct sample *smp, const char
                goto not_ssl_hello;
        }
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = hs_type;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = hs_type;
        smp->flags = SMP_F_VOLATILE;
 
        return 1;
@@ -338,8 +338,8 @@ smp_fetch_req_ssl_ver(const struct arg *args, struct sample *smp, const char *kw
        /* OK that's enough. We have at least the whole message, and we have
         * the protocol version.
         */
-       smp->type = SMP_T_UINT;
-       smp->data.uint = version;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = version;
        smp->flags = SMP_F_VOLATILE;
        return 1;
 
@@ -628,8 +628,8 @@ smp_fetch_rdp_cookie_cnt(const struct arg *args, struct sample *smp, const char
                return 0;
 
        smp->flags = SMP_F_VOLATILE;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = ret;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = ret;
        return 1;
 }
 
@@ -756,28 +756,28 @@ int val_payload_lv(struct arg *arg, char **err_msg)
  */
 static struct sample_fetch_kw_list smp_kws = {ILH, {
        { "payload",             smp_fetch_payload,        ARG2(2,UINT,UINT),      NULL,           SMP_T_BIN,  SMP_USE_L6REQ|SMP_USE_L6RES },
-       { "payload_lv",          smp_fetch_payload_lv,     ARG3(2,UINT,UINT,SINT), val_payload_lv, SMP_T_BIN,  SMP_USE_L6REQ|SMP_USE_L6RES },
+       { "payload_lv",          smp_fetch_payload_lv,     ARG3(2,UINT,UINT,UINT), val_payload_lv, SMP_T_BIN,  SMP_USE_L6REQ|SMP_USE_L6RES },
        { "rdp_cookie",          smp_fetch_rdp_cookie,     ARG1(0,STR),            NULL,           SMP_T_STR,  SMP_USE_L6REQ },
-       { "rdp_cookie_cnt",      smp_fetch_rdp_cookie_cnt, ARG1(0,STR),            NULL,           SMP_T_UINT, SMP_USE_L6REQ },
-       { "rep_ssl_hello_type",  smp_fetch_ssl_hello_type, 0,                      NULL,           SMP_T_UINT, SMP_USE_L6RES },
-       { "req_len",             smp_fetch_len,            0,                      NULL,           SMP_T_UINT, SMP_USE_L6REQ },
-       { "req_ssl_hello_type",  smp_fetch_ssl_hello_type, 0,                      NULL,           SMP_T_UINT, SMP_USE_L6REQ },
+       { "rdp_cookie_cnt",      smp_fetch_rdp_cookie_cnt, ARG1(0,STR),            NULL,           SMP_T_SINT, SMP_USE_L6REQ },
+       { "rep_ssl_hello_type",  smp_fetch_ssl_hello_type, 0,                      NULL,           SMP_T_SINT, SMP_USE_L6RES },
+       { "req_len",             smp_fetch_len,            0,                      NULL,           SMP_T_SINT, SMP_USE_L6REQ },
+       { "req_ssl_hello_type",  smp_fetch_ssl_hello_type, 0,                      NULL,           SMP_T_SINT, SMP_USE_L6REQ },
        { "req_ssl_sni",         smp_fetch_ssl_hello_sni,  0,                      NULL,           SMP_T_STR,  SMP_USE_L6REQ },
-       { "req_ssl_ver",         smp_fetch_req_ssl_ver,    0,                      NULL,           SMP_T_UINT, SMP_USE_L6REQ },
+       { "req_ssl_ver",         smp_fetch_req_ssl_ver,    0,                      NULL,           SMP_T_SINT, SMP_USE_L6REQ },
 
-       { "req.len",             smp_fetch_len,            0,                      NULL,           SMP_T_UINT, SMP_USE_L6REQ },
+       { "req.len",             smp_fetch_len,            0,                      NULL,           SMP_T_SINT, SMP_USE_L6REQ },
        { "req.payload",         smp_fetch_payload,        ARG2(2,UINT,UINT),      NULL,           SMP_T_BIN,  SMP_USE_L6REQ },
-       { "req.payload_lv",      smp_fetch_payload_lv,     ARG3(2,UINT,UINT,SINT), val_payload_lv, SMP_T_BIN,  SMP_USE_L6REQ },
+       { "req.payload_lv",      smp_fetch_payload_lv,     ARG3(2,UINT,UINT,UINT), val_payload_lv, SMP_T_BIN,  SMP_USE_L6REQ },
        { "req.rdp_cookie",      smp_fetch_rdp_cookie,     ARG1(0,STR),            NULL,           SMP_T_STR,  SMP_USE_L6REQ },
-       { "req.rdp_cookie_cnt",  smp_fetch_rdp_cookie_cnt, ARG1(0,STR),            NULL,           SMP_T_UINT, SMP_USE_L6REQ },
+       { "req.rdp_cookie_cnt",  smp_fetch_rdp_cookie_cnt, ARG1(0,STR),            NULL,           SMP_T_SINT, SMP_USE_L6REQ },
        { "req.ssl_ec_ext",      smp_fetch_req_ssl_ec_ext, 0,                      NULL,           SMP_T_BOOL, SMP_USE_L6REQ },
-       { "req.ssl_hello_type",  smp_fetch_ssl_hello_type, 0,                      NULL,           SMP_T_UINT, SMP_USE_L6REQ },
+       { "req.ssl_hello_type",  smp_fetch_ssl_hello_type, 0,                      NULL,           SMP_T_SINT, SMP_USE_L6REQ },
        { "req.ssl_sni",         smp_fetch_ssl_hello_sni,  0,                      NULL,           SMP_T_STR,  SMP_USE_L6REQ },
-       { "req.ssl_ver",         smp_fetch_req_ssl_ver,    0,                      NULL,           SMP_T_UINT, SMP_USE_L6REQ },
-       { "res.len",             smp_fetch_len,            0,                      NULL,           SMP_T_UINT, SMP_USE_L6RES },
+       { "req.ssl_ver",         smp_fetch_req_ssl_ver,    0,                      NULL,           SMP_T_SINT, SMP_USE_L6REQ },
+       { "res.len",             smp_fetch_len,            0,                      NULL,           SMP_T_SINT, SMP_USE_L6RES },
        { "res.payload",         smp_fetch_payload,        ARG2(2,UINT,UINT),      NULL,           SMP_T_BIN,  SMP_USE_L6RES },
        { "res.payload_lv",      smp_fetch_payload_lv,     ARG3(2,UINT,UINT,SINT), val_payload_lv, SMP_T_BIN,  SMP_USE_L6RES },
-       { "res.ssl_hello_type",  smp_fetch_ssl_hello_type, 0,                      NULL,           SMP_T_UINT, SMP_USE_L6RES },
+       { "res.ssl_hello_type",  smp_fetch_ssl_hello_type, 0,                      NULL,           SMP_T_SINT, SMP_USE_L6RES },
        { "wait_end",            smp_fetch_wait_end,       0,                      NULL,           SMP_T_BOOL, SMP_USE_INTRN },
        { /* END */ },
 }};
index 69ad908def07d9f442935e871bb74639ba15c246..c35e6a1ef581849018ebc1a6b1dbfadb57f30299 100644 (file)
@@ -10222,7 +10222,7 @@ smp_prefetch_http(struct proxy *px, struct stream *s, unsigned int opt,
                        if (unlikely(s->req.buf->i + s->req.buf->p >
                                     s->req.buf->data + s->req.buf->size - global.tune.maxrewrite)) {
                                msg->msg_state = HTTP_MSG_ERROR;
-                               smp->data.uint = 1;
+                               smp->data.sint = 1;
                                return 1;
                        }
 
@@ -10249,7 +10249,7 @@ smp_prefetch_http(struct proxy *px, struct stream *s, unsigned int opt,
        }
 
        /* everything's OK */
-       smp->data.uint = 1;
+       smp->data.sint = 1;
        return 1;
 }
 
@@ -10416,8 +10416,8 @@ smp_fetch_stcode(const struct arg *args, struct sample *smp, const char *kw, voi
        len = txn->rsp.sl.st.c_l;
        ptr = txn->rsp.chn->buf->p + txn->rsp.sl.st.c;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = __strl2ui(ptr, len);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = __strl2ui(ptr, len);
        smp->flags = SMP_F_VOL_1ST;
        return 1;
 }
@@ -10486,8 +10486,8 @@ smp_fetch_body_len(const struct arg *args, struct sample *smp, const char *kw, v
        else
                msg = &txn->rsp;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = http_body_bytes(msg);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = http_body_bytes(msg);
 
        smp->flags = SMP_F_VOL_TEST;
        return 1;
@@ -10511,8 +10511,8 @@ smp_fetch_body_size(const struct arg *args, struct sample *smp, const char *kw,
        else
                msg = &txn->rsp;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = msg->body_len;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = msg->body_len;
 
        smp->flags = SMP_F_VOL_TEST;
        return 1;
@@ -10567,8 +10567,8 @@ smp_fetch_url_port(const struct arg *args, struct sample *smp, const char *kw, v
        if (((struct sockaddr_in *)&addr)->sin_family != AF_INET)
                return 0;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = ntohs(((struct sockaddr_in *)&addr)->sin_port);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = ntohs(((struct sockaddr_in *)&addr)->sin_port);
        smp->flags = 0;
        return 1;
 }
@@ -10662,8 +10662,8 @@ smp_fetch_fhdr_cnt(const struct arg *args, struct sample *smp, const char *kw, v
        while (http_find_full_header2(name, len, msg->chn->buf->p, idx, &ctx))
                cnt++;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = cnt;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = cnt;
        smp->flags = SMP_F_VOL_HDR;
        return 1;
 }
@@ -10789,8 +10789,8 @@ smp_fetch_hdr_cnt(const struct arg *args, struct sample *smp, const char *kw, vo
        while (http_find_header2(name, len, msg->chn->buf->p, idx, &ctx))
                cnt++;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = cnt;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = cnt;
        smp->flags = SMP_F_VOL_HDR;
        return 1;
 }
@@ -10806,8 +10806,8 @@ smp_fetch_hdr_val(const struct arg *args, struct sample *smp, const char *kw, vo
        int ret = smp_fetch_hdr(args, smp, kw, private);
 
        if (ret > 0) {
-               smp->type = SMP_T_UINT;
-               smp->data.uint = strl2ic(smp->data.str.str, smp->data.str.len);
+               smp->type = SMP_T_SINT;
+               smp->data.sint = strl2ic(smp->data.str.str, smp->data.str.len);
        }
 
        return ret;
@@ -10963,8 +10963,8 @@ smp_fetch_base32(const struct arg *args, struct sample *smp, const char *kw, voi
        }
        hash = full_hash(hash);
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = hash;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = hash;
        smp->flags = SMP_F_VOL_1ST;
        return 1;
 }
@@ -10989,7 +10989,7 @@ smp_fetch_base32_src(const struct arg *args, struct sample *smp, const char *kw,
                return 0;
 
        temp = get_trash_chunk();
-       *(unsigned int *)temp->str = htonl(smp->data.uint);
+       *(unsigned int *)temp->str = htonl(smp->data.sint);
        temp->len += sizeof(unsigned int);
 
        switch (cli_conn->addr.from.ss_family) {
@@ -11049,7 +11049,7 @@ smp_fetch_proto_http(const struct arg *args, struct sample *smp, const char *kw,
        CHECK_HTTP_MESSAGE_FIRST_PERM();
 
        smp->type = SMP_T_BOOL;
-       smp->data.uint = 1;
+       smp->data.sint = 1;
        return 1;
 }
 
@@ -11058,7 +11058,7 @@ static int
 smp_fetch_http_first_req(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->type = SMP_T_BOOL;
-       smp->data.uint = !(smp->strm->txn->flags & TX_NOT_FIRST);
+       smp->data.sint = !(smp->strm->txn->flags & TX_NOT_FIRST);
        return 1;
 }
 
@@ -11076,7 +11076,7 @@ smp_fetch_http_auth(const struct arg *args, struct sample *smp, const char *kw,
                return 0;
 
        smp->type = SMP_T_BOOL;
-       smp->data.uint = check_user(args->data.usr, smp->strm->txn->auth.user,
+       smp->data.sint = check_user(args->data.usr, smp->strm->txn->auth.user,
                                    smp->strm->txn->auth.pass);
        return 1;
 }
@@ -11537,8 +11537,8 @@ smp_fetch_cookie_cnt(const struct arg *args, struct sample *smp, const char *kw,
                }
        }
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = cnt;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = cnt;
        smp->flags |= SMP_F_VOL_HDR;
        return 1;
 }
@@ -11552,8 +11552,8 @@ smp_fetch_cookie_val(const struct arg *args, struct sample *smp, const char *kw,
        int ret = smp_fetch_cookie(args, smp, kw, private);
 
        if (ret > 0) {
-               smp->type = SMP_T_UINT;
-               smp->data.uint = strl2ic(smp->data.str.str, smp->data.str.len);
+               smp->type = SMP_T_SINT;
+               smp->data.sint = strl2ic(smp->data.str.str, smp->data.str.len);
        }
 
        return ret;
@@ -11954,8 +11954,8 @@ smp_fetch_url_param_val(const struct arg *args, struct sample *smp, const char *
        int ret = smp_fetch_url_param(args, smp, kw, private);
 
        if (ret > 0) {
-               smp->type = SMP_T_UINT;
-               smp->data.uint = strl2ic(smp->data.str.str, smp->data.str.len);
+               smp->type = SMP_T_SINT;
+               smp->data.sint = strl2ic(smp->data.str.str, smp->data.str.len);
        }
 
        return ret;
@@ -12006,8 +12006,8 @@ smp_fetch_url32(const struct arg *args, struct sample *smp, const char *kw, void
        }
        hash = full_hash(hash);
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = hash;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = hash;
        smp->flags = SMP_F_VOL_1ST;
        return 1;
 }
@@ -12024,13 +12024,17 @@ smp_fetch_url32_src(const struct arg *args, struct sample *smp, const char *kw,
 {
        struct chunk *temp;
        struct connection *cli_conn = objt_conn(smp->sess->origin);
+       unsigned int hash;
 
        if (!smp_fetch_url32(args, smp, kw, private))
                return 0;
 
+       /* The returned hash is a 32 bytes integer. */
+       hash = smp->data.sint;
+
        temp = get_trash_chunk();
-       memcpy(temp->str + temp->len, &smp->data.uint, sizeof(smp->data.uint));
-       temp->len += sizeof(smp->data.uint);
+       memcpy(temp->str + temp->len, &hash, sizeof(hash));
+       temp->len += sizeof(hash);
 
        switch (cli_conn->addr.from.ss_family) {
        case AF_INET:
@@ -12077,7 +12081,7 @@ static int sample_conv_http_date(const struct arg *args, struct sample *smp, voi
        const char mon[12][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
        struct chunk *temp;
        struct tm *tm;
-       time_t curr_date = smp->data.uint;
+       time_t curr_date = smp->data.sint;
 
        /* add offset */
        if (args && (args[0].type == ARGT_SINT || args[0].type == ARGT_UINT))
@@ -13005,7 +13009,7 @@ static struct acl_kw_list acl_kws = {ILH, {
 /* Note: must not be declared <const> as its list will be overwritten */
 static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
        { "base",            smp_fetch_base,           0,                NULL,    SMP_T_STR,  SMP_USE_HRQHV },
-       { "base32",          smp_fetch_base32,         0,                NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "base32",          smp_fetch_base32,         0,                NULL,    SMP_T_SINT, SMP_USE_HRQHV },
        { "base32+src",      smp_fetch_base32_src,     0,                NULL,    SMP_T_BIN,  SMP_USE_HRQHV },
 
        /* capture are allocated and are permanent in the stream */
@@ -13025,17 +13029,17 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
         */
        { "cook",            smp_fetch_cookie,         ARG1(0,STR),      NULL,    SMP_T_STR,  SMP_USE_HRQHV },
        { "cookie",          smp_fetch_cookie,         ARG1(0,STR),      NULL,    SMP_T_STR,  SMP_USE_HRQHV|SMP_USE_HRSHV },
-       { "cook_cnt",        smp_fetch_cookie_cnt,     ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRQHV },
-       { "cook_val",        smp_fetch_cookie_val,     ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "cook_cnt",        smp_fetch_cookie_cnt,     ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRQHV },
+       { "cook_val",        smp_fetch_cookie_val,     ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRQHV },
 
        /* hdr is valid in both directions (eg: for "stick ...") but hdr_* are
         * only here to match the ACL's name, are request-only and are used for
         * ACL compatibility only.
         */
        { "hdr",             smp_fetch_hdr,            ARG2(0,STR,SINT), val_hdr, SMP_T_STR,  SMP_USE_HRQHV|SMP_USE_HRSHV },
-       { "hdr_cnt",         smp_fetch_hdr_cnt,        ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "hdr_cnt",         smp_fetch_hdr_cnt,        ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRQHV },
        { "hdr_ip",          smp_fetch_hdr_ip,         ARG2(0,STR,SINT), val_hdr, SMP_T_IPV4, SMP_USE_HRQHV },
-       { "hdr_val",         smp_fetch_hdr_val,        ARG2(0,STR,SINT), val_hdr, SMP_T_UINT, SMP_USE_HRQHV },
+       { "hdr_val",         smp_fetch_hdr_val,        ARG2(0,STR,SINT), val_hdr, SMP_T_SINT, SMP_USE_HRQHV },
 
        { "http_auth",       smp_fetch_http_auth,      ARG1(1,USR),      NULL,    SMP_T_BOOL, SMP_USE_HRQHV },
        { "http_auth_group", smp_fetch_http_auth_grp,  ARG1(1,USR),      NULL,    SMP_T_STR,  SMP_USE_HRQHV },
@@ -13053,8 +13057,8 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
        { "req_ver",         smp_fetch_rqver,          0,                NULL,    SMP_T_STR,  SMP_USE_HRQHV },
 
        { "req.body",        smp_fetch_body,           0,                NULL,    SMP_T_BIN,  SMP_USE_HRQHV },
-       { "req.body_len",    smp_fetch_body_len,       0,                NULL,    SMP_T_UINT, SMP_USE_HRQHV },
-       { "req.body_size",   smp_fetch_body_size,      0,                NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "req.body_len",    smp_fetch_body_len,       0,                NULL,    SMP_T_SINT, SMP_USE_HRQHV },
+       { "req.body_size",   smp_fetch_body_size,      0,                NULL,    SMP_T_SINT, SMP_USE_HRQHV },
        { "req.body_param",  smp_fetch_body_param,     ARG1(0,STR),      NULL,    SMP_T_BIN,  SMP_USE_HRQHV },
 
        /* HTTP version on the response path */
@@ -13063,51 +13067,51 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
 
        /* explicit req.{cook,hdr} are used to force the fetch direction to be request-only */
        { "req.cook",        smp_fetch_cookie,         ARG1(0,STR),      NULL,    SMP_T_STR,  SMP_USE_HRQHV },
-       { "req.cook_cnt",    smp_fetch_cookie_cnt,     ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRQHV },
-       { "req.cook_val",    smp_fetch_cookie_val,     ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "req.cook_cnt",    smp_fetch_cookie_cnt,     ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRQHV },
+       { "req.cook_val",    smp_fetch_cookie_val,     ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRQHV },
 
        { "req.fhdr",        smp_fetch_fhdr,           ARG2(0,STR,SINT), val_hdr, SMP_T_STR,  SMP_USE_HRQHV },
-       { "req.fhdr_cnt",    smp_fetch_fhdr_cnt,       ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "req.fhdr_cnt",    smp_fetch_fhdr_cnt,       ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRQHV },
        { "req.hdr",         smp_fetch_hdr,            ARG2(0,STR,SINT), val_hdr, SMP_T_STR,  SMP_USE_HRQHV },
-       { "req.hdr_cnt",     smp_fetch_hdr_cnt,        ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "req.hdr_cnt",     smp_fetch_hdr_cnt,        ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRQHV },
        { "req.hdr_ip",      smp_fetch_hdr_ip,         ARG2(0,STR,SINT), val_hdr, SMP_T_IPV4, SMP_USE_HRQHV },
        { "req.hdr_names",   smp_fetch_hdr_names,      ARG1(0,STR),      NULL,    SMP_T_STR,  SMP_USE_HRQHV },
-       { "req.hdr_val",     smp_fetch_hdr_val,        ARG2(0,STR,SINT), val_hdr, SMP_T_UINT, SMP_USE_HRQHV },
+       { "req.hdr_val",     smp_fetch_hdr_val,        ARG2(0,STR,SINT), val_hdr, SMP_T_SINT, SMP_USE_HRQHV },
 
        /* explicit req.{cook,hdr} are used to force the fetch direction to be response-only */
        { "res.cook",        smp_fetch_cookie,         ARG1(0,STR),      NULL,    SMP_T_STR,  SMP_USE_HRSHV },
-       { "res.cook_cnt",    smp_fetch_cookie_cnt,     ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRSHV },
-       { "res.cook_val",    smp_fetch_cookie_val,     ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRSHV },
+       { "res.cook_cnt",    smp_fetch_cookie_cnt,     ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRSHV },
+       { "res.cook_val",    smp_fetch_cookie_val,     ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRSHV },
 
        { "res.fhdr",        smp_fetch_fhdr,           ARG2(0,STR,SINT), val_hdr, SMP_T_STR,  SMP_USE_HRSHV },
-       { "res.fhdr_cnt",    smp_fetch_fhdr_cnt,       ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRSHV },
+       { "res.fhdr_cnt",    smp_fetch_fhdr_cnt,       ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRSHV },
        { "res.hdr",         smp_fetch_hdr,            ARG2(0,STR,SINT), val_hdr, SMP_T_STR,  SMP_USE_HRSHV },
-       { "res.hdr_cnt",     smp_fetch_hdr_cnt,        ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRSHV },
+       { "res.hdr_cnt",     smp_fetch_hdr_cnt,        ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRSHV },
        { "res.hdr_ip",      smp_fetch_hdr_ip,         ARG2(0,STR,SINT), val_hdr, SMP_T_IPV4, SMP_USE_HRSHV },
        { "res.hdr_names",   smp_fetch_hdr_names,      ARG1(0,STR),      NULL,    SMP_T_STR,  SMP_USE_HRSHV },
-       { "res.hdr_val",     smp_fetch_hdr_val,        ARG2(0,STR,SINT), val_hdr, SMP_T_UINT, SMP_USE_HRSHV },
+       { "res.hdr_val",     smp_fetch_hdr_val,        ARG2(0,STR,SINT), val_hdr, SMP_T_SINT, SMP_USE_HRSHV },
 
        /* scook is valid only on the response and is used for ACL compatibility */
        { "scook",           smp_fetch_cookie,         ARG1(0,STR),      NULL,    SMP_T_STR,  SMP_USE_HRSHV },
-       { "scook_cnt",       smp_fetch_cookie_cnt,     ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRSHV },
-       { "scook_val",       smp_fetch_cookie_val,     ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRSHV },
+       { "scook_cnt",       smp_fetch_cookie_cnt,     ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRSHV },
+       { "scook_val",       smp_fetch_cookie_val,     ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRSHV },
        { "set-cookie",      smp_fetch_cookie,         ARG1(0,STR),      NULL,    SMP_T_STR,  SMP_USE_HRSHV }, /* deprecated */
 
        /* shdr is valid only on the response and is used for ACL compatibility */
        { "shdr",            smp_fetch_hdr,            ARG2(0,STR,SINT), val_hdr, SMP_T_STR,  SMP_USE_HRSHV },
-       { "shdr_cnt",        smp_fetch_hdr_cnt,        ARG1(0,STR),      NULL,    SMP_T_UINT, SMP_USE_HRSHV },
+       { "shdr_cnt",        smp_fetch_hdr_cnt,        ARG1(0,STR),      NULL,    SMP_T_SINT, SMP_USE_HRSHV },
        { "shdr_ip",         smp_fetch_hdr_ip,         ARG2(0,STR,SINT), val_hdr, SMP_T_IPV4, SMP_USE_HRSHV },
-       { "shdr_val",        smp_fetch_hdr_val,        ARG2(0,STR,SINT), val_hdr, SMP_T_UINT, SMP_USE_HRSHV },
+       { "shdr_val",        smp_fetch_hdr_val,        ARG2(0,STR,SINT), val_hdr, SMP_T_SINT, SMP_USE_HRSHV },
 
-       { "status",          smp_fetch_stcode,         0,                NULL,    SMP_T_UINT, SMP_USE_HRSHP },
+       { "status",          smp_fetch_stcode,         0,                NULL,    SMP_T_SINT, SMP_USE_HRSHP },
        { "url",             smp_fetch_url,            0,                NULL,    SMP_T_STR,  SMP_USE_HRQHV },
-       { "url32",           smp_fetch_url32,          0,                NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "url32",           smp_fetch_url32,          0,                NULL,    SMP_T_SINT, SMP_USE_HRQHV },
        { "url32+src",       smp_fetch_url32_src,      0,                NULL,    SMP_T_BIN,  SMP_USE_HRQHV },
        { "url_ip",          smp_fetch_url_ip,         0,                NULL,    SMP_T_IPV4, SMP_USE_HRQHV },
-       { "url_port",        smp_fetch_url_port,       0,                NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "url_port",        smp_fetch_url_port,       0,                NULL,    SMP_T_SINT, SMP_USE_HRQHV },
        { "url_param",       smp_fetch_url_param,      ARG2(0,STR,STR),  NULL,    SMP_T_STR,  SMP_USE_HRQHV },
        { "urlp"     ,       smp_fetch_url_param,      ARG2(0,STR,STR),  NULL,    SMP_T_STR,  SMP_USE_HRQHV },
-       { "urlp_val",        smp_fetch_url_param_val,  ARG2(0,STR,STR),  NULL,    SMP_T_UINT, SMP_USE_HRQHV },
+       { "urlp_val",        smp_fetch_url_param_val,  ARG2(0,STR,STR),  NULL,    SMP_T_SINT, SMP_USE_HRQHV },
        { /* END */ },
 }};
 
@@ -13117,7 +13121,7 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
 /************************************************************************/
 /* Note: must not be declared <const> as its list will be overwritten */
 static struct sample_conv_kw_list sample_conv_kws = {ILH, {
-       { "http_date", sample_conv_http_date,  ARG1(0,SINT),     NULL, SMP_T_UINT, SMP_T_STR},
+       { "http_date", sample_conv_http_date,  ARG1(0,SINT),     NULL, SMP_T_SINT, SMP_T_STR},
        { "language",  sample_conv_q_prefered, ARG2(1,STR,STR),  NULL, SMP_T_STR,  SMP_T_STR},
        { "capture-req", smp_conv_req_capture, ARG1(1,UINT),     NULL, SMP_T_STR,  SMP_T_STR},
        { "capture-res", smp_conv_res_capture, ARG1(1,UINT),     NULL, SMP_T_STR,  SMP_T_STR},
index 9f9de9bae6efcccd302e1d0377426b07d929850f..734d469bd697bdbec16991cac0daf79286e73e2f 100644 (file)
@@ -2018,8 +2018,8 @@ smp_fetch_sport(const struct arg *args, struct sample *smp, const char *k, void
        if (!cli_conn)
                return 0;
 
-       smp->type = SMP_T_UINT;
-       if (!(smp->data.uint = get_host_port(&cli_conn->addr.from)))
+       smp->type = SMP_T_SINT;
+       if (!(smp->data.sint = get_host_port(&cli_conn->addr.from)))
                return 0;
 
        smp->flags = 0;
@@ -2065,8 +2065,8 @@ smp_fetch_dport(const struct arg *args, struct sample *smp, const char *kw, void
 
        conn_get_to_addr(cli_conn);
 
-       smp->type = SMP_T_UINT;
-       if (!(smp->data.uint = get_host_port(&cli_conn->addr.to)))
+       smp->type = SMP_T_SINT;
+       if (!(smp->data.sint = get_host_port(&cli_conn->addr.to)))
                return 0;
 
        smp->flags = 0;
@@ -2272,9 +2272,9 @@ static struct acl_kw_list acl_kws = {ILH, {
  */
 static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
        { "dst",      smp_fetch_dst,   0, NULL, SMP_T_IPV4, SMP_USE_L4CLI },
-       { "dst_port", smp_fetch_dport, 0, NULL, SMP_T_UINT, SMP_USE_L4CLI },
+       { "dst_port", smp_fetch_dport, 0, NULL, SMP_T_SINT, SMP_USE_L4CLI },
        { "src",      smp_fetch_src,   0, NULL, SMP_T_IPV4, SMP_USE_L4CLI },
-       { "src_port", smp_fetch_sport, 0, NULL, SMP_T_UINT, SMP_USE_L4CLI },
+       { "src_port", smp_fetch_sport, 0, NULL, SMP_T_SINT, SMP_USE_L4CLI },
        { /* END */ },
 }};
 
index 0a09012adca09fd20aae8c3d63e8377df308a1fa..17e331acc127c3ac028af268c442c8af3bfd5099 100644 (file)
@@ -36,7 +36,6 @@
 const char *smp_to_type[SMP_TYPES] = {
        [SMP_T_ANY]  = "any",
        [SMP_T_BOOL] = "bool",
-       [SMP_T_UINT] = "uint",
        [SMP_T_SINT] = "sint",
        [SMP_T_ADDR] = "addr",
        [SMP_T_IPV4] = "ipv4",
@@ -499,8 +498,8 @@ struct sample_conv *find_sample_conv(const char *kw, int len)
 
 static int c_ip2int(struct sample *smp)
 {
-       smp->data.uint = ntohl(smp->data.ipv4.s_addr);
-       smp->type = SMP_T_UINT;
+       smp->data.sint = ntohl(smp->data.ipv4.s_addr);
+       smp->type = SMP_T_SINT;
        return 1;
 }
 
@@ -549,7 +548,7 @@ static int c_ipv62ip(struct sample *smp)
 
 static int c_int2ip(struct sample *smp)
 {
-       smp->data.ipv4.s_addr = htonl(smp->data.uint);
+       smp->data.ipv4.s_addr = htonl((unsigned int)smp->data.sint);
        smp->type = SMP_T_IPV4;
        return 1;
 }
@@ -608,25 +607,7 @@ static int c_int2str(struct sample *smp)
        struct chunk *trash = get_trash_chunk();
        char *pos;
 
-       pos = ultoa_r(smp->data.uint, trash->str, trash->size);
-       if (!pos)
-               return 0;
-
-       trash->size = trash->size - (pos - trash->str);
-       trash->str = pos;
-       trash->len = strlen(pos);
-       smp->data.str = *trash;
-       smp->type = SMP_T_STR;
-       smp->flags &= ~SMP_F_CONST;
-       return 1;
-}
-
-static int c_sint2str(struct sample *smp)
-{
-       struct chunk *trash = get_trash_chunk();
-       char *pos;
-
-       pos = sltoa_r(smp->data.sint, trash->str, trash->size);
+       pos = lltoa_r(smp->data.sint, trash->str, trash->size);
        if (!pos)
                return 0;
 
@@ -652,7 +633,6 @@ int smp_dup(struct sample *smp)
 
        switch (smp->type) {
        case SMP_T_BOOL:
-       case SMP_T_UINT:
        case SMP_T_SINT:
        case SMP_T_ADDR:
        case SMP_T_IPV4:
@@ -684,26 +664,17 @@ int c_none(struct sample *smp)
 
 static int c_str2int(struct sample *smp)
 {
-       int i;
-       uint32_t ret = 0;
+       const char *str;
+       const char *end;
 
        if (smp->data.str.len == 0)
                return 0;
 
-       for (i = 0; i < smp->data.str.len; i++) {
-               uint32_t val = smp->data.str.str[i] - '0';
+       str = smp->data.str.str;
+       end = smp->data.str.str + smp->data.str.len;
 
-               if (val > 9) {
-                       if (i == 0)
-                               return 0;
-                       break;
-               }
-
-               ret = ret * 10 + val;
-       }
-
-       smp->data.uint = ret;
-       smp->type = SMP_T_UINT;
+       smp->data.sint = read_int64(&str, end);
+       smp->type = SMP_T_SINT;
        smp->flags &= ~SMP_F_CONST;
        return 1;
 }
@@ -777,8 +748,8 @@ static int c_int2bin(struct sample *smp)
 {
        struct chunk *chk = get_trash_chunk();
 
-       *(unsigned int *)chk->str = htonl(smp->data.uint);
-       chk->len = 4;
+       *(unsigned long long int *)chk->str = htonll(smp->data.sint);
+       chk->len = 8;
 
        smp->data.str = *chk;
        smp->type = SMP_T_BIN;
@@ -793,17 +764,16 @@ static int c_int2bin(struct sample *smp)
 /*****************************************************************/
 
 sample_cast_fct sample_casts[SMP_TYPES][SMP_TYPES] = {
-/*            to:  ANY     BOOL       UINT       SINT       ADDR        IPV4      IPV6        STR         BIN         METH */
-/* from:  ANY */ { c_none, c_none,    c_none,    c_none,    c_none,     c_none,   c_none,     c_none,     c_none,     c_none,     },
-/*       BOOL */ { c_none, c_none,    c_none,    c_none,    NULL,       NULL,     NULL,       c_int2str,  NULL,       NULL,       },
-/*       UINT */ { c_none, c_none,    c_none,    c_none,    c_int2ip,   c_int2ip, NULL,       c_int2str,  c_int2bin,  NULL,       },
-/*       SINT */ { c_none, c_none,    c_none,    c_none,    c_int2ip,   c_int2ip, NULL,       c_sint2str, c_int2bin,  NULL,       },
-/*       ADDR */ { c_none, NULL,      NULL,      NULL,      NULL,       NULL,     NULL,       NULL,       NULL,       NULL,       },
-/*       IPV4 */ { c_none, NULL,      c_ip2int,  c_ip2int,  c_none,     c_none,   c_ip2ipv6,  c_ip2str,   c_addr2bin, NULL,       },
-/*       IPV6 */ { c_none, NULL,      NULL,      NULL,      c_none,     NULL,     c_none,     c_ipv62str, c_addr2bin, NULL,       },
-/*        STR */ { c_none, c_str2int, c_str2int, c_str2int, c_str2addr, c_str2ip, c_str2ipv6, c_none,     c_none,     c_str2meth, },
-/*        BIN */ { c_none, NULL,      NULL,      NULL,      NULL,       NULL,     NULL,       c_bin2str,  c_none,     c_str2meth, },
-/*       METH */ { c_none, NULL,      NULL,      NULL,      NULL,       NULL,     NULL,       c_meth2str, c_meth2str, c_none,     }
+/*            to:  ANY     BOOL       SINT       ADDR        IPV4      IPV6        STR         BIN         METH */
+/* from:  ANY */ { c_none, c_none,    c_none,    c_none,     c_none,   c_none,     c_none,     c_none,     c_none,     },
+/*       BOOL */ { c_none, c_none,    c_none,    NULL,       NULL,     NULL,       c_int2str,  NULL,       NULL,       },
+/*       SINT */ { c_none, c_none,    c_none,    c_int2ip,   c_int2ip, NULL,       c_int2str,  c_int2bin,  NULL,       },
+/*       ADDR */ { c_none, NULL,      NULL,      NULL,       NULL,     NULL,       NULL,       NULL,       NULL,       },
+/*       IPV4 */ { c_none, NULL,      c_ip2int,  c_none,     c_none,   c_ip2ipv6,  c_ip2str,   c_addr2bin, NULL,       },
+/*       IPV6 */ { c_none, NULL,      NULL,      c_none,     NULL,     c_none,     c_ipv62str, c_addr2bin, NULL,       },
+/*        STR */ { c_none, c_str2int, c_str2int, c_str2addr, c_str2ip, c_str2ipv6, c_none,     c_none,     c_str2meth, },
+/*        BIN */ { c_none, NULL,      NULL,      NULL,       NULL,     NULL,       c_bin2str,  c_none,     c_str2meth, },
+/*       METH */ { c_none, NULL,      NULL,      NULL,       NULL,     NULL,       c_meth2str, c_meth2str, c_none,     }
 };
 
 /*
@@ -1462,10 +1432,10 @@ static int sample_conv_bin2hex(const struct arg *arg_p, struct sample *smp, void
 /* hashes the binary input into a 32-bit unsigned int */
 static int sample_conv_djb2(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint = hash_djb2(smp->data.str.str, smp->data.str.len);
+       smp->data.sint = hash_djb2(smp->data.str.str, smp->data.str.len);
        if (arg_p && arg_p->data.uint)
-               smp->data.uint = full_hash(smp->data.uint);
-       smp->type = SMP_T_UINT;
+               smp->data.sint = full_hash(smp->data.sint);
+       smp->type = SMP_T_SINT;
        return 1;
 }
 
@@ -1518,7 +1488,7 @@ static int sample_conv_ipmask(const struct arg *arg_p, struct sample *smp, void
 static int sample_conv_ltime(const struct arg *args, struct sample *smp, void *private)
 {
        struct chunk *temp;
-       time_t curr_date = smp->data.uint;
+       time_t curr_date = smp->data.sint;
        struct tm *tm;
 
        /* add offset */
@@ -1538,10 +1508,10 @@ static int sample_conv_ltime(const struct arg *args, struct sample *smp, void *p
 /* hashes the binary input into a 32-bit unsigned int */
 static int sample_conv_sdbm(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint = hash_sdbm(smp->data.str.str, smp->data.str.len);
+       smp->data.sint = hash_sdbm(smp->data.str.str, smp->data.str.len);
        if (arg_p && arg_p->data.uint)
-               smp->data.uint = full_hash(smp->data.uint);
-       smp->type = SMP_T_UINT;
+               smp->data.sint = full_hash(smp->data.sint);
+       smp->type = SMP_T_SINT;
        return 1;
 }
 
@@ -1552,7 +1522,7 @@ static int sample_conv_sdbm(const struct arg *arg_p, struct sample *smp, void *p
 static int sample_conv_utime(const struct arg *args, struct sample *smp, void *private)
 {
        struct chunk *temp;
-       time_t curr_date = smp->data.uint;
+       time_t curr_date = smp->data.sint;
        struct tm *tm;
 
        /* add offset */
@@ -1572,20 +1542,20 @@ static int sample_conv_utime(const struct arg *args, struct sample *smp, void *p
 /* hashes the binary input into a 32-bit unsigned int */
 static int sample_conv_wt6(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint = hash_wt6(smp->data.str.str, smp->data.str.len);
+       smp->data.sint = hash_wt6(smp->data.str.str, smp->data.str.len);
        if (arg_p && arg_p->data.uint)
-               smp->data.uint = full_hash(smp->data.uint);
-       smp->type = SMP_T_UINT;
+               smp->data.sint = full_hash(smp->data.sint);
+       smp->type = SMP_T_SINT;
        return 1;
 }
 
 /* hashes the binary input into a 32-bit unsigned int */
 static int sample_conv_crc32(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint = hash_crc32(smp->data.str.str, smp->data.str.len);
+       smp->data.sint = hash_crc32(smp->data.str.str, smp->data.str.len);
        if (arg_p && arg_p->data.uint)
-               smp->data.uint = full_hash(smp->data.uint);
-       smp->type = SMP_T_UINT;
+               smp->data.sint = full_hash(smp->data.sint);
+       smp->type = SMP_T_SINT;
        return 1;
 }
 
@@ -2045,149 +2015,149 @@ static int sample_conv_regsub(const struct arg *arg_p, struct sample *smp, void
        return 1;
 }
 
-/* Takes a UINT on input, applies a binary twos complement and returns the UINT
+/* Takes a SINT on input, applies a binary twos complement and returns the SINT
  * result.
  */
 static int sample_conv_binary_cpl(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint = ~smp->data.uint;
+       smp->data.sint = ~smp->data.sint;
        return 1;
 }
 
-/* Takes a UINT on input, applies a binary "and" with the UINT in arg_p, and
- * returns the UINT result.
+/* Takes a SINT on input, applies a binary "and" with the UINT in arg_p, and
+ * returns the SINT result.
  */
 static int sample_conv_binary_and(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint &= arg_p->data.uint;
+       smp->data.sint &= arg_p->data.uint;
        return 1;
 }
 
-/* Takes a UINT on input, applies a binary "or" with the UINT in arg_p, and
- * returns the UINT result.
+/* Takes a SINT on input, applies a binary "or" with the UINT in arg_p, and
+ * returns the SINT result.
  */
 static int sample_conv_binary_or(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint |= arg_p->data.uint;
+       smp->data.sint |= arg_p->data.uint;
        return 1;
 }
 
-/* Takes a UINT on input, applies a binary "xor" with the UINT in arg_p, and
- * returns the UINT result.
+/* Takes a SINT on input, applies a binary "xor" with the UINT in arg_p, and
+ * returns the SINT result.
  */
 static int sample_conv_binary_xor(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint ^= arg_p->data.uint;
+       smp->data.sint ^= arg_p->data.uint;
        return 1;
 }
 
-/* Takes a UINT on input, applies an arithmetic "add" with the UINT in arg_p,
- * and returns the UINT result.
+/* Takes a SINT on input, applies an arithmetic "add" with the UINT in arg_p,
+ * and returns the SINT result.
  */
 static int sample_conv_arith_add(const struct arg *arg_p, struct sample *smp, void *private)
 {
-       smp->data.uint += arg_p->data.uint;
+       smp->data.sint += arg_p->data.uint;
        return 1;
 }
 
-/* Takes a UINT on input, applies an arithmetic "sub" with the UINT in arg_p,
- * and returns the UINT result.
+/* Takes a SINT on input, applies an arithmetic "sub" with the UINT in arg_p,
+ * and returns the SINT result.
  */
 static int sample_conv_arith_sub(const struct arg *arg_p,
                                  struct sample *smp, void *private)
 {
-       smp->data.uint -= arg_p->data.uint;
+       smp->data.sint -= arg_p->data.uint;
        return 1;
 }
 
-/* Takes a UINT on input, applies an arithmetic "mul" with the UINT in arg_p,
- * and returns the UINT result.
+/* Takes a SINT on input, applies an arithmetic "mul" with the UINT in arg_p,
+ * and returns the SINT result.
  */
 static int sample_conv_arith_mul(const struct arg *arg_p,
                                  struct sample *smp, void *private)
 {
-       smp->data.uint *= arg_p->data.uint;
+       smp->data.sint *= arg_p->data.uint;
        return 1;
 }
 
-/* Takes a UINT on input, applies an arithmetic "div" with the UINT in arg_p,
- * and returns the UINT result. If arg_p makes the result overflow, then the
+/* Takes a SINT on input, applies an arithmetic "div" with the SINT in arg_p,
+ * and returns the SINT result. If arg_p makes the result overflow, then the
  * largest possible quantity is returned.
  */
 static int sample_conv_arith_div(const struct arg *arg_p,
                                  struct sample *smp, void *private)
 {
        if (arg_p->data.uint)
-               smp->data.uint /= arg_p->data.uint;
+               smp->data.sint /= arg_p->data.uint;
        else
-               smp->data.uint = ~0;
+               smp->data.sint = ~0;
        return 1;
 }
 
-/* Takes a UINT on input, applies an arithmetic "mod" with the UINT in arg_p,
- * and returns the UINT result. If arg_p makes the result overflow, then zero
+/* Takes a SINT on input, applies an arithmetic "mod" with the SINT in arg_p,
+ * and returns the SINT result. If arg_p makes the result overflow, then zero
  * is returned.
  */
 static int sample_conv_arith_mod(const struct arg *arg_p,
                                  struct sample *smp, void *private)
 {
        if (arg_p->data.uint)
-               smp->data.uint %= arg_p->data.uint;
+               smp->data.sint %= arg_p->data.uint;
        else
-               smp->data.uint = 0;
+               smp->data.sint = 0;
        return 1;
 }
 
-/* Takes an UINT on input, applies an arithmetic "neg" and returns the UINT
+/* Takes an SINT on input, applies an arithmetic "neg" and returns the SINT
  * result.
  */
 static int sample_conv_arith_neg(const struct arg *arg_p,
                                  struct sample *smp, void *private)
 {
-       smp->data.uint = -smp->data.uint;
+       smp->data.sint = -smp->data.sint;
        return 1;
 }
 
-/* Takes a UINT on input, returns true is the value is non-null, otherwise
+/* Takes a SINT on input, returns true is the value is non-null, otherwise
  * false. The output is a BOOL.
  */
 static int sample_conv_arith_bool(const struct arg *arg_p,
                                   struct sample *smp, void *private)
 {
-       smp->data.uint = !!smp->data.uint;
+       smp->data.sint = !!smp->data.sint;
        smp->type = SMP_T_BOOL;
        return 1;
 }
 
-/* Takes a UINT on input, returns false is the value is non-null, otherwise
+/* Takes a SINT on input, returns false is the value is non-null, otherwise
  * truee. The output is a BOOL.
  */
 static int sample_conv_arith_not(const struct arg *arg_p,
                                  struct sample *smp, void *private)
 {
-       smp->data.uint = !smp->data.uint;
+       smp->data.sint = !smp->data.sint;
        smp->type = SMP_T_BOOL;
        return 1;
 }
 
-/* Takes a UINT on input, returns true is the value is odd, otherwise false.
+/* Takes a SINT on input, returns true is the value is odd, otherwise false.
  * The output is a BOOL.
  */
 static int sample_conv_arith_odd(const struct arg *arg_p,
                                  struct sample *smp, void *private)
 {
-       smp->data.uint = smp->data.uint & 1;
+       smp->data.sint = smp->data.sint & 1;
        smp->type = SMP_T_BOOL;
        return 1;
 }
 
-/* Takes a UINT on input, returns true is the value is even, otherwise false.
+/* Takes a SINT on input, returns true is the value is even, otherwise false.
  * The output is a BOOL.
  */
 static int sample_conv_arith_even(const struct arg *arg_p,
                                   struct sample *smp, void *private)
 {
-       smp->data.uint = !(smp->data.uint & 1);
+       smp->data.sint = !(smp->data.sint & 1);
        smp->type = SMP_T_BOOL;
        return 1;
 }
@@ -2201,7 +2171,7 @@ static int
 smp_fetch_true(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->type = SMP_T_BOOL;
-       smp->data.uint = 1;
+       smp->data.sint = 1;
        return 1;
 }
 
@@ -2210,7 +2180,7 @@ static int
 smp_fetch_false(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->type = SMP_T_BOOL;
-       smp->data.uint = 0;
+       smp->data.sint = 0;
        return 1;
 }
 
@@ -2240,13 +2210,13 @@ smp_fetch_env(const struct arg *args, struct sample *smp, const char *kw, void *
 static int
 smp_fetch_date(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-       smp->data.uint = date.tv_sec;
+       smp->data.sint = date.tv_sec;
 
        /* add offset */
        if (args && (args[0].type == ARGT_SINT || args[0].type == ARGT_UINT))
-               smp->data.uint += args[0].data.sint;
+               smp->data.sint += args[0].data.sint;
 
-       smp->type = SMP_T_UINT;
+       smp->type = SMP_T_SINT;
        smp->flags |= SMP_F_VOL_TEST | SMP_F_MAY_CHANGE;
        return 1;
 }
@@ -2255,8 +2225,8 @@ smp_fetch_date(const struct arg *args, struct sample *smp, const char *kw, void
 static int
 smp_fetch_nbproc(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-       smp->type = SMP_T_UINT;
-       smp->data.uint = global.nbproc;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = global.nbproc;
        return 1;
 }
 
@@ -2264,8 +2234,8 @@ smp_fetch_nbproc(const struct arg *args, struct sample *smp, const char *kw, voi
 static int
 smp_fetch_proc(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-       smp->type = SMP_T_UINT;
-       smp->data.uint = relative_pid;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = relative_pid;
        return 1;
 }
 
@@ -2275,13 +2245,13 @@ smp_fetch_proc(const struct arg *args, struct sample *smp, const char *kw, void
 static int
 smp_fetch_rand(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-       smp->data.uint = random();
+       smp->data.sint = random();
 
        /* reduce if needed. Don't do a modulo, use all bits! */
        if (args && args[0].type == ARGT_UINT)
-               smp->data.uint = ((uint64_t)smp->data.uint * args[0].data.uint) / ((u64)RAND_MAX+1);
+               smp->data.sint = (smp->data.sint * args[0].data.uint) / ((u64)RAND_MAX+1);
 
-       smp->type = SMP_T_UINT;
+       smp->type = SMP_T_SINT;
        smp->flags |= SMP_F_VOL_TEST | SMP_F_MAY_CHANGE;
        return 1;
 }
@@ -2291,7 +2261,7 @@ static int
 smp_fetch_stopping(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->type = SMP_T_BOOL;
-       smp->data.uint = stopping;
+       smp->data.sint = stopping;
        return 1;
 }
 
@@ -2325,18 +2295,11 @@ static int smp_check_const_bool(struct arg *args, char **err)
 static int smp_fetch_const_bool(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->type = SMP_T_BOOL;
-       smp->data.uint = args[0].data.uint;
-       return 1;
-}
-
-static int smp_fetch_const_uint(const struct arg *args, struct sample *smp, const char *kw, void *private)
-{
-       smp->type = SMP_T_UINT;
-       smp->data.uint = args[0].data.uint;
+       smp->data.sint = args[0].data.uint;
        return 1;
 }
 
-static int smp_fetch_const_sint(const struct arg *args, struct sample *smp, const char *kw, void *private)
+static int smp_fetch_const_int(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->type = SMP_T_SINT;
        smp->data.sint = args[0].data.sint;
@@ -2430,16 +2393,15 @@ static struct sample_fetch_kw_list smp_kws = {ILH, {
        { "always_false", smp_fetch_false, 0,            NULL, SMP_T_BOOL, SMP_USE_INTRN },
        { "always_true",  smp_fetch_true,  0,            NULL, SMP_T_BOOL, SMP_USE_INTRN },
        { "env",          smp_fetch_env,   ARG1(1,STR),  NULL, SMP_T_STR,  SMP_USE_INTRN },
-       { "date",         smp_fetch_date,  ARG1(0,SINT), NULL, SMP_T_UINT, SMP_USE_INTRN },
-       { "nbproc",       smp_fetch_nbproc,0,            NULL, SMP_T_UINT, SMP_USE_INTRN },
-       { "proc",         smp_fetch_proc,  0,            NULL, SMP_T_UINT, SMP_USE_INTRN },
-       { "rand",         smp_fetch_rand,  ARG1(0,UINT), NULL, SMP_T_UINT, SMP_USE_INTRN },
+       { "date",         smp_fetch_date,  ARG1(0,SINT), NULL, SMP_T_SINT, SMP_USE_INTRN },
+       { "nbproc",       smp_fetch_nbproc,0,            NULL, SMP_T_SINT, SMP_USE_INTRN },
+       { "proc",         smp_fetch_proc,  0,            NULL, SMP_T_SINT, SMP_USE_INTRN },
+       { "rand",         smp_fetch_rand,  ARG1(0,UINT), NULL, SMP_T_SINT, SMP_USE_INTRN },
        { "stopping",     smp_fetch_stopping, 0,         NULL, SMP_T_BOOL, SMP_USE_INTRN },
 
        { "str",  smp_fetch_const_str,  ARG1(1,STR),  NULL                , SMP_T_STR,  SMP_USE_INTRN },
        { "bool", smp_fetch_const_bool, ARG1(1,STR),  smp_check_const_bool, SMP_T_BOOL, SMP_USE_INTRN },
-       { "uint", smp_fetch_const_uint, ARG1(1,UINT), NULL                , SMP_T_UINT, SMP_USE_INTRN },
-       { "sint", smp_fetch_const_sint, ARG1(1,SINT), NULL                , SMP_T_SINT, SMP_USE_INTRN },
+       { "int",  smp_fetch_const_int,  ARG1(1,SINT), NULL                , SMP_T_SINT, SMP_USE_INTRN },
        { "ipv4", smp_fetch_const_ipv4, ARG1(1,IPV4), NULL                , SMP_T_IPV4, SMP_USE_INTRN },
        { "ipv6", smp_fetch_const_ipv6, ARG1(1,IPV6), NULL                , SMP_T_IPV6, SMP_USE_INTRN },
        { "bin",  smp_fetch_const_bin,  ARG1(1,STR),  smp_check_const_bin , SMP_T_BIN,  SMP_USE_INTRN },
@@ -2459,32 +2421,32 @@ static struct sample_conv_kw_list sample_conv_kws = {ILH, {
        { "lower",  sample_conv_str2lower, 0,            NULL, SMP_T_STR,  SMP_T_STR  },
        { "hex",    sample_conv_bin2hex,   0,            NULL, SMP_T_BIN,  SMP_T_STR  },
        { "ipmask", sample_conv_ipmask,    ARG1(1,MSK4), NULL, SMP_T_IPV4, SMP_T_IPV4 },
-       { "ltime",  sample_conv_ltime,     ARG2(1,STR,SINT), NULL, SMP_T_UINT, SMP_T_STR },
-       { "utime",  sample_conv_utime,     ARG2(1,STR,SINT), NULL, SMP_T_UINT, SMP_T_STR },
-       { "crc32",  sample_conv_crc32,     ARG1(0,UINT), NULL, SMP_T_BIN,  SMP_T_UINT },
-       { "djb2",   sample_conv_djb2,      ARG1(0,UINT), NULL, SMP_T_BIN,  SMP_T_UINT },
-       { "sdbm",   sample_conv_sdbm,      ARG1(0,UINT), NULL, SMP_T_BIN,  SMP_T_UINT },
-       { "wt6",    sample_conv_wt6,       ARG1(0,UINT), NULL, SMP_T_BIN,  SMP_T_UINT },
+       { "ltime",  sample_conv_ltime,     ARG2(1,STR,SINT), NULL, SMP_T_SINT, SMP_T_STR },
+       { "utime",  sample_conv_utime,     ARG2(1,STR,SINT), NULL, SMP_T_SINT, SMP_T_STR },
+       { "crc32",  sample_conv_crc32,     ARG1(0,UINT),  NULL, SMP_T_BIN, SMP_T_SINT  },
+       { "djb2",   sample_conv_djb2,      ARG1(0,UINT),  NULL, SMP_T_BIN, SMP_T_SINT  },
+       { "sdbm",   sample_conv_sdbm,      ARG1(0,UINT),  NULL, SMP_T_BIN, SMP_T_SINT  },
+       { "wt6",    sample_conv_wt6,       ARG1(0,UINT),  NULL, SMP_T_BIN, SMP_T_SINT  },
        { "json",   sample_conv_json,      ARG1(1,STR),  sample_conv_json_check, SMP_T_STR,  SMP_T_STR },
        { "bytes",  sample_conv_bytes,     ARG2(1,UINT,UINT), NULL, SMP_T_BIN,  SMP_T_BIN },
        { "field",  sample_conv_field,     ARG2(2,UINT,STR), sample_conv_field_check, SMP_T_STR,  SMP_T_STR },
        { "word",   sample_conv_word,      ARG2(2,UINT,STR), sample_conv_field_check, SMP_T_STR,  SMP_T_STR },
        { "regsub", sample_conv_regsub,    ARG3(2,REG,STR,STR), sample_conv_regsub_check, SMP_T_STR, SMP_T_STR },
 
-       { "and",    sample_conv_binary_and, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
-       { "or",     sample_conv_binary_or,  ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
-       { "xor",    sample_conv_binary_xor, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
-       { "cpl",    sample_conv_binary_cpl,            0, NULL, SMP_T_UINT, SMP_T_UINT },
-       { "bool",   sample_conv_arith_bool,            0, NULL, SMP_T_UINT, SMP_T_BOOL },
-       { "not",    sample_conv_arith_not,             0, NULL, SMP_T_UINT, SMP_T_BOOL },
-       { "odd",    sample_conv_arith_odd,             0, NULL, SMP_T_UINT, SMP_T_BOOL },
-       { "even",   sample_conv_arith_even,            0, NULL, SMP_T_UINT, SMP_T_BOOL },
-       { "add",    sample_conv_arith_add,  ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
-       { "sub",    sample_conv_arith_sub,  ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
-       { "mul",    sample_conv_arith_mul,  ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
-       { "div",    sample_conv_arith_div,  ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
-       { "mod",    sample_conv_arith_mod,  ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
-       { "neg",    sample_conv_arith_neg,             0, NULL, SMP_T_UINT, SMP_T_UINT },
+       { "and",    sample_conv_binary_and, ARG1(1,UINT), NULL, SMP_T_SINT, SMP_T_SINT },
+       { "or",     sample_conv_binary_or,  ARG1(1,UINT), NULL, SMP_T_SINT, SMP_T_SINT },
+       { "xor",    sample_conv_binary_xor, ARG1(1,UINT), NULL, SMP_T_SINT, SMP_T_SINT },
+       { "cpl",    sample_conv_binary_cpl,            0, NULL, SMP_T_SINT, SMP_T_SINT },
+       { "bool",   sample_conv_arith_bool,            0, NULL, SMP_T_SINT, SMP_T_BOOL },
+       { "not",    sample_conv_arith_not,             0, NULL, SMP_T_SINT, SMP_T_BOOL },
+       { "odd",    sample_conv_arith_odd,             0, NULL, SMP_T_SINT, SMP_T_BOOL },
+       { "even",   sample_conv_arith_even,            0, NULL, SMP_T_SINT, SMP_T_BOOL },
+       { "add",    sample_conv_arith_add,  ARG1(1,UINT), NULL, SMP_T_SINT, SMP_T_SINT },
+       { "sub",    sample_conv_arith_sub,  ARG1(1,UINT), NULL, SMP_T_SINT, SMP_T_SINT },
+       { "mul",    sample_conv_arith_mul,  ARG1(1,UINT), NULL, SMP_T_SINT, SMP_T_SINT },
+       { "div",    sample_conv_arith_div,  ARG1(1,UINT), NULL, SMP_T_SINT, SMP_T_SINT },
+       { "mod",    sample_conv_arith_mod,  ARG1(1,UINT), NULL, SMP_T_SINT, SMP_T_SINT },
+       { "neg",    sample_conv_arith_neg,             0, NULL, SMP_T_SINT, SMP_T_SINT },
 
        { NULL, NULL, 0, 0, 0 },
 }};
index 4e755494240402f5760e222f73c01631d690902e..520c866e9a935665c6008584189b1c61fa80ea41 100644 (file)
@@ -3393,7 +3393,7 @@ smp_fetch_ssl_fc_has_crt(const struct arg *args, struct sample *smp, const char
 
        smp->flags = 0;
        smp->type = SMP_T_BOOL;
-       smp->data.uint = SSL_SOCK_ST_FL_VERIFY_DONE & conn->xprt_st ? 1 : 0;
+       smp->data.sint = SSL_SOCK_ST_FL_VERIFY_DONE & conn->xprt_st ? 1 : 0;
 
        return 1;
 }
@@ -3757,7 +3757,7 @@ smp_fetch_ssl_c_used(const struct arg *args, struct sample *smp, const char *kw,
        }
 
        smp->type = SMP_T_BOOL;
-       smp->data.uint = (crt != NULL);
+       smp->data.sint = (crt != NULL);
        return 1;
 }
 
@@ -3788,11 +3788,11 @@ smp_fetch_ssl_x_version(const struct arg *args, struct sample *smp, const char *
        if (!crt)
                return 0;
 
-       smp->data.uint = (unsigned int)(1 + X509_get_version(crt));
+       smp->data.sint = (unsigned int)(1 + X509_get_version(crt));
        /* SSL_get_peer_certificate increase X509 * ref count  */
        if (cert_peer)
                X509_free(crt);
-       smp->type = SMP_T_UINT;
+       smp->type = SMP_T_SINT;
 
        return 1;
 }
@@ -3903,7 +3903,7 @@ smp_fetch_ssl_fc(const struct arg *args, struct sample *smp, const char *kw, voi
        struct connection *conn = objt_conn(smp->strm->si[back_conn].end);
 
        smp->type = SMP_T_BOOL;
-       smp->data.uint = (conn && conn->xprt == &ssl_sock);
+       smp->data.sint = (conn && conn->xprt == &ssl_sock);
        return 1;
 }
 
@@ -3915,7 +3915,7 @@ smp_fetch_ssl_fc_has_sni(const struct arg *args, struct sample *smp, const char
        struct connection *conn = objt_conn(smp->sess->origin);
 
        smp->type = SMP_T_BOOL;
-       smp->data.uint = (conn && conn->xprt == &ssl_sock) &&
+       smp->data.sint = (conn && conn->xprt == &ssl_sock) &&
                conn->xprt_ctx &&
                SSL_get_servername(conn->xprt_ctx, TLSEXT_NAMETYPE_host_name) != NULL;
        return 1;
@@ -3931,7 +3931,7 @@ smp_fetch_ssl_fc_is_resumed(const struct arg *args, struct sample *smp, const ch
        struct connection *conn = objt_conn(smp->sess->origin);
 
        smp->type = SMP_T_BOOL;
-       smp->data.uint = (conn && conn->xprt == &ssl_sock) &&
+       smp->data.sint = (conn && conn->xprt == &ssl_sock) &&
                conn->xprt_ctx &&
                SSL_session_reused(conn->xprt_ctx);
        return 1;
@@ -3974,6 +3974,7 @@ smp_fetch_ssl_fc_alg_keysize(const struct arg *args, struct sample *smp, const c
 {
        int back_conn = (kw[4] == 'b') ? 1 : 0;
        struct connection *conn;
+       int sint;
 
        smp->flags = 0;
 
@@ -3981,10 +3982,11 @@ smp_fetch_ssl_fc_alg_keysize(const struct arg *args, struct sample *smp, const c
        if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
                return 0;
 
-       if (!SSL_get_cipher_bits(conn->xprt_ctx, (int *)&smp->data.uint))
+       if (!SSL_get_cipher_bits(conn->xprt_ctx, &sint))
                return 0;
 
-       smp->type = SMP_T_UINT;
+       smp->data.sint = sint;
+       smp->type = SMP_T_SINT;
 
        return 1;
 }
@@ -4005,11 +4007,11 @@ smp_fetch_ssl_fc_use_keysize(const struct arg *args, struct sample *smp, const c
        if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
                return 0;
 
-       smp->data.uint = (unsigned int)SSL_get_cipher_bits(conn->xprt_ctx, NULL);
-       if (!smp->data.uint)
+       smp->data.sint = (unsigned int)SSL_get_cipher_bits(conn->xprt_ctx, NULL);
+       if (!smp->data.sint)
                return 0;
 
-       smp->type = SMP_T_UINT;
+       smp->type = SMP_T_SINT;
 
        return 1;
 }
@@ -4200,8 +4202,8 @@ smp_fetch_ssl_c_ca_err(const struct arg *args, struct sample *smp, const char *k
                return 0;
        }
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = (unsigned int)SSL_SOCK_ST_TO_CA_ERROR(conn->xprt_st);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = (unsigned long long int)SSL_SOCK_ST_TO_CA_ERROR(conn->xprt_st);
        smp->flags = 0;
 
        return 1;
@@ -4222,8 +4224,8 @@ smp_fetch_ssl_c_ca_err_depth(const struct arg *args, struct sample *smp, const c
                return 0;
        }
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = (unsigned int)SSL_SOCK_ST_TO_CAEDEPTH(conn->xprt_st);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = (long long int)SSL_SOCK_ST_TO_CAEDEPTH(conn->xprt_st);
        smp->flags = 0;
 
        return 1;
@@ -4244,8 +4246,8 @@ smp_fetch_ssl_c_err(const struct arg *args, struct sample *smp, const char *kw,
                return 0;
        }
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = (unsigned int)SSL_SOCK_ST_TO_CRTERROR(conn->xprt_st);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = (long long int)SSL_SOCK_ST_TO_CRTERROR(conn->xprt_st);
        smp->flags = 0;
 
        return 1;
@@ -4269,8 +4271,8 @@ smp_fetch_ssl_c_verify(const struct arg *args, struct sample *smp, const char *k
        if (!conn->xprt_ctx)
                return 0;
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = (unsigned int)SSL_get_verify_result(conn->xprt_ctx);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = (long long int)SSL_get_verify_result(conn->xprt_ctx);
        smp->flags = 0;
 
        return 1;
@@ -5139,16 +5141,16 @@ static int ssl_parse_default_server_options(char **args, int section_type, struc
  */
 static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
        { "ssl_bc",                 smp_fetch_ssl_fc,             0,                   NULL,    SMP_T_BOOL, SMP_USE_L5SRV },
-       { "ssl_bc_alg_keysize",     smp_fetch_ssl_fc_alg_keysize, 0,                   NULL,    SMP_T_UINT, SMP_USE_L5SRV },
+       { "ssl_bc_alg_keysize",     smp_fetch_ssl_fc_alg_keysize, 0,                   NULL,    SMP_T_SINT, SMP_USE_L5SRV },
        { "ssl_bc_cipher",          smp_fetch_ssl_fc_cipher,      0,                   NULL,    SMP_T_STR,  SMP_USE_L5SRV },
        { "ssl_bc_protocol",        smp_fetch_ssl_fc_protocol,    0,                   NULL,    SMP_T_STR,  SMP_USE_L5SRV },
        { "ssl_bc_unique_id",       smp_fetch_ssl_fc_unique_id,   0,                   NULL,    SMP_T_BIN,  SMP_USE_L5SRV },
-       { "ssl_bc_use_keysize",     smp_fetch_ssl_fc_use_keysize, 0,                   NULL,    SMP_T_UINT, SMP_USE_L5SRV },
+       { "ssl_bc_use_keysize",     smp_fetch_ssl_fc_use_keysize, 0,                   NULL,    SMP_T_SINT, SMP_USE_L5SRV },
        { "ssl_bc_session_id",      smp_fetch_ssl_fc_session_id,  0,                   NULL,    SMP_T_BIN,  SMP_USE_L5SRV },
-       { "ssl_c_ca_err",           smp_fetch_ssl_c_ca_err,       0,                   NULL,    SMP_T_UINT, SMP_USE_L5CLI },
-       { "ssl_c_ca_err_depth",     smp_fetch_ssl_c_ca_err_depth, 0,                   NULL,    SMP_T_UINT, SMP_USE_L5CLI },
+       { "ssl_c_ca_err",           smp_fetch_ssl_c_ca_err,       0,                   NULL,    SMP_T_SINT, SMP_USE_L5CLI },
+       { "ssl_c_ca_err_depth",     smp_fetch_ssl_c_ca_err_depth, 0,                   NULL,    SMP_T_SINT, SMP_USE_L5CLI },
        { "ssl_c_der",              smp_fetch_ssl_x_der,          0,                   NULL,    SMP_T_BIN,  SMP_USE_L5CLI },
-       { "ssl_c_err",              smp_fetch_ssl_c_err,          0,                   NULL,    SMP_T_UINT, SMP_USE_L5CLI },
+       { "ssl_c_err",              smp_fetch_ssl_c_err,          0,                   NULL,    SMP_T_SINT, SMP_USE_L5CLI },
        { "ssl_c_i_dn",             smp_fetch_ssl_x_i_dn,         ARG2(0,STR,SINT),    NULL,    SMP_T_STR,  SMP_USE_L5CLI },
        { "ssl_c_key_alg",          smp_fetch_ssl_x_key_alg,      0,                   NULL,    SMP_T_STR,  SMP_USE_L5CLI },
        { "ssl_c_notafter",         smp_fetch_ssl_x_notafter,     0,                   NULL,    SMP_T_STR,  SMP_USE_L5CLI },
@@ -5158,8 +5160,8 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
        { "ssl_c_serial",           smp_fetch_ssl_x_serial,       0,                   NULL,    SMP_T_BIN,  SMP_USE_L5CLI },
        { "ssl_c_sha1",             smp_fetch_ssl_x_sha1,         0,                   NULL,    SMP_T_BIN,  SMP_USE_L5CLI },
        { "ssl_c_used",             smp_fetch_ssl_c_used,         0,                   NULL,    SMP_T_BOOL, SMP_USE_L5CLI },
-       { "ssl_c_verify",           smp_fetch_ssl_c_verify,       0,                   NULL,    SMP_T_UINT, SMP_USE_L5CLI },
-       { "ssl_c_version",          smp_fetch_ssl_x_version,      0,                   NULL,    SMP_T_UINT, SMP_USE_L5CLI },
+       { "ssl_c_verify",           smp_fetch_ssl_c_verify,       0,                   NULL,    SMP_T_SINT, SMP_USE_L5CLI },
+       { "ssl_c_version",          smp_fetch_ssl_x_version,      0,                   NULL,    SMP_T_SINT, SMP_USE_L5CLI },
        { "ssl_f_der",              smp_fetch_ssl_x_der,          0,                   NULL,    SMP_T_BIN,  SMP_USE_L5CLI },
        { "ssl_f_i_dn",             smp_fetch_ssl_x_i_dn,         ARG2(0,STR,SINT),    NULL,    SMP_T_STR,  SMP_USE_L5CLI },
        { "ssl_f_key_alg",          smp_fetch_ssl_x_key_alg,      0,                   NULL,    SMP_T_STR,  SMP_USE_L5CLI },
@@ -5169,9 +5171,9 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
        { "ssl_f_s_dn",             smp_fetch_ssl_x_s_dn,         ARG2(0,STR,SINT),    NULL,    SMP_T_STR,  SMP_USE_L5CLI },
        { "ssl_f_serial",           smp_fetch_ssl_x_serial,       0,                   NULL,    SMP_T_BIN,  SMP_USE_L5CLI },
        { "ssl_f_sha1",             smp_fetch_ssl_x_sha1,         0,                   NULL,    SMP_T_BIN,  SMP_USE_L5CLI },
-       { "ssl_f_version",          smp_fetch_ssl_x_version,      0,                   NULL,    SMP_T_UINT, SMP_USE_L5CLI },
+       { "ssl_f_version",          smp_fetch_ssl_x_version,      0,                   NULL,    SMP_T_SINT, SMP_USE_L5CLI },
        { "ssl_fc",                 smp_fetch_ssl_fc,             0,                   NULL,    SMP_T_BOOL, SMP_USE_L5CLI },
-       { "ssl_fc_alg_keysize",     smp_fetch_ssl_fc_alg_keysize, 0,                   NULL,    SMP_T_UINT, SMP_USE_L5CLI },
+       { "ssl_fc_alg_keysize",     smp_fetch_ssl_fc_alg_keysize, 0,                   NULL,    SMP_T_SINT, SMP_USE_L5CLI },
        { "ssl_fc_cipher",          smp_fetch_ssl_fc_cipher,      0,                   NULL,    SMP_T_STR,  SMP_USE_L5CLI },
        { "ssl_fc_has_crt",         smp_fetch_ssl_fc_has_crt,     0,                   NULL,    SMP_T_BOOL, SMP_USE_L5CLI },
        { "ssl_fc_has_sni",         smp_fetch_ssl_fc_has_sni,     0,                   NULL,    SMP_T_BOOL, SMP_USE_L5CLI },
@@ -5184,7 +5186,7 @@ static struct sample_fetch_kw_list sample_fetch_keywords = {ILH, {
 #endif
        { "ssl_fc_protocol",        smp_fetch_ssl_fc_protocol,    0,                   NULL,    SMP_T_STR,  SMP_USE_L5CLI },
        { "ssl_fc_unique_id",       smp_fetch_ssl_fc_unique_id,   0,                   NULL,    SMP_T_BIN,  SMP_USE_L5CLI },
-       { "ssl_fc_use_keysize",     smp_fetch_ssl_fc_use_keysize, 0,                   NULL,    SMP_T_UINT, SMP_USE_L5CLI },
+       { "ssl_fc_use_keysize",     smp_fetch_ssl_fc_use_keysize, 0,                   NULL,    SMP_T_SINT, SMP_USE_L5CLI },
        { "ssl_fc_session_id",      smp_fetch_ssl_fc_session_id,  0,                   NULL,    SMP_T_BIN,  SMP_USE_L5CLI },
        { "ssl_fc_sni",             smp_fetch_ssl_fc_sni,         0,                   NULL,    SMP_T_STR,  SMP_USE_L5CLI },
        { NULL, NULL, 0, 0, 0 },
index 2792960bde2800a5f60768a84a4e5d0680d8efcb..243066e59b4b318a5133198fcbc56f30a2fb38ed 100644 (file)
@@ -458,7 +458,8 @@ int stktable_parse_type(char **args, int *myidx, unsigned long *type, size_t *ke
 
 static void *k_int2int(struct sample *smp, union stktable_key_data *kdata, size_t *len)
 {
-       return (void *)&smp->data.uint;
+       kdata->integer = smp->data.sint;
+       return (void *)&kdata->integer;
 }
 
 static void *k_ip2ip(struct sample *smp, union stktable_key_data *kdata, size_t *len)
@@ -498,7 +499,7 @@ static void *k_ip2int(struct sample *smp, union stktable_key_data *kdata, size_t
 
 static void *k_int2ip(struct sample *smp, union stktable_key_data *kdata, size_t *len)
 {
-       kdata->ip.s_addr = htonl(smp->data.uint);
+       kdata->ip.s_addr = htonl((unsigned int)smp->data.sint);
        return (void *)&kdata->ip.s_addr;
 }
 
@@ -560,7 +561,7 @@ static void *k_int2str(struct sample *smp, union stktable_key_data *kdata, size_
 {
        void *key;
 
-       key = (void *)ultoa_r(smp->data.uint, kdata->buf, *len);
+       key = (void *)lltoa_r(smp->data.sint, kdata->buf, *len);
        if (!key)
                return NULL;
 
@@ -611,7 +612,6 @@ static sample_to_key_fct sample_to_key[SMP_TYPES][STKTABLE_TYPES] = {
 /*       table type:   IP          IPV6         INTEGER    STRING      BINARY    */
 /* patt. type: ANY  */ { k_ip2ip,  k_ip2ipv6,   k_int2int, k_str2str,  k_str2str },
 /*             BOOL */ { NULL,     NULL,        k_int2int, k_int2str,  NULL      },
-/*             UINT */ { k_int2ip, NULL,        k_int2int, k_int2str,  NULL      },
 /*             SINT */ { k_int2ip, NULL,        k_int2int, k_int2str,  NULL      },
 /*             ADDR */ { k_ip2ip,  k_ip2ipv6,   k_ip2int,  k_ip2str,   NULL      },
 /*             IPV4 */ { k_ip2ip,  k_ip2ipv6,   k_ip2int,  k_ip2str,   k_ip2bin  },
@@ -812,7 +812,7 @@ static int sample_conv_in_table(const struct arg *arg_p, struct sample *smp, voi
        ts = stktable_lookup_key(t, key);
 
        smp->type = SMP_T_BOOL;
-       smp->data.uint = !!ts;
+       smp->data.sint = !!ts;
        smp->flags = SMP_F_VOL_TEST;
        return 1;
 }
@@ -837,8 +837,8 @@ static int sample_conv_table_bytes_in_rate(const struct arg *arg_p, struct sampl
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -848,7 +848,7 @@ static int sample_conv_table_bytes_in_rate(const struct arg *arg_p, struct sampl
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, bytes_in_rate),
+       smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, bytes_in_rate),
                                               t->data_arg[STKTABLE_DT_BYTES_IN_RATE].u);
        return 1;
 }
@@ -873,8 +873,8 @@ static int sample_conv_table_conn_cnt(const struct arg *arg_p, struct sample *sm
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -884,7 +884,7 @@ static int sample_conv_table_conn_cnt(const struct arg *arg_p, struct sample *sm
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, conn_cnt);
+       smp->data.sint = stktable_data_cast(ptr, conn_cnt);
        return 1;
 }
 
@@ -908,8 +908,8 @@ static int sample_conv_table_conn_cur(const struct arg *arg_p, struct sample *sm
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -919,7 +919,7 @@ static int sample_conv_table_conn_cur(const struct arg *arg_p, struct sample *sm
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, conn_cur);
+       smp->data.sint = stktable_data_cast(ptr, conn_cur);
        return 1;
 }
 
@@ -943,8 +943,8 @@ static int sample_conv_table_conn_rate(const struct arg *arg_p, struct sample *s
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -954,7 +954,7 @@ static int sample_conv_table_conn_rate(const struct arg *arg_p, struct sample *s
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, conn_rate),
+       smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, conn_rate),
                                               t->data_arg[STKTABLE_DT_CONN_RATE].u);
        return 1;
 }
@@ -979,8 +979,8 @@ static int sample_conv_table_bytes_out_rate(const struct arg *arg_p, struct samp
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -990,7 +990,7 @@ static int sample_conv_table_bytes_out_rate(const struct arg *arg_p, struct samp
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, bytes_out_rate),
+       smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, bytes_out_rate),
                                               t->data_arg[STKTABLE_DT_BYTES_OUT_RATE].u);
        return 1;
 }
@@ -1015,8 +1015,8 @@ static int sample_conv_table_gpc0(const struct arg *arg_p, struct sample *smp, v
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1026,7 +1026,7 @@ static int sample_conv_table_gpc0(const struct arg *arg_p, struct sample *smp, v
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, gpc0);
+       smp->data.sint = stktable_data_cast(ptr, gpc0);
        return 1;
 }
 
@@ -1050,8 +1050,8 @@ static int sample_conv_table_gpc0_rate(const struct arg *arg_p, struct sample *s
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1061,7 +1061,7 @@ static int sample_conv_table_gpc0_rate(const struct arg *arg_p, struct sample *s
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, gpc0_rate),
+       smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, gpc0_rate),
                                              t->data_arg[STKTABLE_DT_GPC0_RATE].u);
        return 1;
 }
@@ -1086,8 +1086,8 @@ static int sample_conv_table_http_err_cnt(const struct arg *arg_p, struct sample
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1097,7 +1097,7 @@ static int sample_conv_table_http_err_cnt(const struct arg *arg_p, struct sample
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, http_err_cnt);
+       smp->data.sint = stktable_data_cast(ptr, http_err_cnt);
        return 1;
 }
 
@@ -1121,8 +1121,8 @@ static int sample_conv_table_http_err_rate(const struct arg *arg_p, struct sampl
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1132,7 +1132,7 @@ static int sample_conv_table_http_err_rate(const struct arg *arg_p, struct sampl
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, http_err_rate),
+       smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, http_err_rate),
                                               t->data_arg[STKTABLE_DT_HTTP_ERR_RATE].u);
        return 1;
 }
@@ -1157,8 +1157,8 @@ static int sample_conv_table_http_req_cnt(const struct arg *arg_p, struct sample
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1168,7 +1168,7 @@ static int sample_conv_table_http_req_cnt(const struct arg *arg_p, struct sample
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, http_req_cnt);
+       smp->data.sint = stktable_data_cast(ptr, http_req_cnt);
        return 1;
 }
 
@@ -1192,8 +1192,8 @@ static int sample_conv_table_http_req_rate(const struct arg *arg_p, struct sampl
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1203,7 +1203,7 @@ static int sample_conv_table_http_req_rate(const struct arg *arg_p, struct sampl
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, http_req_rate),
+       smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, http_req_rate),
                                               t->data_arg[STKTABLE_DT_HTTP_REQ_RATE].u);
        return 1;
 }
@@ -1228,8 +1228,8 @@ static int sample_conv_table_kbytes_in(const struct arg *arg_p, struct sample *s
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1239,7 +1239,7 @@ static int sample_conv_table_kbytes_in(const struct arg *arg_p, struct sample *s
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, bytes_in_cnt) >> 10;
+       smp->data.sint = stktable_data_cast(ptr, bytes_in_cnt) >> 10;
        return 1;
 }
 
@@ -1263,8 +1263,8 @@ static int sample_conv_table_kbytes_out(const struct arg *arg_p, struct sample *
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1274,7 +1274,7 @@ static int sample_conv_table_kbytes_out(const struct arg *arg_p, struct sample *
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, bytes_out_cnt) >> 10;
+       smp->data.sint = stktable_data_cast(ptr, bytes_out_cnt) >> 10;
        return 1;
 }
 
@@ -1298,8 +1298,8 @@ static int sample_conv_table_server_id(const struct arg *arg_p, struct sample *s
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1309,7 +1309,7 @@ static int sample_conv_table_server_id(const struct arg *arg_p, struct sample *s
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, server_id);
+       smp->data.sint = stktable_data_cast(ptr, server_id);
        return 1;
 }
 
@@ -1333,8 +1333,8 @@ static int sample_conv_table_sess_cnt(const struct arg *arg_p, struct sample *sm
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1344,7 +1344,7 @@ static int sample_conv_table_sess_cnt(const struct arg *arg_p, struct sample *sm
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = stktable_data_cast(ptr, sess_cnt);
+       smp->data.sint = stktable_data_cast(ptr, sess_cnt);
        return 1;
 }
 
@@ -1368,8 +1368,8 @@ static int sample_conv_table_sess_rate(const struct arg *arg_p, struct sample *s
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (!ts) /* key not present */
@@ -1379,7 +1379,7 @@ static int sample_conv_table_sess_rate(const struct arg *arg_p, struct sample *s
        if (!ptr)
                return 0; /* parameter not stored */
 
-       smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, sess_rate),
+       smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, sess_rate),
                                               t->data_arg[STKTABLE_DT_SESS_RATE].u);
        return 1;
 }
@@ -1403,12 +1403,12 @@ static int sample_conv_table_trackers(const struct arg *arg_p, struct sample *sm
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        ts = stktable_lookup_key(t, key);
        if (ts)
-               smp->data.uint = ts->ref_cnt;
+               smp->data.sint = ts->ref_cnt;
 
        return 1;
 }
@@ -1417,23 +1417,23 @@ static int sample_conv_table_trackers(const struct arg *arg_p, struct sample *sm
 /* Note: must not be declared <const> as its list will be overwritten */
 static struct sample_conv_kw_list sample_conv_kws = {ILH, {
        { "in_table",             sample_conv_in_table,             ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_BOOL  },
-       { "table_bytes_in_rate",  sample_conv_table_bytes_in_rate,  ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_bytes_out_rate", sample_conv_table_bytes_out_rate, ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_conn_cnt",       sample_conv_table_conn_cnt,       ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_conn_cur",       sample_conv_table_conn_cur,       ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_conn_rate",      sample_conv_table_conn_rate,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_gpc0",           sample_conv_table_gpc0,           ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_gpc0_rate",      sample_conv_table_gpc0_rate,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_http_err_cnt",   sample_conv_table_http_err_cnt,   ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_http_err_rate",  sample_conv_table_http_err_rate,  ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_http_req_cnt",   sample_conv_table_http_req_cnt,   ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_http_req_rate",  sample_conv_table_http_req_rate,  ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_kbytes_in",      sample_conv_table_kbytes_in,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_kbytes_out",     sample_conv_table_kbytes_out,     ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_server_id",      sample_conv_table_server_id,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_sess_cnt",       sample_conv_table_sess_cnt,       ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_sess_rate",      sample_conv_table_sess_rate,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
-       { "table_trackers",       sample_conv_table_trackers,       ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_UINT  },
+       { "table_bytes_in_rate",  sample_conv_table_bytes_in_rate,  ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_bytes_out_rate", sample_conv_table_bytes_out_rate, ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_conn_cnt",       sample_conv_table_conn_cnt,       ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_conn_cur",       sample_conv_table_conn_cur,       ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_conn_rate",      sample_conv_table_conn_rate,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_gpc0",           sample_conv_table_gpc0,           ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_gpc0_rate",      sample_conv_table_gpc0_rate,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_http_err_cnt",   sample_conv_table_http_err_cnt,   ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_http_err_rate",  sample_conv_table_http_err_rate,  ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_http_req_cnt",   sample_conv_table_http_req_cnt,   ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_http_req_rate",  sample_conv_table_http_req_rate,  ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_kbytes_in",      sample_conv_table_kbytes_in,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_kbytes_out",     sample_conv_table_kbytes_out,     ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_server_id",      sample_conv_table_server_id,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_sess_cnt",       sample_conv_table_sess_cnt,       ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_sess_rate",      sample_conv_table_sess_rate,      ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
+       { "table_trackers",       sample_conv_table_trackers,       ARG1(1,TAB),  NULL, SMP_T_STR,  SMP_T_SINT  },
        { /* END */ },
 }};
 
index d7b8e9f5d2a9d2fa5ce3b4262d5f88a652e828f2..baab845e4e2fc67309e709e387f3d4a02f066876 100644 (file)
@@ -2637,7 +2637,7 @@ smp_fetch_sc_tracked(const struct arg *args, struct sample *smp, const char *kw,
 {
        smp->flags = SMP_F_VOL_TEST;
        smp->type = SMP_T_BOOL;
-       smp->data.uint = !!smp_fetch_sc_stkctr(smp->sess, smp->strm, args, kw);
+       smp->data.sint = !!smp_fetch_sc_stkctr(smp->sess, smp->strm, args, kw);
        return 1;
 }
 
@@ -2655,14 +2655,14 @@ smp_fetch_sc_get_gpc0(const struct arg *args, struct sample *smp, const char *kw
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
 
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_GPC0);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, gpc0);
+               smp->data.sint = stktable_data_cast(ptr, gpc0);
        }
        return 1;
 }
@@ -2681,13 +2681,13 @@ smp_fetch_sc_gpc0_rate(const struct arg *args, struct sample *smp, const char *k
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_GPC0_RATE);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, gpc0_rate),
+               smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, gpc0_rate),
                                  stkctr->table->data_arg[STKTABLE_DT_GPC0_RATE].u);
        }
        return 1;
@@ -2706,8 +2706,8 @@ smp_fetch_sc_inc_gpc0(const struct arg *args, struct sample *smp, const char *kw
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr1,*ptr2;
 
@@ -2718,12 +2718,12 @@ smp_fetch_sc_inc_gpc0(const struct arg *args, struct sample *smp, const char *kw
                if (ptr1) {
                        update_freq_ctr_period(&stktable_data_cast(ptr1, gpc0_rate),
                                               stkctr->table->data_arg[STKTABLE_DT_GPC0_RATE].u, 1);
-                       smp->data.uint = (&stktable_data_cast(ptr1, gpc0_rate))->curr_ctr;
+                       smp->data.sint = (&stktable_data_cast(ptr1, gpc0_rate))->curr_ctr;
                }
 
                ptr2 = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_GPC0);
                if (ptr2)
-                       smp->data.uint = ++stktable_data_cast(ptr2, gpc0);
+                       smp->data.sint = ++stktable_data_cast(ptr2, gpc0);
 
                /* If data was modified, we need to touch to re-schedule sync */
                if (ptr1 || ptr2)
@@ -2745,13 +2745,13 @@ smp_fetch_sc_clr_gpc0(const struct arg *args, struct sample *smp, const char *kw
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_GPC0);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, gpc0);
+               smp->data.sint = stktable_data_cast(ptr, gpc0);
                stktable_data_cast(ptr, gpc0) = 0;
                /* If data was modified, we need to touch to re-schedule sync */
                stktable_touch(stkctr->table, stkctr_entry(stkctr), 1);
@@ -2772,13 +2772,13 @@ smp_fetch_sc_conn_cnt(const struct arg *args, struct sample *smp, const char *kw
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_CONN_CNT);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, conn_cnt);
+               smp->data.sint = stktable_data_cast(ptr, conn_cnt);
        }
        return 1;
 }
@@ -2796,13 +2796,13 @@ smp_fetch_sc_conn_rate(const struct arg *args, struct sample *smp, const char *k
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_CONN_RATE);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, conn_rate),
+               smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, conn_rate),
                                               stkctr->table->data_arg[STKTABLE_DT_CONN_RATE].u);
        }
        return 1;
@@ -2838,8 +2838,8 @@ smp_fetch_src_updt_conn_cnt(const struct arg *args, struct sample *smp, const ch
        if (!ptr)
                return 0; /* parameter not stored in this table */
 
-       smp->type = SMP_T_UINT;
-       smp->data.uint = ++stktable_data_cast(ptr, conn_cnt);
+       smp->type = SMP_T_SINT;
+       smp->data.sint = ++stktable_data_cast(ptr, conn_cnt);
        /* Touch was previously performed by stktable_update_key */
        smp->flags = SMP_F_VOL_TEST;
        return 1;
@@ -2858,13 +2858,13 @@ smp_fetch_sc_conn_cur(const struct arg *args, struct sample *smp, const char *kw
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_CONN_CUR);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, conn_cur);
+               smp->data.sint = stktable_data_cast(ptr, conn_cur);
        }
        return 1;
 }
@@ -2882,13 +2882,13 @@ smp_fetch_sc_sess_cnt(const struct arg *args, struct sample *smp, const char *kw
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_SESS_CNT);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, sess_cnt);
+               smp->data.sint = stktable_data_cast(ptr, sess_cnt);
        }
        return 1;
 }
@@ -2905,13 +2905,13 @@ smp_fetch_sc_sess_rate(const struct arg *args, struct sample *smp, const char *k
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_SESS_RATE);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, sess_rate),
+               smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, sess_rate),
                                               stkctr->table->data_arg[STKTABLE_DT_SESS_RATE].u);
        }
        return 1;
@@ -2930,13 +2930,13 @@ smp_fetch_sc_http_req_cnt(const struct arg *args, struct sample *smp, const char
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_HTTP_REQ_CNT);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, http_req_cnt);
+               smp->data.sint = stktable_data_cast(ptr, http_req_cnt);
        }
        return 1;
 }
@@ -2954,13 +2954,13 @@ smp_fetch_sc_http_req_rate(const struct arg *args, struct sample *smp, const cha
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_HTTP_REQ_RATE);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, http_req_rate),
+               smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, http_req_rate),
                                               stkctr->table->data_arg[STKTABLE_DT_HTTP_REQ_RATE].u);
        }
        return 1;
@@ -2979,13 +2979,13 @@ smp_fetch_sc_http_err_cnt(const struct arg *args, struct sample *smp, const char
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_HTTP_ERR_CNT);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, http_err_cnt);
+               smp->data.sint = stktable_data_cast(ptr, http_err_cnt);
        }
        return 1;
 }
@@ -3003,13 +3003,13 @@ smp_fetch_sc_http_err_rate(const struct arg *args, struct sample *smp, const cha
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_HTTP_ERR_RATE);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, http_err_rate),
+               smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, http_err_rate),
                                               stkctr->table->data_arg[STKTABLE_DT_HTTP_ERR_RATE].u);
        }
        return 1;
@@ -3028,13 +3028,13 @@ smp_fetch_sc_kbytes_in(const struct arg *args, struct sample *smp, const char *k
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_BYTES_IN_CNT);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, bytes_in_cnt) >> 10;
+               smp->data.sint = stktable_data_cast(ptr, bytes_in_cnt) >> 10;
        }
        return 1;
 }
@@ -3052,13 +3052,13 @@ smp_fetch_sc_bytes_in_rate(const struct arg *args, struct sample *smp, const cha
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_BYTES_IN_RATE);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, bytes_in_rate),
+               smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, bytes_in_rate),
                                               stkctr->table->data_arg[STKTABLE_DT_BYTES_IN_RATE].u);
        }
        return 1;
@@ -3077,13 +3077,13 @@ smp_fetch_sc_kbytes_out(const struct arg *args, struct sample *smp, const char *
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_BYTES_OUT_CNT);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = stktable_data_cast(ptr, bytes_out_cnt) >> 10;
+               smp->data.sint = stktable_data_cast(ptr, bytes_out_cnt) >> 10;
        }
        return 1;
 }
@@ -3101,13 +3101,13 @@ smp_fetch_sc_bytes_out_rate(const struct arg *args, struct sample *smp, const ch
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = 0;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = 0;
        if (stkctr_entry(stkctr) != NULL) {
                void *ptr = stktable_data_ptr(stkctr->table, stkctr_entry(stkctr), STKTABLE_DT_BYTES_OUT_RATE);
                if (!ptr)
                        return 0; /* parameter not stored */
-               smp->data.uint = read_freq_ctr_period(&stktable_data_cast(ptr, bytes_out_rate),
+               smp->data.sint = read_freq_ctr_period(&stktable_data_cast(ptr, bytes_out_rate),
                                               stkctr->table->data_arg[STKTABLE_DT_BYTES_OUT_RATE].u);
        }
        return 1;
@@ -3125,8 +3125,8 @@ smp_fetch_sc_trackers(const struct arg *args, struct sample *smp, const char *kw
                return 0;
 
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = stkctr_entry(stkctr)->ref_cnt;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = stkctr_entry(stkctr)->ref_cnt;
        return 1;
 }
 
@@ -3137,8 +3137,8 @@ static int
 smp_fetch_table_cnt(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = args->data.prx->table.current;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = args->data.prx->table.current;
        return 1;
 }
 
@@ -3152,8 +3152,8 @@ smp_fetch_table_avl(const struct arg *args, struct sample *smp, const char *kw,
 
        px = args->data.prx;
        smp->flags = SMP_F_VOL_TEST;
-       smp->type = SMP_T_UINT;
-       smp->data.uint = px->table.size - px->table.current;
+       smp->type = SMP_T_SINT;
+       smp->data.sint = px->table.size - px->table.current;
        return 1;
 }
 
@@ -3168,102 +3168,102 @@ static struct acl_kw_list acl_kws = {ILH, {
  * Please take care of keeping this list alphabetically sorted.
  */
 static struct sample_fetch_kw_list smp_fetch_keywords = {ILH, {
-       { "sc_bytes_in_rate",   smp_fetch_sc_bytes_in_rate,  ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_bytes_out_rate",  smp_fetch_sc_bytes_out_rate, ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_clr_gpc0",        smp_fetch_sc_clr_gpc0,       ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_conn_cnt",        smp_fetch_sc_conn_cnt,       ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_conn_cur",        smp_fetch_sc_conn_cur,       ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_conn_rate",       smp_fetch_sc_conn_rate,      ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_get_gpc0",        smp_fetch_sc_get_gpc0,       ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_gpc0_rate",       smp_fetch_sc_gpc0_rate,      ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_http_err_cnt",    smp_fetch_sc_http_err_cnt,   ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_http_err_rate",   smp_fetch_sc_http_err_rate,  ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_http_req_cnt",    smp_fetch_sc_http_req_cnt,   ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_http_req_rate",   smp_fetch_sc_http_req_rate,  ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_inc_gpc0",        smp_fetch_sc_inc_gpc0,       ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_kbytes_in",       smp_fetch_sc_kbytes_in,      ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "sc_kbytes_out",      smp_fetch_sc_kbytes_out,     ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "sc_sess_cnt",        smp_fetch_sc_sess_cnt,       ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc_sess_rate",       smp_fetch_sc_sess_rate,      ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
+       { "sc_bytes_in_rate",   smp_fetch_sc_bytes_in_rate,  ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_bytes_out_rate",  smp_fetch_sc_bytes_out_rate, ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_clr_gpc0",        smp_fetch_sc_clr_gpc0,       ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_conn_cnt",        smp_fetch_sc_conn_cnt,       ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_conn_cur",        smp_fetch_sc_conn_cur,       ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_conn_rate",       smp_fetch_sc_conn_rate,      ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_get_gpc0",        smp_fetch_sc_get_gpc0,       ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_gpc0_rate",       smp_fetch_sc_gpc0_rate,      ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_http_err_cnt",    smp_fetch_sc_http_err_cnt,   ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_http_err_rate",   smp_fetch_sc_http_err_rate,  ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_http_req_cnt",    smp_fetch_sc_http_req_cnt,   ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_http_req_rate",   smp_fetch_sc_http_req_rate,  ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_inc_gpc0",        smp_fetch_sc_inc_gpc0,       ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_kbytes_in",       smp_fetch_sc_kbytes_in,      ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "sc_kbytes_out",      smp_fetch_sc_kbytes_out,     ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "sc_sess_cnt",        smp_fetch_sc_sess_cnt,       ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc_sess_rate",       smp_fetch_sc_sess_rate,      ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
        { "sc_tracked",         smp_fetch_sc_tracked,        ARG2(1,UINT,TAB), NULL, SMP_T_BOOL, SMP_USE_INTRN, },
-       { "sc_trackers",        smp_fetch_sc_trackers,       ARG2(1,UINT,TAB), NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_bytes_in_rate",  smp_fetch_sc_bytes_in_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_clr_gpc0",       smp_fetch_sc_clr_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_conn_cnt",       smp_fetch_sc_conn_cnt,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_conn_cur",       smp_fetch_sc_conn_cur,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_conn_rate",      smp_fetch_sc_conn_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_get_gpc0",       smp_fetch_sc_get_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_gpc0_rate",      smp_fetch_sc_gpc0_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_http_err_cnt",   smp_fetch_sc_http_err_cnt,   ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_http_err_rate",  smp_fetch_sc_http_err_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_http_req_cnt",   smp_fetch_sc_http_req_cnt,   ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_http_req_rate",  smp_fetch_sc_http_req_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_inc_gpc0",       smp_fetch_sc_inc_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_kbytes_in",      smp_fetch_sc_kbytes_in,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "sc0_kbytes_out",     smp_fetch_sc_kbytes_out,     ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "sc0_sess_cnt",       smp_fetch_sc_sess_cnt,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc0_sess_rate",      smp_fetch_sc_sess_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
+       { "sc_trackers",        smp_fetch_sc_trackers,       ARG2(1,UINT,TAB), NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_bytes_in_rate",  smp_fetch_sc_bytes_in_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_clr_gpc0",       smp_fetch_sc_clr_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_conn_cnt",       smp_fetch_sc_conn_cnt,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_conn_cur",       smp_fetch_sc_conn_cur,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_conn_rate",      smp_fetch_sc_conn_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_get_gpc0",       smp_fetch_sc_get_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_gpc0_rate",      smp_fetch_sc_gpc0_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_http_err_cnt",   smp_fetch_sc_http_err_cnt,   ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_http_err_rate",  smp_fetch_sc_http_err_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_http_req_cnt",   smp_fetch_sc_http_req_cnt,   ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_http_req_rate",  smp_fetch_sc_http_req_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_inc_gpc0",       smp_fetch_sc_inc_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_kbytes_in",      smp_fetch_sc_kbytes_in,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "sc0_kbytes_out",     smp_fetch_sc_kbytes_out,     ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "sc0_sess_cnt",       smp_fetch_sc_sess_cnt,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc0_sess_rate",      smp_fetch_sc_sess_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
        { "sc0_tracked",        smp_fetch_sc_tracked,        ARG1(0,TAB),      NULL, SMP_T_BOOL, SMP_USE_INTRN, },
-       { "sc0_trackers",       smp_fetch_sc_trackers,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_bytes_in_rate",  smp_fetch_sc_bytes_in_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_clr_gpc0",       smp_fetch_sc_clr_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_conn_cnt",       smp_fetch_sc_conn_cnt,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_conn_cur",       smp_fetch_sc_conn_cur,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_conn_rate",      smp_fetch_sc_conn_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_get_gpc0",       smp_fetch_sc_get_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_gpc0_rate",      smp_fetch_sc_gpc0_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_http_err_cnt",   smp_fetch_sc_http_err_cnt,   ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_http_err_rate",  smp_fetch_sc_http_err_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_http_req_cnt",   smp_fetch_sc_http_req_cnt,   ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_http_req_rate",  smp_fetch_sc_http_req_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_inc_gpc0",       smp_fetch_sc_inc_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_kbytes_in",      smp_fetch_sc_kbytes_in,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "sc1_kbytes_out",     smp_fetch_sc_kbytes_out,     ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "sc1_sess_cnt",       smp_fetch_sc_sess_cnt,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc1_sess_rate",      smp_fetch_sc_sess_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
+       { "sc0_trackers",       smp_fetch_sc_trackers,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_bytes_in_rate",  smp_fetch_sc_bytes_in_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_clr_gpc0",       smp_fetch_sc_clr_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_conn_cnt",       smp_fetch_sc_conn_cnt,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_conn_cur",       smp_fetch_sc_conn_cur,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_conn_rate",      smp_fetch_sc_conn_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_get_gpc0",       smp_fetch_sc_get_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_gpc0_rate",      smp_fetch_sc_gpc0_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_http_err_cnt",   smp_fetch_sc_http_err_cnt,   ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_http_err_rate",  smp_fetch_sc_http_err_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_http_req_cnt",   smp_fetch_sc_http_req_cnt,   ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_http_req_rate",  smp_fetch_sc_http_req_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_inc_gpc0",       smp_fetch_sc_inc_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_kbytes_in",      smp_fetch_sc_kbytes_in,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "sc1_kbytes_out",     smp_fetch_sc_kbytes_out,     ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "sc1_sess_cnt",       smp_fetch_sc_sess_cnt,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc1_sess_rate",      smp_fetch_sc_sess_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
        { "sc1_tracked",        smp_fetch_sc_tracked,        ARG1(0,TAB),      NULL, SMP_T_BOOL, SMP_USE_INTRN, },
-       { "sc1_trackers",       smp_fetch_sc_trackers,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_bytes_in_rate",  smp_fetch_sc_bytes_in_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_clr_gpc0",       smp_fetch_sc_clr_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_conn_cnt",       smp_fetch_sc_conn_cnt,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_conn_cur",       smp_fetch_sc_conn_cur,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_conn_rate",      smp_fetch_sc_conn_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_get_gpc0",       smp_fetch_sc_get_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_gpc0_rate",      smp_fetch_sc_gpc0_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_http_err_cnt",   smp_fetch_sc_http_err_cnt,   ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_http_err_rate",  smp_fetch_sc_http_err_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_http_req_cnt",   smp_fetch_sc_http_req_cnt,   ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_http_req_rate",  smp_fetch_sc_http_req_rate,  ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_inc_gpc0",       smp_fetch_sc_inc_gpc0,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_kbytes_in",      smp_fetch_sc_kbytes_in,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "sc2_kbytes_out",     smp_fetch_sc_kbytes_out,     ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "sc2_sess_cnt",       smp_fetch_sc_sess_cnt,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "sc2_sess_rate",      smp_fetch_sc_sess_rate,      ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
+       { "sc1_trackers",       smp_fetch_sc_trackers,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_bytes_in_rate",  smp_fetch_sc_bytes_in_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_clr_gpc0",       smp_fetch_sc_clr_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_conn_cnt",       smp_fetch_sc_conn_cnt,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_conn_cur",       smp_fetch_sc_conn_cur,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_conn_rate",      smp_fetch_sc_conn_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_get_gpc0",       smp_fetch_sc_get_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_gpc0_rate",      smp_fetch_sc_gpc0_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_http_err_cnt",   smp_fetch_sc_http_err_cnt,   ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_http_err_rate",  smp_fetch_sc_http_err_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_http_req_cnt",   smp_fetch_sc_http_req_cnt,   ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_http_req_rate",  smp_fetch_sc_http_req_rate,  ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_inc_gpc0",       smp_fetch_sc_inc_gpc0,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_kbytes_in",      smp_fetch_sc_kbytes_in,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "sc2_kbytes_out",     smp_fetch_sc_kbytes_out,     ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "sc2_sess_cnt",       smp_fetch_sc_sess_cnt,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "sc2_sess_rate",      smp_fetch_sc_sess_rate,      ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
        { "sc2_tracked",        smp_fetch_sc_tracked,        ARG1(0,TAB),      NULL, SMP_T_BOOL, SMP_USE_INTRN, },
-       { "sc2_trackers",       smp_fetch_sc_trackers,       ARG1(0,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "src_bytes_in_rate",  smp_fetch_sc_bytes_in_rate,  ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_clr_gpc0",       smp_fetch_sc_clr_gpc0,       ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_conn_cnt",       smp_fetch_sc_conn_cnt,       ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_conn_cur",       smp_fetch_sc_conn_cur,       ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_conn_rate",      smp_fetch_sc_conn_rate,      ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_get_gpc0",       smp_fetch_sc_get_gpc0,       ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_gpc0_rate",      smp_fetch_sc_gpc0_rate,      ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_http_err_cnt",   smp_fetch_sc_http_err_cnt,   ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_http_err_rate",  smp_fetch_sc_http_err_rate,  ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_http_req_cnt",   smp_fetch_sc_http_req_cnt,   ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_http_req_rate",  smp_fetch_sc_http_req_rate,  ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_inc_gpc0",       smp_fetch_sc_inc_gpc0,       ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_kbytes_in",      smp_fetch_sc_kbytes_in,      ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_kbytes_out",     smp_fetch_sc_kbytes_out,     ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_sess_cnt",       smp_fetch_sc_sess_cnt,       ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_sess_rate",      smp_fetch_sc_sess_rate,      ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "src_updt_conn_cnt",  smp_fetch_src_updt_conn_cnt, ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_L4CLI, },
-       { "table_avl",          smp_fetch_table_avl,         ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
-       { "table_cnt",          smp_fetch_table_cnt,         ARG1(1,TAB),      NULL, SMP_T_UINT, SMP_USE_INTRN, },
+       { "sc2_trackers",       smp_fetch_sc_trackers,       ARG1(0,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "src_bytes_in_rate",  smp_fetch_sc_bytes_in_rate,  ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_bytes_out_rate", smp_fetch_sc_bytes_out_rate, ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_clr_gpc0",       smp_fetch_sc_clr_gpc0,       ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_conn_cnt",       smp_fetch_sc_conn_cnt,       ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_conn_cur",       smp_fetch_sc_conn_cur,       ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_conn_rate",      smp_fetch_sc_conn_rate,      ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_get_gpc0",       smp_fetch_sc_get_gpc0,       ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_gpc0_rate",      smp_fetch_sc_gpc0_rate,      ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_http_err_cnt",   smp_fetch_sc_http_err_cnt,   ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_http_err_rate",  smp_fetch_sc_http_err_rate,  ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_http_req_cnt",   smp_fetch_sc_http_req_cnt,   ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_http_req_rate",  smp_fetch_sc_http_req_rate,  ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_inc_gpc0",       smp_fetch_sc_inc_gpc0,       ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_kbytes_in",      smp_fetch_sc_kbytes_in,      ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_kbytes_out",     smp_fetch_sc_kbytes_out,     ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_sess_cnt",       smp_fetch_sc_sess_cnt,       ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_sess_rate",      smp_fetch_sc_sess_rate,      ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "src_updt_conn_cnt",  smp_fetch_src_updt_conn_cnt, ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_L4CLI, },
+       { "table_avl",          smp_fetch_table_avl,         ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
+       { "table_cnt",          smp_fetch_table_cnt,         ARG1(1,TAB),      NULL, SMP_T_SINT, SMP_USE_INTRN, },
        { /* END */ },
 }};
 
index 74a6ec8ffb629f3239b6f77ed0bed84dd8da7b03..da675cce1e1d73c330cb5d863105ed5790bde43b 100644 (file)
@@ -298,7 +298,6 @@ static int sample_store(struct vars *vars, const char *name, struct stream *strm
        /* Copy data. If the data needs memory, the function can fail. */
        switch (var->data.type) {
        case SMP_T_BOOL:
-       case SMP_T_UINT:
        case SMP_T_SINT:
                var->data.data.sint = smp->data.sint;
                break;