GSTATUS DDSDeleteAssUserDB ( u_i4 user_id, u_i4 db_id) { GSTATUS err = GSTAT_OK; err = DDFSemOpen(&dds_semaphore, TRUE); if (err == GSTAT_OK) { err = DDGDelete( &dds_session, DDS_OBJ_ASS_USER_DB, "%d%d", &user_id, &db_id); if (err == GSTAT_OK) err = DDSMemDeleteAssUserDB(user_id, db_id); if (err == GSTAT_OK) err = DDGCommit(&dds_session); else CLEAR_STATUS(DDGRollback(&dds_session)); CLEAR_STATUS(DDFSemClose(&dds_semaphore)); } return(err); }
/* ** Name: WSMReleaseUsrSession() - Release user session ** ** Description: ** ** Inputs: ** USR_PSESSION *usr_session ** ** Outputs: ** ** Returns: ** GSTATUS : GSTAT_OK ** ** Exceptions: ** None ** ** Side Effects: ** None ** ** History: ** 03-Jul-98 (fanra01) ** Enable removal of user session instance for ima. */ GSTATUS WSMReleaseUsrSession( USR_PSESSION usr_session) { GSTATUS err = GSTAT_OK; if (usr_session == NULL) return(GSTAT_OK); err = DDFSemOpen(&usrSessSemaphore, TRUE); if (err == GSTAT_OK) { if (usr_session->requested_counter > 0) usr_session->requested_counter--; if (usr_session->timeout_end == 0) { if (usr_session->requested_counter == 0) CLEAR_STATUS(WSMRemoveUsrSession(usr_session)); } else err = WSMSetTimeout(usr_session); CLEAR_STATUS(DDFSemClose(&usrSessSemaphore)); } return(err); }
GSTATUS DDSCloseDB (PTR *cursor) { GSTATUS err = GSTAT_OK; err = DDGClose(&dds_session); if (err == GSTAT_OK) err = DDGCommit(&dds_session); else CLEAR_STATUS(DDGRollback(&dds_session)); CLEAR_STATUS(DDFSemClose(&dds_semaphore)); return(err); }
GSTATUS DDSGetDBName( u_i4 id, char** name) { GSTATUS err = GSTAT_OK; err = DDFSemOpen(&dds_semaphore, FALSE); if (err == GSTAT_OK) { err = DDSMemGetDBName(id, name); CLEAR_STATUS(DDFSemClose(&dds_semaphore)); } return(err); }
/* ** Name: WSMRemoveUsrSession() - remove a session from the hashtable and the timeout list. ** ** Description: ** ** Inputs: ** USR_PSESSION* : user session ** ** Outputs: ** ** Returns: ** GSTATUS : GSTAT_OK ** ** Exceptions: ** None ** ** Side Effects: ** None ** ** History: ** 03-Jun-1999 (fanra01) ** Add removal of user session variable semaphore. */ GSTATUS WSMRemoveUsrSession ( USR_PSESSION session) { GSTATUS err = GSTAT_OK; USR_PSESSION tmp; CLEAR_STATUS(WPSCleanFilesTimeout (session->name)); CLEAR_STATUS(DDFdelhash( usr_sessions, session->name, STlength(session->name), (PTR*) &tmp)); CLEAR_STATUS(WSMRemoveTimeout(session)); if (session->requested_counter <= 0) { while (session->transactions != NULL) CLEAR_STATUS( WSMRollback(session->transactions, FALSE) ); if (session->name != NULL) usr_sess_detach(session->name); if (session->userid != SYSTEM_ID) CLEAR_STATUS(DDSReleaseUser(session->userid)); err = DDFSemOpen(&session->usrvarsem, TRUE); if (err == GSTAT_OK) { CLEAR_STATUS(WSFCleanVariable(session->vars)); CLEAR_STATUS(DDFrmhash(&session->vars)); CLEAR_STATUS(DDFSemClose(&session->usrvarsem)); } CLEAR_STATUS(DDFSemDestroy(&session->usrvarsem)); MEfreetag(session->mem_tag); MEfree((PTR)session); } return(err); }
/* ** Name: WSMRequestUsrSession() - Retrieve a user session from the cookie ** ** Description: ** ** Inputs: ** char* : cookie ** ** Outputs: ** USR_PSESSION* : user session (NULL if doesn't exist) ** ** Returns: ** GSTATUS : GSTAT_OK ** ** Exceptions: ** None ** ** Side Effects: ** None ** ** History: ** 04-Oct-2001 (fanra01) ** Add a test for an invalid session or a session that is no longer ** in the hash table and return an error. */ GSTATUS WSMRequestUsrSession ( char *cookie, USR_PSESSION *session) { GSTATUS err = GSTAT_OK; u_i4 i = 0; USR_PSESSION tmp = NULL; if (cookie != NULL && cookie[0] != EOS) { err = DDFSemOpen(&usrSessSemaphore, TRUE); if (err == GSTAT_OK) { err = DDFgethash( usr_sessions, cookie, STlength(cookie), (PTR*) &tmp); /* ** If the object is not in the hash table, raise and error. */ if (tmp == NULL) { err = DDFStatusAlloc( E_WS0011_WSS_NO_OPEN_SESSION ); } if (tmp != NULL && tmp->timeout_end < TMsecs()) tmp = NULL; if (tmp != NULL) tmp->requested_counter++; CLEAR_STATUS(DDFSemClose(&usrSessSemaphore)); } } *session = tmp; return(err); }
GSTATUS DDSCreateDB ( char *name, char *dbname, u_i4 dbuser_id, i4 flags, char *comment, u_i4 *id) { GSTATUS err = GSTAT_OK; err = DDFSemOpen(&dds_semaphore, TRUE); if (err == GSTAT_OK) { err = DDSPerformDBId(id); if (err == GSTAT_OK) { err = DDGInsert( &dds_session, DDS_OBJ_DB, "%d%s%s%d%d%s", id, name, dbname, &dbuser_id, &flags, comment); if (err == GSTAT_OK) err = DDSMemCreateDB( *id, name, dbname, dbuser_id, flags ); if (err == GSTAT_OK) err = DDGCommit(&dds_session); else CLEAR_STATUS(DDGRollback(&dds_session)); } CLEAR_STATUS(DDFSemClose(&dds_semaphore)); } return(err); }
/* ** Name: WSMCleanUserTimeout() - Clean the timeout system ** ** Description: ** ** Inputs: ** ** Outputs: ** ** Returns: ** GSTATUS : GSTAT_OK ** ** Exceptions: ** None ** ** Side Effects: ** None ** ** History: */ GSTATUS WSMCleanUserTimeout() { GSTATUS err = GSTAT_OK; USR_PSESSION tmp = oldest; USR_PSESSION next; i4 limit = TMsecs(); err = DDFSemOpen(&usrSessSemaphore, TRUE); if (err == GSTAT_OK) { while (tmp != NULL && tmp->timeout_end < limit) { next = tmp->timeout_next; CLEAR_STATUS(WSMRemoveUsrSession(tmp)); tmp = next; } CLEAR_STATUS(DDFSemClose(&usrSessSemaphore)); } return(err); }
GSTATUS DDSDeleteDB ( u_i4 id) { GSTATUS err = GSTAT_OK; err = DDFSemOpen(&dds_semaphore, TRUE); if (err == GSTAT_OK) { err = DDGDelete(&dds_session, DDS_OBJ_DB, "%d", &id); if (err == GSTAT_OK) err = DDSMemDeleteDB(id); if (err == GSTAT_OK) err = DDGCommit(&dds_session); else CLEAR_STATUS(DDGRollback(&dds_session)); CLEAR_STATUS(DDFSemClose(&dds_semaphore)); } return(err); }
GSTATUS DDSRetrieveDB ( u_i4 id, char **name, char **dbname, u_i4 **dbuser_id, i4 **flags, char **comment) { GSTATUS err = GSTAT_OK; err = DDFSemOpen(&dds_semaphore, TRUE); if (err == GSTAT_OK) { err = DDGKeySelect( &dds_session, DDS_OBJ_DB, "%d%s%s%d%d%s", &id, name, dbname, dbuser_id, flags, comment); if (err == GSTAT_OK) err = DDGClose(&dds_session); if (err == GSTAT_OK) err = DDGCommit(&dds_session); else CLEAR_STATUS(DDGRollback(&dds_session)); CLEAR_STATUS(DDFSemClose(&dds_semaphore)); } return(err); }
/* ** Name: WSMReleaseActSession() - Clean an active session ** ** Description: ** ** Inputs: ** ACT_PSESSION* : active session ** ** Outputs: ** ACT_PSESSION* : active session ** ** Returns: ** GSTATUS : GSTAT_OK ** ** Exceptions: ** None ** ** Side Effects: ** None ** ** History: ** 03-Jul-98 (fanra01) ** Rename wts_sess_detach to act_sess_detach. ** 26-Aug-2003 (fanra01) ** Removed explicit memory frees which are part of tagged memory ** free. */ GSTATUS WSMReleaseActSession( ACT_PSESSION *act_session) { GSTATUS err = GSTAT_OK; ACT_PSESSION session = *act_session; if (session != NULL) { *act_session = NULL; if (session->name != NULL) act_sess_detach(session->name); err = DDFSemOpen(&actSessSemaphore, TRUE); if (err == GSTAT_OK) { if (session->previous != NULL) session->previous->next = session->next; else active_sessions = session->next; if (session->next != NULL) session->next->previous = session->previous; CLEAR_STATUS(DDFSemClose(&actSessSemaphore)); } CLEAR_STATUS( WSMCleanUserTimeout() ); CLEAR_STATUS( WPSCleanFilesTimeout(NULL) ); CLEAR_STATUS( DBCleanTimeout() ); CLEAR_STATUS(WSFCleanVariable(session->vars)); CLEAR_STATUS (DDFrmhash(&session->vars)); MEfreetag(session->mem_tag); MEfree((PTR)session); } return(err); }
GSTATUS DDSUpdateDB ( u_i4 id, char *name, char *dbname, u_i4 dbuser_id, i4 flags, char *comment) { GSTATUS err = GSTAT_OK; err = DDFSemOpen(&dds_semaphore, TRUE); if (err == GSTAT_OK) { err = DDGUpdate( &dds_session, DDS_OBJ_DB, "%s%s%d%d%s%d", name, dbname, &dbuser_id, &flags, comment, &id); if (err == GSTAT_OK) err = DDSMemUpdateDB(id, name, dbname, flags, dbuser_id); if (err == GSTAT_OK) err = DDGCommit(&dds_session); else CLEAR_STATUS(DDGRollback(&dds_session)); CLEAR_STATUS(DDFSemClose(&dds_semaphore)); } return(err); }
GSTATUS DDSCloseUserDB (PTR *cursor) { CLEAR_STATUS(DDFSemClose(&dds_semaphore)); return(GSTAT_OK); }