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
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 .
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 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
# define FLAG_MSG_PRINT_NOTIFY 0x0008
# 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
/*
* Virtual Node Numbers are identifying a node within a cluster . Ctdbd sets
* this , we retrieve our vnn from it .
*/
# define NONCLUSTER_VNN (0xFFFFFFFF)
/*
* 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
2007-01-31 14:48:14 +03:00
struct server_id {
2007-05-07 13:35:35 +04:00
pid_t pid ;
2007-06-10 21:02:09 +04:00
# ifdef CLUSTER_SUPPORT
uint32 vnn ;
# endif
2007-01-31 14:48:14 +03:00
} ;
2007-07-24 13:32:05 +04:00
# ifdef CLUSTER_SUPPORT
# define MSG_BROADCAST_PID_STR "0:0"
# else
# define MSG_BROADCAST_PID_STR "0"
# endif
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_context belongs to messages . c , but because we still have
* messaging_dispatch , we need it here . Once we get rid of signals for
* notifying processes , this will go .
*/
struct messaging_context {
struct server_id id ;
struct event_context * event_ctx ;
struct messaging_callback * callbacks ;
struct messaging_backend * local ;
2007-06-10 21:02:09 +04:00
struct messaging_backend * remote ;
2007-05-24 18:47:24 +04:00
} ;
struct messaging_backend {
NTSTATUS ( * send_fn ) ( struct messaging_context * msg_ctx ,
struct server_id pid , int msg_type ,
2008-10-12 03:46:15 +04:00
const DATA_BLOB * data ,
2007-05-24 18:47:24 +04:00
struct messaging_backend * backend ) ;
void * private_data ;
} ;
NTSTATUS messaging_tdb_init ( struct messaging_context * msg_ctx ,
TALLOC_CTX * mem_ctx ,
struct messaging_backend * * presult ) ;
2007-06-10 21:02:09 +04:00
NTSTATUS messaging_ctdbd_init ( struct messaging_context * msg_ctx ,
TALLOC_CTX * mem_ctx ,
struct messaging_backend * * presult ) ;
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 event_context * messaging_event_context ( struct messaging_context * msg_ctx ) ;
struct messaging_context * messaging_init ( TALLOC_CTX * mem_ctx ,
struct server_id server_id ,
struct event_context * ev ) ;
2007-06-10 21:02:09 +04:00
/*
* re - init after a fork
*/
NTSTATUS messaging_reinit ( struct messaging_context * msg_ctx ) ;
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 ) ;
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 ) ;
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 ,
const uint8 * buf , size_t len ) ;
2007-05-24 18:47:24 +04:00
void messaging_dispatch_rec ( struct messaging_context * msg_ctx ,
struct messaging_rec * rec ) ;
2007-05-22 02:17:13 +04:00
2000-09-11 11:02:43 +04:00
# endif