1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-12 04:23:49 +03:00
Files
samba-mirror/source/lib/socket/socket.h
Andrew Tridgell 058b2fd99e r2581: added "hosts allow" and "hosts deny" checking in smbd. I needed this
as my box keeps getting hit by viruses spreading on my companies
internal network, which screws up my debug log badly (sigh).

metze, I'm not sure if you think access.c should go in the socket
library or not. It is closely tied to the socket functions, but you
may prefer it separate.

The access.c code is a port from Samba3, but with some cleanups to
make it (slighly) less ugly.
2007-10-10 12:59:07 -05:00

96 lines
2.7 KiB
C

/*
Unix SMB/CIFS implementation.
Socket functions
Copyright (C) Stefan Metzmacher 2004
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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef _SAMBA_SOCKET_H
#define _SAMBA_SOCKET_H
struct socket_context;
enum socket_type {
SOCKET_TYPE_STREAM
};
struct socket_ops {
const char *name;
enum socket_type type;
NTSTATUS (*init)(struct socket_context *sock);
/* client ops */
NTSTATUS (*connect)(struct socket_context *sock,
const char *my_address, int my_port,
const char *server_address, int server_port,
uint32_t flags);
/* server ops */
NTSTATUS (*listen)(struct socket_context *sock,
const char *my_address, int port, int queue_size, uint32_t flags);
NTSTATUS (*accept)(struct socket_context *sock,
struct socket_context **new_sock, uint32_t flags);
/* general ops */
NTSTATUS (*recv)(struct socket_context *sock, TALLOC_CTX *mem_ctx,
DATA_BLOB *blob, size_t wantlen, uint32_t flags);
NTSTATUS (*send)(struct socket_context *sock, TALLOC_CTX *mem_ctx,
const DATA_BLOB *blob, size_t *sendlen, uint32_t flags);
void (*close)(struct socket_context *sock);
NTSTATUS (*set_option)(struct socket_context *sock, const char *option, const char *val);
char *(*get_peer_name)(struct socket_context *sock, TALLOC_CTX *mem_ctx);
char *(*get_peer_addr)(struct socket_context *sock, TALLOC_CTX *mem_ctx);
int (*get_peer_port)(struct socket_context *sock);
char *(*get_my_addr)(struct socket_context *sock, TALLOC_CTX *mem_ctx);
int (*get_my_port)(struct socket_context *sock);
int (*get_fd)(struct socket_context *sock);
};
enum socket_state {
SOCKET_STATE_UNDEFINED,
SOCKET_STATE_CLIENT_START,
SOCKET_STATE_CLIENT_CONNECTED,
SOCKET_STATE_CLIENT_STARTTLS,
SOCKET_STATE_CLIENT_ERROR,
SOCKET_STATE_SERVER_LISTEN,
SOCKET_STATE_SERVER_CONNECTED,
SOCKET_STATE_SERVER_STARTTLS,
SOCKET_STATE_SERVER_ERROR
};
#define SOCKET_FLAG_BLOCK 0x00000001
#define SOCKET_FLAG_PEEK 0x00000002
struct socket_context {
enum socket_type type;
enum socket_state state;
uint32_t flags;
int fd;
void *private_data;
const struct socket_ops *ops;
};
#endif /* _SAMBA_SOCKET_H */