Class VapidTransport

java.lang.Object
com.iizix.server.push.engine.transport.VapidTransport
All Implemented Interfaces:
IPushTransport

public final class VapidTransport extends Object implements IPushTransport
The Web Push transport: RFC 8030 request, RFC 8291 encryption, RFC 8292 VAPID authorization, over the Jetty client.

The subscription is the JSON the browser's PushSubscription.toJSON() produced, stored verbatim by /iizi-push/subscribe: endpoint, keys.p256dh, keys.auth. The application's key pair and subject come from its .iiziPush.

Status mapping, from RFC 8030 section 8 and the push services' practice: 201 (and 200, 202) delivered; 404 and 410 endpoint stale, prune it; 429 and 5xx transient, spool and honour Retry-After; 400, 401, 403, 413 permanent, the request or the credentials are wrong; a connection failure or timeout is transient.

Author:
Christopher Mindus
  • Constructor Details

    • VapidTransport

      public VapidTransport(HttpClient client, AppPushConfigs configs)
      Constructor.
      Parameters:
      client - The started Jetty client.
      configs - The application configurations.
  • Method Details

    • getKind

      public PushTransport getKind()
      Description copied from interface: IPushTransport
      Gets the transport kind.
      Specified by:
      getKind in interface IPushTransport
      Returns:
      The kind.
    • getState

      public TransportState getState(String appId)
      Description copied from interface: IPushTransport
      Gets whether this transport can send for an application.
      Specified by:
      getState in interface IPushTransport
      Parameters:
      appId - The application ID, * for iiziRun.
      Returns:
      The state, never null.
    • send

      public TransportResult send(SubscriptionRecord subscription, PushMessage message, long ttlMillis, DeliveryUrgency urgency)
      Description copied from interface: IPushTransport
      Sends a notification to one subscription. Blocks the calling (virtual) thread until the push service has answered or the request timed out.
      Specified by:
      send in interface IPushTransport
      Parameters:
      subscription - The subscription.
      message - The notification.
      ttlMillis - The effective time-to-live in milliseconds, already defaulted and clamped by the engine; converted to seconds at the header only.
      urgency - The effective urgency.
      Returns:
      The result, never null; a failure is an outcome, never an exception.
    • dispose

      public void dispose()
      Description copied from interface: IPushTransport
      Releases the transport's resources.
      Specified by:
      dispose in interface IPushTransport