123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 1. Coding conventions
- 1.1. Details
- Use tor_malloc, tor_free, tor_snprintf, tor_strdup, and tor_gettimeofday
- instead of their generic equivalents. (They always succeed or exit.)
- Use INLINE instead of 'inline', so that we work properly on windows.
- 1.2. Calling and naming conventions
- Whenever possible, functions should return -1 on error and and 0 on
- success.
- For multi-word identifiers, use lowercase words combined with
- underscores. (e.g., "multi_word_identifier"). Use ALL_CAPS for macros and
- constants.
- Typenames should end with "_t".
- Function names should be prefixed with a module name or object name. (In
- general, code to manipulate an object should be a module with the same
- name as the object, so it's hard to tell which convention is used.)
- Functions that do things should have imperative-verb names
- (e.g. buffer_clear, buffer_resize); functions that return booleans should
- have predicate names (e.g. buffer_is_empty, buffer_needs_resizing).
- 1.3. What To Optimize
- Don't optimize anything if it's not in the critical path. Right now,
- the critical path seems to be AES, logging, and the network itself.
- Feel free to do your own profiling to determine otherwise.
- 1.4. Log conventions
- Log convention: use only these four log severities.
- ERR is if something fatal just happened.
- WARN if something bad happened, but we're still running. The
- bad thing is either a bug in the code, an attack or buggy
- protocol/implementation of the remote peer, etc. The operator should
- examine the bad thing and try to correct it.
- NOTICE if it's something the operator will want to know about.
- (No error or warning messages should be expected during normal OR or OP
- operation. I expect most people to run on -l notice eventually. If a
- library function is currently called such that failure always means
- ERR, then the library function should log WARN and let the caller
- log ERR.)
- INFO means something happened (maybe bad, maybe ok), but there's nothing
- you need to (or can) do about it.
- DEBUG is for everything louder than INFO.
- [XXX Proposed convention: every messages of severity INFO or higher should
- either (A) be intelligible to end-users who don't know the Tor source; or
- (B) somehow inform the end-users that they aren't expected to understand
- the message (perhaps with a string like "internal error"). Option (A) is
- to be preferred to option (B). -NM]
- 1.5. Doxygen
- We use the 'doxygen' utility to generate documentation from our source code.
- Here's how to use it:
- 1. Begin every file that should be documented with
- /**
- * \file filename.c
- * \brief Short desccription of the file.
- **/
- (Doxygen will recognize any comment beginning with /** as special.)
- 2. Before any function, structure, #define, or variable you want to
- document, add a comment of the form:
- /** Describe the function's actions in imperative sentences.
- *
- * Use blank lines for paragraph breaks
- * - and
- * - hyphens
- * - for
- * - lists.
- *
- * Write <b>argument_names</b> in boldface.
- *
- * \code
- * place_example_code();
- * between_code_and_endcode_commands();
- * \endcode
- */
- 3. Make sure to escape the characters "<", ">", "\", "%" and "#" as "\<",
- "\>", "\\", "\%", and "\#".
- 4. To document structure members, you can use two forms:
- struct foo {
- /** You can put the comment before an element; */
- int a;
- int b; /**< Or use the less-than symbol to put the comment after the element. */
- };
- 5. To generate documentation from the Tor source code, type:
- $ doxygen -g
- To generate a file called 'Doxyfile'. Edit that file and run 'doxygen' to
- generate the API documentation.
- 6. See the Doxygen manual for more information; this summary just scratches
- the surface.
|