ds_tasks.c
来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 162 行
C
162 行
#ifndef lintstatic char *rcsid = "$Header: /xtel/isode/isode/others/quipu/uips/doog/query/RCS/ds_tasks.c,v 9.0 1992/06/16 12:45:27 isode Rel $";#endif/* $Header: /xtel/isode/isode/others/quipu/uips/doog/query/RCS/ds_tasks.c,v 9.0 1992/06/16 12:45:27 isode Rel $ *//* * $Log: ds_tasks.c,v $ * Revision 9.0 1992/06/16 12:45:27 isode * Release 8.0 * *//***************************************************************************** ds_tasks.c - Manage X500 requests.*****************************************************************************/#include "types.h"#include "util.h"#include "ds_tasks.h"#include "error.h"#include "quipu/common.h"#include "quipu/util.h"#include "quipu/dap2.h"#include "quipu/abandon.h"/* DsTask tasks_outstanding[MAXTASKS]; */DsTask live_task_list = NULLDsTask;QCardinal live_task_count;int next_task_id = 0;/* Private functions. */static void ds_task_free();#ifndef NO_STATSextern LLog *log_stat;#endif/* * - _task_invoked() - * Add invoked task to task list and pass back task identifier. * */QE_error_code _task_invoked(type, baseobject, request_id, task_id_ptr) task_type type; char *baseobject; QCardinal request_id; int *task_id_ptr;{ DsTask task_rec; if (live_task_count >= MAXTASKS) return QERR_internal_limit_reached; task_rec = ds_task_alloc(); task_rec->next = live_task_list; task_rec->type = type; task_rec->task_id = *task_id_ptr = next_task_id++; task_rec->baseobject = copy_string(baseobject); task_rec->request_id = request_id; live_task_count++; live_task_list = task_rec; return QERR_ok;} /* _task_invoked *//* * - _task_complete() - * A task has been completed. Remove it from the outstanding list. * */void _task_complete(task_id) int task_id;{ register DsTask prev_rec = NULLDsTask, task_rec = live_task_list; while (task_rec != NULLDsTask && task_rec->task_id != task_id) { prev_rec = task_rec; task_rec = task_rec->next; } if (task_rec != NULLDsTask) { if (prev_rec != NULLDsTask) prev_rec->next = task_rec->next; else live_task_list = task_rec->next; ds_task_free(task_rec); live_task_count--; }} /* _task_complete *//* * - _get_task_of_id() - * Find task_rec of given id and return a pointer to it. * */DsTask _get_task_of_id(task_id) int task_id;{ register DsTask task_rec = live_task_list; while (task_rec != NULLDsTask && task_rec->task_id != task_id) task_rec = task_rec->next; return task_rec;} /* _get_task_of_id *//* * - abort_task() - * Abort an X.500 request * */void abort_task(task_id) int task_id;{ struct ds_abandon_arg arg; struct DAPindication di; extern int dsap_ad; _task_complete(task_id); arg.aba_invokeid = task_id; (void) DapAbandon(dsap_ad, next_task_id++, &arg, &di, ROS_ASYNC);#ifndef NO_STATS LLOG (log_stat, LLOG_NOTICE, ("ABANDONING task %d", task_id));#endif} /* abort_task *//* * - ds_task_free() - * Free a ds_task structure. * */static void ds_task_free(task) DsTask task;{ if (task == NULLDsTask) return; if (task->baseobject != NULLCP) (void) free(task->baseobject); (void) free((char *) task);} /* ds_task_free */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?