/*

sshchx11.h

  Authors:
        Tatu Ylonen <ylo@ssh.com>
        Markku-Juhani Saarinen <mjos@ssh.com>
        Timo J. Rinne <tri@ssh.com>
        Sami Lehtinen <sjl@ssh.com>

  Copyright (C) 1997-2000 SSH Communications Security Corp, Helsinki, Finland
  All rights reserved.

  Public interface for SSH2 X11 forwarding channels.

*/

#ifndef SSHCHX11_H
#define SSHCHX11_H

/* This function is called whenever an open request is received for an
   X11 channel. */
void ssh_channel_x11_open(const char *type,
                          int channel_id,
                          const unsigned char *data,
                          size_t len,
                          SshConnOpenCompletionProc completion,
                          void *completion_context,
                          void *context);

/* This function is called once when a SshCommon object is created. */
void *ssh_channel_x11_create(SshCommon common);

/* This function is called once when an SshCommon object is being
   destroyed.  This should destroy all X11 channels and listeners and
   free the context. */
void ssh_channel_x11_destroy(void *context);

/* This function is called from within the context of a session channel
   in the client to request X11 forwarding for the session. */
void ssh_channel_x11_send_request(SshCommon common,
                                  int session_channel_id);

/* This function is called once for each session channel that is created.
   This should initialize per-session state for X11 forwarding.  The
   argument points to a void pointer that will be given as argument to
   the following functions.  It can be used to store the per-session
   state. */
void ssh_channel_x11_session_create(SshCommon common,
                                    void **session_placeholder);
                                        
/* This function is called once whenever a session channel is destroyed.
   This should free any X11 forwarding state related to the session; however,
   this should typically not close forwarded X11 channels. */
void ssh_channel_x11_session_destroy(void *session_placeholder);


#ifndef SSH_WIN_CLIENT
/* This function is called in a server when an X11 forwarding request is
   received from the client. */
Boolean ssh_channel_x11_process_request(void *session_placeholder,
                                        const unsigned char *data,
                                        size_t len);

/* Returns the value of DISPLAY in the server. */
const char *ssh_channel_x11_get_display(void *session_placeholder);

/* Returns the value of the authentication protocol in the server. */
const char *ssh_channel_x11_get_auth_protocol(void *session_placeholder);

/* Returns the value of the authentication cookie in the server. */
const char *ssh_channel_x11_get_auth_cookie(void *session_placeholder);
#endif /* !SSH_WIN_CLIENT */


#endif /* SSHCHX11_H */
