Commit 0c1c1eb1 authored by Tomek Mrugalski's avatar Tomek Mrugalski 🛰

Merge branch 'trac1531'

Conflicts:
	doc/.gitignore
	src/lib/util/buffer.h
parents b3dd1982 fbe7a931
......@@ -25,13 +25,17 @@ DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
PROJECT_NAME = BIND
PROJECT_NAME = BIND10
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = 10.0.0
# Currently this variable is overwritten (see devel target in Makefile.am)
# If the number of paramters to overwrite increases, we should generate
# Doxyfile (rename it to Doxyfile.in and generate during configure phase)
PROJECT_NUMBER =
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
......@@ -47,7 +51,7 @@ OUTPUT_DIRECTORY = html
# source files, where putting all generated files in the same directory would
# otherwise cause performance problems for the file system.
CREATE_SUBDIRS = NO
CREATE_SUBDIRS = YES
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
......@@ -574,7 +578,8 @@ INPUT = ../src/lib/exceptions ../src/lib/cc \
../src/lib/log/compiler ../src/lib/asiolink/ ../src/lib/nsas \
../src/lib/testutils ../src/lib/cache ../src/lib/server_common/ \
../src/bin/sockcreator/ ../src/lib/util/ ../src/lib/util/io/ \
../src/lib/resolve ../src/lib/acl ../src/bin/dhcp6 ../src/lib/dhcp
../src/lib/resolve ../src/lib/acl ../src/bin/dhcp6 ../src/lib/dhcp \
../src/bin/dhcp4 devel
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
......@@ -591,7 +596,7 @@ INPUT_ENCODING = UTF-8
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
FILE_PATTERNS =
FILE_PATTERNS = *.c *.cc *.h *.hpp *.dox
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
......@@ -651,7 +656,7 @@ EXAMPLE_RECURSIVE = NO
# directories that contain image that are included in the documentation (see
# the \image command).
IMAGE_PATH =
IMAGE_PATH = ../doc/images
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
......@@ -773,7 +778,7 @@ GENERATE_HTML = YES
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `html' will be used as the default path.
HTML_OUTPUT = cpp
HTML_OUTPUT = ../html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
......@@ -954,7 +959,7 @@ ENUM_VALUES_PER_LINE = 4
# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
# Windows users are probably better off using the HTML help feature.
GENERATE_TREEVIEW = NO
GENERATE_TREEVIEW = YES
# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
# and Class Hierarchy pages using a tree view instead of an ordered list.
......@@ -965,7 +970,7 @@ USE_INLINE_TREES = NO
# used to set the initial width (in pixels) of the frame in which the tree
# is shown.
TREEVIEW_WIDTH = 250
TREEVIEW_WIDTH = 180
# Use this tag to change the font size of Latex formulas included
# as images in the HTML documentation. The default is 10. Note that
......
SUBDIRS = guide
EXTRA_DIST = version.ent.in
devel:
mkdir -p html
(cat Doxyfile; echo PROJECT_NUMBER=$(PACKAGE_VERSION)) | doxygen - > html/doxygen.log 2> html/doxygen-error.log
echo `grep -i ": warning:" html/doxygen-error.log | wc -l` warnings/errors detected.
clean:
rm -rf html
# That's a bit of a hack, but we are making sure that devel target
# is always valid. The alternative is to make devel depend on all
# *.cc *.h files in the whole tree.
.PHONY: devel
/**
*
* @page dns BIND10 DNS
*
* @section dns-auth b10-auth
*
* @todo: Describe b10-auth here.
*
* @section b10-cfgmgr b10-cfgmgr Overview
*
* @todo: Descibe b10-cfgmgr here.
*
*
*/
/**
* @page dhcpv4 DHCPv4 Server Component
*
* BIND10 offers DHCPv4 server implementation. It is implemented as
* b10-dhcp4 component. Its primary code is located in
* isc::dhcp::Dhcpv4Srv class. It uses \ref libdhcp extensively,
* especially isc::dhcp::Pkt4, isc::dhcp::Option and
* isc::dhcp::IfaceMgr classes. Currently this code offers skeleton
* functionality, i.e. it is able to receive and process incoming
* requests and trasmit responses. However, it does not have database
* management, so it returns only one, hardcoded lease to whoever asks
* for it.
*
* DHCPv4 server component does not support direct traffic (relayed
* only), as support for transmission to hosts without IPv4 address
* assigned is not implemented in IfaceMgr yet.
*
* DHCPv4 server component does not listen to BIND10 message queue.
*
* DHCPv4 server component does not use BIND10 logging yet.
*
* DHCPv4 server component is not integrated with boss yet.
*
* @page dhcpv6 DHCPv6 Server Component
*
* BIND10 offers DHCPv6 server implementation. It is implemented as
* b10-dhcp6 component. Its primary code is located in
* isc::dhcp::Dhcpv6Srv class. It uses \ref libdhcp extensively,
* especially lib::dhcp::Pkt6, isc::dhcp::Option and
* isc::dhcp::IfaceMgr classes. Currently this code offers skeleton
* functionality, i.e. it is able to receive and process incoming
* requests and trasmit responses. However, it does not have database
* management, so it returns only one, hardcoded lease to whoever asks
* for it.
*
* DHCPv6 server component does not support relayed traffic yet, as
* support for relay decapsulation is not implemented yet.
*
* DHCPv6 server component does not listen to BIND10 message queue.
*
* DHCPv6 server component does not use BIND10 logging yet.
*
* DHCPv6 server component is not integrated with boss yet.
*
* @page libdhcp libdhcp++ library
*
* @section libdhcpIntro Libdhcp++ Introduction
*
* libdhcp++ is an all-purpose DHCP-manipulation library, written in
* C++. It offers packet parsing and assembly, DHCPv4 and DHCPv6
* options parsing and ssembly, interface detection (currently on
* Linux systems only) and socket operations. Following classes are
* implemented:
*
* - isc::dhcp::Pkt4 - represents DHCPv4 packet.
* - isc::dhcp::Pkt6 - represents DHCPv6 packet.
*
* There are two pointer types defined: Pkt4Ptr and Pkt6Ptr. They are
* smart pointer and are using boost::shared_ptr. There are not const
* versions defined, as we assume that hooks can modify any aspect of
* the packet at almost any stage of processing.
*
* Both packets use collection of Option objects to represent DHCPv4
* and DHCPv6 options. The base class -- Option -- can be used to
* represent generic option that contains collection of
* bytes. Depending on if the option is instantiated as v4 or v6
* option, it will adjust its header (DHCPv4 options use 1 octet for
* type and 1 octet for length, while DHCPv6 options use 2 bytes for
* each).
*
* There are many specialized classes that are intended to handle options with
* specific content:
* - isc::dhcp::Option4AddrLst -- DHCPv4 option, contains one or more IPv4 addresses;
* - isc::dhcp::Option6AddrLst -- DHCPv6 option, contains one or more IPv6 addresses;
* - isc::dhcp::Option6IAAddr -- DHCPv6 option, represents IAADDR_OPTION (an option that
* contains IPv6 address with extra parameters);
* - isc::dhcp::Option6IA -- DHCPv6 option used to store IA_NA and its suboptions.
*
* All options can store sub-options (i.e. options that are stored within option
* rather than in a message directly). This functionality is commonly used in
* DHCPv6, but is rarely used in DHCPv4. isc::dhcp::Option::addOption(),
* isc::dhcp::Option::delOption(), isc::dhcp::Option::getOption() can be used
* for that purpose.
*
* @section lidhcpIfaceMgr Interface Manager
*
* Interface Manager (or IfaceMgr) is an abstraction layer about low-level
* network operations. In particlar, it provides information about existing
* network interfaces See isc::dhcp::IfaceMgr::Iface class and
* isc::dhcp::IfaceMgr::detectIfaces() and isc::dhcp::IfaceMgr::getIface().
*
* Currently there is interface detection is implemented in Linux only. There
* are plans to implement such support for other OSes, but they remain low
* priority for now.
*
* Generic parts of the code are isc::dhcp::IfaceMgr class in
* src/lib/dhcp/iface_mgr.cc file. OS-specific code is located in separate
* files, e.g. iface_mgr_linux.cc. Such separation should be maintained when
* additional code will be developed.
*
* For systems that interface detection is not supported on, there is a stub
* mechanism implemented. It assumes that interface name is read from a text
* file. This is a temporary solution and will be removed as soon as proper
* interface detection is implemented. It is not going to be developed further.
* To use this feature, store interfaces.txt file. It uses a simple syntax.
* Each line represents an interface name, followed by IPv4 or IPv6 address
* that follows it. This is usually link-local IPv6 address that the server
* should bind to. In theory this mechanism also supports IPv4, but it was
* never tested. The code currently supports only a single interface defined
* that way.
*
* Another useful methods are dedicated to transmission
* (isc::dhcp::IfaceMgr::send(), 2 overloads) and reception
* (isc::dhcp::IfaceMgr::receive4() and isc::dhcp::IfaceMgr::receive6()).
* Note that receive4() and receive6() methods may return NULL, e.g.
* when timeout is reached or if dhcp daemon receives a signal.
*/
\ No newline at end of file
/**
*
* @mainpage BIND10 Developer's Guide
*
* Welcome to BIND10 Developer's Guide. This documentation is addressed
* at existing and prospecting developers and programmers, who would like
* to gain insight into internal workings of BIND 10. It could also be useful
* for existing and prospective contributors.
*
* If you are a user or system administrator, rather than software engineer,
* you should read <a href="http://bind10.isc.org/docs/bind10-guide.html">BIND10
* Guide (Administrator Reference for BIND10)</a> instead.
*
* Regardless of your field of expertise, you are encouraged to visit
* <a href="http://bind10.isc.org/">BIND10 webpage (http://bind10.isc.org)</a>
*
* @section DNS
* - @subpage DataScrubbing
*
* @section DHCP
* - @subpage dhcpv4
* - @subpage dhcpv6
* - @subpage libdhcp
*
* @section misc Miscellaneous topics
* - @subpage LoggingApi
* - @subpage LoggingApiOverview
* - @subpage LoggingApiLoggerNames
* - @subpage LoggingApiLoggingMessages
* - @subpage SocketSessionUtility
* - <a href="./doxygen-error.log">Documentation warnings and errors</a>
*
* @todo: Move this logo to the right (and possibly up). Not sure what
* is the best way to do it in Doxygen, without using CSS hacks.
* @image html isc-logo.png
*/
\ No newline at end of file
......@@ -277,7 +277,7 @@ public:
/// in-memory data source.
///
/// \param rrclass The RR class of the in-memory data source to be set.
/// \param memory_datasrc A (shared) pointer to \c InMemoryClient to be set.
/// \param memory_client A (shared) pointer to \c InMemoryClient to be set.
void setInMemoryClient(const isc::dns::RRClass& rrclass,
InMemoryClientPtr memory_client);
......
......@@ -68,7 +68,7 @@ protected:
/// should be served. In particular, a lease is selected and sent
/// as an offer to a client if it should be served.
///
/// @param solicit DISCOVER message received from client
/// @param discover DISCOVER message received from client
///
/// @return OFFER message or NULL
boost::shared_ptr<Pkt4>
......@@ -103,7 +103,7 @@ protected:
/// @brief Stub function that will handle incoming INFORM messages.
///
/// @param infRequest message received from client
/// @param inform message received from client
boost::shared_ptr<Pkt4> processInform(boost::shared_ptr<Pkt4>& inform);
/// @brief Copies default parameters from client's to server's message
......
......@@ -37,7 +37,7 @@ namespace asiolink {
// XXX: we cannot simply construct the address in the initialization list,
// because we'd like to throw our own exception on failure.
IOAddress::IOAddress(const string& address_str) {
IOAddress::IOAddress(const std::string& address_str) {
asio::error_code err;
asio_address_ = ip::address::from_string(address_str, err);
if (err) {
......@@ -46,7 +46,7 @@ IOAddress::IOAddress(const string& address_str) {
}
}
IOAddress::IOAddress(const ip::address& asio_address) :
IOAddress::IOAddress(const asio::ip::address& asio_address) :
asio_address_(asio_address)
{}
......
......@@ -846,7 +846,7 @@ public:
///
/// \return bool true if data is returned, false if not.
///
/// \exceptions any Varied
/// \exception any Varied
bool getNext(std::string (&data)[COLUMN_COUNT]) {
if (last_status_ != SQLITE_DONE) {
......
......@@ -68,7 +68,9 @@ public:
/// in options container.
///
/// @param buf Buffer to be parsed.
/// @param buf_len length of the buffer passed in buf.
/// @param offset Specifies offset for the first option.
/// @param parse_len length of buffer to be parsed.
/// @param options Reference to option container. Options will be
/// put here.
///
......@@ -77,20 +79,18 @@ public:
static unsigned int
unpackOptions6(const boost::shared_array<uint8_t> buf, unsigned int buf_len,
unsigned int offset, unsigned int parse_len,
isc::dhcp::Option::OptionCollection& options_);
isc::dhcp::Option::OptionCollection& options);
///
/// Registers factory method that produces options of specific option types.
///
/// @param u universe of the option (V4 or V6)
/// @param opt_type option-type
/// @param type option-type
/// @param factory function pointer
///
/// @return true, if registration was successful, false otherwise
///
static bool
OptionFactoryRegister(Option::Universe u,
unsigned short type,
uint16_t type,
Option::Factory * factory);
protected:
// pointers to factories that produce DHCPv6 options
......
......@@ -25,9 +25,11 @@
#include "dhcp/libdhcp++.h"
using namespace std;
using namespace isc::dhcp;
using namespace isc::util;
namespace isc {
namespace dhcp {
Option::Option(Universe u, unsigned short type)
:universe_(u), type_(type) {
......@@ -54,8 +56,8 @@ Option::Option(Universe u, unsigned short type, std::vector<uint8_t>& data)
check();
}
Option::Option(Universe u, uint16_t type, vector<uint8_t>::const_iterator first,
vector<uint8_t>::const_iterator last)
Option::Option(Universe u, uint16_t type, std::vector<uint8_t>::const_iterator first,
std::vector<uint8_t>::const_iterator last)
:universe_(u), type_(type), data_(std::vector<uint8_t>(first,last)) {
check();
}
......@@ -344,3 +346,6 @@ void Option::setUint32(uint32_t value) {
Option::~Option() {
}
} // end of isc::dhcp namespace
} // end of isc namespace
......@@ -300,6 +300,7 @@ protected:
/// @param buf buffer that contains raw buffer to parse (on-wire format)
/// @param buf_len buffer length (used for buffer overflow checks)
/// @param offset offset from start of the buf buffer
/// @param parse_len number of bytes to be parsed.
///
/// @return offset to the next byte after last parsed byte
virtual unsigned int
......@@ -313,6 +314,7 @@ protected:
/// @param buf buffer that contains raw buffer to parse (on-wire format)
/// @param buf_len buffer length (used for buffer overflow checks)
/// @param offset offset from start of the buf buffer
/// @param parse_len number of bytes to be parsed.
///
/// @return offset to the next byte after last parsed byte
virtual unsigned int
......
......@@ -23,10 +23,12 @@
#include <dhcp/option4_addrlst.h>
using namespace std;
using namespace isc::dhcp;
using namespace isc::util;
using namespace isc::asiolink;
namespace isc {
namespace dhcp {
Option4AddrLst::Option4AddrLst(uint8_t type)
:Option(V4, type) {
}
......@@ -39,8 +41,8 @@ Option4AddrLst::Option4AddrLst(uint8_t type, const AddressContainer& addrs)
Option4AddrLst::Option4AddrLst(uint8_t type,
vector<uint8_t>::const_iterator first,
vector<uint8_t>::const_iterator last)
std::vector<uint8_t>::const_iterator first,
std::vector<uint8_t>::const_iterator last)
:Option(V4, type) {
if ( (distance(first, last) % V4ADDRESS_LEN) ) {
isc_throw(OutOfRange, "DHCPv4 Option4AddrLst " << type_
......@@ -133,3 +135,6 @@ std::string Option4AddrLst::toText(int indent /* =0 */ ) {
return tmp.str();
}
} // end of isc::dhcp namespace
} // end of isc namespace
......@@ -24,14 +24,16 @@
using namespace std;
using namespace isc;
using namespace isc::dhcp;
using namespace isc::util;
Option6IA::Option6IA(unsigned short type, unsigned int iaid)
namespace isc {
namespace dhcp {
Option6IA::Option6IA(uint16_t type, uint32_t iaid)
:Option(Option::V6, type), iaid_(iaid) {
}
Option6IA::Option6IA(unsigned short type,
Option6IA::Option6IA(uint16_t type,
const boost::shared_array<uint8_t>& buf,
unsigned int buf_len,
unsigned int offset,
......@@ -134,3 +136,6 @@ uint16_t Option6IA::len() {
}
return (length);
}
} // end of isc::dhcp namespace
} // end of isc namespace
......@@ -31,7 +31,7 @@ public:
///
/// @param type option type (usually 4 for IA_NA, 25 for IA_PD)
/// @param iaid identity association identifier (id of IA)
Option6IA(uint16_t type, unsigned int iaid);
Option6IA(uint16_t type, uint32_t iaid);
/// @brief ctor, used for received options
///
......
......@@ -45,6 +45,7 @@ public:
///
/// @param type option type
/// @param buf pointer to a buffer
/// @param buf_len length of the buffer passed in buf
/// @param offset offset to first data byte in that buffer
/// @param len data length of this option
Option6IAAddr(unsigned short type, boost::shared_array<uint8_t> buf,
......
......@@ -240,6 +240,7 @@ public:
/// Sets sname field
///
/// @param sname value to be set
/// @param snameLen length of the buffer passed in sname
void
setSname(const uint8_t* sname, size_t snameLen = MAX_SNAME_LEN);
......@@ -255,6 +256,7 @@ public:
/// Sets file field
///
/// @param file value to be set
/// @param fileLen length of the buffer passed in file
void
setFile(const uint8_t* file, size_t fileLen = MAX_FILE_LEN);
......@@ -266,7 +268,7 @@ public:
///
/// Note: macAddr must be a buffer of at least hlen bytes.
///
/// @param hwType hardware type (will be sent in htype field)
/// @param hType hardware type (will be sent in htype field)
/// @param hlen hardware length (will be sent in hlen field)
/// @param macAddr pointer to hardware address
void setHWAddr(uint8_t hType, uint8_t hlen,
......@@ -350,7 +352,7 @@ public:
/// @brief Sets remote address.
///
/// @params remote specifies remote address
/// @param remote specifies remote address
void setRemoteAddr(const isc::asiolink::IOAddress& remote) {
remote_addr_ = remote;
}
......@@ -364,7 +366,7 @@ public:
/// @brief Sets local address.
///
/// @params local specifies local address
/// @param local specifies local address
void setLocalAddr(const isc::asiolink::IOAddress& local) {
local_addr_ = local;
}
......@@ -378,7 +380,7 @@ public:
/// @brief Sets local port.
///
/// @params local specifies local port
/// @param local specifies local port
void setLocalPort(uint16_t local) { local_port_ = local; }
/// @brief Returns local port.
......@@ -388,7 +390,7 @@ public:
/// @brief Sets remote port.
///
/// @params remote specifies remote port
/// @param remote specifies remote port
void setRemotePort(uint16_t remote) { remote_port_ = remote; }
/// @brief Returns remote port.
......
......@@ -24,6 +24,7 @@ using namespace std;
using namespace isc::dhcp;
namespace isc {
namespace dhcp {
Pkt6::Pkt6(unsigned int dataLen, DHCPv6Proto proto /* = UDP */)
:data_len_(dataLen),
......@@ -43,14 +44,14 @@ Pkt6::Pkt6(unsigned int dataLen, DHCPv6Proto proto /* = UDP */)
}
Pkt6::Pkt6(uint8_t msg_type,
unsigned int transid,
uint32_t transid,
DHCPv6Proto proto /*= UDP*/)
:local_addr_("::"),
remote_addr_("::"),
iface_(""),
ifindex_(-1),
local_port_(-1),
remote_port_(-1),
local_port_(0),
remote_port_(0),
proto_(proto),
msg_type_(msg_type),
transid_(transid) {
......@@ -206,7 +207,7 @@ Pkt6::toText() {
}
boost::shared_ptr<isc::dhcp::Option>
Pkt6::getOption(unsigned short opt_type) {
Pkt6::getOption(uint16_t opt_type) {
isc::dhcp::Option::OptionCollection::const_iterator x = options_.find(opt_type);
if (x!=options_.end()) {
return (*x).second;
......@@ -220,7 +221,7 @@ Pkt6::addOption(boost::shared_ptr<Option> opt) {
}
bool
Pkt6::delOption(unsigned short type) {
Pkt6::delOption(uint16_t type) {
isc::dhcp::Option::OptionCollection::iterator x = options_.find(type);
if (x!=options_.end()) {
options_.erase(x);
......@@ -229,4 +230,5 @@ Pkt6::delOption(unsigned short type) {
return (false); // can't find option to be deleted
}
};
} // end of isc::dhcp namespace
} // end of isc namespace
......@@ -41,8 +41,8 @@ public:
/// @param msg_type type of message (SOLICIT=1, ADVERTISE=2, ...)
/// @param transid transaction-id
/// @param proto protocol (TCP or UDP)
Pkt6(unsigned char msg_type,
unsigned int transid,
Pkt6(uint8_t msg_type,
uint32_t transid,
DHCPv6Proto proto = UDP);
/// Constructor, used in message transmission
......@@ -106,18 +106,18 @@ public:
/// Returns message type (e.g. 1 = SOLICIT)
///
/// @return message type
unsigned char
uint8_t
getType() { return (msg_type_); }
/// Sets message type (e.g. 1 = SOLICIT)
///
/// @param type message type to be set
void setType(unsigned char type) { msg_type_=type; };
void setType(uint8_t type) { msg_type_=type; };
/// Returns value of transaction-id field
///
/// @return transaction-id
unsigned int getTransid() { return (transid_); };
uint32_t getTransid() { return (transid_); };
/// Adds an option to this packet.
///
......@@ -130,11 +130,11 @@ public:
/// instances of the same option are allowed (and frequently used).
/// See getOptions().
///
/// @param opt_type option type we are looking for
/// @param type option type we are looking for
///
/// @return pointer to found option (or NULL)
boost::shared_ptr<isc::dhcp::Option>
getOption(unsigned short type);
getOption(uint16_t type);
/// Attempts to delete first suboption of requested type
///
......@@ -142,7 +142,7 @@ public:
///
/// @return true if option was deleted, false if no such option existed
bool
delOption(unsigned short type);
delOption(uint16_t type);
/// TODO need getter/setter wrappers
/// and hide following fields as protected
......@@ -172,10 +172,10 @@ public:
int ifindex_;
/// local TDP or UDP port
int local_port_;
uint16_t local_port_;
/// remote TCP or UDP port
int remote_port_;
uint16_t remote_port_;
/// TODO Need to implement getOptions() as well
......@@ -221,10 +221,10 @@ protected:
DHCPv6Proto proto_;
/// DHCPv6 message type
int msg_type_;
uint8_t msg_type_;
/// DHCPv6 transaction-id
unsigned int transid_;
uint32_t transid_;
}; // Pkt6 class
} // isc::dhcp namespace
......
......@@ -247,7 +247,7 @@ writeClosingNamespace(ostream& output, const vector<string>& ns) {
}
}
/// \breif Write python file
/// \brief Write python file
///
/// Writes the python file containing the symbol definitions as module level
/// constants. These are objects which register themself at creation time,
......@@ -303,8 +303,8 @@ writePythonFile(const string& file, MessageDictionary& dictionary,
///
/// \param file Name of the message file. The header file is written to a
/// file of the same name but with a .h suffix.
/// \param ns Namespace in which the definitions are to be placed. An empty
/// string indicates no namespace.
/// \param ns_components Namespace in which the definitions are to be placed.
/// An empty string indicates no namespace.
/// \param dictionary Dictionary holding the message definitions.
/// \param output_directory if not null NULL, output files are written
/// to the given directory. If NULL, they are written to the current
......@@ -408,8 +408,8 @@ replaceNonAlphaNum(char c) {
///
/// \param file Name of the message file. The header file is written to a
/// file of the same name but with a .h suffix.
/// \param ns Namespace in which the definitions are to be placed. An empty
/// string indicates no namespace.
/// \param ns_components Namespace in which the definitions are to be placed.
/// An empty string indicates no namespace.
/// \param dictionary Dictionary holding the message definitions.
/// \param output_directory if not null NULL, output files are written
/// to the given directory. If NULL, they are written to the current
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment