X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcschedule.h;h=be24c41a20c8df5864d258a288381264dffe3688;hb=d1e71f42379e8b5cd0748a7aeae8561b02cfe53d;hp=1b647e7082dcc71346ef6c1a61d30c5a7f68f226;hpb=bd6f0a84bcd5505e2c5b1286c2bee99b8d507918;p=silc.git diff --git a/lib/silcutil/silcschedule.h b/lib/silcutil/silcschedule.h index 1b647e70..be24c41a 100644 --- a/lib/silcutil/silcschedule.h +++ b/lib/silcutil/silcschedule.h @@ -2,16 +2,13 @@ silcschedule.h - COPYRIGHT - Author: Pekka Riikonen - Copyright (C) 1998 - 2001 Pekka Riikonen + Copyright (C) 1998 - 2005 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -119,7 +116,7 @@ typedef struct SilcTaskStruct *SilcTask; typedef enum { /* File descriptor task that performs some event over file descriptors. These tasks are for example network connections. */ - SILC_TASK_FD, + SILC_TASK_FD = 0, /* Timeout tasks are tasks that are executed after the specified time has elapsed. After the task is executed the task is removed @@ -190,7 +187,7 @@ typedef enum { has expired only and only when every other task with higher priority has already been run. For non-timeout tasks this priority behaves same way. Life is not fair for tasks with this priority. */ - SILC_TASK_PRI_LOW, + SILC_TASK_PRI_LOW = 0, /* Normal priority that is used mostly in SILC. This is priority that should always be used unless you specificly need some other priority. @@ -205,8 +202,9 @@ typedef enum { * * SYNOPSIS * - * typedef void (*SilcTaskCallback)(SilcSchedule schedule, - * SilcTaskEvent type, SilcUInt32 fd, + * typedef void (*SilcTaskCallback)(SilcSchedule schedule, + * void *app_context, + * SilcTaskEvent type, SilcUInt32 fd, * void *context); * * DESCRIPTION @@ -218,15 +216,18 @@ typedef enum { * The `schedule' is the scheduler context, the `type' is the indicated * event, the `fd' is the file descriptor of the task and the `context' * is a caller specified context. If multiple events occurred this - * callback is called separately for all events. + * callback is called separately for all events. The `app_context' + * is application specific context that was given as argument to the + * silc_schedule_init function. * * To specify task callback function in the application using the * SILC_TASK_CALLBACK and SILC_TASK_CALLBACK_GLOBAL macros is * recommended. * ***/ -typedef void (*SilcTaskCallback)(SilcSchedule schedule, SilcTaskEvent type, - SilcUInt32 fd, void *context); +typedef void (*SilcTaskCallback)(SilcSchedule schedule, void *app_context, + SilcTaskEvent type, SilcUInt32 fd, + void *context); /* Macros */ @@ -260,7 +261,8 @@ typedef void (*SilcTaskCallback)(SilcSchedule schedule, SilcTaskEvent type, * SOURCE */ #define SILC_TASK_CALLBACK(func) \ -static void func(SilcSchedule schedule, SilcTaskEvent type, \ +static void func(SilcSchedule schedule, void *app_context, \ + SilcTaskEvent type, \ SilcUInt32 fd, void *context) /***/ @@ -279,8 +281,8 @@ static void func(SilcSchedule schedule, SilcTaskEvent type, \ * * SOURCE */ -#define SILC_TASK_CALLBACK_GLOBAL(func) \ -void func(SilcSchedule schedule, SilcTaskEvent type, \ +#define SILC_TASK_CALLBACK_GLOBAL(func) \ +void func(SilcSchedule schedule, void *app_context, SilcTaskEvent type, \ SilcUInt32 fd, void *context) /***/ @@ -290,17 +292,20 @@ void func(SilcSchedule schedule, SilcTaskEvent type, \ * * SYNOPSIS * - * SilcSchedule silc_schedule_init(int max_tasks); + * SilcSchedule silc_schedule_init(int max_tasks, void *app_context); * * DESCRIPTION * * Initializes the scheduler. This returns the scheduler context that * is given as argument usually to all silc_schedule_* functions. * The `max_tasks' indicates the number of maximum tasks that the - * scheduler can handle. + * scheduler can handle. The `app_context' is application specific + * context that is delivered to all task callbacks. The caller must + * free that context. The 'app_context' can be for example the + * application itself. * ***/ -SilcSchedule silc_schedule_init(int max_tasks); +SilcSchedule silc_schedule_init(int max_tasks, void *app_context); /****f* silcutil/SilcScheduleAPI/silc_schedule_uninit * @@ -407,6 +412,22 @@ bool silc_schedule_one(SilcSchedule schedule, int timeout_usecs); ***/ void silc_schedule_wakeup(SilcSchedule schedule); +/****f* silcutil/SilcScheduleAPI/silc_schedule_get_context + * + * SYNOPSIS + * + * void *silc_schedule_get_context(SilcSchedule schedule); + * + * DESCRIPTION + * + * Returns the application specific context that was saved into the + * scheduler in silc_schedule_init function. The context is also + * returned to application in task callback functions, but this function + * may be used to get it as well if needed. + * + ***/ +void *silc_schedule_get_context(SilcSchedule schedule); + /****f* silcutil/SilcScheduleAPI/silc_schedule_task_add * * SYNOPSIS @@ -539,7 +560,7 @@ void silc_schedule_task_del_by_context(SilcSchedule schedule, void *context); * SYNOPSIS * * void silc_schedule_set_listen_fd(SilcSchedule schedule, SilcUInt32 fd, - * SilcTaskEvent mask); + * SilcTaskEvent mask, bool send_events); * * DESCRIPTION * @@ -552,9 +573,14 @@ void silc_schedule_task_del_by_context(SilcSchedule schedule, void *context); * whenever you need to change the events. This can be called multiple * times to change the events. * + * If the `send_events' is TRUE then this function sends the events + * in `mask' to the application. If FALSE then they are sent only + * after the event occurs in reality. In normal cases the `send_events' + * is set to FALSE. + * ***/ void silc_schedule_set_listen_fd(SilcSchedule schedule, SilcUInt32 fd, - SilcTaskEvent mask); + SilcTaskEvent mask, bool send_events); /****f* silcutil/SilcScheduleAPI/silc_schedule_unset_listen_fd * @@ -653,7 +679,7 @@ void silc_schedule_signal_unregister(SilcSchedule schedule, SilcUInt32 signal, * Mark the `signal' to be called later. Every signal that has been * registered by silc_schedule_signal_register is delivered by calling * this function. When signal really occurs, the application is - * responsible of calling this function int the signal handler. After + * responsible of calling this function in the signal handler. After * signal is over the scheduler will then safely deliver the callback * that was given to silc_schedule_signal_register function. *