summaryrefslogtreecommitdiff
path: root/source4/lib/messaging
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/messaging')
-rw-r--r--source4/lib/messaging/irpc.h14
-rw-r--r--source4/lib/messaging/messaging.c178
-rw-r--r--source4/lib/messaging/messaging.h22
-rw-r--r--source4/lib/messaging/pymessaging.c114
-rw-r--r--source4/lib/messaging/tests/irpc.c10
-rw-r--r--source4/lib/messaging/tests/messaging.c34
6 files changed, 187 insertions, 185 deletions
diff --git a/source4/lib/messaging/irpc.h b/source4/lib/messaging/irpc.h
index bdb1b8fedb..15f8259e51 100644
--- a/source4/lib/messaging/irpc.h
+++ b/source4/lib/messaging/irpc.h
@@ -35,7 +35,7 @@ struct irpc_message {
struct ndr_pull *ndr;
bool defer_reply;
bool no_reply;
- struct messaging_context *msg_ctx;
+ struct imessaging_context *msg_ctx;
struct irpc_list *irpc;
void *data;
struct tevent_context *ev;
@@ -58,24 +58,24 @@ typedef NTSTATUS (*irpc_function_t)(struct irpc_message *, void *r);
struct ndr_interface_table;
-NTSTATUS irpc_register(struct messaging_context *msg_ctx,
+NTSTATUS irpc_register(struct imessaging_context *msg_ctx,
const struct ndr_interface_table *table,
int call, irpc_function_t fn, void *private_data);
struct dcerpc_binding_handle *irpc_binding_handle(TALLOC_CTX *mem_ctx,
- struct messaging_context *msg_ctx,
+ struct imessaging_context *msg_ctx,
struct server_id server_id,
const struct ndr_interface_table *table);
struct dcerpc_binding_handle *irpc_binding_handle_by_name(TALLOC_CTX *mem_ctx,
- struct messaging_context *msg_ctx,
+ struct imessaging_context *msg_ctx,
const char *dest_task,
const struct ndr_interface_table *table);
void irpc_binding_handle_add_security_token(struct dcerpc_binding_handle *h,
struct security_token *token);
-NTSTATUS irpc_add_name(struct messaging_context *msg_ctx, const char *name);
-struct server_id *irpc_servers_byname(struct messaging_context *msg_ctx, TALLOC_CTX *mem_ctx, const char *name);
-void irpc_remove_name(struct messaging_context *msg_ctx, const char *name);
+NTSTATUS irpc_add_name(struct imessaging_context *msg_ctx, const char *name);
+struct server_id *irpc_servers_byname(struct imessaging_context *msg_ctx, TALLOC_CTX *mem_ctx, const char *name);
+void irpc_remove_name(struct imessaging_context *msg_ctx, const char *name);
NTSTATUS irpc_send_reply(struct irpc_message *m, NTSTATUS status);
#endif
diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c
index f9d63203f2..484f22b2ee 100644
--- a/source4/lib/messaging/messaging.c
+++ b/source4/lib/messaging/messaging.c
@@ -27,22 +27,22 @@
#include "lib/socket/socket.h"
#include "librpc/gen_ndr/ndr_irpc.h"
#include "lib/messaging/irpc.h"
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
#include "../lib/util/unix_privs.h"
#include "librpc/rpc/dcerpc.h"
-#include <tdb.h>
+#include "../lib/tdb_compat/tdb_compat.h"
#include "../lib/util/util_tdb.h"
#include "cluster/cluster.h"
#include "../lib/util/tevent_ntstatus.h"
/* change the message version with any incompatible changes in the protocol */
-#define MESSAGING_VERSION 1
+#define IMESSAGING_VERSION 1
/*
a pending irpc call
*/
struct irpc_request {
- struct messaging_context *msg_ctx;
+ struct imessaging_context *msg_ctx;
int callid;
struct {
void (*handler)(struct irpc_request *irpc, struct irpc_message *m);
@@ -50,7 +50,7 @@ struct irpc_request {
} incoming;
};
-struct messaging_context {
+struct imessaging_context {
struct server_id server_id;
struct socket_context *sock;
const char *base_path;
@@ -58,8 +58,8 @@ struct messaging_context {
struct dispatch_fn **dispatch;
uint32_t num_types;
struct idr_context *dispatch_tree;
- struct messaging_rec *pending;
- struct messaging_rec *retry_queue;
+ struct imessaging_rec *pending;
+ struct imessaging_rec *retry_queue;
struct irpc_list *irpc;
struct idr_context *idr;
const char **names;
@@ -81,12 +81,12 @@ struct dispatch_fn {
};
/* an individual message */
-struct messaging_rec {
- struct messaging_rec *next, *prev;
- struct messaging_context *msg;
+struct imessaging_rec {
+ struct imessaging_rec *next, *prev;
+ struct imessaging_context *msg;
const char *path;
- struct messaging_header {
+ struct imessaging_header {
uint32_t version;
uint32_t msg_type;
struct server_id from;
@@ -99,20 +99,22 @@ struct messaging_rec {
};
-static void irpc_handler(struct messaging_context *, void *,
+static void irpc_handler(struct imessaging_context *, void *,
uint32_t, struct server_id, DATA_BLOB *);
/*
A useful function for testing the message system.
*/
-static void ping_message(struct messaging_context *msg, void *private_data,
+static void ping_message(struct imessaging_context *msg, void *private_data,
uint32_t msg_type, struct server_id src, DATA_BLOB *data)
{
- DEBUG(1,("INFO: Received PING message from server %u.%u [%.*s]\n",
- (unsigned int)src.node, (unsigned int)src.id, (int)data->length,
+ char *task_id = server_id_str(NULL, &src);
+ DEBUG(1,("INFO: Received PING message from server %s [%.*s]\n",
+ task_id, (int)data->length,
data->data?(const char *)data->data:""));
- messaging_send(msg, src, MSG_PONG, data);
+ talloc_free(task_id);
+ imessaging_send(msg, src, MSG_PONG, data);
}
/*
@@ -121,7 +123,7 @@ static void ping_message(struct messaging_context *msg, void *private_data,
static NTSTATUS irpc_uptime(struct irpc_message *msg,
struct irpc_uptime *r)
{
- struct messaging_context *ctx = talloc_get_type(msg->private_data, struct messaging_context);
+ struct imessaging_context *ctx = talloc_get_type(msg->private_data, struct imessaging_context);
*r->out.start_time = timeval_to_nttime(&ctx->start_time);
return NT_STATUS_OK;
}
@@ -129,10 +131,10 @@ static NTSTATUS irpc_uptime(struct irpc_message *msg,
/*
return the path to a messaging socket
*/
-static char *messaging_path(struct messaging_context *msg, struct server_id server_id)
+static char *imessaging_path(struct imessaging_context *msg, struct server_id server_id)
{
TALLOC_CTX *tmp_ctx = talloc_new(msg);
- const char *id = cluster_id_string(tmp_ctx, server_id);
+ const char *id = server_id_str(tmp_ctx, &server_id);
char *s;
if (id == NULL) {
return NULL;
@@ -149,7 +151,7 @@ static char *messaging_path(struct messaging_context *msg, struct server_id serv
per message. That allows a single messasging context to register
(for example) a debug handler for more than one piece of code
*/
-static void messaging_dispatch(struct messaging_context *msg, struct messaging_rec *rec)
+static void imessaging_dispatch(struct imessaging_context *msg, struct imessaging_rec *rec)
{
struct dispatch_fn *d, *next;
@@ -176,18 +178,18 @@ static void messaging_dispatch(struct messaging_context *msg, struct messaging_r
/*
handler for messages that arrive from other nodes in the cluster
*/
-static void cluster_message_handler(struct messaging_context *msg, DATA_BLOB packet)
+static void cluster_message_handler(struct imessaging_context *msg, DATA_BLOB packet)
{
- struct messaging_rec *rec;
+ struct imessaging_rec *rec;
- rec = talloc(msg, struct messaging_rec);
+ rec = talloc(msg, struct imessaging_rec);
if (rec == NULL) {
- smb_panic("Unable to allocate messaging_rec");
+ smb_panic("Unable to allocate imessaging_rec");
}
rec->msg = msg;
rec->path = msg->path;
- rec->header = (struct messaging_header *)packet.data;
+ rec->header = (struct imessaging_header *)packet.data;
rec->packet = packet;
rec->retries = 0;
@@ -198,7 +200,7 @@ static void cluster_message_handler(struct messaging_context *msg, DATA_BLOB pac
return;
}
- messaging_dispatch(msg, rec);
+ imessaging_dispatch(msg, rec);
talloc_free(rec);
}
@@ -207,9 +209,9 @@ static void cluster_message_handler(struct messaging_context *msg, DATA_BLOB pac
/*
try to send the message
*/
-static NTSTATUS try_send(struct messaging_rec *rec)
+static NTSTATUS try_send(struct imessaging_rec *rec)
{
- struct messaging_context *msg = rec->msg;
+ struct imessaging_context *msg = rec->msg;
size_t nsent;
void *priv;
NTSTATUS status;
@@ -238,15 +240,15 @@ static NTSTATUS try_send(struct messaging_rec *rec)
static void msg_retry_timer(struct tevent_context *ev, struct tevent_timer *te,
struct timeval t, void *private_data)
{
- struct messaging_context *msg = talloc_get_type(private_data,
- struct messaging_context);
+ struct imessaging_context *msg = talloc_get_type(private_data,
+ struct imessaging_context);
msg->retry_te = NULL;
/* put the messages back on the main queue */
while (msg->retry_queue) {
- struct messaging_rec *rec = msg->retry_queue;
+ struct imessaging_rec *rec = msg->retry_queue;
DLIST_REMOVE(msg->retry_queue, rec);
- DLIST_ADD_END(msg->pending, rec, struct messaging_rec *);
+ DLIST_ADD_END(msg->pending, rec, struct imessaging_rec *);
}
EVENT_FD_WRITEABLE(msg->event.fde);
@@ -255,10 +257,10 @@ static void msg_retry_timer(struct tevent_context *ev, struct tevent_timer *te,
/*
handle a socket write event
*/
-static void messaging_send_handler(struct messaging_context *msg)
+static void imessaging_send_handler(struct imessaging_context *msg)
{
while (msg->pending) {
- struct messaging_rec *rec = msg->pending;
+ struct imessaging_rec *rec = msg->pending;
NTSTATUS status;
status = try_send(rec);
if (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) {
@@ -268,7 +270,7 @@ static void messaging_send_handler(struct messaging_context *msg)
backoff this record */
DLIST_REMOVE(msg->pending, rec);
DLIST_ADD_END(msg->retry_queue, rec,
- struct messaging_rec *);
+ struct imessaging_rec *);
if (msg->retry_te == NULL) {
msg->retry_te =
event_add_timed(msg->event.ev, msg,
@@ -282,8 +284,8 @@ static void messaging_send_handler(struct messaging_context *msg)
if (!NT_STATUS_IS_OK(status)) {
TALLOC_CTX *tmp_ctx = talloc_new(msg);
DEBUG(1,("messaging: Lost message from %s to %s of type %u - %s\n",
- cluster_id_string(tmp_ctx, rec->header->from),
- cluster_id_string(tmp_ctx, rec->header->to),
+ server_id_str(tmp_ctx, &rec->header->from),
+ server_id_str(tmp_ctx, &rec->header->to),
rec->header->msg_type,
nt_errstr(status)));
talloc_free(tmp_ctx);
@@ -299,9 +301,9 @@ static void messaging_send_handler(struct messaging_context *msg)
/*
handle a new incoming packet
*/
-static void messaging_recv_handler(struct messaging_context *msg)
+static void imessaging_recv_handler(struct imessaging_context *msg)
{
- struct messaging_rec *rec;
+ struct imessaging_rec *rec;
NTSTATUS status;
DATA_BLOB packet;
size_t msize;
@@ -332,15 +334,15 @@ static void messaging_recv_handler(struct messaging_context *msg)
return;
}
- rec = talloc(msg, struct messaging_rec);
+ rec = talloc(msg, struct imessaging_rec);
if (rec == NULL) {
- smb_panic("Unable to allocate messaging_rec");
+ smb_panic("Unable to allocate imessaging_rec");
}
talloc_steal(rec, packet.data);
rec->msg = msg;
rec->path = msg->path;
- rec->header = (struct messaging_header *)packet.data;
+ rec->header = (struct imessaging_header *)packet.data;
rec->packet = packet;
rec->retries = 0;
@@ -351,7 +353,7 @@ static void messaging_recv_handler(struct messaging_context *msg)
return;
}
- messaging_dispatch(msg, rec);
+ imessaging_dispatch(msg, rec);
talloc_free(rec);
}
@@ -359,16 +361,16 @@ static void messaging_recv_handler(struct messaging_context *msg)
/*
handle a socket event
*/
-static void messaging_handler(struct tevent_context *ev, struct tevent_fd *fde,
+static void imessaging_handler(struct tevent_context *ev, struct tevent_fd *fde,
uint16_t flags, void *private_data)
{
- struct messaging_context *msg = talloc_get_type(private_data,
- struct messaging_context);
+ struct imessaging_context *msg = talloc_get_type(private_data,
+ struct imessaging_context);
if (flags & EVENT_FD_WRITE) {
- messaging_send_handler(msg);
+ imessaging_send_handler(msg);
}
if (flags & EVENT_FD_READ) {
- messaging_recv_handler(msg);
+ imessaging_recv_handler(msg);
}
}
@@ -376,7 +378,7 @@ static void messaging_handler(struct tevent_context *ev, struct tevent_fd *fde,
/*
Register a dispatch function for a particular message type.
*/
-NTSTATUS messaging_register(struct messaging_context *msg, void *private_data,
+NTSTATUS imessaging_register(struct imessaging_context *msg, void *private_data,
uint32_t msg_type, msg_callback_t fn)
{
struct dispatch_fn *d;
@@ -409,7 +411,7 @@ NTSTATUS messaging_register(struct messaging_context *msg, void *private_data,
register a temporary message handler. The msg_type is allocated
above MSG_TMP_BASE
*/
-NTSTATUS messaging_register_tmp(struct messaging_context *msg, void *private_data,
+NTSTATUS imessaging_register_tmp(struct imessaging_context *msg, void *private_data,
msg_callback_t fn, uint32_t *msg_type)
{
struct dispatch_fn *d;
@@ -435,7 +437,7 @@ NTSTATUS messaging_register_tmp(struct messaging_context *msg, void *private_dat
/*
De-register the function for a particular message type.
*/
-void messaging_deregister(struct messaging_context *msg, uint32_t msg_type, void *private_data)
+void imessaging_deregister(struct imessaging_context *msg, uint32_t msg_type, void *private_data)
{
struct dispatch_fn *d, *next;
@@ -460,14 +462,14 @@ void messaging_deregister(struct messaging_context *msg, uint32_t msg_type, void
/*
Send a message to a particular server
*/
-NTSTATUS messaging_send(struct messaging_context *msg, struct server_id server,
+NTSTATUS imessaging_send(struct imessaging_context *msg, struct server_id server,
uint32_t msg_type, const DATA_BLOB *data)
{
- struct messaging_rec *rec;
+ struct imessaging_rec *rec;
NTSTATUS status;
size_t dlength = data?data->length:0;
- rec = talloc(msg, struct messaging_rec);
+ rec = talloc(msg, struct imessaging_rec);
if (rec == NULL) {
return NT_STATUS_NO_MEMORY;
}
@@ -480,10 +482,10 @@ NTSTATUS messaging_send(struct messaging_context *msg, struct server_id server,
rec->retries = 0;
rec->msg = msg;
- rec->header = (struct messaging_header *)rec->packet.data;
+ rec->header = (struct imessaging_header *)rec->packet.data;
/* zero padding */
ZERO_STRUCTP(rec->header);
- rec->header->version = MESSAGING_VERSION;
+ rec->header->version = IMESSAGING_VERSION;
rec->header->msg_type = msg_type;
rec->header->from = msg->server_id;
rec->header->to = server;
@@ -501,7 +503,7 @@ NTSTATUS messaging_send(struct messaging_context *msg, struct server_id server,
return status;
}
- rec->path = messaging_path(msg, server);
+ rec->path = imessaging_path(msg, server);
talloc_steal(rec, rec->path);
if (msg->pending != NULL) {
@@ -514,7 +516,7 @@ NTSTATUS messaging_send(struct messaging_context *msg, struct server_id server,
if (msg->pending == NULL) {
EVENT_FD_WRITEABLE(msg->event.fde);
}
- DLIST_ADD_END(msg->pending, rec, struct messaging_rec *);
+ DLIST_ADD_END(msg->pending, rec, struct imessaging_rec *);
return NT_STATUS_OK;
}
@@ -526,7 +528,7 @@ NTSTATUS messaging_send(struct messaging_context *msg, struct server_id server,
/*
Send a message to a particular server, with the message containing a single pointer
*/
-NTSTATUS messaging_send_ptr(struct messaging_context *msg, struct server_id server,
+NTSTATUS imessaging_send_ptr(struct imessaging_context *msg, struct server_id server,
uint32_t msg_type, void *ptr)
{
DATA_BLOB blob;
@@ -534,14 +536,14 @@ NTSTATUS messaging_send_ptr(struct messaging_context *msg, struct server_id serv
blob.data = (uint8_t *)&ptr;
blob.length = sizeof(void *);
- return messaging_send(msg, server, msg_type, &blob);
+ return imessaging_send(msg, server, msg_type, &blob);
}
/*
destroy the messaging context
*/
-static int messaging_destructor(struct messaging_context *msg)
+static int imessaging_destructor(struct imessaging_context *msg)
{
unlink(msg->path);
while (msg->names && msg->names[0]) {
@@ -553,12 +555,12 @@ static int messaging_destructor(struct messaging_context *msg)
/*
create the listening socket and setup the dispatcher
*/
-struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
+struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
const char *dir,
struct server_id server_id,
struct tevent_context *ev)
{
- struct messaging_context *msg;
+ struct imessaging_context *msg;
NTSTATUS status;
struct socket_address *path;
@@ -566,7 +568,7 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
return NULL;
}
- msg = talloc_zero(mem_ctx, struct messaging_context);
+ msg = talloc_zero(mem_ctx, struct imessaging_context);
if (msg == NULL) {
return NULL;
}
@@ -582,7 +584,7 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
mkdir(dir, 0700);
msg->base_path = talloc_reference(msg, dir);
- msg->path = messaging_path(msg, server_id);
+ msg->path = imessaging_path(msg, server_id);
msg->server_id = server_id;
msg->idr = idr_init(msg);
msg->dispatch_tree = idr_init(msg);
@@ -617,13 +619,13 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
msg->event.ev = ev;
msg->event.fde = event_add_fd(ev, msg, socket_get_fd(msg->sock),
- EVENT_FD_READ, messaging_handler, msg);
+ EVENT_FD_READ, imessaging_handler, msg);
tevent_fd_set_auto_close(msg->event.fde);
- talloc_set_destructor(msg, messaging_destructor);
+ talloc_set_destructor(msg, imessaging_destructor);
- messaging_register(msg, NULL, MSG_PING, ping_message);
- messaging_register(msg, NULL, MSG_IRPC, irpc_handler);
+ imessaging_register(msg, NULL, MSG_PING, ping_message);
+ imessaging_register(msg, NULL, MSG_IRPC, irpc_handler);
IRPC_REGISTER(msg, irpc, IRPC_UPTIME, irpc_uptime, msg);
return msg;
@@ -632,14 +634,14 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
/*
A hack, for the short term until we get 'client only' messaging in place
*/
-struct messaging_context *messaging_client_init(TALLOC_CTX *mem_ctx,
+struct imessaging_context *imessaging_client_init(TALLOC_CTX *mem_ctx,
const char *dir,
struct tevent_context *ev)
{
struct server_id id;
ZERO_STRUCT(id);
- id.id = random() % 0x10000000;
- return messaging_init(mem_ctx, dir, id, ev);
+ id.pid = random() % 0x10000000;
+ return imessaging_init(mem_ctx, dir, id, ev);
}
/*
a list of registered irpc server functions
@@ -657,7 +659,7 @@ struct irpc_list {
/*
register a irpc server function
*/
-NTSTATUS irpc_register(struct messaging_context *msg_ctx,
+NTSTATUS irpc_register(struct imessaging_context *msg_ctx,
const struct ndr_interface_table *table,
int callnum, irpc_function_t fn, void *private_data)
{
@@ -688,7 +690,7 @@ NTSTATUS irpc_register(struct messaging_context *msg_ctx,
/*
handle an incoming irpc reply message
*/
-static void irpc_handler_reply(struct messaging_context *msg_ctx, struct irpc_message *m)
+static void irpc_handler_reply(struct imessaging_context *msg_ctx, struct irpc_message *m)
{
struct irpc_request *irpc;
@@ -734,7 +736,7 @@ NTSTATUS irpc_send_reply(struct irpc_message *m, NTSTATUS status)
/* send the reply message */
packet = ndr_push_blob(push);
- status = messaging_send(m->msg_ctx, m->from, MSG_IRPC, &packet);
+ status = imessaging_send(m->msg_ctx, m->from, MSG_IRPC, &packet);
if (!NT_STATUS_IS_OK(status)) goto failed;
failed:
@@ -745,7 +747,7 @@ failed:
/*
handle an incoming irpc request message
*/
-static void irpc_handler_request(struct messaging_context *msg_ctx,
+static void irpc_handler_request(struct imessaging_context *msg_ctx,
struct irpc_message *m)
{
struct irpc_list *i;
@@ -809,7 +811,7 @@ failed:
/*
handle an incoming irpc message
*/
-static void irpc_handler(struct messaging_context *msg_ctx, void *private_data,
+static void irpc_handler(struct imessaging_context *msg_ctx, void *private_data,
uint32_t msg_type, struct server_id src, DATA_BLOB *packet)
{
struct irpc_message *m;
@@ -856,7 +858,7 @@ static int irpc_destructor(struct irpc_request *irpc)
/*
open the naming database
*/
-static struct tdb_wrap *irpc_namedb_open(struct messaging_context *msg_ctx)
+static struct tdb_wrap *irpc_namedb_open(struct imessaging_context *msg_ctx)
{
struct tdb_wrap *t;
char *path = talloc_asprintf(msg_ctx, "%s/names.tdb", msg_ctx->base_path);
@@ -872,7 +874,7 @@ static struct tdb_wrap *irpc_namedb_open(struct messaging_context *msg_ctx)
/*
add a string name that this irpc server can be called on
*/
-NTSTATUS irpc_add_name(struct messaging_context *msg_ctx, const char *name)
+NTSTATUS irpc_add_name(struct imessaging_context *msg_ctx, const char *name)
{
struct tdb_wrap *t;
TDB_DATA rec;
@@ -912,7 +914,7 @@ NTSTATUS irpc_add_name(struct messaging_context *msg_ctx, const char *name)
/*
return a list of server ids for a server name
*/
-struct server_id *irpc_servers_byname(struct messaging_context *msg_ctx,
+struct server_id *irpc_servers_byname(struct imessaging_context *msg_ctx,
TALLOC_CTX *mem_ctx,
const char *name)
{
@@ -957,7 +959,7 @@ struct server_id *irpc_servers_byname(struct messaging_context *msg_ctx,
/*
remove a name from a messaging context
*/
-void irpc_remove_name(struct messaging_context *msg_ctx, const char *name)
+void irpc_remove_name(struct imessaging_context *msg_ctx, const char *name)
{
struct tdb_wrap *t;
TDB_DATA rec;
@@ -1005,13 +1007,13 @@ void irpc_remove_name(struct messaging_context *msg_ctx, const char *name)
talloc_free(t);
}
-struct server_id messaging_get_server_id(struct messaging_context *msg_ctx)
+struct server_id imessaging_get_server_id(struct imessaging_context *msg_ctx)
{
return msg_ctx->server_id;
}
struct irpc_bh_state {
- struct messaging_context *msg_ctx;
+ struct imessaging_context *msg_ctx;
struct server_id server_id;
const struct ndr_interface_table *table;
uint32_t timeout;
@@ -1137,7 +1139,7 @@ static struct tevent_req *irpc_bh_raw_call_send(TALLOC_CTX *mem_ctx,
/* and send it */
state->in_packet = ndr_push_blob(ndr);
- status = messaging_send(hs->msg_ctx, hs->server_id,
+ status = imessaging_send(hs->msg_ctx, hs->server_id,
MSG_IRPC, &state->in_packet);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
@@ -1176,7 +1178,7 @@ static void irpc_bh_raw_call_incoming_handler(struct irpc_request *irpc,
m->ndr->data + m->ndr->offset,
m->ndr->data_size - m->ndr->offset);
if ((m->ndr->data_size - m->ndr->offset) > 0 && !state->out_data.data) {
- tevent_req_nomem(NULL, req);
+ tevent_req_oom(req);
return;
}
@@ -1270,7 +1272,7 @@ static const struct dcerpc_binding_handle_ops irpc_bh_ops = {
/* initialise a irpc binding handle */
struct dcerpc_binding_handle *irpc_binding_handle(TALLOC_CTX *mem_ctx,
- struct messaging_context *msg_ctx,
+ struct imessaging_context *msg_ctx,
struct server_id server_id,
const struct ndr_interface_table *table)
{
@@ -1298,7 +1300,7 @@ struct dcerpc_binding_handle *irpc_binding_handle(TALLOC_CTX *mem_ctx,
}
struct dcerpc_binding_handle *irpc_binding_handle_by_name(TALLOC_CTX *mem_ctx,
- struct messaging_context *msg_ctx,
+ struct imessaging_context *msg_ctx,
const char *dest_task,
const struct ndr_interface_table *table)
{
@@ -1312,7 +1314,7 @@ struct dcerpc_binding_handle *irpc_binding_handle_by_name(TALLOC_CTX *mem_ctx,
errno = EADDRNOTAVAIL;
return NULL;
}
- if (sids[0].id == 0) {
+ if (sids[0].pid == 0) {
talloc_free(sids);
errno = EADDRNOTAVAIL;
return NULL;
diff --git a/source4/lib/messaging/messaging.h b/source4/lib/messaging/messaging.h
index 4bc6d8c509..eb8a8abc79 100644
--- a/source4/lib/messaging/messaging.h
+++ b/source4/lib/messaging/messaging.h
@@ -21,9 +21,9 @@
#ifndef _MESSAGES_H_
#define _MESSAGES_H_
-#include "librpc/gen_ndr/server_id4.h"
+#include "librpc/gen_ndr/server_id.h"
-struct messaging_context;
+struct imessaging_context;
/* general messages */
#define MSG_DEBUG 1
@@ -42,27 +42,27 @@ struct messaging_context;
/* taskid for messaging of parent process */
#define SAMBA_PARENT_TASKID 0
-typedef void (*msg_callback_t)(struct messaging_context *msg, void *private_data,
+typedef void (*msg_callback_t)(struct imessaging_context *msg, void *private_data,
uint32_t msg_type,
struct server_id server_id, DATA_BLOB *data);
-NTSTATUS messaging_send(struct messaging_context *msg, struct server_id server,
+NTSTATUS imessaging_send(struct imessaging_context *msg, struct server_id server,
uint32_t msg_type, const DATA_BLOB *data);
-NTSTATUS messaging_register(struct messaging_context *msg, void *private_data,
+NTSTATUS imessaging_register(struct imessaging_context *msg, void *private_data,
uint32_t msg_type,
msg_callback_t fn);
-NTSTATUS messaging_register_tmp(struct messaging_context *msg, void *private_data,
+NTSTATUS imessaging_register_tmp(struct imessaging_context *msg, void *private_data,
msg_callback_t fn, uint32_t *msg_type);
-struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
+struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
const char *dir,
struct server_id server_id,
struct tevent_context *ev);
-struct messaging_context *messaging_client_init(TALLOC_CTX *mem_ctx,
+struct imessaging_context *imessaging_client_init(TALLOC_CTX *mem_ctx,
const char *dir,
struct tevent_context *ev);
-NTSTATUS messaging_send_ptr(struct messaging_context *msg, struct server_id server,
+NTSTATUS imessaging_send_ptr(struct imessaging_context *msg, struct server_id server,
uint32_t msg_type, void *ptr);
-void messaging_deregister(struct messaging_context *msg, uint32_t msg_type, void *private_data);
-struct server_id messaging_get_server_id(struct messaging_context *msg_ctx);
+void imessaging_deregister(struct imessaging_context *msg, uint32_t msg_type, void *private_data);
+struct server_id imessaging_get_server_id(struct imessaging_context *msg_ctx);
#endif
diff --git a/source4/lib/messaging/pymessaging.c b/source4/lib/messaging/pymessaging.c
index 358d205b53..cafd45beae 100644
--- a/source4/lib/messaging/pymessaging.c
+++ b/source4/lib/messaging/pymessaging.c
@@ -31,11 +31,11 @@
#include "param/param.h"
#include "param/pyparam.h"
#include "librpc/rpc/dcerpc.h"
-#include "librpc/gen_ndr/server_id4.h"
+#include "librpc/gen_ndr/server_id.h"
void initmessaging(void);
-extern PyTypeObject messaging_Type;
+extern PyTypeObject imessaging_Type;
static bool server_id_from_py(PyObject *object, struct server_id *server_id)
{
@@ -45,12 +45,12 @@ static bool server_id_from_py(PyObject *object, struct server_id *server_id)
}
if (PyTuple_Size(object) == 3) {
- return PyArg_ParseTuple(object, "iii", &server_id->id, &server_id->id2, &server_id->node);
+ return PyArg_ParseTuple(object, "iii", &server_id->pid, &server_id->task_id, &server_id->vnn);
} else {
- int id, id2;
- if (!PyArg_ParseTuple(object, "ii", &id, &id2))
+ int pid, task_id;
+ if (!PyArg_ParseTuple(object, "ii", &pid, &task_id))
return false;
- *server_id = cluster_id(id, id2);
+ *server_id = cluster_id(pid, task_id);
return true;
}
}
@@ -58,23 +58,23 @@ static bool server_id_from_py(PyObject *object, struct server_id *server_id)
typedef struct {
PyObject_HEAD
TALLOC_CTX *mem_ctx;
- struct messaging_context *msg_ctx;
-} messaging_Object;
+ struct imessaging_context *msg_ctx;
+} imessaging_Object;
-static PyObject *py_messaging_connect(PyTypeObject *self, PyObject *args, PyObject *kwargs)
+static PyObject *py_imessaging_connect(PyTypeObject *self, PyObject *args, PyObject *kwargs)
{
struct tevent_context *ev;
const char *kwnames[] = { "own_id", "messaging_path", NULL };
PyObject *own_id = Py_None;
- const char *messaging_path = NULL;
- messaging_Object *ret;
+ const char *imessaging_path = NULL;
+ imessaging_Object *ret;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Oz:connect",
- discard_const_p(char *, kwnames), &own_id, &messaging_path)) {
+ discard_const_p(char *, kwnames), &own_id, &imessaging_path)) {
return NULL;
}
- ret = PyObject_New(messaging_Object, &messaging_Type);
+ ret = PyObject_New(imessaging_Object, &imessaging_Type);
if (ret == NULL)
return NULL;
@@ -82,11 +82,11 @@ static PyObject *py_messaging_connect(PyTypeObject *self, PyObject *args, PyObje
ev = s4_event_context_init(ret->mem_ctx);
- if (messaging_path == NULL) {
- messaging_path = lpcfg_messaging_path(ret->mem_ctx,
+ if (imessaging_path == NULL) {
+ imessaging_path = lpcfg_imessaging_path(ret->mem_ctx,
py_default_loadparm_context(ret->mem_ctx));
} else {
- messaging_path = talloc_strdup(ret->mem_ctx, messaging_path);
+ imessaging_path = talloc_strdup(ret->mem_ctx, imessaging_path);
}
if (own_id != Py_None) {
@@ -95,18 +95,18 @@ static PyObject *py_messaging_connect(PyTypeObject *self, PyObject *args, PyObje
if (!server_id_from_py(own_id, &server_id))
return NULL;
- ret->msg_ctx = messaging_init(ret->mem_ctx,
- messaging_path,
+ ret->msg_ctx = imessaging_init(ret->mem_ctx,
+ imessaging_path,
server_id,
ev);
} else {
- ret->msg_ctx = messaging_client_init(ret->mem_ctx,
- messaging_path,
+ ret->msg_ctx = imessaging_client_init(ret->mem_ctx,
+ imessaging_path,
ev);
}
if (ret->msg_ctx == NULL) {
- PyErr_SetString(PyExc_RuntimeError, "messaging_connect unable to create a messaging context");
+ PyErr_SetString(PyExc_RuntimeError, "imessaging_connect unable to create a messaging context");
talloc_free(ret->mem_ctx);
return NULL;
}
@@ -114,16 +114,16 @@ static PyObject *py_messaging_connect(PyTypeObject *self, PyObject *args, PyObje
return (PyObject *)ret;
}
-static void py_messaging_dealloc(PyObject *self)
+static void py_imessaging_dealloc(PyObject *self)
{
- messaging_Object *iface = (messaging_Object *)self;
+ imessaging_Object *iface = (imessaging_Object *)self;
talloc_free(iface->msg_ctx);
self->ob_type->tp_free(self);
}
-static PyObject *py_messaging_send(PyObject *self, PyObject *args, PyObject *kwargs)
+static PyObject *py_imessaging_send(PyObject *self, PyObject *args, PyObject *kwargs)
{
- messaging_Object *iface = (messaging_Object *)self;
+ imessaging_Object *iface = (imessaging_Object *)self;
uint32_t msg_type;
DATA_BLOB data;
PyObject *target;
@@ -143,7 +143,7 @@ static PyObject *py_messaging_send(PyObject *self, PyObject *args, PyObject *kwa
if (!server_id_from_py(target, &server))
return NULL;
- status = messaging_send(iface->msg_ctx, server, msg_type, &data);
+ status = imessaging_send(iface->msg_ctx, server, msg_type, &data);
if (NT_STATUS_IS_ERR(status)) {
PyErr_SetNTSTATUS(status);
return NULL;
@@ -152,20 +152,20 @@ static PyObject *py_messaging_send(PyObject *self, PyObject *args, PyObject *kwa
Py_RETURN_NONE;
}
-static void py_msg_callback_wrapper(struct messaging_context *msg, void *private_data,
+static void py_msg_callback_wrapper(struct imessaging_context *msg, void *private_data,
uint32_t msg_type,
struct server_id server_id, DATA_BLOB *data)
{
PyObject *callback = (PyObject *)private_data;
- PyObject_CallFunction(callback, discard_const_p(char, "i(iii)s#"), msg_type,
- server_id.id, server_id.id2, server_id.node,
+ PyObject_CallFunction(callback, discard_const_p(char, "i(iii)s#"), msg_type,
+ server_id.pid, server_id.task_id, server_id.vnn,
data->data, data->length);
}
-static PyObject *py_messaging_register(PyObject *self, PyObject *args, PyObject *kwargs)
+static PyObject *py_imessaging_register(PyObject *self, PyObject *args, PyObject *kwargs)
{
- messaging_Object *iface = (messaging_Object *)self;
+ imessaging_Object *iface = (imessaging_Object *)self;
int msg_type = -1;
PyObject *callback;
NTSTATUS status;
@@ -180,11 +180,11 @@ static PyObject *py_messaging_register(PyObject *self, PyObject *args, PyObject
if (msg_type == -1) {
uint32_t msg_type32 = msg_type;
- status = messaging_register_tmp(iface->msg_ctx, callback,
+ status = imessaging_register_tmp(iface->msg_ctx, callback,
py_msg_callback_wrapper, &msg_type32);
msg_type = msg_type32;
} else {
- status = messaging_register(iface->msg_ctx, callback,
+ status = imessaging_register(iface->msg_ctx, callback,
msg_type, py_msg_callback_wrapper);
}
if (NT_STATUS_IS_ERR(status)) {
@@ -195,9 +195,9 @@ static PyObject *py_messaging_register(PyObject *self, PyObject *args, PyObject
return PyLong_FromLong(msg_type);
}
-static PyObject *py_messaging_deregister(PyObject *self, PyObject *args, PyObject *kwargs)
+static PyObject *py_imessaging_deregister(PyObject *self, PyObject *args, PyObject *kwargs)
{
- messaging_Object *iface = (messaging_Object *)self;
+ imessaging_Object *iface = (imessaging_Object *)self;
int msg_type = -1;
PyObject *callback;
const char *kwnames[] = { "callback", "msg_type", NULL };
@@ -207,49 +207,49 @@ static PyObject *py_messaging_deregister(PyObject *self, PyObject *args, PyObjec
return NULL;
}
- messaging_deregister(iface->msg_ctx, msg_type, callback);
+ imessaging_deregister(iface->msg_ctx, msg_type, callback);
Py_DECREF(callback);
Py_RETURN_NONE;
}
-static PyMethodDef py_messaging_methods[] = {
- { "send", (PyCFunction)py_messaging_send, METH_VARARGS|METH_KEYWORDS,
+static PyMethodDef py_imessaging_methods[] = {
+ { "send", (PyCFunction)py_imessaging_send, METH_VARARGS|METH_KEYWORDS,
"S.send(target, msg_type, data) -> None\nSend a message" },
- { "register", (PyCFunction)py_messaging_register, METH_VARARGS|METH_KEYWORDS,
+ { "register", (PyCFunction)py_imessaging_register, METH_VARARGS|METH_KEYWORDS,
"S.register(callback, msg_type=None) -> msg_type\nRegister a message handler" },
- { "deregister", (PyCFunction)py_messaging_deregister, METH_VARARGS|METH_KEYWORDS,
+ { "deregister", (PyCFunction)py_imessaging_deregister, METH_VARARGS|METH_KEYWORDS,
"S.deregister(callback, msg_type) -> None\nDeregister a message handler" },
{ NULL, NULL, 0, NULL }
};
-static PyObject *py_messaging_server_id(PyObject *obj, void *closure)
+static PyObject *py_imessaging_server_id(PyObject *obj, void *closure)
{
- messaging_Object *iface = (messaging_Object *)obj;
- struct server_id server_id = messaging_get_server_id(iface->msg_ctx);
+ imessaging_Object *iface = (imessaging_Object *)obj;
+ struct server_id server_id = imessaging_get_server_id(iface->msg_ctx);
- return Py_BuildValue("(iii)", server_id.id, server_id.id2,
- server_id.node);
+ return Py_BuildValue("(iii)", server_id.pid, server_id.task_id,
+ server_id.vnn);
}
-static PyGetSetDef py_messaging_getset[] = {
- { discard_const_p(char, "server_id"), py_messaging_server_id, NULL,
+static PyGetSetDef py_imessaging_getset[] = {
+ { discard_const_p(char, "server_id"), py_imessaging_server_id, NULL,
discard_const_p(char, "local server id") },
{ NULL },
};
-PyTypeObject messaging_Type = {
+PyTypeObject imessaging_Type = {
PyObject_HEAD_INIT(NULL) 0,
.tp_name = "messaging.Messaging",
- .tp_basicsize = sizeof(messaging_Object),
+ .tp_basicsize = sizeof(imessaging_Object),
.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
- .tp_new = py_messaging_connect,
- .tp_dealloc = py_messaging_dealloc,
- .tp_methods = py_messaging_methods,
- .tp_getset = py_messaging_getset,
- .tp_doc = "Messaging(own_id=None, messaging_path=None)\n" \
+ .tp_new = py_imessaging_connect,
+ .tp_dealloc = py_imessaging_dealloc,
+ .tp_methods = py_imessaging_methods,
+ .tp_getset = py_imessaging_getset,
+ .tp_doc = "Messaging(own_id=None, imessaging_path=None)\n" \
"Create a new object that can be used to communicate with the peers in the specified messaging path.\n" \
"If no path is specified, the default path from smb.conf will be used."
};
@@ -258,13 +258,13 @@ void initmessaging(void)
{
PyObject *mod;
- if (PyType_Ready(&messaging_Type) < 0)
+ if (PyType_Ready(&imessaging_Type) < 0)
return;
mod = Py_InitModule3("messaging", NULL, "Internal RPC");
if (mod == NULL)
return;
- Py_INCREF((PyObject *)&messaging_Type);
- PyModule_AddObject(mod, "Messaging", (PyObject *)&messaging_Type);
+ Py_INCREF((PyObject *)&imessaging_Type);
+ PyModule_AddObject(mod, "Messaging", (PyObject *)&imessaging_Type);
}
diff --git a/source4/lib/messaging/tests/irpc.c b/source4/lib/messaging/tests/irpc.c
index 4d0b6b4378..cfa2bcb91e 100644
--- a/source4/lib/messaging/tests/irpc.c
+++ b/source4/lib/messaging/tests/irpc.c
@@ -34,7 +34,7 @@ static bool test_debug;
struct irpc_test_data
{
- struct messaging_context *msg_ctx1, *msg_ctx2;
+ struct imessaging_context *msg_ctx1, *msg_ctx2;
struct tevent_context *ev;
};
@@ -246,15 +246,15 @@ static bool irpc_setup(struct torture_context *tctx, void **_data)
data->ev = tctx->ev;
torture_assert(tctx, data->msg_ctx1 =
- messaging_init(tctx,
- lpcfg_messaging_path(tctx, tctx->lp_ctx),
+ imessaging_init(tctx,
+ lpcfg_imessaging_path(tctx, tctx->lp_ctx),
cluster_id(0, MSG_ID1),
data->ev),
"Failed to init first messaging context");
torture_assert(tctx, data->msg_ctx2 =
- messaging_init(tctx,
- lpcfg_messaging_path(tctx, tctx->lp_ctx),
+ imessaging_init(tctx,
+ lpcfg_imessaging_path(tctx, tctx->lp_ctx),
cluster_id(0, MSG_ID2),
data->ev),
"Failed to init second messaging context");
diff --git a/source4/lib/messaging/tests/messaging.c b/source4/lib/messaging/tests/messaging.c
index 82fdf2f73e..38c34fc52e 100644
--- a/source4/lib/messaging/tests/messaging.c
+++ b/source4/lib/messaging/tests/messaging.c
@@ -29,24 +29,24 @@
static uint32_t msg_pong;
-static void ping_message(struct messaging_context *msg, void *private_data,
+static void ping_message(struct imessaging_context *msg, void *private_data,
uint32_t msg_type, struct server_id src, DATA_BLOB *data)
{
NTSTATUS status;
- status = messaging_send(msg, src, msg_pong, data);
+ status = imessaging_send(msg, src, msg_pong, data);
if (!NT_STATUS_IS_OK(status)) {
printf("pong failed - %s\n", nt_errstr(status));
}
}
-static void pong_message(struct messaging_context *msg, void *private_data,
+static void pong_message(struct imessaging_context *msg, void *private_data,
uint32_t msg_type, struct server_id src, DATA_BLOB *data)
{
int *count = (int *)private_data;
(*count)++;
}
-static void exit_message(struct messaging_context *msg, void *private_data,
+static void exit_message(struct imessaging_context *msg, void *private_data,
uint32_t msg_type, struct server_id src, DATA_BLOB *data)
{
talloc_free(private_data);
@@ -59,8 +59,8 @@ static void exit_message(struct messaging_context *msg, void *private_data,
static bool test_ping_speed(struct torture_context *tctx)
{
struct tevent_context *ev;
- struct messaging_context *msg_client_ctx;
- struct messaging_context *msg_server_ctx;
+ struct imessaging_context *msg_client_ctx;
+ struct imessaging_context *msg_server_ctx;
int ping_count = 0;
int pong_count = 0;
struct timeval tv;
@@ -71,24 +71,24 @@ static bool test_ping_speed(struct torture_context *tctx)
ev = tctx->ev;
- msg_server_ctx = messaging_init(tctx,
- lpcfg_messaging_path(tctx, tctx->lp_ctx), cluster_id(0, 1),
+ msg_server_ctx = imessaging_init(tctx,
+ lpcfg_imessaging_path(tctx, tctx->lp_ctx), cluster_id(0, 1),
ev);
torture_assert(tctx, msg_server_ctx != NULL, "Failed to init ping messaging context");
- messaging_register_tmp(msg_server_ctx, NULL, ping_message, &msg_ping);
- messaging_register_tmp(msg_server_ctx, tctx, exit_message, &msg_exit);
+ imessaging_register_tmp(msg_server_ctx, NULL, ping_message, &msg_ping);
+ imessaging_register_tmp(msg_server_ctx, tctx, exit_message, &msg_exit);
- msg_client_ctx = messaging_init(tctx,
- lpcfg_messaging_path(tctx, tctx->lp_ctx),
+ msg_client_ctx = imessaging_init(tctx,
+ lpcfg_imessaging_path(tctx, tctx->lp_ctx),
cluster_id(0, 2),
ev);
torture_assert(tctx, msg_client_ctx != NULL,
- "msg_client_ctx messaging_init() failed");
+ "msg_client_ctx imessaging_init() failed");
- messaging_register_tmp(msg_client_ctx, &pong_count, pong_message, &msg_pong);
+ imessaging_register_tmp(msg_client_ctx, &pong_count, pong_message, &msg_pong);
tv = timeval_current();
@@ -100,8 +100,8 @@ static bool test_ping_speed(struct torture_context *tctx)
data.data = discard_const_p(uint8_t, "testing");
data.length = strlen((const char *)data.data);
- status1 = messaging_send(msg_client_ctx, cluster_id(0, 1), msg_ping, &data);
- status2 = messaging_send(msg_client_ctx, cluster_id(0, 1), msg_ping, NULL);
+ status1 = imessaging_send(msg_client_ctx, cluster_id(0, 1), msg_ping, &data);
+ status2 = imessaging_send(msg_client_ctx, cluster_id(0, 1), msg_ping, NULL);
torture_assert_ntstatus_ok(tctx, status1, "msg1 failed");
ping_count++;
@@ -121,7 +121,7 @@ static bool test_ping_speed(struct torture_context *tctx)
}
torture_comment(tctx, "sending exit\n");
- messaging_send(msg_client_ctx, cluster_id(0, 1), msg_exit, NULL);
+ imessaging_send(msg_client_ctx, cluster_id(0, 1), msg_exit, NULL);
torture_assert_int_equal(tctx, ping_count, pong_count, "ping test failed");