[MINOR] stick_table: provide functions to return stksess data from a type

This function does the indirection job in the table to find the pointer
to the real data matching the requested type.
This commit is contained in:
Willy Tarreau 2010-06-06 16:06:52 +02:00
parent 056f5683e3
commit 68129b90eb
3 changed files with 21 additions and 5 deletions

View File

@ -25,6 +25,9 @@
#include <types/stick_table.h>
#define stktable_data_size(type) (sizeof(((union stktable_data*)0)->type))
#define stktable_data_cast(ptr, type) ((union stktable_data*)(ptr))->type
struct stksess *stksess_new(struct stktable *t, struct stktable_key *key);
void stksess_setkey(struct stktable *t, struct stksess *ts, struct stktable_key *key);
void stksess_free(struct stktable *t, struct stksess *ts);
@ -57,4 +60,21 @@ static inline int stktable_alloc_data_type(struct stktable *t, int type)
return 1;
}
/* return pointer for data type <type> in sticky session <ts> of table <t>, or
* NULL if either <ts> is NULL or the type is not stored.
*/
static inline void *stktable_data_ptr(struct stktable *t, struct stksess *ts, int type)
{
if (type >= STKTABLE_DATA_TYPES)
return NULL;
if (!t->data_ofs[type]) /* type not stored */
return NULL;
if (!ts)
return NULL;
return (void *)ts + t->data_ofs[type];
}
#endif /* _PROTO_STICK_TABLE_H */

View File

@ -50,9 +50,6 @@ union stktable_data {
unsigned int conn_cum;
};
#define stktable_data_size(type) (sizeof(((union stktable_data*)0)->type))
#define stktable_data_cast(ptr, type) ((union stktable_data*)(ptr))->type
/* known data types */
struct stktable_data_type {
const char *name; /* name of the data type */

View File

@ -22,11 +22,10 @@
#include <ebmbtree.h>
#include <ebsttree.h>
#include <types/stick_table.h>
#include <proto/pattern.h>
#include <proto/proxy.h>
#include <proto/session.h>
#include <proto/stick_table.h>
#include <proto/task.h>