Allow multiple platforms differences in C++ broker, client code
---------------------------------------------------------------
Key: QPID-1338
URL: https://issues.apache.org/jira/browse/QPID-1338
Project: Qpid
Issue Type: Improvement
Components: C++ Broker, C++ Client
Reporter: Steve Huston
Priority: Minor
This is in the context of adding Windows support to the C++ broker and client.
There are currently 3 places where platform differences may arise:
1. Broker code (cpp/src/qpid/broker)
2. Client code (cpp/src/qpid/client)
3. Supporting code which may be common to both (cpp/src/qpid/sys)
The current general approach as I've been advised and encouraged by Andrew
Stitcher, primarily while working on the supporting (cpp/src/qpid/sys) level
code such as the I/O system is to define a common interface in a header file
(such as in cpp/src/qpid/sys) and then implement the class(es) differently in
platform-specific sources which reside in cpp/src/qpid/sys/posix,
cpp/src/qpid/sys/windows. This has been working well.
The other two places, however, cpp/src/qpid/broker and cpp/src/qpid/client,
don't current have platform-specific subdirectories since to this point, all
the platform differences have successfully been pushed down to
cpp/src/qpid/sys. However, adding a platform quite different from Linux has
forced this issue up a level and we now need to come up with a way to handle
platform differences at the broker and client level. This is arising in 2
different types of situations:
1. Areas such as logging classes, where the options and capabilities are not
the same across platforms. For example, syslog doesn't make sense on Windows,
where logging to the event log would. Simply equating the two doesn't work
since there are different related options. Many options are common. Broker
authentication is another area - Windows doesn't provide Cyrus sasl - it uses
other functions.
2. Situations where the features are the same, but in order to bring in
platform different code at the I/O layer, a source file is copied and edited
slightly to bring in a different lower layer. This is the situation in the
client where the Connector.cpp is copied to WinConnector.cpp to bring in the
Windows asynch I/O code.
Up to now the approach has been this:
- When doing something platform-dependent in cpp/src/qpid/sys, add platform
diffs in cpp/src/qpid/sys/<platform>
- When doing something platform-dependent in cpp/src/qpid/log, add platform
diffs in cpp/src/qpid/log/<platform>
- When doing something platform-dependent in cpp/src/qpid/broker, or
cpp/src/qpid/client, use a file name of the form <platform>File.cpp
Would it be more appropriate to create platform-specific directories under
cpp/src/qpid/broker and .../client? Or stick with the current method? I favor
the new directories, but am open to ideas.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.