# Module Netsys_sasl.Client

    module Client: sig .. end

    type session

    val create_session : mech:Netsys_sasl.sasl_mechanism ->
           user:string ->
           authz:string ->
           creds:Netsys_sasl.credentials ->
           params:(string * string * bool) list -> unit -> session

The new client session authenticate as `user` and authorizes as `authz` (empty string if not applicable). The credentials are `creds`.

`user` and `authz` must be encoded in UTF-8.

The parameters are given as list `(name,value,critical)`. Critical parameters must be interpreted by the mechanism, and unknown critical parameters must be rejected by a `Failure` exception. Non-critical parameters are ignored if they are unknown to the mechanism.

    val state : session -> Netsys_sasl_types.client_state

report the state (whether expecting challenges or responding)

    val configure_channel_binding : session ->
           Netsys_sasl_types.cb -> session

Configure GS2-style channel binding

    val restart : session -> session

Restart the session for another authentication round. The session must be in state ``OK`.

    val process_challenge : session -> string -> session

Process the challenge from the server. The state must be ``Wait`. As an exception, this function can also be called for the initial challenge from the server, even if the state is ``Emit`.

    val emit_response : session -> session * string

Emit a new response. The state must be ``Emit`.

    val channel_binding : session -> Netsys_sasl_types.cb

Whether the client suggests or demands channel binding

    val user_name : session -> string

The user name

    val authz_name : session -> string

The authorization name

    val stash_session : session -> string

Serializes the session as string

    val resume_session : Netsys_sasl.sasl_mechanism -> string -> session

Unserializes the session

    val session_id : session -> string option

Optionally return a string that can be used to identify the client session. Not all mechanisms support this.

    val prop : session -> string -> string

Get a mechanism-specific property of the session. E.g. this can be the "realm" sent by the server.

    val gssapi_props : session -> Netsys_gssapi.client_props

Get the GSSAPI props, or raise `Not_found`