mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-18 22:15:20 +02:00
Support Erlang/OTP R15B driver (EJAB-1521)
This commit is contained in:
parent
4e9c81b66a
commit
c4c0b45ced
|
@ -24,16 +24,26 @@
|
||||||
#include <openssl/md2.h>
|
#include <openssl/md2.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* R15B changed several driver callbacks to use ErlDrvSizeT and
|
||||||
|
* ErlDrvSSizeT typedefs instead of int.
|
||||||
|
* This provides missing typedefs on older OTP versions.
|
||||||
|
*/
|
||||||
|
#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
|
||||||
|
typedef int ErlDrvSizeT;
|
||||||
|
typedef int ErlDrvSSizeT;
|
||||||
|
#endif
|
||||||
|
|
||||||
static ErlDrvData sha_drv_start(ErlDrvPort port, char *buf)
|
static ErlDrvData sha_drv_start(ErlDrvPort port, char *buf)
|
||||||
{
|
{
|
||||||
set_port_control_flags(port, PORT_CONTROL_FLAG_BINARY);
|
set_port_control_flags(port, PORT_CONTROL_FLAG_BINARY);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sha_drv_control(ErlDrvData handle,
|
static ErlDrvSSizeT sha_drv_control(ErlDrvData handle,
|
||||||
unsigned int command,
|
unsigned int command,
|
||||||
char *buf, int len,
|
char *buf, ErlDrvSizeT len,
|
||||||
char **rbuf, int rlen)
|
char **rbuf, ErlDrvSizeT rlen)
|
||||||
{
|
{
|
||||||
ErlDrvBinary *b = NULL;
|
ErlDrvBinary *b = NULL;
|
||||||
|
|
||||||
|
@ -89,7 +99,19 @@ ErlDrvEntry sha_driver_entry = {
|
||||||
NULL, /* handle */
|
NULL, /* handle */
|
||||||
sha_drv_control, /* F_PTR control, port_command callback */
|
sha_drv_control, /* F_PTR control, port_command callback */
|
||||||
NULL, /* F_PTR timeout, reserved */
|
NULL, /* F_PTR timeout, reserved */
|
||||||
NULL /* F_PTR outputv, reserved */
|
NULL, /* F_PTR outputv, reserved */
|
||||||
|
/* Added in Erlang/OTP R15B: */
|
||||||
|
NULL, /* ready_async */
|
||||||
|
NULL, /* flush */
|
||||||
|
NULL, /* call */
|
||||||
|
NULL, /* event */
|
||||||
|
ERL_DRV_EXTENDED_MARKER, /* extended_marker */
|
||||||
|
ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
|
||||||
|
ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
|
||||||
|
0, /* driver_flags */
|
||||||
|
NULL, /* handle2 */
|
||||||
|
NULL, /* process_exit */
|
||||||
|
NULL /* stop_select */
|
||||||
};
|
};
|
||||||
|
|
||||||
DRIVER_INIT(sha_drv) /* must match name in driver_entry */
|
DRIVER_INIT(sha_drv) /* must match name in driver_entry */
|
||||||
|
|
|
@ -44,6 +44,16 @@ typedef unsigned __int32 uint32_t;
|
||||||
#define SSL_OP_NO_TICKET 0
|
#define SSL_OP_NO_TICKET 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* R15B changed several driver callbacks to use ErlDrvSizeT and
|
||||||
|
* ErlDrvSSizeT typedefs instead of int.
|
||||||
|
* This provides missing typedefs on older OTP versions.
|
||||||
|
*/
|
||||||
|
#if ERL_DRV_EXTENDED_MAJOR_VERSION < 2
|
||||||
|
typedef int ErlDrvSizeT;
|
||||||
|
typedef int ErlDrvSSizeT;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* str_hash is based on the public domain code from
|
* str_hash is based on the public domain code from
|
||||||
* http://www.burtleburtle.net/bob/hash/doobs.html
|
* http://www.burtleburtle.net/bob/hash/doobs.html
|
||||||
|
@ -305,10 +315,10 @@ static int verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int tls_drv_control(ErlDrvData handle,
|
static ErlDrvSSizeT tls_drv_control(ErlDrvData handle,
|
||||||
unsigned int command,
|
unsigned int command,
|
||||||
char *buf, int len,
|
char *buf, ErlDrvSizeT len,
|
||||||
char **rbuf, int rlen)
|
char **rbuf, ErlDrvSizeT rlen)
|
||||||
{
|
{
|
||||||
tls_data *d = (tls_data *)handle;
|
tls_data *d = (tls_data *)handle;
|
||||||
int res;
|
int res;
|
||||||
|
@ -503,7 +513,19 @@ ErlDrvEntry tls_driver_entry = {
|
||||||
NULL, /* handle */
|
NULL, /* handle */
|
||||||
tls_drv_control, /* F_PTR control, port_command callback */
|
tls_drv_control, /* F_PTR control, port_command callback */
|
||||||
NULL, /* F_PTR timeout, reserved */
|
NULL, /* F_PTR timeout, reserved */
|
||||||
NULL /* F_PTR outputv, reserved */
|
NULL, /* F_PTR outputv, reserved */
|
||||||
|
/* Added in Erlang/OTP R15B: */
|
||||||
|
NULL, /* ready_async */
|
||||||
|
NULL, /* flush */
|
||||||
|
NULL, /* call */
|
||||||
|
NULL, /* event */
|
||||||
|
ERL_DRV_EXTENDED_MARKER, /* extended_marker */
|
||||||
|
ERL_DRV_EXTENDED_MAJOR_VERSION, /* major_version */
|
||||||
|
ERL_DRV_EXTENDED_MINOR_VERSION, /* minor_version */
|
||||||
|
0, /* driver_flags */
|
||||||
|
NULL, /* handle2 */
|
||||||
|
NULL, /* process_exit */
|
||||||
|
NULL /* stop_select */
|
||||||
};
|
};
|
||||||
|
|
||||||
DRIVER_INIT(tls_drv) /* must match name in driver_entry */
|
DRIVER_INIT(tls_drv) /* must match name in driver_entry */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user