Skip to content
Snippets Groups Projects
Commit 45491422 authored by Luigi Rizzo's avatar Luigi Rizzo
Browse files

new info on the management of headers


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89526 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent cda3df64
No related branches found
No related tags found
No related merge requests found
== Asterisk Patch/Coding Guidelines ==
--------------------------------------
--------------------------------------
== Asterisk Coding Guidelines ==
--------------------------------------
This document gives some basic indication on how the asterisk code
is structured. The first part covers the structure and style of
individual files. The second part (TO BE COMPLETED) covers the
overall code structure and the build architecture.
Please read it to the end to understand in detail how the asterisk
code is organized, and to know how to extend asterisk or contribute
new code.
We are looking forward to your contributions to Asterisk - the
Open Source PBX! As Asterisk is a large and in some parts very
......@@ -24,6 +34,10 @@ can list them in the "svn diff" command:
/usr/src/asterisk$ svn diff somefile.c someotherfile.c > mypatch
-----------------------------------
== PART ONE: CODING GUIDELINES ==
-----------------------------------
* General rules
---------------
......@@ -45,6 +59,62 @@ can list them in the "svn diff" command:
- Use spaces instead of tabs when aligning in-line comments or #defines (this makes
your comments aligned even if the code is viewed with another tabsize)
* File structure and header inclusion
-------------------------------------
Every C source file should start with a proper copyright
and a brief description of the content of the file.
Following that, you should immediately put the following lines:
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
"asterisk.h" resolves OS and compiler dependencies for the basic
set of unix functions (data types, system calls, basic I/O
libraries) and the basic Asterisk APIs.
ASTERISK_FILE_VERSION() stores in the executable information
about the file.
Next, you should #include extra headers according to the functionality
that your file uses or implements. For each group of functions that
you use there is a common header, which covers OS header dependencies
and defines the 'external' API of those functions (the equivalent
of 'public' members of a class). As an example:
asterisk/module.h
if you are implementing a module, this should be included in one
of the files that are linked with the module.
asterisk/fileio.h
access to extra file I/O functions (stat, fstat, playing with
directories etc)
asterisk/network.h
basic network I/O - all of the socket library, select/poll,
and asterisk-specific (usually either thread-safe or reentrant
or both) functions to play with socket addresses.
asterisk/app.h
parsing of application arguments
asterisk/channel.h
struct ast_channel and functions to manipulate it
For more information look at the headers in include/asterisk/ .
These files are usually self-sufficient, i.e. they recursively #include
all the extra headers they need.
The equivalent of 'private' members of a class are either directly in
the C source file, or in files named asterisk/mod_*.h to make it clear
that they are not for inclusion by generic code.
Keep the number of header files small by not including them unnecessarily.
Don't cut&paste list of header files from other sources, but only include
those you really need. Apart from obvious cases (e.g. module.h which
is almost always necessary) write a short comment next to each #include to
explain why you need it.
* Declaration of functions and variables
----------------------------------------
......@@ -554,6 +624,13 @@ The old style, with one event named "ThisEventOn" and another named
Check manager.txt for more information on manager and existing
headers. Please update this file if you add new headers.
------------------------------------
== PART TWO: BUILD ARCHITECTURE ==
------------------------------------
TO BE COMPLETED
-----------------------------------------------
Welcome to the Asterisk development community!
Meet you on the asterisk-dev mailing list.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment