- Example:
- silc_schedule_task_add_event(schedule, "connected",
- SILC_PARAM_UI32_INT,
- SILC_PARAM_BUFFER,
- SILC_PARAM_END);
- silc_schedule_event_connect(schedule, "connected", connected_cb, ctx);
- silc_schedule_event_signal(schedule, "connected", integer, buf,
- SILC_PARAM_END);
- SILC_TASK_CALLBACK(connected_cb)
- {
- FooCtx ctx = context;
- va_list args;
- SilcUInt32 integer;
- SilcBuffer buf;
-
- va_start(args, context);
- integer = va_arg(args, SilcUInt32);
- buf = va_arg(args, SilcBuffer);
- va_end(args);
- ...
- }
-
- Problems: Events would be SilcSchedule specific, and would not work on
- multi-thread/multi-scheduler system. The events should be copyable
- between schedulers. Another problem is the signal delivery. Do we
- deliver them synchronously possibly from any thread to any other thread
- or do we deliver them through the target schedulers. If we use the
- schedulers then signalling would be asynchronous (data must be
- duplicated and later freed) which is not very nice.
-
- o If the event signals are added, the SILC_PARAM_* stuff needs to be
- moved from silcbuffmt.h to silctypes.h or something similar.
-
- o In case the SILC Events are done we shall create a new concept of
- parent and child SilcSchedule's. When new SilcSchedule is created a
- parent can be associated to it. This association could be done either
- directly by the parent or by any other children. This way the signals
- would in effect be global and would reach all children schedulers.
-
- This relationship would be associative only. The schedulers are still
- independent and run independently from each other. All schedulers
- would be linked and could be accessed from any of the schedulers.
- It should be possible to retrieve the parent and enumerate all children
- from any of the schedulers.
-
- SilcSchedule silc_schedule_init(int max_tasks, void *app_context,
- SilcSchedule parent);
- SilcSchedule silc_schedule_get_parent(SilcSchedule schedule);
-
- o Additional scheduler changes: optimize silc_schedule_wakeup. Wakeup
- only if the scheduler is actually waiting something. If it is
- delivering tasks wakeup is not needed.
-
- o Structured log messages to Log API. Allows machine readable log
- messages. Would allow sending of any kind of data in a log message.
-
- o Base64 to an own API (***DONE)
-
- o Timer API (***DONE)
-
- o Add builtin SOCKS and HTTP Proxy support, well the SOCKS at least.
- SILC currently supports SOCKS4 and SOCKS5 but it needs to be compiled
- in separately.
-
- o silc_stringprep to non-allocating version.
-
- o silc_hash_table_replace -> silc_hash_table_set. Retain support for
- silc_hash_table_replace as macro. (***DONE)
-
- o SilcStack aware SilcHashTable. (***DONE)
-
- o SilcStack aware SilcDList. (***DONE)
-
- o Thread pool API. Add this to lib/silcutil/silcthread.[ch]. (***DONE)
-
- o Add new functions to SilcStack API in lib/silcutil/silcstack.[ch]. Add
- silc_stack_[set|get]_alignment. It defines the default alignment used
- when allocating memory from stack. It can be used to specify special
- alignments too when needed (such as for hardware devices like crypto
- accelerators). Move also the low level silc_stack_malloc and
- silc_stack_realloc from silcstack_i.h to silcstack.h. Remove the
- _ua unaligned memory allocation routines. Remove unaligned memory
- allocation possibility. (***DONE)
-
- o silc_stack_alloc shouldn't require multiple by 8 size argument, it
- should figure it out itself.
-
- o silc_malloc et. al. to respect --with-alignment.
-
- o Add '%@' format to silc_snprintf functions. It marks for external
- rendering function of following type:
-
- /* Snprintf rendering function. The `data' is rendered into a string
- and allocated string is returned. If NULL is returned the
- rendering is skipped and ignored. If the returned string does
- not fit to the destination buffer it may be truncated. */
- typedef char *(*SilcSnprintfRender)(void *data);
-
- It can work like following:
-
- char *id_renderer(void *data)
- {
- char tmp[32];
- id_to_str(tmp, sizeof(tmp), (SilcID *)data);
- return strdup(tmp);
- }
-
- silc_snprintf(buf, sizeof(buf), "Client ID %@", id_renderer, client_id);
- (***DONE)
-
- o SILC Tls (Thread-local storage) API to lib/silcutil/silcthread.[ch].
- (***DONE)