OPJ_BOOL close_channel(query_param_t query_param, sessionlist_param_t *sessionlist, session_param_t **cursession, channel_param_t **curchannel) { char *cclose; int i; if (query_param.cclose[0] == '*') { #ifndef SERVER fprintf(logstream, "local log: close all\n"); #endif /* all channels associatd with the session will be closed */ if (!delete_session(cursession, sessionlist)) { return OPJ_FALSE; } } else { /* check if all entry belonging to the same session */ for (i = 0, cclose = query_param.cclose; i < query_param.numOfcclose; i++, cclose += (strlen(cclose) + 1)) { /* In case of the first entry of close cid */ if (*cursession == NULL) { if (!search_session_and_channel(cclose, sessionlist, cursession, curchannel)) { return OPJ_FALSE; } } else /* second or more entry of close cid */ if (!(*curchannel = search_channel(cclose, (*cursession)->channellist))) { fprintf(FCGI_stdout, "Reason: Cclose id %s is from another session\r\n", cclose); return OPJ_FALSE; } } /* delete channels */ for (i = 0, cclose = query_param.cclose; i < query_param.numOfcclose; i++, cclose += (strlen(cclose) + 1)) { *curchannel = search_channel(cclose, (*cursession)->channellist); delete_channel(curchannel, (*cursession)->channellist); } if ((*cursession)->channellist->first == NULL || (*cursession)->channellist->last == NULL) /* In case of empty session */ { delete_session(cursession, sessionlist); } } return OPJ_TRUE; }
OPJ_BOOL associate_channel( query_param_t query_param, sessionlist_param_t *sessionlist, session_param_t **cursession, channel_param_t **curchannel) { if( search_session_and_channel( query_param.cid, sessionlist, cursession, curchannel)){ if( !query_param.cnew) set_channel_variable_param( query_param, *curchannel); } else{ fprintf( FCGI_stderr, "Error: process canceled\n"); return OPJ_FALSE; } return OPJ_TRUE; }