+1 - make it so!

On Fri, 2016-11-11 at 11:46 -0500, Andrew Stitcher wrote:
> A couple of weeks back Justin mentioned forward plans for proton. I
> want to let everyone know what I've been working on recently to split
> up the proton-c library and hopefully make its source tree layout a
> bit
> easier to follow.
> 
> The JIRAs for this work are:
> https://issues.apache.org/jira/browse/PROTON-1350
> https://issues.apache.org/jira/browse/PROTON-1351
> 
> The github PR is:
> https://github.com/apache/qpid-proton/pull/87
> 
> I'll describe the final results of the rearrangement/split as the
> best
> way to approach this - I'll note the noticeable API changes at the
> end.
> 
> The re-organization introduces a core proton library called qpid-
> proton-core (libqpid-proton-core.so). This contains only the protocol
> processing engine of proton-c. These are the APIs included in the
> following headers (with a few supporting headers).
> 
> One of the defining feature of this library is that it is totally
> portable with no OS dependencies at all. There are some compiler
> (standard library) dependencies mostly due to MS Visual Studio not
> supporting C99.
> 
> - proton/engine.h
> -- Convenience include for
> --- proton/condition.h
> --- proton/connection.h
> --- proton/session.h
> --- proton/terminus.h
> --- proton/link.h
> --- proton/delivery.h
> --- proton/event.h
> --- proton/transport.h
> - proton/condition.h
> -- pn_condition_t
> - proton/connection.h
> -- pn_state_t
> -- pn_connection_t
> - proton/delivery.h
> -- pn_delivery_t
> -- pn_delivery_tag_t
> - proton/event.h
> -- pn_event_t
> -- pn_event_type_t
> -- pn_collector_t
> - proton/link.h
> -- pn_link_t
> -- pn_snd_settle_mode_t
> -- pn_rcv_settle_mode_t
> - proton/session.h
> -- pn_session_t
> - proton/transport.h
> -- pn_transport_t
> -- pn_trace_t
> -- pn_tracer_t
> 
> - proton/codec.h
> -- pn_type_t
> -- pn_atom_t
> -- pn_data_t
> - proton/disposition.h
> -- pn_disposition_t
> - proton/error.h
> -- pn_error_t
> - proton/message.h
> -- pn_message_t
> - proton/sasl.h
> -- pn_sasl_t
> -- pn_sasl_outcome_t
> - proton/ssl.h
> -- pn_ssl_domain_t
> -- pn_ssl_t
> -- pn_ssl_mode_t
> -- pn_ssl_resume_status_t
> -- pn_ssl_verify_mode_t
> -- pn_ssl_cert_subject_subfield (! name not consistent with others)
> -- pn_ssl_hash_alg (! name not consistent with others)
> - proton/terminus.h
> -- pn_terminus_t
> -- pn_terminus_type_t
> -- pn_durability_t
> -- pn_expiry_policy_t
> -- pn_distribution_mode_t
> 
> Supporting headers:
> - proton/types.h
> -- Declares nearly all the types used in the APIs. It
> is
>    included nearly everywhere to get these declarations.
> -- Maybe it
> should actually declare *all* of them.
> - proton/type_compat.h
> -- Used to
> portably get stdbool/stdint and ssize_t types
> - proton/import_export.h
> --
> Used to portably handle API symbol export and hiding.
> 
> - proton/object.h
> -- This is not really part of the user API, and may only be needed
> for
>    reactor based bindings.
> -- [pn_object_t] (actually void*)
> -- pn_handle_t
> -- pn_shandle_t
> -- pn_class_t
> -- pn_string_t
> -- pn_list_t
> -- pn_map_t
> -- pn_hash_t
> -- pn_iterator_t
> -- pn_record_t
> - proton/cid.h
> -- This is also part of the object system and again may only be
> needed
>    for reactor based bindings.
> -- pn_cid_t
> 
> I'm not sure this is really a good core API at all. At least Proton
> logging should be revisited and perhaps redesigned.
> - proton/log.h
> -- pn_logger_t
> 
> The next set of APIs are "extras" - they are not included in the core
> and are purely provided as conveniences. These may be bundled into
> their own library qpid-proton-extra (libqpid-proton-extra.so)
> - include/proton/parser.h
> -- This contains a parser from a textual format to the proton-c
>    pn_data_t type.
> - include/proton/url.h
> -- This contains a parser that can dissect URLs used for specifying
>    connection and messaging addresses.
> 
> The remaining part of the library is regarded as legacy and stays in
> the existing qpid-proton library.
> - include/proton/handlers.h
> - include/proton/messenger.h
> - include/proton/reactor.h
> - include/proton/selectable.h
> 
> These headers are for the messenger and reactor APIs.
> 
> The existing proton library (qpid-proton/libqpid-proton.so) still
> exists and still has the same content as before (Except for some APIs
> that were really internal and have now been hidden away - see the
> section at the end).
> 
> The intention is that moving forward all the language bindings to
> proton-c will be modified to only use the core APIs, with perhaps the
> extra library used if necessary. This is already the case for the go
> binding which has already been modified to only use core APIs. The
> C++ binding is fairly close to only using the core APIs, but will
> probably require the URL parser from the extras library.
> 
> Other bindings will follow.
> 
> The proton-c source tree organization has been simplified somewhat
> and rearranged so that the different API sections described above map
> directly to source tree directories.
> 
> [Everything here is relative to the proton-c/src in the full source
> distribution]
> 
> Core library: All source in directories
> - core - The actual proton-c engine
> - compiler - Any compiler specific core (currently there is only MSVC
>   code here)
> - sasl - The code supporting the SASL protocol layer. This code may
> not
>   all be OS independent as it is used to interface an external
> library
>   to proton. The default implementation of SASL is pure ANSI C.
> 
> - ssl - The code supporting the ssl protocol layer. Again this code
> is
>   not entirely OS independent as the optional schannel support is
>   Windows only.
> 
> Extra (potential) library: All source in directory
> - extra
> 
> The legacy APIs are in the remaining directories:
> - handlers
> - messenger
> - platform - This contains OS and compiler specific code for the
> legacy
>   APIs.
> - reactor
> - reactor/io - This contains io implementations for the reactor and
>   messenger APIs.
> 
> For the moment the installed header files have not been rearranged in
> the source tree, although it may be a good idea for some future work
> to separate them by category.
> 
> These changes shouldn't be noticeable to anyone using the current
> qpid-proton library is it is more-or-less unchanged. The "more-or-
> less" has a little detail though: I have moved a few previously
> exposed APIs to be internal only - they are not used by any example
> and logically aren't needed. but it is possible that someone
> somewhere is using them.
> 
> These are:
> proton/io.h
> proton/selector.h
> proton/scanner.h
> 
> This has turned out to be far longer than I intended - I hope it is
> clear enough. Comments, criticisms etc. all welcome.
> 
> Andrew
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> For additional commands, e-mail: users-h...@qpid.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
For additional commands, e-mail: users-h...@qpid.apache.org

Reply via email to