| # 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. |
| |
| |
| module Qpid::Proton |
| |
| # Endpoint is the parent classes for Link and Session. |
| # |
| # It provides a namespace for constant values that relate to the current |
| # state of both links and sessions. |
| # |
| # @example |
| # |
| # conn = Qpid::Proton::Connection.new |
| # puts "Local connection flags : #{conn.state || Qpid::Proton::Endpoint::LOCAL_MASK}" |
| # puts "Remote connection flags: #{conn.state || Qpid::Proton::Endpoint::REMOTE_MASK}" |
| # |
| class Endpoint |
| include Util::Deprecation |
| |
| # The local connection is uninitialized. |
| LOCAL_UNINIT = Cproton::PN_LOCAL_UNINIT |
| # The local connection is active. |
| LOCAL_ACTIVE = Cproton::PN_LOCAL_ACTIVE |
| # The local connection is closed. |
| LOCAL_CLOSED = Cproton::PN_LOCAL_CLOSED |
| |
| # The remote connection is unitialized. |
| REMOTE_UNINIT = Cproton::PN_REMOTE_UNINIT |
| # The remote connection is active. |
| REMOTE_ACTIVE = Cproton::PN_REMOTE_ACTIVE |
| # The remote connection is closed. |
| REMOTE_CLOSED = Cproton::PN_REMOTE_CLOSED |
| |
| # Bitmask for the local-only flags. |
| LOCAL_MASK = Cproton::PN_LOCAL_UNINIT | Cproton::PN_LOCAL_ACTIVE | Cproton::PN_LOCAL_CLOSED |
| |
| # Bitmask for the remote-only flags. |
| REMOTE_MASK = Cproton::PN_REMOTE_UNINIT | Cproton::PN_REMOTE_ACTIVE | Cproton::PN_REMOTE_CLOSED |
| |
| # @private |
| def condition; remote_condition || local_condition; end |
| # @private |
| def remote_condition; Condition.convert(_remote_condition); end |
| # @private |
| def local_condition; Condition.convert(_local_condition); end |
| |
| # Return the transport associated with this endpoint. |
| # |
| # @return [Transport] The transport. |
| # |
| def transport |
| self.connection.transport |
| end |
| |
| # @return [WorkQueue] the work queue for work on this endpoint. |
| def work_queue() connection.work_queue; end |
| |
| # @private |
| # @return [Bool] true if {#state} has all the bits of `mask` set |
| def check_state(mask) (self.state & mask) == mask; end |
| |
| # @return [Bool] true if endpoint has sent and received a CLOSE frame |
| def closed?() check_state(LOCAL_CLOSED | REMOTE_CLOSED); end |
| |
| # @return [Bool] true if endpoint has sent and received an OPEN frame |
| def open?() check_state(LOCAL_ACTIVE | REMOTE_ACTIVE); end |
| |
| def local_uninit? |
| check_state(LOCAL_UNINIT) |
| end |
| |
| def local_open? |
| check_state(LOCAL_ACTIVE) |
| end |
| |
| def local_closed? |
| check_state(LOCAL_CLOSED) |
| end |
| |
| def remote_uninit? |
| check_state(REMOTE_UNINIT) |
| end |
| |
| def remote_open? |
| check_state(REMOTE_ACTIVE) |
| end |
| |
| def remote_closed? |
| check_state(REMOTE_CLOSED) |
| end |
| |
| alias local_active? local_open? |
| alias remote_active? remote_open? |
| |
| end |
| end |