Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
1f93e2b3
Commit
1f93e2b3
authored
May 20, 2001
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vio.h BitKeeper file /home/tonu/bk/mysql-4.0/include/vio.h
parent
bd5b41c2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
278 additions
and
0 deletions
+278
-0
include/vio.h
include/vio.h
+278
-0
No files found.
include/vio.h
0 → 100644
View file @
1f93e2b3
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* We implement virtual IO by trapping needed vio_* calls and mapping
* them to different function pointers by type
*/
/*
* Purpose: include file for st_vio that will work with C and C++
*/
#ifndef vio_violite_h_
#define vio_violite_h_
#include "my_net.h"
/* needed because of struct in_addr */
/* Simple vio interface in C; The functions are implemented in violite.c */
#ifdef __cplusplus
extern
"C"
{
#endif
/* __cplusplus */
enum
enum_vio_type
{
VIO_CLOSED
,
VIO_TYPE_TCPIP
,
VIO_TYPE_SOCKET
,
VIO_TYPE_NAMEDPIPE
,
VIO_TYPE_SSL
};
#ifndef st_vio_defined
#define st_vio_defined
struct
st_vio
;
/* Only C */
typedef
struct
st_vio
st_vio
;
#endif
st_vio
*
vio_new
(
my_socket
sd
,
enum
enum_vio_type
type
,
my_bool
localhost
);
#ifdef __WIN__
st_vio
*
vio_new_win32pipe
(
HANDLE
hPipe
);
#endif
void
vio_delete
(
st_vio
*
vio
);
#ifdef EMBEDDED_LIBRARY
void
vio_reset
(
st_vio
*
vio
);
#endif
/*
* vio_read and vio_write should have the same semantics
* as read(2) and write(2).
*/
int
vio_read
(
st_vio
*
vio
,
gptr
buf
,
int
size
);
int
vio_write
(
st_vio
*
vio
,
const
gptr
buf
,
int
size
);
/*
* Whenever the socket is set to blocking mode or not.
*/
int
vio_blocking
(
st_vio
*
vio
,
my_bool
onoff
);
my_bool
vio_is_blocking
(
st_vio
*
vio
);
/*
* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible.
*/
int
vio_fastsend
(
st_vio
*
vio
);
/*
* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible.
*/
int
vio_keepalive
(
st_vio
*
vio
,
my_bool
onoff
);
/*
* Whenever we should retry the last read/write operation.
*/
my_bool
vio_should_retry
(
st_vio
*
vio
);
/*
* When the workday is over...
*/
int
vio_close
(
st_vio
*
vio
);
/*
* Short text description of the socket for those, who are curious..
*/
const
char
*
vio_description
(
st_vio
*
vio
);
/* Return the type of the connection */
enum
enum_vio_type
vio_type
(
st_vio
*
vio
);
/* Return last error number */
int
vio_errno
(
st_vio
*
vio
);
/* Get socket number */
my_socket
vio_fd
(
st_vio
*
vio
);
/*
* Remote peer's address and name in text form.
*/
my_bool
vio_peer_addr
(
st_vio
*
vio
,
char
*
buf
);
/* Remotes in_addr */
void
vio_in_addr
(
st_vio
*
vio
,
struct
in_addr
*
in
);
/* Return 1 if there is data to be read */
my_bool
vio_poll_read
(
st_vio
*
vio
,
uint
timeout
);
#ifdef __cplusplus
}
#endif
#endif
/* vio_violite_h_ */
#ifdef HAVE_VIO
#ifndef DONT_MAP_VIO
#define vio_delete(vio) (vio)->viodelete(vio)
#define vio_errno(vio) (vio)->vioerrno(vio)
#define vio_read(vio, buf, size) (vio)->read(vio,buf,size)
#define vio_write(vio, buf, size) (vio)->write(vio, buf, size)
#define vio_blocking(vio, set_blocking_mode) (vio)->vioblocking(vio, set_blocking_mode)
#define vio_is_blocking(vio) (vio)->is_blocking(vio)
#define vio_fastsend(vio) (vio)->fastsend(vio)
#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive)
#define vio_should_retry(vio) (vio)->should_retry(vio)
#define vio_close(vio) ((vio)->vioclose)(vio)
#define vio_peer_addr(vio, buf) (vio)->peer_addr(vio, buf)
#define vio_in_addr(vio, in) (vio)->in_addr(vio, in)
#define vio_poll_read(vio,timeout) (vio)->poll_read(vio,timeout)
#endif
/* !DONT_MAP_VIO */
#endif
/* HAVE_VIO */
#ifdef HAVE_OPENSSL
#include <openssl/x509.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/asn1.h>
#include "my_net.h"
/* needed because of struct in_addr */
#ifdef __cplusplus
extern
"C"
{
#endif
/* __cplusplus */
#ifndef st_vio_defined
#define st_vio_defined
struct
st_vio
;
/* Only C */
typedef
struct
st_vio
st_vio
;
#endif
void
vio_ssl_delete
(
st_vio
*
vio
);
#ifdef EMBEDDED_LIBRARY
void
vio_reset
(
st_vio
*
vio
);
#endif
int
vio_ssl_read
(
st_vio
*
vio
,
gptr
buf
,
int
size
);
int
vio_ssl_write
(
st_vio
*
vio
,
const
gptr
buf
,
int
size
);
int
vio_ssl_blocking
(
st_vio
*
vio
,
my_bool
onoff
);
my_bool
vio_ssl_is_blocking
(
st_vio
*
vio
);
/* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible. */
int
vio_ssl_fastsend
(
st_vio
*
vio
);
/* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible. */
int
vio_ssl_keepalive
(
st_vio
*
vio
,
my_bool
onoff
);
/* Whenever we should retry the last read/write operation. */
my_bool
vio_ssl_should_retry
(
st_vio
*
vio
);
/* When the workday is over... */
int
vio_ssl_close
(
st_vio
*
vio
);
/* Return last error number */
int
vio_ssl_errno
(
st_vio
*
vio
);
my_bool
vio_ssl_peer_addr
(
st_vio
*
vio
,
char
*
buf
);
void
vio_ssl_in_addr
(
st_vio
*
vio
,
struct
in_addr
*
in
);
/* Return 1 if there is data to be read */
my_bool
vio_ssl_poll_read
(
st_vio
*
vio
,
uint
timeout
);
#ifdef HAVE_OPENSSL
/* Single copy for server */
struct
st_VioSSLAcceptorFd
{
SSL_CTX
*
ssl_context_
;
SSL_METHOD
*
ssl_method_
;
struct
st_VioSSLAcceptorFd
*
session_id_context_
;
enum
{
state_connect
=
1
,
state_accept
=
2
};
BIO
*
bio_
;
char
*
ssl_cip_
;
char
desc_
[
100
];
st_vio
*
sd_
;
/* function pointers which are only once for SSL server */
// struct st_vio *(*sslaccept)(struct st_VioSSLAcceptorFd*,st_vio*);
};
/* One copy for client */
struct
st_VioSSLConnectorFd
{
BIO
*
bio_
;
gptr
ssl_
;
SSL_CTX
*
ssl_context_
;
SSL_METHOD
*
ssl_method_
;
/* function pointers which are only once for SSL client */
};
struct
st_vio
*
sslaccept
(
struct
st_VioSSLAcceptorFd
*
,
struct
st_vio
*
);
struct
st_vio
*
sslconnect
(
struct
st_VioSSLConnectorFd
*
,
struct
st_vio
*
);
#else
/* HAVE_OPENSSL */
/* This dummy is required to maintain proper size of st_mysql in mysql.h */
struct
st_VioSSLConnectorFd
{};
#endif
/* HAVE_OPENSSL */
struct
st_VioSSLConnectorFd
*
new_VioSSLConnectorFd
(
const
char
*
key_file
,
const
char
*
cert_file
,
const
char
*
ca_file
,
const
char
*
ca_path
);
struct
st_VioSSLAcceptorFd
*
new_VioSSLAcceptorFd
(
const
char
*
key_file
,
const
char
*
cert_file
,
const
char
*
ca_file
,
const
char
*
ca_path
);
struct
st_vio
*
new_VioSSL
(
struct
st_VioSSLAcceptorFd
*
fd
,
struct
st_vio
*
sd
,
int
state
);
static
int
init_bio_
(
struct
st_VioSSLAcceptorFd
*
fd
,
struct
st_vio
*
sd
,
int
state
,
int
bio_flags
);
static
void
report_errors
();
#ifdef __cplusplus
}
#endif
#endif
/* HAVE_OPENSSL */
#ifndef __WIN__
#define HANDLE void *
#endif
/* This structure is for every connection on both sides */
struct
st_vio
{
my_socket
sd
;
/* my_socket - real or imaginary */
HANDLE
hPipe
;
my_bool
localhost
;
/* Are we from localhost? */
int
fcntl_mode
;
/* Buffered fcntl(sd,F_GETFL) */
struct
sockaddr_in
local
;
/* Local internet address */
struct
sockaddr_in
remote
;
/* Remote internet address */
enum
enum_vio_type
type
;
/* Type of connection */
char
desc
[
30
];
/* String description */
#ifdef HAVE_VIO
/* function pointers. They are similar for socket/SSL/whatever */
void
(
*
viodelete
)(
st_vio
*
);
int
(
*
vioerrno
)(
st_vio
*
);
int
(
*
read
)(
st_vio
*
,
gptr
,
int
);
int
(
*
write
)(
st_vio
*
,
gptr
,
int
);
int
(
*
vioblocking
)(
st_vio
*
,
my_bool
);
my_bool
(
*
is_blocking
)(
st_vio
*
);
int
(
*
viokeepalive
)(
st_vio
*
,
my_bool
);
int
(
*
fastsend
)(
st_vio
*
);
my_bool
(
*
peer_addr
)(
st_vio
*
,
gptr
);
void
(
*
in_addr
)(
st_vio
*
,
struct
in_addr
*
);
my_bool
(
*
should_retry
)(
st_vio
*
);
int
(
*
vioclose
)(
st_vio
*
);
my_bool
(
*
poll_read
)(
st_vio
*
,
uint
);
#ifdef HAVE_OPENSSL
BIO
*
bio_
;
SSL
*
ssl_
;
my_bool
open_
;
#endif
/* HAVE_OPENSSL */
#endif
/* HAVE_VIO */
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment