#ifndef PROTON_LINK_HPP #define PROTON_LINK_HPP /* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ #include "./fwd.hpp" #include "./internal/export.hpp" #include "./endpoint.hpp" #include "./internal/object.hpp" #include #include /// @file /// @copybrief proton::link struct pn_link_t; namespace proton { /// A named channel for sending or receiving messages. It is the base /// class for sender and receiver. class PN_CPP_CLASS_EXTERN link : public internal::object , public endpoint { /// @cond INTERNAL link(pn_link_t* l) : internal::object(l) {} /// @endcond public: /// Create an empty link. link() : internal::object(0) {} PN_CPP_EXTERN bool uninitialized() const; PN_CPP_EXTERN bool active() const; PN_CPP_EXTERN bool closed() const; PN_CPP_EXTERN class error_condition error() const; PN_CPP_EXTERN void close(); PN_CPP_EXTERN void close(const error_condition&); /// Suspend the link without closing it. A suspended link may be /// reopened with the same or different link options if supported /// by the peer. A suspended durable subscription becomes inactive /// without cancelling it. // XXX Should take error condition PN_CPP_EXTERN void detach(); /// Credit available on the link. PN_CPP_EXTERN int credit() const; /// **Unsettled API** - True for a receiver if a drain cycle has /// been started and the corresponding `on_receiver_drain_finish` /// event is still pending. True for a sender if the receiver has /// requested a drain of credit and the sender has unused credit. /// /// @see @ref receiver::drain. PN_CPP_EXTERN bool draining(); /// Get the link name. PN_CPP_EXTERN std::string name() const; /// The container for this link. PN_CPP_EXTERN class container &container() const; /// Get the work_queue for the link. PN_CPP_EXTERN class work_queue& work_queue() const; /// The connection that owns this link. PN_CPP_EXTERN class connection connection() const; /// The session that owns this link. PN_CPP_EXTERN class session session() const; /// **Unsettled API** - Properties supplied by the remote link endpoint. PN_CPP_EXTERN std::map properties() const; protected: /// @cond INTERNAL // Initiate the AMQP attach frame. void attach(); friend class internal::factory; /// @endcond }; } #endif // PROTON_LINK_HPP