Provided by: libgensio-dev_2.3.5-1build2_amd64 bug

NAME

       gensio_event - Event handler for events from a gensio

SYNOPSIS

       #include <gensio/gensio.h>

       typedef int (*gensio_event)(struct gensio *io, void *user_data,
                           int event, int err,
                           unsigned char *buf, gensiods *buflen,
                           const char *const *auxdata);

DESCRIPTION

       When  an  event happens on a gensio that is reported to the user, the gensio library calls
       the gensio_event type handler that was registered with the gensio.

       The use of the various parameters depends on the particular event.   The  parameters  that
       don't vary are:

       io     - The gensio the event is being reported for.

       user_data
              - The user_data supplied when the event handler was registered.

       event  - The particular event being reported.

       Events follow.

   GENSIO_EVENT_READ
       Called when data is read from the I/O device.

       If err is zero, buf points to a data buffer and buflen is the number of bytes available.

       If err is set, buf and buflen are undefined.  err is a standard gensio errno.

       You  must  set the number of bytes consumed in buflen.  Note that you must disable read if
       you don't consume all the bytes or in other situations  where  you  don't  want  the  read
       handler  called.  auxdata, if not NULL, may contain information about the message, like if
       it is out of band (oob) data.  See information on the specific gensio for details.

       Note that only one read callback is allowed to run at a time on a gensio.

       If an error is reported in err, then the gensio will be closed.  This is  used  to  report
       that  the  other  end  closed  the connection (GE_REMCLOSE), or that other internal errors
       occurred.

       Return value is ignored.

   GENSIO_EVENT_WRITE_READY
       Called when data can be written to the I/O device.

       Note that only one write callback is allowed to run at a time on a gensio.

       Unlike Unix-like systems, a write handler will be called (if enabled) if the  lower  layer
       has  an  exception.   This is necessary because we don't have a separate exception handler
       coming from the lower layer.  But this lets  the  write  operation  return  a  failure  if
       something has gone wrong.

       Return value is ignored.

   GENSIO_EVENT_NEW_CHANNEL
       A  new  channel  has  been  created  by the remote end of the connection.  The new channel
       gensio is in buf and must be cast.  Information  about  the  channel  will  be  passed  in
       auxdata,  see  documentation  on  the  particular gensio for details.  The return value is
       ignored.

   GENSIO_EVENT_SEND_BREAK
       Got a request from the other end to send a break.  Telnet client or server.

       Blocked if gensio read is disabled.

   GENSIO_EVENT_AUTH_BEGIN
       Authorization has begun, the username and service is available but nothing else.

       There are a few special return values from this event:

       GE_AUTHREJECT
              - Fail the connection, but continue to go through  the  motions.   This  should  be
              called if the user was invalid or data wasn't properly provided.

       0      -  authorization  has  succeeded.   No  more  authentication  is  required, but the
              protocol may still go through the motions of the protocol.

       GE_NOTSUP
              - Just continue with authentication.

       Any other error will terminate the connection, these should generally be things  like  out
       of memory and such, NOT authentication failures of any kind.

       certauth only

   GENSIO_EVENT_PRECERT_VERIFY
       The connection has received a certificate but has not verified it yet.  This lets the user
       modify the certificate authority based on certificate information.

       Return values are the same as GENSIO_EVENT_AUTH_BEGIN.

       ssl and certauth

   GENSIO_EVENT_POSTCERT_VERIFY
       The connection has received a certificate and has verified it.  The verification may  have
       failed.   This  lets  the user handle their own verification override.  err will be one of
       the following:

       0      on verification success.

       GE_CERTNOTFOUND
              if no certificate was found

       GE_CERTREVOKED
              if the if the certificate was revoked

       GE_CERTEXPIRED
              if the certificate has expired

       GE_CERTINVALID
              for other errors.

       Any other error will terminate the connection, these should generally be things  like  out
       of memory and such, NOT authentication failures of any kind.

       auxdata[0]  will  be  an  error string (or NULL if none available).  Make sure to check if
       auxdata is NULL before indexing auxdata[0].

       Return values are:

       0      - Authentication successed (even if an error was reported).

       GE_NOTSUP
              - Continue with the authentication process.  Password authentication may occur, for
              instance, if an error was reported.

       GE_AUTHREJECT
              - Fail the authentication. No more authentication will occur.

       ssl and certauth

   GENSIO_EVENT_PASSWORD_VERIFY
       A  password has been received from the remote end, it is passed in buf.  The callee should
       validate it.  If doing 2-factor auth, you should also fetch the  2-factor  data  with  the
       GENSIO_CONTROL_2FA  control  and  handle  that  here,  too.   If  this function is called,
       GENSIO_EVENT_2FA_VERIFY is not called.  The length is passed in *buflen.   Note  that  the
       buf is nil terminated one past the length.  Return values are:

       0      - The password verification succeeds.

       GE_NOTSUP
              -  Fail  the  validation, but the connection shutdown will depend on the setting of
              allow-authfail.

       GE_AUTHREJECT
              - Reject the authorization for some other reason besides failing validation.

       Any other error will terminate the connection, these should generally be things  like  out
       of memory and such, NOT authentication failures of any kind.

       certauth only

   GENSIO_EVENT_REQUEST_PASSWORD
       On  the  client  side of an authorization, the remote end has requested that a password be
       sent.  buf points to a buffer of *buflen bytes to place the password in, the  user  should
       put the password there and update *buflen to the actual length.

       Return 0 for success, or any other gensio error to fail the password fetch.

   GENSIO_EVENT_REQUEST_2FA
       On  the  client  side  of  an  authorization,  the  remote  end  has  requested two-factor
       authentication data, but it has not been supplied already.  buf points to a pointer  to  a
       buffer  (unsigned char **) that you should return.  It should be allocated with the zalloc
       function of the os_functions in use.  *buflen is where to put  the  size  of  the  buffer.
       This buffer will be zeroed and freed when done.

       Return 0 for success, or any other gensio error to fail the 2FA fetch.

   GENSIO_EVENT_2FA_VERIFY
       A  2-factor  auth has been received from the remote end and passed as part of the password
       transfer.  This is only called if the login was validated  with  a  certificate,  this  is
       called  to  handle  2-factor auth with a certificate.  The 2fa data is passed in buf.  The
       callee should validate it.  The length is passed in *buflen.  Note that  the  buf  is  nil
       terminated one past the length.  Return values are:

       0      - The verification succeeds.

       GE_NOTSUP
              -  Fail  the  validation, but the connection shutdown will depend on the setting of
              allow-authfail.

       GE_AUTHREJECT
              - Reject the authorization for some other reason besides failing validation.

       Any other error will terminate the connection, these should generally be things  like  out
       of memory and such, NOT authentication failures of any kind.

       certauth only

OTHER EVENTS

       sergensio  gensios have a set of other events, see sergensio(5) for details.  Other gensio
       that are not part of the gensio library proper may have their own events, too.

RETURN VALUES

       See the individual events for the values you should return.  If an event is not handled by
       the   event   handler,   the  handler  must  return  GE_NOTSUP,  except  in  the  case  of
       GENSIO_EVENT_READ and GENSIO_EVENT_WRITE_READY which must be handled.

SEE ALSO

       gensio_set_callback(3),          str_to_gensio_child(3),           gensio_open_channel(3),
       gensio_open_channel_s(3),   gensio_acc_str_to_gensio(3),   str_to_gensio(3)  sergensio(5),
       gensio_err(3)

                                           21 Feb 2019                            gensio_event(3)