+Tue Jan 23 16:05:27 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * The silc_schedule_set_listen_fd now returns boolean value.
+ Fixed FD task adding to check correctly for already added
+ FD tasks. Added stricter error checking for FD scheduling
+ with epoll(). Affected files are lib/silcutil/silcschedule.[ch]
+ and lib/silcutil/unix/silcunixschedule.c.
+
+ * The silc_stream_set_notifier now returns boolean value. Changed
+ all streams to support and check for the error condition.
+ Affected files are in lib/silcutil/.
+
+ * Fixed SKE library session aborting and deletion. Affected
+ file are lib/silcske/silcske.c.
+
+Tue Jan 16 18:22:08 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Implemented PKCS #1 with appendix with hash OID in the
+ signature. Affected files are lib/silccrypt/silcpkcs1.[ch],
+ lib/silccrypt/silchash.[ch] and
+ lib/silcasn1/silcasn1[_encode|decode].[ch].
+
+Sun Jan 14 23:12:41 EET 2007 Pekka Riikonen <priikone@silcnet.org>
+
+ * Added support for Version (V) SILC public key identifier.
+ Affected files are lib/silccrypt/silcpk.[ch].
+
Tue Jan 9 19:37:51 EET 2007 Pekka Riikonen <priikone@silcnet.org>
* Rewrote connection auth request in client library. It is now
lib/silccore/silcpacket.[ch] ****PARTLY DONE****
============================
+ o Implement silc_packet_engine_stop and silc_packet_stream_destroy.
+
o Implement ACK packet and packet payload.
o SilcPacketEngine. (***DONE)
=============
o Implement SILC Public Key Version 2 handling in sign/verify. Implement
- Version (V) identifier.
+ Version (V) identifier (***DONE)
- o Implement PKCS #1 sign/verify with hash OID.
+ o Implement PKCS #1 sign/verify with hash OID. (***TESTING NEEDED)
o Implement the defined SilcDH API. The definition is in
lib/silccrypt/silcdh.h.
The Connection Data (c=) field describes the connection information for
the multimedia session. When performing peer-to-peer multimedia session
the <network type> is 'IN', indicating Internet connection. When
-performing multimedia session inside SILC network it is 'SILC'. When the
-'SILC' network type is used the <address type> and <connection address>
+performing multimedia session inside SILC network it is 'SILC'. When
+the 'SILC' network type is used the <address type> and <connection address>
sub-fields are omitted. Examples:
c=SILC
The Media Announcements (m=) field describes the media information for the
multimedia session. If the network type in c= field is 'SILC' the <port>
-sub-field MUST be set to 9 (discard). The <transport> for RTP over UDP is
-'RTP/AVP', for RTP over TCP it is 'TCP/RTP/AVP', and for non-RTP protocol
+sub-field MUST be set to 9 (discard). The <transport> for RTP over UDP
+is 'RTP/AVP', for RTP over TCP it is 'TCP/RTP/AVP', and for non-RTP protocol
over UDP it is 'udp' and over TCP it is 'tcp'. The <fmt> sub-field
includes the RTP media payload number when using RTP. When using non-RTP
protocol it includes MIME subtype. Examples:
following parameters are defined for attribute "silc".
channel The name of the channel for group conferencing.
- Can be used only with "group" session type.
- More than one channel parameters may be defined.
+ Can be used only with "group" session type.
+ More than one channel parameters may be defined.
The [RFC4145] specifies a "setup" attribute that defines which party of the
include_HEADERS = \
silc.h \
silcwin32.h \
- silcepoc.h \
+ silcsymbian.h \
silcbeos.h \
silcos2.h \
silcversion.h
EXTRA_DIST = \
silc.h \
silcwin32.h \
- silcepoc.h \
+ silcsymbian.h \
silcbeos.h \
silcos2.h \
silcversion.h.in \
lib/silcutil/Makefile
lib/silcutil/unix/Makefile
lib/silcutil/win32/Makefile
-lib/silcutil/beos/Makefile
-lib/silcutil/os2/Makefile
lib/silcapputil/Makefile
#ifdef SILC_DIST_SFTP
lib/silcsftp/Makefile
<br />
<small>
Version: @VERSION@<br />
-Copyright © 1997 - 2005 The SILC Project<br />
+Copyright © 1997 - 2007 The SILC Project<br />
Updated: @DATE@
</small>
<br /><br /><br />
<br /><br />
<b>Resource Links</b>
<br /><br />
-Please refer to these outside links for more information about the SILC
+Please refer to these outside links for more information about the SILC
project and SILC Protocol.
<br /><br />
<li><a href="#unix">Unix & Linux Implementation</a><br />
<li><a href="#windows">Windows Implementation</a><br />
<li><a href="#macosx">Mac OS X Implementation</a>
+<li><a href="#symbian">Symbian Implementation</a>
<br /> <br /> <br />
<b>Supported Platforms</b>
<br /> <br />
-SILC Toolkit supports by default all Unix and Linux platforms, Windows
+SILC Toolkit supports by default all Unix and Linux platforms, Windows
platforms from Windows 98 and newer, and Mac OS X. In the future there is
also plans to add support for other platforms such as Symbian OS (EPOC).
OS X platform. There are no special Mac OS X platform related
implementation issues with current version of SILC Toolkit.
+
+<br /> <br /> <br />
+<b><a name="symbian"></a>Symbian Implementation</b>
+
+<br /> <br />
+Symbian support in SILC Toolkit is still experimental. By default all
+feature and components delivered with SILC Toolkit are supported on
+Symbian. However, there are some certain issues with the Symbian version
+of the SILC Toolkit
+
+<br /> <br />
+<li>The function <tt>silc_schedule</tt> on Symbian will return immediately,
+instead of blocking the calling thread/process as on other platforms. On
+symbian the function is equivalent to <tt>silc_schedule_one</tt>, and that
+function should be used instead. The design of SilcSchedule on Symbian
+enables efficient data I/O even when <tt>silc_schedule_one</tt> is called
+from a timer task. The data I/O is scheduled separately by the Symbian
+Active Scheduler and the SilcSchedule will merely schedule timeouts.
+
+<li>The function <tt>silc_client_run</tt> on Symbian will return immediately.
+On symbian the <tt>silc_client_run_one<tt> should be used instead. It can
+used from a timer or from an idle task.
/** Finish */
silc_fsm_next_later(fsm, test_st_finish, 2, 0);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
SILC_FSM_STATE(test_st_finish)
SILC_LOG_DEBUG(("test_st_finish"));
SILC_LOG_DEBUG(("Finish machine"));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
static void destructor(SilcFSM fsm, void *fsm_context,
{
unlink("/tmp/test_silcfdstream");
unlink("/tmp/test_silcfdstream_copy");
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
SILC_FSM_STATE(st_readwrite)
if (i == -1) {
SILC_LOG_DEBUG(("Would block, write later"));
silc_fsm_next(fsm, st_end);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
if (i == -2) {
if (ret == -1) {
SILC_LOG_DEBUG(("Would block, read later"));
silc_fsm_next(fsm, st_end);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
if (ret == -2) {
}
silc_fsm_next(fsm, st_end);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
err:
silc_fsm_next(fsm, st_end);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(st_write)
if (ret == -1) {
SILC_LOG_DEBUG(("Would block, write later"));
silc_fsm_next(fsm, st_readwrite);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
if (ret == -2) {
SILC_LOG_DEBUG(("Continue to next state"));
silc_fsm_next(fsm, st_readwrite);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
err:
silc_fsm_next(fsm, st_end);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
static void fsm_dest(SilcFSM fsm, void *fsm_context, void *context)
/** Move to second state */
SILC_LOG_DEBUG(("Move to next state"));
silc_fsm_next(fsm, test_st_second);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_st_second)
/** Move to second timeout state, timeout */
SILC_LOG_DEBUG(("Move to next state with 2 second timeout"));
silc_fsm_next_later(fsm, test_st_second_timeout, 2, 0);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
SILC_TASK_CALLBACK(test_second_timeout)
silc_fsm_next_later(fsm, test_st_third, 3, 0);
silc_schedule_task_add_timeout(silc_fsm_get_schedule(fsm),
test_second_timeout, f, 2, 500000);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
static void async_call_cb(void *context)
/** Move to final state, timeout */
SILC_LOG_DEBUG(("Move to final state with %d second timeout", f->timeout));
silc_fsm_next_later(fsm, test_thread_st_finish, f->timeout, 0);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
SILC_FSM_STATE(test_thread_st_finish)
SILC_LOG_DEBUG(("test_thread_st_finish"));
SILC_LOG_DEBUG(("Finishing the thread"));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
SILC_FSM_STATE(test_st_fifth)
SILC_LOG_DEBUG(("Waiting for thread to terminate for 5 seconds"));
silc_fsm_next(fsm, test_st_sixth);
SILC_FSM_EVENT_TIMEDWAIT(&f->sema, 5, 0, NULL);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_thread2_st_start)
/** Move to final state, timeout */
SILC_LOG_DEBUG(("Move to final state with %d second timeout", f->timeout));
silc_fsm_next_later(fsm, test_thread2_st_finish, f->timeout, 0);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
SILC_FSM_STATE(test_thread2_st_finish)
SILC_FSM_EVENT_SIGNAL(&f->sema);
SILC_LOG_DEBUG(("Finishing the thread"));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
SILC_FSM_STATE(test_st_sixth)
/** Move to next state, timeout */
SILC_LOG_DEBUG(("Continue to next state with 4 second timeout"));
silc_fsm_next_later(fsm, test_st_seventh, 4, 0);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
SILC_FSM_STATE(test_thread3_st_start)
if (t->rounds == 0) {
SILC_FSM_EVENT_SIGNAL(&t->sema);
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
t->rounds--;
/** Call in recursive */
silc_fsm_next(fsm, test_thread3_st_start);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_st_seventh)
/** Move to wait threads */
silc_fsm_next(fsm, test_st_eighth);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_st_eighth)
/** Move to next thread */
silc_fsm_next(fsm, test_st_ninth);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_thread4_st_start)
if (t->rounds == 0) {
SILC_FSM_EVENT_SIGNAL(&t->sema);
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
t->rounds--;
/** Call in recursive */
silc_fsm_next(fsm, test_thread4_st_start);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_st_ninth)
/** Move to wait threads */
silc_fsm_next(fsm, test_st_tenth);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_st_tenth)
/** Finished successfully */
silc_fsm_next_later(fsm, test_st_finish, 2, 0);
- SILC_FSM_WAIT;
+ return SILC_FSM_WAIT;
}
SILC_FSM_STATE(test_st_finish)
SILC_LOG_DEBUG(("test_st_finish"));
SILC_LOG_DEBUG(("Finish machine"));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
static void destructor(SilcFSM fsm, void *fsm_context,
if (f->server_status != SILC_NET_OK) {
SILC_LOG_DEBUG(("Creating connection failed"));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
silc_socket_stream_get_info(f->server_stream, NULL, &host, &ip, &port);
SILC_LOG_DEBUG(("Connected to server %s, %s:%d", host, ip, port));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
SILC_FSM_STATE(test_st_start)
/** Creating network listener failed */
SILC_LOG_DEBUG(("Listener creation failed"));
silc_fsm_next(fsm, test_st_finish);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
/* Create thread to connect to the listener */
SILC_LOG_DEBUG(("Start waiting for incoming connections"));
silc_fsm_event_init(&f->sema, fsm);
silc_fsm_next(fsm, test_st_second);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
SILC_FSM_STATE(test_st_second)
/** Accepting new connection failed */
SILC_LOG_DEBUG(("Accepting failed %d", f->client_status));
silc_fsm_next(fsm, test_st_finish);
- SILC_FSM_CONTINUE;
+ return SILC_FSM_CONTINUE;
}
silc_socket_stream_get_info(f->client_stream, NULL, &host, &ip, &port);
silc_net_close_listener(f->server);
SILC_LOG_DEBUG(("Finish machine"));
- SILC_FSM_FINISH;
+ return SILC_FSM_FINISH;
}
static void destructor(SilcFSM fsm, void *fsm_context,