OSDN Git Service

* Updated changelog.
[modchxj/mod_chxj.git] / include / chxj_cookie.h
1 /*
2  * Copyright (C) 2005-2011 Atsushi Konno All rights reserved.
3  * Copyright (C) 2005 QSDN,Inc. All rights reserved.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #ifndef __CHXJ_COOKIE_H__
18 #define __CHXJ_COOKIE_H__
19
20 #include "mod_chxj.h"
21 #include "apr_file_io.h"
22 #include "apr_tables.h"
23 #include "apr_time.h"
24
25 #define CHXJ_COOKIE_PARAM               "_chxj_cc"
26 #define CHXJ_COOKIE_NOUPDATE_PARAM      "_chxj_nc"
27
28 #define DEFAULT_COOKIE_DB_DIR           "/tmp"
29 #define COOKIE_DB_NAME                  "cookie.db"
30 #define COOKIE_DB_LOCK_NAME             "cookie.db.lock"
31
32 #define COOKIE_EXPIRE_DB_NAME           "cookie.expire.db"
33 #define COOKIE_EXPIRE_DB_LOCK_NAME      "cookie.expire.db.lock"
34
35 #define REFERER_COOKIE_KEY              "CHXJ_REFER"
36 #define CHXJ_COOKIE_PROC_MUTEX_FILE     "/tmp/chxj_cookie_mutex.lock"
37
38 /* 
39  * default cookie timeout is 30 minute
40  */
41 #define DEFAULT_COOKIE_TIMEOUT          (1800)
42
43 extern apr_proc_mutex_t *global_cookie_mutex;
44
45
46 typedef struct cookie_t cookie_t;
47
48
49 struct cookie_t {
50   char*               cookie_id;
51   apr_array_header_t* cookie_headers;
52 };
53
54 typedef struct cookie_lock_t cookie_lock_t;
55
56 struct cookie_lock_t {
57   apr_file_t *file;
58 };
59
60
61
62 extern cookie_t* chxj_save_cookie(
63   request_rec*            r);
64
65 extern char* chxj_add_cookie_parameter(
66   request_rec*            r, 
67   char*                   value, 
68   cookie_t*               cookie);
69
70 extern int chxj_cookie_check_host(
71   request_rec*            r, 
72   char*                   value);
73
74 extern cookie_t* chxj_load_cookie(
75   request_rec*            r, 
76   char*                   cookie_id);
77
78 extern apr_file_t* chxj_cookie_db_lock(
79   request_rec*            r);
80
81 extern void chxj_cookie_db_unlock(
82   request_rec*            r, 
83   apr_file_t*             file);
84
85 extern void chxj_delete_cookie(request_rec *r, const char *cookie_id);
86
87 extern char* chxj_cookie_db_name_create(
88   request_rec*            r, 
89   const char*             dir);
90
91 extern char* chxj_cookie_db_lock_name_create(
92   request_rec* r, 
93   const char*  dir);
94
95 extern char* chxj_cookie_expire_db_lock_name_create(
96   request_rec* r, 
97   const char*  dir);
98
99 extern char* chxj_cookie_expire_db_name_create(
100   request_rec* r, 
101   const char*  dir);
102
103 extern apr_file_t* chxj_cookie_expire_db_lock(
104   request_rec* r);
105
106 extern void chxj_cookie_expire_db_unlock(
107   request_rec* r, 
108   apr_file_t*  file);
109
110 extern void chxj_save_cookie_expire(
111   request_rec* r, 
112   cookie_t*    cookie);
113
114 extern void chxj_delete_cookie_expire(
115   request_rec* r, 
116   char*        cookie_id);
117
118 extern void chxj_cookie_expire_gc(
119   request_rec* r);
120
121 extern cookie_t* chxj_update_cookie(
122   request_rec* r, 
123   cookie_t*    old_cookie);
124
125 extern apr_time_t chxj_parse_cookie_expires(const char *s);
126
127 extern cookie_lock_t *__chxj_cookie_lock(request_rec *r, const char *filename, int line);
128 extern int __chxj_cookie_unlock(request_rec *r, cookie_lock_t *lock, const char *filename, int line);
129
130 extern char *chxj_add_cookie_no_update_parameter(request_rec *r, char *value, int xmlflag);
131 extern char *chxj_cookie_only_mode(request_rec *r, const char *src, apr_size_t *len, cookie_t *cookie);
132 char * chxj_uniq_id(request_rec *r);
133
134 #define chxj_cookie_lock(X) __chxj_cookie_lock((X),__FILE__,__LINE__)
135 #define chxj_cookie_unlock(X,L) __chxj_cookie_unlock((X),(L),__FILE__,__LINE__)
136
137 #endif
138 /*
139  * vim:ts=2 et
140  */