1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-a" />
<meta http-equiv="Content-Language" content="en" />
<meta name="description" content="SILC Secure Internet Live Conferencing" />
<meta name="keywords" content="SILC, secure, chat, protocol, cipher, encrypt, SKE" />
<meta content="INDEX, FOLLOW" name="ROBOTS" />
<style type="text/css">
<!--
body { color: #000000; background: #f0f0f0; font-family: Helvetica, Arial, Sans-serif; }
a:link { text-decoration: none; color: #2f488f; }
a:visited { text-decoration: none;color: #2f488f; }
a:active { text-decoration: none; color: #2f488f; }
-->
</style>
</head>
<body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tr valign="top" bgcolor="#dddddd">
<td><small>Copyright © 2001 - 2007 SILC Project<br />
<a href="http://silcnet.org">SILC Project Website</a></small></td>
<td align="right"><small>
<a href="index.html">SILC Toolkit Reference Manual</a><br />
<a href="toolkit_index.html">Index</a></small></td>
</small></td>
</tr>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr bgcolor="#444444"><td><img src="space.gif" width="1" height="1"border="0" alt="" ></td></tr>
</table>
<table cellpadding="0" cellspacing="0" border="0">
<tr valign="top">
<td width="200" bgcolor="#f0f0f0">
<img src="space.gif" width="1" height="1" border="0" alt="">
<table width="100%" cellpadding="2" cellspacing="2" border="0">
<tr valign="top"><td>
<br />
<small>
<!-- Template file for the big index that appears in the Toolkit reference
manual on the left side. With this file it is possible to add other than
automatically generated links to that list. -->
<a href="index.html"><img src="box.gif" border="0" alt="">SILC Toolkit Reference Manual</a><br />
<a href=silcvcardlib.html><img src=box.gif border=0 alt=>SILC VCard Library</a><br />
<a href=silcvcard.html><img src=box2.gif border=0 alt=>SILC VCard Interface</a><br />
<a href=silccryptlib.html><img src=box.gif border=0 alt=>SILC Crypto Library</a><br />
<a href=silcrng_intro.html><img src=box2.gif border=0 alt=>Introduction to SILC RNG</a><br />
<a href=silcrng.html><img src=box2.gif border=0 alt=>SILC RNG Interface</a><br />
<a href=silccipher.html><img src=box2.gif border=0 alt=>SILC Cipher API</a><br />
<a href=silcpkcs.html><img src=box2.gif border=0 alt=>SILC PKCS API</a><br />
<a href=silcpk.html><img src=box2.gif border=0 alt=>SILC Public Key API</a><br />
<a href=silcpkcs1.html><img src=box2.gif border=0 alt=>SILC PKCS #1 API</a><br />
<a href=silchash.html><img src=box2.gif border=0 alt=>SILC Hash Interface</a><br />
<a href=silchmac.html><img src=box2.gif border=0 alt=>SILC HMAC Interface</a><br />
<a href=silcclientlib.html><img src=box.gif border=0 alt=>SILC Client Library</a><br />
<a href=silcclient_using.html><img src=box2.gif border=0 alt=>Using SILC Client Library Tutorial</a><br />
<a href=command_reply_args.html><img src=box2.gif border=0 alt=>Arguments for <b>command_reply</b> Client Operation</a><br />
<a href=silcstatus_args.html><img src=box2.gif border=0 alt=>SilcStatus Error Arguments in <b>command_reply</b> Client Operation</a><br />
<a href=notifyargs.html><img src=box2.gif border=0 alt=>Arguments for <b>notify</b> Client Operation</a><br />
<a href=silcclient_unicode.html><img src=box2.gif border=0 alt=>Unicode and UTF-8 Strings in Client Library</a><br />
<a href=silcclient.html><img src=box2.gif border=0 alt=>Client Library Interface Reference</a><br />
<a href=silcclient_entry.html><img src=box2.gif border=0 alt=>Client Entry Interface Reference</a><br />
<a href=silcmathlib.html><img src=box.gif border=0 alt=>SILC Math Library</a><br />
<a href=silcmp.html><img src=box2.gif border=0 alt=>SILC MP Interface</a><br />
<a href=silcmath.html><img src=box2.gif border=0 alt=>SILC Math Interface</a><br />
<a href=silcaputillib.html><img src=box.gif border=0 alt=>SILC Application Utility Library</a><br />
<a href=silcapputil.html><img src=box2.gif border=0 alt=>SILC Application Utilities</a><br />
<a href=silcidcache.html><img src=box2.gif border=0 alt=>SILC ID Cache Interface</a><br />
<a href=silcskrlib.html><img src=box.gif border=0 alt=>SILC Key Repository Library</a><br />
<a href=silcskr.html><img src=box2.gif border=0 alt=>SILC SKR Interface</a><br />
<a href=silcasn1lib.html><img src=box.gif border=0 alt=>SILC ASN.1 Library</a><br />
<a href=silcasn1.html><img src=box2.gif border=0 alt=>SILC ASN.1 Interface</a><br />
<a href=silcber.html><img src=box2.gif border=0 alt=>SILC BER interface</a><br />
<a href=silcskelib.html><img src=box.gif border=0 alt=>SILC Key Exchange Library</a><br />
<a href=silcske.html><img src=box2.gif border=0 alt=>SILC SKE Interface</a><br />
<a href=silcconnauth.html><img src=box2.gif border=0 alt=>SILC Connection Authentication Interface</a><br />
<a href=silcsftplib.html><img src=box.gif border=0 alt=>SILC SFTP Library</a><br />
<a href=silcsftp.html><img src=box2.gif border=0 alt=>SILC SFTP Interface</a><br />
<a href=silcsftp_fs.html><img src=box2.gif border=0 alt=>SFTP Filesystems Interface</a><br />
<a href=silccorelib.html><img src=box.gif border=0 alt=>SILC Core Library</a><br />
<a href=silcauth.html><img src=box2.gif border=0 alt=>SILC Authentication Interface</a><br />
<a href=silcmessage.html><img src=box2.gif border=0 alt=>SILC Message Interface</a><br />
<a href=silcchannel.html><img src=box2.gif border=0 alt=>SILC Channel Interface</a><br />
<a href=silccommand.html><img src=box2.gif border=0 alt=>SILC Command Interface</a><br />
<a href=silcnotify.html><img src=box2.gif border=0 alt=>SILC Notify Interface</a><br />
<a href=silcstatus.html><img src=box2.gif border=0 alt=>SILC Status Types</a><br />
<a href=silcmode.html><img src=box2.gif border=0 alt=>SILC Modes</a><br />
<a href=silcid.html><img src=box2.gif border=0 alt=>SILC ID Interface</a><br />
<a href=silcargument.html><img src=box2.gif border=0 alt=>SILC Argument Interface</a><br />
<a href=silcattrs.html><img src=box2.gif border=0 alt=>SILC Attributes Interface</a><br />
<a href=silcpacket.html><img src=box2.gif border=0 alt=>Packet Engine Interface</a><br />
<a href=silcpubkey.html><img src=box2.gif border=0 alt=>SILC Public Key Payload Interface</a><br />
<a href=silcutillib.html><img src=box.gif border=0 alt=>SILC Utility Library</a><br />
<a href=silctypes.html><img src=box2.gif border=0 alt=>Basic Types and Definitions</a><br />
<a href=silcbuffer.html><img src=box2.gif border=0 alt=>Data Buffer Interface</a><br />
<a href=silcbuffmt.html><img src=box2.gif border=0 alt=>Data Buffer Format Interface</a><br />
<a href=silchashtable.html><img src=box2.gif border=0 alt=>Hash Table Interface</a><br />
<a href=silcmemory.html><img src=box2.gif border=0 alt=>Memory Allocation Interface</a><br />
<a href=silcstack.html><img src=box2.gif border=0 alt=>Data Stack (memory pool) Interface</a><br />
<a href=silcfsm.html><img src=box2.gif border=0 alt=>Finite State Machine Interface</a><br />
<a href=silcthread.html><img src=box2.gif border=0 alt=>Thread Interface</a><br />
<a href=silcmutex.html><img src=box2.gif border=0 alt=>Mutual Exclusion Lock Interface</a><br />
<a href=silccond.html><img src=box2.gif border=0 alt=>Condition Variable Interface</a><br />
<a href=silcatomic.html><img src=box2.gif border=0 alt=>Atomic Operations Interface</a><br />
<a href=silcnet.html><img src=box2.gif border=0 alt=>Network (TCP and UDP) Interface</a><br />
<a href=silcschedule.html><img src=box2.gif border=0 alt=>Scheduler Interface</a><br />
<a href=silcasync.html><img src=box2.gif border=0 alt=>Asynchronous Operation Interface</a><br />
<a href=silcstream.html><img src=box2.gif border=0 alt=>Abstract Stream Interface</a><br />
<a href=silcsocketstream.html><img src=box2.gif border=0 alt=>Socket Stream Interface</a><br />
<a href=silcfdstream.html><img src=box2.gif border=0 alt=>File Descriptor Stream Interface</a><br />
<a href=silcfileutil.html><img src=box2.gif border=0 alt=>File Utility Functions</a><br />
<a href=silcstrutil.html><img src=box2.gif border=0 alt=>String Utility Interface</a><br />
<a href=silcsnprintf.html><img src=box2.gif border=0 alt=>Snprintf Interface</a><br />
<a href=silcutf8.html><img src=box2.gif border=0 alt=>UTF-8 String Interface</a><br />
<a href=silcstringprep.html><img src=box2.gif border=0 alt=>Stringprep Interface</a><br />
<a href=silcutil.html><img src=box2.gif border=0 alt=>Utility Functions</a><br />
<a href=silclist.html><img src=box2.gif border=0 alt=>List Interface</a><br />
<a href=silcdlist.html><img src=box2.gif border=0 alt=>Dynamic List Interface</a><br />
<a href=silcmime.html><img src=box2.gif border=0 alt=>MIME Interface</a><br />
<a href=silctime.html><img src=box2.gif border=0 alt=>Time Utility Functions</a><br />
<a href=silclog.html><img src=box2.gif border=0 alt=>Logging Interface</a><br />
<a href=silcconfig.html><img src=box2.gif border=0 alt=>Config File Interface</a><br />
<a href=silchttplib.html><img src=box.gif border=0 alt=>SILC HTTP Library</a><br />
<a href=silchttpserver.html><img src=box2.gif border=0 alt=>SILC HTTP Server Interface</a><br />
<a href=silchttpphp.html><img src=box2.gif border=0 alt=>SILC HTTP PHP Translator</a><br />
<br />
<b>Resource Links</b>
<br />
<a href="http://silcnet.org"><img src="box.gif" border="0" alt="">SILC Project Website</a><br />
<a href="http://silcnet.org/support/documentation/"><img src="box.gif" border="0" alt="">SILC Protocol Documentation</a><br />
<a href="http://silcnet.org/support/documentation/wp/"><img src="box.gif" border="0" alt="">SILC White Paper</a><br />
<a href="http://silcnet.org/support/faq/"><img src="box.gif" border="0" alt="">SILC FAQs</a><br />
</small>
<br /><br /><br /><br />
</td></tr>
</table>
</td>
<td bgcolor="#cccccc" background="dot.gif">
<img src="space.gif" width="1" height="1" border="0" alt=""></td>
<td width="720" bgcolor="#ffffff">
<img src="space.gif" width="1" height="1" border="0" alt="">
<table cellpadding="2" cellspacing="6" width="100%">
<tr><td valign="top">
<br />
<big><b>Programming Conventions</b></big>
<br /> <br />
The SILC Toolkit has been programmed with a specific programming style that
is consistent across all libraries and interfaces. The programming style
defines for example naming conventions for functions, structures, macros,
enumerations, and other constants.
<br /> <br /> <br />
<b>Naming Conventions</b>
<br /> <br />
<b>Macros and Defines</b>
<br /> <br />
Macros are always capitalised and include underscores to separate words
in the name. All macros start with the "SILC_" prefix. Example:
<br /> <br />
<tt>
#define SILC_PACKET_PADLEN(__packetlen, __blocklen) \<br />
SILC_PACKET_DEFAULT_PADLEN - (__packetlen) % \<br />
((__blocklen) ? (__blocklen) : SILC_PACKET_DEFAULT_PADLEN)
</tt>
<br /> <br />
Also other defines (#define) are always capitalised and include
underscores to separate words in the name. Also all defines start with
the "SILC_" prefix.
<br /> <br />
<b>Structures</b>
<br /> <br />
All structure names begin with "Silc" prefix, and the name is mixed-case,
for example: SilcClientConnection, SilcCommandPayload. Many of the
structures used in SILC are actually private structures, and application
cannot access them directly. In these cases the structures are forward
declared in the public header, and the implementation of the structure
is in the source file. In these case application does not need to know
the contents of the structure, and is usually provided with a helper API
to access the structure when needed.
<br /> <br />
In the most of the cases the forward declaration for a structure is pointer,
for example:
<br /> <br />
<tt>typedef struct SilcClientStruct *SilcClient;</tt>
<br /> <br />
Application should always use the type defined pointer instead of the
actual structure.
<br /> <br />
<b>Functions</b>
<br /> <br />
Function naming uses the common naming convention used in Toolkit. All
functions are always lowercase and they use underscores. The name of
the function always starts with prefix "silc_". The name tells what
the function do. The name of a function is constructed from following parts:
<br /> <br />
<tt>silc_(module)_(function)</tt>
<br /> <br />
The (module) is the library, or interface this functions is part of. For
example: "cipher", "config", "command", "packet", etc.
<br /> <br />
The (function) is the description of the functionality of the function.
For example: "read", "new_id", "register", "find_by_name", etc. Examples:
<br /> <br />
<tt>
silc_server_packet_send<br />
silc_server_packet_send_to_channel<br />
silc_idcache_del_by_id<br />
silc_schedule_init<br />
silc_protocol_excute_final<br />
silc_buffer_alloc
</tt>
<br /> <br />
When function registers something the name of the function generally is
"silc_function_register" and unregistering is done with
"silc_function_unregister". When function allocates something it
is "silc_function_alloc" and when freeing it is
"silc_function_free". Respectively, with init/uninit functions.
<br /> <br />
<b>Enumerations</b>
<br /> <br />
Enumerations are always capitalised and include underscores to separate
words in the name. All enumerations start with the "SILC_" prefix. Also,
usually all enumerations are type defined to a specific name which can
be used as type for the enumeration. Example:
<br /> <br />
<tt>
typedef enum {<br />
SILC_EXAMPLE_ENUM_NONE,<br />
SILC_EXAMPLE_ENUM_LIST,<br />
SILC_EXAMPLE_ENUM_STATUS,<br />
} SilcExampleEnum;
</tt>
<br /> <br />
The naming for the type definition for the enumerations follow the
normal naming convention; the name starts with "Silc" prefix and the
name is mixed-case.
<br /> <br /> <br />
<b>Layout</b>
<br /> <br />
<b>Indentation</b>
<br /> <br />
The indendation in the source code is 2 characters, and tabulators are
not used. Example piece of code:
<br /> <br />
<tt>
void silc_client_free(SilcClient client)<br />
{<br />
if (client) {<br />
if (client->rng)<br />
silc_rng_free(client->rng);<br />
silc_free(client);<br />
}<br />
}
</tt>
<br /> <br />
<b>Placing Braces</b>
<br /> <br />
Generally the braces placing the SILC code follows the K&R style; the
opening of the brace is put to the last on the line, and the closing brace
is on first on its own line, except for functions. Examples:
<br /> <br />
<tt>
if (condition) {<br />
silc_something();<br />
silc_something_more();<br />
}
</tt>
<br /> <br />
<tt>
int silc_client_function()<br />
{<br />
return 0;<br />
}
</tt>
<br /> <br />
<tt>
if (condition) {<br />
something;<br />
silc_something_more();<br />
} else {<br />
something_else;<br />
}
</tt>
<br /> <br />
<tt>
if (condition) {<br />
something;<br />
silc_something_more();<br />
} else if (other_condition) {<br />
something;<br />
silc_something_more();<br />
} else {<br />
something_else;<br />
}
</tt>
<br /> <br />
<b>Header Files</b>
<br /> <br />
Standard anti-nesting method is used in the header files to avoid
multiple inclusion of the header file. Example:
<br /> <br />
<tt>
#ifndef SILCHEADER_H<br />
#define SILCHEADER_H<br />
...<br />
#endif /* SILCHEADER_H */
</tt>
<br /> <br />
All public header files have the "silc" prefix in the filename, for example:
silcclient.h, silcprivate.h, silcutil.h. There are other header files in
the Toolkit as well. Application should not directly include these headers,
however if needed it may access them.
<br /> <br />
Every header file also includes a copyright notice.
<br /><br /><br /><br />
</td></tr>
</table>
</td>
<td bgcolor="#cccccc" background="dot.gif">
<img src="space.gif" width="1" height="1" border="0" alt=""></td>
<td width="180" bgcolor="#f0f0f0">
<img src="space.gif" width="1" height="1" border="0" alt="">
<table width="100%" cellpadding="4" cellspacing="0">
<tr valign="top"><td>
<br />
<font face="Helvetica,Arial,Sans-serif" size="1">
</font>
<br /><br /><br /><br />
</td></tr>
</table>
</td>
</tr>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr bgcolor="#444444"><td><img src="space.gif" width="1" height="1"border="0" alt="" ></td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tr valign="top" bgcolor="#dddddd">
<td><small>Copyright © 2001 - 2007 SILC Project<br />
<a href="http://silcnet.org">SILC Project Website</a></small></td>
<td align="right"><small>
<a href="index.html">SILC Toolkit Reference Manual</a><br />
<a href="toolkit_index.html">Index</a></small></td>
</small></td>
</tr>
</table>
</body>
</html>
|