Class ScriptQuicContext

java.lang.Object
org.microproxy.starlark.ScriptQuicContext
All Implemented Interfaces:
org.microproxy.thirdparty.starlark.eval.StarlarkValue, org.microproxy.thirdparty.starlark.eval.Structure

public final class ScriptQuicContext extends Object implements org.microproxy.thirdparty.starlark.eval.Structure
An intercepted QUIC connection, or one of its streams, as on_quic_start, on_quic_stream_data, on_quic_message, on_quic_datagram and on_quic_end see it: the client, the server (host, port, server, and address, where the proxy connected to), the sni and alpn both sides use, whether the QUIC came inside a CONNECT-UDP flow (masque), vars, a dict that lives as long as the connection (its streams share it), and error, why the connection failed (None until then, and for one that ended normally). For on_quic_stream_data and on_quic_message, stream_id (on the client's connection), bidirectional and client_initiated name the stream, and send(from_client, data) adds bytes to it, as QuicStreamContext.send(boolean, byte[]) does (not framed); they are None for the connection's own hooks. send_datagram(from_client, data) adds a datagram.
  • Method Summary

    Modifier and Type
    Method
    Description
    static org.microproxy.thirdparty.starlark.syntax.TypeConstructor
    Types the builtins that return this class (see ScriptType).
    Returns the error message to print for an attempt to access an undefined field.
    com.google.common.collect.ImmutableList<String>
    Returns the names of this value's fields, in some undefined but stable order.
    org.microproxy.thirdparty.starlark.syntax.StarlarkType
    getStarlarkType(org.microproxy.thirdparty.starlark.eval.StarlarkSemantics semantics)
    Returns the Starlark type of this struct.
    Returns the value of the field with the given name, or null if the field does not exist.
    void
    repr(org.microproxy.thirdparty.starlark.eval.Printer printer, org.microproxy.thirdparty.starlark.eval.StarlarkSemantics semantics)
    Prints an official representation of object x.
    void
    send(Boolean fromClient, Object data)
    Adds bytes to the stream as if one side had sent them (see QuicStreamContext.send(boolean, byte[])).
    void
    sendDatagram(Boolean fromClient, Object data)
    Sends a datagram as if one side had sent it (see QuicContext.sendDatagram(boolean, byte[])).

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.microproxy.thirdparty.starlark.eval.StarlarkValue

    checkHashable, debugPrint, isAcyclic, isImmutable, str, truth

    Methods inherited from interface org.microproxy.thirdparty.starlark.eval.Structure

    getValue, setField
  • Method Details

    • getAssociatedTypeConstructor

      public static org.microproxy.thirdparty.starlark.syntax.TypeConstructor getAssociatedTypeConstructor()
      Types the builtins that return this class (see ScriptType).
      Returns:
      the Starlark type constructor for a QUIC context value
    • getStarlarkType

      public org.microproxy.thirdparty.starlark.syntax.StarlarkType getStarlarkType(org.microproxy.thirdparty.starlark.eval.StarlarkSemantics semantics)
      Description copied from interface: org.microproxy.thirdparty.starlark.eval.Structure
      Returns the Starlark type of this struct. For efficiency, implementations should override this method to return a memoized value.
      Specified by:
      getStarlarkType in interface org.microproxy.thirdparty.starlark.eval.StarlarkValue
      Specified by:
      getStarlarkType in interface org.microproxy.thirdparty.starlark.eval.Structure
      Parameters:
      semantics - the interpreter settings used to determine the type
      Returns:
      the type of this value, or null when no type information is provided
    • getValue

      public Object getValue(String name)
      Description copied from interface: org.microproxy.thirdparty.starlark.eval.Structure
      Returns the value of the field with the given name, or null if the field does not exist. The interpreter (Starlark code) calls the getValue below, which has access to StarlarkSemantics.

      The set of names for which getValue returns non-null should match getFieldNames if possible.

      Specified by:
      getValue in interface org.microproxy.thirdparty.starlark.eval.Structure
      Parameters:
      name - the name of the field to retrieve
      Returns:
      the field value, or null if the field does not exist
    • send

      public void send(Boolean fromClient, Object data) throws org.microproxy.thirdparty.starlark.eval.EvalException
      Adds bytes to the stream as if one side had sent them (see QuicStreamContext.send(boolean, byte[])).
      Parameters:
      fromClient - true to send to the server, false to send to the client
      data - the bytes, or a string sent as UTF-8
      Throws:
      org.microproxy.thirdparty.starlark.eval.EvalException - if data is neither bytes nor a string, there is no stream (the connection's own hooks), or that direction has ended
    • sendDatagram

      public void sendDatagram(Boolean fromClient, Object data) throws org.microproxy.thirdparty.starlark.eval.EvalException
      Sends a datagram as if one side had sent it (see QuicContext.sendDatagram(boolean, byte[])).
      Parameters:
      fromClient - true to send to the server, false to send to the client
      data - the payload, or a string sent as UTF-8
      Throws:
      org.microproxy.thirdparty.starlark.eval.EvalException - if data is neither bytes nor a string, or the connection has ended
    • getFieldNames

      public com.google.common.collect.ImmutableList<String> getFieldNames()
      Description copied from interface: org.microproxy.thirdparty.starlark.eval.Structure
      Returns the names of this value's fields, in some undefined but stable order.

      A call to getValue for each of these names should return non-null, though this is not enforced.

      The Starlark expression dir(x) reports the union of getFieldNames() and any StarlarkMethod-annotated fields and methods of this value.

      Specified by:
      getFieldNames in interface org.microproxy.thirdparty.starlark.eval.Structure
      Returns:
      the field names in a stable order
    • getErrorMessageForUnknownField

      public String getErrorMessageForUnknownField(String field)
      Description copied from interface: org.microproxy.thirdparty.starlark.eval.Structure
      Returns the error message to print for an attempt to access an undefined field.

      May return null to use a default error message.

      Specified by:
      getErrorMessageForUnknownField in interface org.microproxy.thirdparty.starlark.eval.Structure
      Parameters:
      field - the undefined field name
      Returns:
      the diagnostic message, or null to use the default
    • repr

      public void repr(org.microproxy.thirdparty.starlark.eval.Printer printer, org.microproxy.thirdparty.starlark.eval.StarlarkSemantics semantics)
      Description copied from interface: org.microproxy.thirdparty.starlark.eval.StarlarkValue
      Prints an official representation of object x.

      Convention is that the string should be parseable back to the value x. If this isn't feasible then it should be a short human-readable description enclosed in angled brackets, e.g. "<foo object>".

      Specified by:
      repr in interface org.microproxy.thirdparty.starlark.eval.StarlarkValue
      Parameters:
      printer - a printer to be used for formatting nested values.
      semantics - the interpreter settings used to format nested values