<?xml version="1.0" encoding="UTF-8" ?>

<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
  <interface name="org.freedesktop.NetworkManager.VPN.Plugin">
    <tp:docstring>
      This interface is provided by plugins providing VPN services to the NetworkManager daemon.
    </tp:docstring>
    <method name="Connect">
      <tp:docstring>
        Tells the plugin to connect.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_vpn_plugin_connect"/>
      <arg name="connection" type="a{sa{sv}}" direction="in" tp:type="String_String_Variant_Map_Map">
        <tp:docstring>
          Describes the connection to be established.
        </tp:docstring>
      </arg>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.NetworkManager.VPN.Error.StartingInProgress"/>
        <tp:error name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStarted"/>
        <tp:error name="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress"/>
        <tp:error name="org.freedesktop.NetworkManager.VPN.Error.BadArguments"/>
        <tp:error name="org.freedesktop.NetworkManager.VPN.Error.LaunchFailed"/>
      </tp:possible-errors>
    </method>

    <method name="NeedSecrets">
      <tp:docstring>
        Asks the plugin whether the provided connection will require secrets to connect successfully.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_vpn_plugin_need_secrets"/>
      <arg name="settings" type="a{sa{sv}}" direction="in" tp:type="String_String_Variant_Map_Map">
        <tp:docstring>
          Describes the connection that may need secrets.
        </tp:docstring>
      </arg>
      <arg name="setting_name" type="s" direction="out">
        <tp:docstring>
          The setting name within the provided connection that requires secrets, if any.
        </tp:docstring>
      </arg>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.NetworkManager.VPN.Error.ConnectionInvalid"/>
      </tp:possible-errors>
    </method>

    <method name="Disconnect">
      <tp:docstring>
        Disconnect the plugin.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_vpn_plugin_disconnect"/>
      <tp:possible-errors>
        <tp:error name="org.freedesktop.NetworkManager.VPN.Error.StoppingInProgress"/>
        <tp:error name="org.freedesktop.NetworkManager.VPN.Error.AlreadyStopped"/>
      </tp:possible-errors>
    </method>

    <method name="SetIp4Config">
      <tp:docstring>
        Set IPv4 details on the connection.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_vpn_plugin_set_ip4_config"/>
      <arg name="config" type="a{sv}" direction="in" tp:type="String_Variant_Map">
        <tp:docstring>
          Ip4Config details for the conneciton.
        </tp:docstring>
      </arg>
    </method>

    <method name="SetFailure">
      <tp:docstring>
        Indicate a failure to the plugin.
      </tp:docstring>
      <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_vpn_plugin_set_failure"/>
      <arg name="reason" type="s" direction="in">
        <tp:docstring>
          The reason for the failure.
        </tp:docstring>
      </arg>
    </method>

    <property name="State" type="u" access="read" tp:type="NM_VPN_CONNECTION_STATE">
      <tp:docstring>
        The state of the plugin.
      </tp:docstring>
    </property>

    <signal name="StateChanged">
      <tp:docstring>
        Emitted when the plugin state changes.
      </tp:docstring>
      <arg name="state" type="u" tp:type="NM_VPN_CONNECTION_STATE">
        <tp:docstring>
          The new state of the plugin.
        </tp:docstring>
      </arg>
    </signal>

    <signal name="Ip4Config">
      <tp:docstring>
        The plugin obtained an IPv4 configuration.
      </tp:docstring>
      <arg name="ip4config" type="a{sv}" tp:type="String_Variant_Map">
        <tp:docstring>
          The IPv4 configuration.
        </tp:docstring>
      </arg>
    </signal>

    <signal name="LoginBanner">
      <tp:docstring>
        Emitted when the plugin receives a login banner from the VPN service.
      </tp:docstring>
      <arg name="banner" type="s">
        <tp:docstring>
          The login banner string.
        </tp:docstring>
      </arg>
    </signal>

    <signal name="Failure">
      <tp:docstring>
        Emitted when a failure in the VPN plugin occurs.
      </tp:docstring>
      <arg name="reason" type="u" tp:type="NM_VPN_PLUGIN_FAILURE">
        <tp:docstring>
          Reason code for the failure.
        </tp:docstring>
      </arg>
    </signal>

    <tp:enum name="NM_VPN_PLUGIN_FAILURE" type="u">
      <tp:enumvalue suffix="LOGIN_FAILED" value="0">
        <tp:docstring>
          Login failed.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="CONNECT_FAILED" value="1">
        <tp:docstring>
          Connect failed.
        </tp:docstring>
      </tp:enumvalue>
      <tp:enumvalue suffix="BAD_IP_CONFIG" value="2">
        <tp:docstring>
          Invalid IP configuration returned from the VPN plugin.
        </tp:docstring>
      </tp:enumvalue>
    </tp:enum>

  </interface>
</node>
