Return FD task pointer if already added with same fd and is still
[silc.git] / lib / silcutil / silcschedule.h
index 44060fdca04ea11c72d4fd469c8b13621e1e58b3..dff50dfc870799042f2432b129e2ae10f5475d66 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1998 - 2006 Pekka Riikonen
+  Copyright (C) 1998 - 2007 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
@@ -293,6 +293,14 @@ void silc_schedule_stop(SilcSchedule schedule);
  *    When this returns the program is to be ended. Before this function can
  *    be called, one must call silc_schedule_init function.
  *
+ * NOTES
+ *
+ *    On Windows this will block the program, but will continue dispatching
+ *    window messages, and thus can be used as the main loop of the program.
+ *
+ *    On Symbian this will return immediately.  On Symbian calling
+ *    silc_schedule is same as calling silc_schedule_one.
+ *
  ***/
 void silc_schedule(SilcSchedule schedule);
 
@@ -311,6 +319,10 @@ void silc_schedule(SilcSchedule schedule);
  *    scheduler.  The function will not return in this timeout unless
  *    some other event occurs.
  *
+ *    Typically this would be called from a timeout or idle task
+ *    periodically (typically from 5-50 ms) to schedule SILC tasks.  In
+ *    this case the `timeout_usecs' is usually 0.
+ *
  ***/
 SilcBool silc_schedule_one(SilcSchedule schedule, int timeout_usecs);
 
@@ -363,6 +375,12 @@ void *silc_schedule_get_context(SilcSchedule schedule);
  *    handle.  To receive events for the file descriptor set the correct
  *    request events with silc_schedule_set_listen_fd function.
  *
+ *    The task will be initially set for SILC_TASK_READ events.  Setting that
+ *    event immediately after this call returns is not necessary.
+ *
+ *    This returns the new task or NULL on error.  If a task with `fd' has
+ *    already been added this will return the existing task pointer.
+ *
  ***/
 #define silc_schedule_task_add_fd(schedule, fd, callback, context)     \
   silc_schedule_task_add(schedule, fd, callback, context, 0, 0,        SILC_TASK_FD)
@@ -518,9 +536,10 @@ void silc_schedule_task_del_by_all(SilcSchedule schedule, int fd,
  *
  * SYNOPSIS
  *
- *    void silc_schedule_set_listen_fd(SilcSchedule schedule, SilcUInt32 fd,
- *                                     SilcTaskEvent mask,
- *                                     SilcBool send_events);
+ *    SilcBool silc_schedule_set_listen_fd(SilcSchedule schedule,
+ *                                         SilcUInt32 fd,
+ *                                         SilcTaskEvent mask,
+ *                                         SilcBool send_events);
  *
  * DESCRIPTION
  *
@@ -538,9 +557,12 @@ void silc_schedule_task_del_by_all(SilcSchedule schedule, int fd,
  *    after the event occurs in reality.  In normal cases the `send_events'
  *    is set to FALSE.
  *
+ *    Returns FALSE if the operation could not performed and TRUE if it
+ *    was a success.
+ *
  ***/
-void silc_schedule_set_listen_fd(SilcSchedule schedule, SilcUInt32 fd,
-                                SilcTaskEvent mask, SilcBool send_events);
+SilcBool silc_schedule_set_listen_fd(SilcSchedule schedule, SilcUInt32 fd,
+                                    SilcTaskEvent mask, SilcBool send_events);
 
 /****f* silcutil/SilcScheduleAPI/silc_schedule_get_fd_events
  *