cpp-netlib Introduction














































cpp-netlib Introduction



CPP-NETLIB INTRODUCTION

cpp-netlib is a collection of network-related implementations which is geared towards providing a strong cross-platform networking library. Library was previously intended for Boost but not having gone through formal review.The library is based on Boost.It is dependent on Boost for name, namespace, and directory structure although the project states that Boost acceptance is no longer a goal. Some of its features can be cited as the advantages.

Why use this library though?

cpp-netlib has various features which offers the following implementations:-

  • Common Message Type -- A generic message type which can be used to encapsulate and store message-related information, used by all network implementations as the primary means of data exchange.
  • Network protocol message parsers -- A collection of parsers which generate message objects from strings.
  • Adapters and Wrappers -- A collection of Adapters and wrappers aimed towards making the message type STL friendly.
  • Network protocol client and server implementations -- A collection of network protocol implementations that include embeddable client and server types.


How it works?

As of the branch previous linked, it uses these declarations:

template <class Tag>

struct basic_message {

 public:

  typedef Tag tag;

 

  typedef typename headers_container<Tag>::type headers_container_type;

  typedef typename headers_container_type::value_type header_type;

  typedef typename string<Tag>::type string_type;

 

  headers_container_type& headers() { return headers_; }

  headers_container_type const& headers() const { return headers_; }

 

  string_type& body() { return body_; }

  string_type const& body() const { return body_; }

 

  string_type& source() { return source_; }

  string_type const& source() const { return source_; }

 

  string_type& destination() { return destination_; }

  string_type const& destination() const { return destination_; }

 

 private:

  friend struct detail::directive_base<Tag>;

  friend struct detail::wrapper_base<Tag, basic_message<Tag> >;

 

  mutable headers_container_type headers_;

  mutable string_type body_;

  mutable string_type source_;

  mutable string_type destination_;

};

This container is the base class template used to represent HTTP messages. It uses a "tag" type style specializations for a variety of trait classes, allowing for customization of the various parts of the message. For example, a user specializes headers_container<T> to determine what container type holds the header fields.

But there are few disadvantages of this library:

Disadvantages:

There are some problems with the container declaration:

  • The header and body containers may only be default-constructed.
  • There is no way to defer the commitment of the type for body_ to after the headers are read in.
  • The message model includes a "source" and "destination." This is extraneous metadata associated with the connection which is not part of the HTTP protocol specification and belongs elsewhere.
  • The specialized trait classes generate a proliferation of small additional framework types. To specialize traits, users need to exit their namespace and intrude into the boost::network::http namespace. The way the traits are used in the library limits the usefulness of the traits to trivial purpose.
  • The `string<Tag> customization point constrains user defined body types to few possible strategies. There is no way to represent an HTTP message body as a filename with accompanying algorithms to store or retrieve data from the file system.
How to get started?

The latest official release from the project's official website can be downloaded viahttp://cpp-netlib.org/

The previous all previous stable versions of cpp-netlib can be downloaded from this url:

http://github.com/cpp-netlib/cpp-netlib/downloads

For downloading a development version:

The cpp-netlib uses Git for source control, so to use any development versions Git must be installed on your system.

Getting Boost:

cpp_netlib depends on Boost. It should work for any version of Boost above 1.45.0. If Boost is not installed on your system, the latest package can be found on the Boost website



More Articles of ayush srivastava:

Name Views Likes
cpp-netlib Introduction 415 0
cpr library-Introduction 1117 0

Comments