/**************************************************************************** mod_dav_pgsql (DASL) for apache 2.X CopyRight(C) 2005 SolutionBox Inc. All Rights reserved. CopyRight(C) 2006 Netomi Inc. All Rights reserved. Author : elenoa lazyfake (elenoa@solutionbox.co.kr) $Id: share.c,v 1.8 2007/02/22 08:22:13 elenoa Exp $ Redistribution and use in source and binary forms, with or with out modification, are not permitted in outside of SolutionBox Inc. ****************************************************************************/ #include #include #include #include #include #include #include #include /* for ap_construct_url */ #include #include #include #include "dav_repos.h" #include "dbms.h" #include "util.h" #include "share_common.h" #include "share_account.h" #include "share_anonymous.h" #include "share_fhs_stat.h" #include "share_statistic.h" /************************/ /* initialize functions */ void *dav_shared_get_new_memory(struct shm_mgnt *mgnt, server_rec *s, apr_pool_t *p, bool block) { apr_status_t sts; void *mem = NULL; #ifndef __OPENDAV_SHARED_NOT_USE /* create and check shared memory */ sts = apr_shm_attach(&(mgnt->shm), mgnt->shm_key, p); if (sts != APR_SUCCESS) { if (sts == APR_EEXIST) { } ap_log_error(APLOG_MARK, APLOG_ERR, sts, s, "OPENDAV: initialize_shared_memory: " "cannot attach shared memory [%s]", mgnt->shm_key); return NULL; } if (apr_shm_size_get(mgnt->shm) != mgnt->size) { ap_log_error(APLOG_MARK, APLOG_ERR, sts, s, "OPENDAV: initialize_shared_memory: " "size not match. request size %d alloced size %d [%s]", (int)mgnt->size, (int)apr_shm_size_get(mgnt->shm), mgnt->shm_key); return NULL; } mem = apr_shm_baseaddr_get(mgnt->shm); if (mem == NULL) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "OPENDAV: initialize_shared_memory: " "cannot find shared memory address(attach) [%s]", mgnt->shm_key); return NULL; } ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "OPENDAV: initialize_shared_memory: " "realm '%s', shared memory %d byte allocate success [%s]", mgnt->shm_key, mgnt->size, mgnt->shm_key); apr_lockmech_e mech; if (block) mech = APR_LOCK_DEFAULT; else mech = APR_LOCK_FCNTL; apr_file_remove(mgnt->lock_key, p); sts = apr_global_mutex_create(&(mgnt->lock), mgnt->lock_key, mech, p); if (sts != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_ERR, sts, s, "OPENDAV: initialize_shared_memory: " "cannot create global mutex [%s]", mgnt->shm_key); return NULL; } #ifdef __OPENDAV_DEBUG_SHARED__ DBG1("dav_shared_get_new_memory: pass mem:%x", (int)mem); #endif // __OPENDAV_DEBUG_SHARED__ #endif // !__OPENDAV_SHARED_NOT_USE return mem; } int dav_initialize_shared_memory(server_rec *s, apr_pool_t *p) { #ifndef __OPENDAV_SHARED_NOT_USE dav_repos_server_conf *dsc; /* get dav_repos_server_conf structure */ dsc = dav_repos_get_server_conf(s); if (!dsc) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "OPENDAV: initialize_shared_memory: " "fail to read config file"); return !OK; } /* check configuration */ if (dav_initialize_shared_fhs_stat(dsc, s, p) != OK) return !OK; #ifndef __OPENDISK_SOLUTION_NOT_USE_TS__ if (dav_initialize_shared_statistic(dsc, s, p) != OK) return !OK; #endif // !__OPENDISK_SOLUTION_NOT_USE_TS__ if (dav_initialize_shared_anonymous(dsc, s, p) != OK) return !OK; if (dav_initialize_shared_account_cache(dsc, s, p) != OK) return !OK; ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "OPENDAV: initialize_shared_memory: initialize success"); #endif // !__OPENDAV_SHARED_NOT_USE return OK; } apr_status_t dav_cleanup_shared_memory(void *data) { //server_rec *s = (server_rec *)data; #ifndef __OPENDAV_SHARED_NOT_USE dav_cleanup_shared_fhs_stat(); #ifndef __OPENDISK_SOLUTION_NOT_USE_TS__ dav_cleanup_shared_statistic(); #endif // !__OPENDISK_SOLUTION_NOT_USE_TS__ dav_cleanup_shared_anonymous(); dav_cleanup_shared_account_cache(); ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL, "OPENDAV: dav_cleanup_shared_memory: Detach Passed"); #endif // !__OPENDAV_SHARED_NOT_USE return 0; } // 2014.06.04 dadamin // ¸ÞŸ Á¤º¸ Å×À̺í char* dav_get_target_table(const char *tranid, char * buf) { if (!buf) return NULL; sprintf(buf, "t_meta_%s", tranid); return buf; } // uri °ª ´ë½Å display name »ç¿ë À¯¹« // 0: uri »ç¿ë, 1: dispaly name »ç¿ë, -1: error int dav_use_display_name() { int r = 1; return r; }