2005-01-30 03:55:49 +03:00
/*
Unix SMB / CIFS implementation .
structures specific to stream servers
Copyright ( C ) Stefan ( metze ) Metzmacher 2004
Copyright ( C ) Andrew Tridgell 2005
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
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2005-01-30 03:55:49 +03:00
( 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
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2005-01-30 03:55:49 +03:00
*/
2006-03-14 18:03:25 +03:00
# ifndef __SERVICE_STREAM_H__
# define __SERVICE_STREAM_H__
2011-05-02 04:55:20 +04:00
# include "librpc/gen_ndr/server_id.h"
2007-09-24 01:35:03 +04:00
2005-01-30 03:55:49 +03:00
/* modules can use the following to determine if the interface has changed
* please increment the version number after each interface change
2005-12-08 12:13:28 +03:00
* with a comment and maybe update struct stream_connection_critical_sizes .
2005-01-30 03:55:49 +03:00
*/
2005-12-08 12:13:28 +03:00
/* version 0 - initial version - metze */
# define SERVER_SERVICE_VERSION 0
2005-01-30 03:55:49 +03:00
/*
top level context for an established stream connection
*/
struct stream_connection {
const struct stream_server_ops * ops ;
const struct model_ops * model_ops ;
2007-01-10 13:52:09 +03:00
struct server_id server_id ;
2009-02-02 12:30:03 +03:00
void * private_data ;
2005-01-30 03:55:49 +03:00
struct {
2008-12-29 22:24:57 +03:00
struct tevent_context * ctx ;
struct tevent_fd * fde ;
2005-01-30 03:55:49 +03:00
} event ;
struct socket_context * socket ;
2011-05-03 04:40:33 +04:00
struct imessaging_context * msg_ctx ;
2007-12-12 04:15:29 +03:00
struct loadparm_context * lp_ctx ;
2005-12-08 12:13:28 +03:00
2010-05-21 18:34:58 +04:00
struct tstream_context * tstream ;
2009-12-23 13:48:06 +03:00
struct tsocket_address * local_address ;
struct tsocket_address * remote_address ;
2008-05-17 02:02:28 +04:00
/*
* this transport layer session info , normally NULL
* which means the same as an anonymous session info
*/
struct auth_session_info * session_info ;
2016-11-30 04:56:16 +03:00
uint processing ;
2005-12-08 12:13:28 +03:00
const char * terminate ;
2017-09-14 22:09:23 +03:00
void * process_context ;
2005-01-30 03:55:49 +03:00
} ;
/* operations passed to the service_stream code */
struct stream_server_ops {
/* the name of the server_service */
const char * name ;
void ( * accept_connection ) ( struct stream_connection * ) ;
2005-02-03 14:25:52 +03:00
void ( * recv_handler ) ( struct stream_connection * , uint16_t ) ;
void ( * send_handler ) ( struct stream_connection * , uint16_t ) ;
2005-01-30 03:55:49 +03:00
} ;
2006-03-14 18:03:25 +03:00
2010-10-11 02:49:13 +04:00
void stream_terminate_connection ( struct stream_connection * srv_conn , const char * reason ) ;
2006-03-14 18:03:25 +03:00
# endif /* __SERVICE_STREAM_H__ */