// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef IPCZ_SRC_IPCZ_REMOTE_ROUTER_LINK_H_ #define IPCZ_SRC_IPCZ_REMOTE_ROUTER_LINK_H_ #include <atomic> #include <functional> #include <vector> #include "ipcz/fragment_ref.h" #include "ipcz/link_side.h" #include "ipcz/link_type.h" #include "ipcz/router_link.h" #include "ipcz/router_link_state.h" #include "ipcz/sublink_id.h" #include "third_party/abseil-cpp/absl/synchronization/mutex.h" #include "util/ref_counted.h" namespace ipcz { class NodeLink; // One side of a link between two Routers living on different nodes. A // RemoteRouterLink uses a NodeLink plus a SublinkId as its transport between // the routers. On the other end (on another node) is another RemoteRouterLink // using a NodeLink back to this node, with the same SublinkId. // // As with other RouterLink instances, each RemoteRouterLink is assigned a // LinkSide at construction time. This assignment is arbitrary but will always // be the opposite of the LinkSide assigned to the RemoteRouteLink on the other // end. // // NOTE: This implementation must take caution when calling into any Router. See // note on RouterLink's own class documentation. class RemoteRouterLink : public RouterLink { … }; } // namespace ipcz #endif // IPCZ_SRC_IPCZ_REMOTE_ROUTER_LINK_H_