X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=TODO;h=569d4dd8232edb4f9502f29b375c49de5dece085;hp=fd6156b4ccd834bed26fbf47a3f60039cebdc696;hb=8fc3402eeef449d1a0b7dfa10a2f316a181d8a27;hpb=a85b69a00898360e6237607a90a263570ad4b3ba diff --git a/TODO b/TODO index fd6156b4..569d4dd8 100644 --- a/TODO +++ b/TODO @@ -93,63 +93,38 @@ lib/silcclient, The Client Library Runtime library, lib/silcutil/ ============================== + o silc_malloc et. al. to respect --with-alignment. + o Fix universal time decoding (doesn't accept all formats) in silctime.c. + o Add directory opening/traversing functions + + o regex from /lib/contrib to lib/silcutil, define SILC Regex API. (***DONE) + + 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 silc_stringprep to non-allocating version. + + 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 Add functions to manipulate environment variables. (***DONE) o Add functions to loading shared/dynamic object symbols (replaces the SIM library (lib/silcsim) and introduces generic library). Add this to lib/silcutil/silcdll.[ch]. (***TESTING NEEDED WIN32, TODO Symbian) - o Add directory opening/traversing functions - o silc_getopt routines (***DONE) o The SILC Event signals. Asynchronous events that can be created, connected to and signalled. Either own event routines or glued into - SilcSchedule: - - SilcTask silc_schedule_task_add_event(SilcSchedule schedule, - const char *event, ...); - SilcBool silc_schedule_event_connect(SilcSchedule schedule, - const char *event, - SilcTaskCallback event_callback, - void *context); - SilcBool silc_schedule_event_signal(SilcSchedule schedule, - const char *event, ...); - - 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. + SilcSchedule. (***DONE) o If the event signals are added, the SILC_PARAM_* stuff needs to be - moved from silcbuffmt.h to silctypes.h or something similar. + moved from silcbuffmt.h to silctypes.h or something similar. (***DONE) 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 @@ -162,28 +137,12 @@ Runtime library, lib/silcutil/ 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. + (***DONE) 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) @@ -205,27 +164,7 @@ Runtime library, lib/silcutil/ o silc_stack_alloc shouldn't require multiple by 8 size argument, it should figure it out itself. (***DONE) - 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); + o Add '%@' format to silc_snprintf functions. (***DONE) o SILC Tls (Thread-local storage) API to lib/silcutil/silcthread.[ch]. @@ -237,6 +176,9 @@ Runtime library, lib/silcutil/ o Generic SilcResult that includes all possible status and error conditions and generic errno API. (***DONE) + (o Structured log messages to Log API. Allows machine readable log + messages. Would allow sending of any kind of data in a log message.) maybe + (o Change some stream routines (like socket stream API) to accept ANY stream and use silc_stream_get_root to get the socket stream from the given stream. This will make various stream APIs more easier to use @@ -345,6 +287,10 @@ Crypto Library, lib/silccrypt/ All PKCS routines should now take callbacks as argument and they should be delivered to SilcPKCSObject and SilcPKCSAlgorithm too. (***DONE) + o The asynchronous functions to perhaps to _async to preserve backwards + compatibility with synchronous versions, and make easier to migrate + from 1.1 to 1.2. + o Change PKCS Algorithm API to take SilcPKCSAlgorithm as argument to encrypt, decrypt, sign and verify functions. We may need to for exmaple check the alg->hash, supported hash functions. Maybe deliver it also @@ -391,16 +337,14 @@ SILC Accelerator Library const char *option; /* Option name */ const char *display_name; /* Option displayable name */ SilcParamType type; /* Option data format */ + void *default_value; /* Option's default value */ + SilcUInt32 default_value_len; /* Default value length */ } *SilcAcceleratorOption; For software accelerator it could be for example: - { "min_threads", "Minimum threads", SILC_PARAM_UINT32 }, - { "max_threads", "Maximum threads", SILC_PARAM_UINT32 }, - - The accelerator itself doesn't have to use the option structure to - parse the options if not wanted. It is defined for the caller so - they can learn the supported options in a well defined way. + { "min_threads", "Minimum threads", SILC_PARAM_UINT32, (void *)2, 4 }, + { "max_threads", "Maximum threads", SILC_PARAM_UINT32, (void *)4, 4 }, o Diffie-Hellman acceleration