2000-09-11 11:02:43 +04:00
/*
2002-01-30 09:08:46 +03:00
Unix SMB / CIFS implementation .
2000-09-11 11:02:43 +04:00
messages . c header
Copyright ( C ) Andrew Tridgell 2000
2002-01-09 11:27:15 +03:00
Copyright ( C ) 2001 , 2002 by Martin Pool
2011-09-12 19:19:27 +04:00
2000-09-11 11:02:43 +04:00
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-09 23:25:36 +04:00
the Free Software Foundation ; either version 3 of the License , or
2000-09-11 11:02:43 +04:00
( at your option ) any later version .
2011-09-12 19:19:27 +04:00
2000-09-11 11:02:43 +04:00
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 .
2011-09-12 19:19:27 +04:00
2000-09-11 11:02:43 +04:00
You should have received a copy of the GNU General Public License
2007-07-10 04:52:41 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2000-09-11 11:02:43 +04:00
*/
# ifndef _MESSAGES_H_
# define _MESSAGES_H_
2007-05-24 18:47:24 +04:00
/* change the message version with any incompatible changes in the protocol */
# define MESSAGE_VERSION 2
2007-05-24 15:09:37 +04:00
/*
* Special flags passed to message_send . Allocated from the top , lets see when
* it collides with the message types in the lower 16 bits : - )
*/
/*
* Under high load , this message can be dropped . Use for notify - style
* messages that are not critical for correct operation .
*/
# define MSG_FLAG_LOWPRIORITY 0x80000000
2005-06-09 02:10:34 +04:00
2002-09-25 19:19:00 +04:00
/* Flags to classify messages - used in message_send_all() */
/* Sender will filter by flag. */
2007-05-24 15:09:37 +04:00
# define FLAG_MSG_GENERAL 0x0001
# define FLAG_MSG_SMBD 0x0002
# define FLAG_MSG_NMBD 0x0004
2011-08-11 07:10:48 +04:00
# define FLAG_MSG_WINBIND 0x0008
2007-05-24 15:09:37 +04:00
# define FLAG_MSG_PRINT_GENERAL 0x0010
2008-03-31 14:50:23 +04:00
/* dbwrap messages 4001-4999 */
# define FLAG_MSG_DBWRAP 0x0020
2002-09-25 19:19:00 +04:00
2007-06-10 21:02:09 +04:00
/*
* ctdb gives us 64 - bit server ids for messaging_send . This is done to avoid
* pid clashes and to be able to register for special messages like " all
* smbds " .
*
* Normal individual server id ' s have the upper 32 bits to 0 , I picked " 1 " for
* Samba , other subsystems might use something else .
*/
# define MSG_SRVID_SAMBA 0x0000000100000000LL
2011-02-16 02:39:55 +03:00
# include "librpc/gen_ndr/server_id.h"
2007-01-31 14:48:14 +03:00
2007-07-24 13:32:05 +04:00
# define MSG_BROADCAST_PID_STR "0:0"
2007-06-10 21:02:09 +04:00
2007-05-22 02:17:13 +04:00
struct messaging_context ;
2007-05-24 18:47:24 +04:00
struct messaging_rec ;
2007-05-22 02:17:13 +04:00
2007-05-24 18:47:24 +04:00
struct messaging_backend {
2014-06-04 18:36:57 +04:00
int ( * send_fn ) ( struct server_id src ,
struct server_id pid , int msg_type ,
const struct iovec * iov , int iovlen ,
2014-05-17 17:16:02 +04:00
const int * fds , size_t num_fds ,
2014-06-04 18:36:57 +04:00
struct messaging_backend * backend ) ;
2007-05-24 18:47:24 +04:00
void * private_data ;
} ;
2015-10-03 06:42:05 +03:00
int messaging_ctdbd_init ( struct messaging_context * msg_ctx ,
TALLOC_CTX * mem_ctx ,
struct messaging_backend * * presult ) ;
2010-08-31 18:52:56 +04:00
struct ctdbd_connection * messaging_ctdbd_connection ( void ) ;
2007-05-24 18:47:24 +04:00
2007-10-19 04:40:25 +04:00
bool message_send_all ( struct messaging_context * msg_ctx ,
2007-05-22 02:17:13 +04:00
int msg_type ,
const void * buf , size_t len ,
int * n_sent ) ;
struct messaging_context * messaging_init ( TALLOC_CTX * mem_ctx ,
2013-02-18 13:00:26 +04:00
struct tevent_context * ev ) ;
2007-06-10 21:02:09 +04:00
2010-07-04 19:57:57 +04:00
struct server_id messaging_server_id ( const struct messaging_context * msg_ctx ) ;
2014-05-29 18:44:32 +04:00
struct tevent_context * messaging_tevent_context (
struct messaging_context * msg_ctx ) ;
2014-10-17 16:09:03 +04:00
struct server_id_db * messaging_names_db ( struct messaging_context * msg_ctx ) ;
2010-07-04 19:57:57 +04:00
2007-06-10 21:02:09 +04:00
/*
* re - init after a fork
*/
2011-12-12 17:55:54 +04:00
NTSTATUS messaging_reinit ( struct messaging_context * msg_ctx ) ;
2007-06-10 21:02:09 +04:00
2007-05-22 02:17:13 +04:00
NTSTATUS messaging_register ( struct messaging_context * msg_ctx ,
void * private_data ,
uint32_t msg_type ,
void ( * fn ) ( struct messaging_context * msg ,
void * private_data ,
uint32_t msg_type ,
struct server_id server_id ,
2008-10-12 03:46:15 +04:00
DATA_BLOB * data ) ) ;
2007-05-22 02:17:13 +04:00
void messaging_deregister ( struct messaging_context * ctx , uint32_t msg_type ,
void * private_data ) ;
2014-09-30 12:01:51 +04:00
/**
* CAVEAT :
*
* While the messaging_send * ( ) functions are synchronuous by API ,
* they trigger a tevent - based loop upon sending bigger messages .
*
* Hence callers should not use these in purely synchonous code ,
* but run a tevent_loop instead .
*/
2007-05-22 02:17:13 +04:00
NTSTATUS messaging_send ( struct messaging_context * msg_ctx ,
struct server_id server ,
2008-10-12 03:46:15 +04:00
uint32_t msg_type , const DATA_BLOB * data ) ;
2011-10-06 16:38:20 +04:00
2007-05-22 02:17:13 +04:00
NTSTATUS messaging_send_buf ( struct messaging_context * msg_ctx ,
struct server_id server , uint32_t msg_type ,
2013-09-02 21:29:05 +04:00
const uint8_t * buf , size_t len ) ;
2015-10-03 06:42:05 +03:00
int messaging_send_iov_from ( struct messaging_context * msg_ctx ,
struct server_id src , struct server_id dst ,
uint32_t msg_type ,
const struct iovec * iov , int iovlen ,
const int * fds , size_t num_fds ) ;
2014-02-25 16:15:58 +04:00
NTSTATUS messaging_send_iov ( struct messaging_context * msg_ctx ,
struct server_id server , uint32_t msg_type ,
2014-05-17 17:19:18 +04:00
const struct iovec * iov , int iovlen ,
const int * fds , size_t num_fds ) ;
2007-05-22 02:17:13 +04:00
2014-04-24 13:05:53 +04:00
struct tevent_req * messaging_filtered_read_send (
TALLOC_CTX * mem_ctx , struct tevent_context * ev ,
struct messaging_context * msg_ctx ,
bool ( * filter ) ( struct messaging_rec * rec , void * private_data ) ,
void * private_data ) ;
int messaging_filtered_read_recv ( struct tevent_req * req , TALLOC_CTX * mem_ctx ,
struct messaging_rec * * presult ) ;
2013-12-30 14:26:52 +04:00
struct tevent_req * messaging_read_send ( TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct messaging_context * msg ,
uint32_t msg_type ) ;
int messaging_read_recv ( struct tevent_req * req , TALLOC_CTX * mem_ctx ,
struct messaging_rec * * presult ) ;
2014-11-13 14:25:40 +03:00
struct tevent_req * messaging_handler_send (
TALLOC_CTX * mem_ctx , struct tevent_context * ev ,
struct messaging_context * msg_ctx , uint32_t msg_type ,
bool ( * handler ) ( struct messaging_context * msg_ctx ,
struct messaging_rec * * rec , void * private_data ) ,
void * private_data ) ;
int messaging_handler_recv ( struct tevent_req * req ) ;
2014-07-17 15:01:00 +04:00
int messaging_cleanup ( struct messaging_context * msg_ctx , pid_t pid ) ;
2014-04-11 15:08:56 +04:00
bool messaging_parent_dgm_cleanup_init ( struct messaging_context * msg ) ;
2011-03-24 17:56:32 +03:00
# include "librpc/gen_ndr/ndr_messaging.h"
2000-09-11 11:02:43 +04:00
# endif