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_
2020-10-22 12:47:27 +03:00
# include "replace.h"
# include <tevent.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
2011-02-16 02:39:55 +03:00
# include "librpc/gen_ndr/server_id.h"
2015-07-12 15:33:55 +03:00
# include "lib/util/data_blob.h"
2015-11-02 14:46:35 +03:00
# include "system/network.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
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 ) ;
2017-11-05 14:44:01 +03:00
void messaging_send_all ( struct messaging_context * msg_ctx ,
int msg_type , const void * buf , size_t len ) ;
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-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 ) ;
2017-06-24 09:38:19 +03:00
struct messaging_rec * messaging_rec_create (
TALLOC_CTX * mem_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 ) ;
2011-03-24 17:56:32 +03:00
# include "librpc/gen_ndr/ndr_messaging.h"
2000-09-11 11:02:43 +04:00
# endif