Skip to main content

ViewerService

Struct ViewerService 

Source
pub struct ViewerService {
    data_dir: Option<PathBuf>,
    tls: Mutex<Option<Arc<ViewerTls>>>,
    pub pairing: Pairing,
    pub hub: Arc<FeedHub>,
    feeds: Arc<Mutex<FeedRegistry>>,
    max_per_device: usize,
    max_total: usize,
    advertised_port: Arc<AtomicU16>,
    bound: Mutex<Vec<IpAddr>>,
    reservation: Mutex<Option<(u16, Socket)>>,
    last_seen_written: Mutex<HashMap<String, i64>>,
}

Fields§

§data_dir: Option<PathBuf>

Where the certificate is kept; None keeps it in memory only.

§tls: Mutex<Option<Arc<ViewerTls>>>§pairing: Pairing§hub: Arc<FeedHub>§feeds: Arc<Mutex<FeedRegistry>>§max_per_device: usize§max_total: usize§advertised_port: Arc<AtomicU16>

0 while no viewer listener is bound.

§bound: Mutex<Vec<IpAddr>>

The addresses viewer listeners are bound on, for the QR’s host.

§reservation: Mutex<Option<(u16, Socket)>>

The viewer port, held on loopback (bound, never listening) from the first time the listener comes up until exit, so another instance on this host never takes it from the range and the port a device saw stays ours across LAN off/on.

§last_seen_written: Mutex<HashMap<String, i64>>

When each device’s last_seen_ms was last written.

Implementations§

Source§

impl ViewerService

Source

pub fn new(data_dir: Option<PathBuf>, broker: &Broker) -> Arc<Self> ⓘ

A viewer whose feeds watch broker.

Source

pub fn with_limits( data_dir: Option<PathBuf>, broker: &Broker, hub: Arc<FeedHub>, max_per_device: usize, max_total: usize, ) -> Arc<Self> ⓘ

Source

pub fn install_global(&self)

Make this the process’s advertised viewer port (advertised_viewer_port).

Source

pub fn advertised_port_handle(&self) -> Arc<AtomicU16> ⓘ

The handle the fleet feed reads viewer_port from.

Source

pub fn advertised_port(&self) -> Option<u16>

Source

pub fn tls(&self) -> Result<Arc<ViewerTls>, String>

The certificate, made and kept on first need.

Source

pub fn reserve_port( &self, candidates: impl IntoIterator<Item = u16>, ) -> Option<u16>

The viewer port: the one already held, else the first port of candidates free on loopback, now held. None when none is free.

Source

pub fn set_bound(&self, addrs: Vec<IpAddr>, port: u16)

Record which addresses viewer listeners are bound on, and advertise the port while there is at least one.

Source

pub fn pair_host(&self) -> Option<IpAddr>

The IPv4 address the QR names: the primary outbound one when a viewer listener is bound there, else the first bound IPv4 address.

Source

pub fn open_feed(&self, device_id: &str) -> Result<FeedLease, FeedRefused>

Take a place for one more feed of device_id, or say why not.

Source

pub fn close_device_feeds(&self, device_id: &str) -> usize

Close every open feed of device_id (it was revoked). Returns how many.

Source

pub fn last_seen_due(&self, device_id: &str, now_ms: i64) -> bool

Whether device_id’s last_seen_ms is due to be written at now_ms; records it when it is.

Source

pub fn forget_device(&self, device_id: &str)

Forget a revoked device’s throttle entry.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more