f67641992e4a5c5149710b432d786b4ef9a096a8
[Evergreen.git] / OpenSRF / src / libstack / osrf_cache.c
1 /*
2 Copyright (C) 2005  Georgia Public Library Service 
3 Bill Erickson <highfalutin@gmail.com>
4
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14 */
15
16 #include "osrf_cache.h"
17
18 struct memcache* __osrfCache = NULL;
19 time_t __osrfCacheMaxSeconds = -1;
20
21 int osrfCacheInit( char* serverStrings[], int size, time_t maxCacheSeconds ) {
22         if( !(serverStrings && size > 0) ) return -1;
23
24         int i;
25         __osrfCache = mc_new();
26         __osrfCacheMaxSeconds = maxCacheSeconds;
27
28         for( i = 0; i < size && serverStrings[i]; i++ ) 
29                 mc_server_add4( __osrfCache, serverStrings[i] );
30
31         return 0;
32 }
33
34 int osrfCachePutObject( char* key, const jsonObject* obj, time_t seconds ) {
35         if( !(key && obj) ) return -1;
36         char* s = jsonObjectToJSON( obj );
37         if( seconds < 0 ) seconds = __osrfCacheMaxSeconds;
38         mc_add(__osrfCache, key, strlen(key), s, strlen(s), seconds, 0);
39         free(s);
40         return 0;
41 }
42
43 int osrfCachePutString( char* key, const char* value, time_t seconds ) {
44         if( !(key && value) ) return -1;
45         if( seconds < 0 ) seconds = __osrfCacheMaxSeconds;
46         mc_add(__osrfCache, key, strlen(key), value, strlen(value), seconds, 0 );
47         return 0;
48 }
49
50 jsonObject* osrfCacheGetObject( char* key, ... ) {
51         jsonObject* obj = NULL;
52         if( key ) {
53                 VA_LIST_TO_STRING(key);
54                 char* data = (char*) mc_aget( __osrfCache, VA_BUF, strlen(VA_BUF) );
55                 if( data ) {
56                         obj = jsonParseString( data );
57                         return obj;
58                 }
59         }
60         return NULL;
61 }
62
63 char* osrfCacheGetString( char* key, ... ) {
64         if( key ) {
65                 VA_LIST_TO_STRING(key);
66                 return (char*) mc_aget(__osrfCache, VA_BUF, strlen(VA_BUF) );
67         }
68         return NULL;
69 }
70
71
72 int osrfCacheRemove( char* key, ... ) {
73         if( key ) {
74                 VA_LIST_TO_STRING(key);
75                 return mc_delete(__osrfCache, VA_BUF, strlen(VA_BUF), 0 );
76         }
77         return -1;
78 }
79
80