2000-09-11 07:02:43 +00:00
/*
2002-01-30 06:08:46 +00:00
Unix SMB / CIFS implementation .
2000-09-11 07:02:43 +00:00
messages . c header
Copyright ( C ) Andrew Tridgell 2000
2002-01-09 08:27:15 +00:00
Copyright ( C ) 2001 , 2002 by Martin Pool
2011-09-12 17:19:27 +02:00
2000-09-11 07:02:43 +00: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 19:25:36 +00:00
the Free Software Foundation ; either version 3 of the License , or
2000-09-11 07:02:43 +00:00
( at your option ) any later version .
2011-09-12 17:19:27 +02:00
2000-09-11 07:02:43 +00: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 17:19:27 +02:00
2000-09-11 07:02:43 +00:00
You should have received a copy of the GNU General Public License
2007-07-10 00:52:41 +00:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2000-09-11 07:02:43 +00:00
*/
# ifndef _MESSAGES_H_
# define _MESSAGES_H_
2020-10-22 11:47:27 +02:00
# include "replace.h"
# include <tevent.h>
2024-08-23 15:53:51 +02:00
# include "libcli/util/ntstatus.h"
2020-10-22 11:47:27 +02:00
2007-05-24 14:47:24 +00:00
/* change the message version with any incompatible changes in the protocol */
# define MESSAGE_VERSION 2
2007-05-24 11:09:37 +00: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 00:39:55 +01:00
# include "librpc/gen_ndr/server_id.h"
2015-07-12 14:33:55 +02:00
# include "lib/util/data_blob.h"
2015-11-02 12:46:35 +01:00
# include "system/network.h"
2007-01-31 11:48:14 +00:00
2007-07-24 09:32:05 +00:00
# define MSG_BROADCAST_PID_STR "0:0"
2007-06-10 17:02:09 +00:00
2007-05-21 22:17:13 +00:00
struct messaging_context ;
2007-05-24 14:47:24 +00:00
struct messaging_rec ;
2007-05-21 22:17:13 +00:00
struct messaging_context * messaging_init ( TALLOC_CTX * mem_ctx ,
2013-02-18 10:00:26 +01:00
struct tevent_context * ev ) ;
2007-06-10 17:02:09 +00:00
2010-07-04 17:57:57 +02:00
struct server_id messaging_server_id ( const struct messaging_context * msg_ctx ) ;
2014-05-29 16:44:32 +02:00
struct tevent_context * messaging_tevent_context (
struct messaging_context * msg_ctx ) ;
2014-10-17 12:09:03 +00:00
struct server_id_db * messaging_names_db ( struct messaging_context * msg_ctx ) ;
2010-07-04 17:57:57 +02:00
2007-06-10 17:02:09 +00:00
/*
* re - init after a fork
*/
2011-12-12 14:55:54 +01:00
NTSTATUS messaging_reinit ( struct messaging_context * msg_ctx ) ;
2007-06-10 17:02:09 +00:00
2007-05-21 22:17:13 +00: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 01:46:15 +02:00
DATA_BLOB * data ) ) ;
2007-05-21 22:17:13 +00:00
void messaging_deregister ( struct messaging_context * ctx , uint32_t msg_type ,
void * private_data ) ;
2014-09-30 10:01:51 +02:00
/**
* CAVEAT :
*
2023-06-30 12:10:26 +02:00
* While the messaging_send * ( ) functions are synchronous by API ,
2014-09-30 10:01:51 +02:00
* they trigger a tevent - based loop upon sending bigger messages .
*
2023-06-30 12:10:26 +02:00
* Hence callers should not use these in purely synchronous code ,
2014-09-30 10:01:51 +02:00
* but run a tevent_loop instead .
*/
2007-05-21 22:17:13 +00:00
NTSTATUS messaging_send ( struct messaging_context * msg_ctx ,
struct server_id server ,
2008-10-12 01:46:15 +02:00
uint32_t msg_type , const DATA_BLOB * data ) ;
2011-10-06 14:38:20 +02:00
2007-05-21 22:17:13 +00:00
NTSTATUS messaging_send_buf ( struct messaging_context * msg_ctx ,
struct server_id server , uint32_t msg_type ,
2013-09-02 19:29:05 +02:00
const uint8_t * buf , size_t len ) ;
2015-10-02 20:42:05 -07: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 12:15:58 +00:00
NTSTATUS messaging_send_iov ( struct messaging_context * msg_ctx ,
struct server_id server , uint32_t msg_type ,
2014-05-17 15:19:18 +02:00
const struct iovec * iov , int iovlen ,
const int * fds , size_t num_fds ) ;
2017-11-05 12:44:01 +01:00
void messaging_send_all ( struct messaging_context * msg_ctx ,
int msg_type , const void * buf , size_t len ) ;
2007-05-21 22:17:13 +00:00
2014-04-24 09:05:53 +00: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 11:26:52 +01: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 11:01:00 +00:00
int messaging_cleanup ( struct messaging_context * msg_ctx , pid_t pid ) ;
2014-04-11 11:08:56 +00:00
bool messaging_parent_dgm_cleanup_init ( struct messaging_context * msg ) ;
2017-06-24 08:38:19 +02: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 15:56:32 +01:00
# include "librpc/gen_ndr/ndr_messaging.h"
2000-09-11 07:02:43 +00:00
# endif