summaryrefslogtreecommitdiffstats
path: root/source/smbd
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2005-10-06 14:44:37 +0000
committerStefan Metzmacher <metze@samba.org>2005-10-06 14:44:37 +0000
commit3727989bff59b72c2a2f5aa0f1cce225cf354f83 (patch)
tree9a1f8ccdc3b8ff5782cfd37744a3670dad9574fb /source/smbd
parentc6915cc7c96bbc142cd27008048162294c096c8c (diff)
downloadsamba-3727989bff59b72c2a2f5aa0f1cce225cf354f83.tar.gz
samba-3727989bff59b72c2a2f5aa0f1cce225cf354f83.tar.xz
samba-3727989bff59b72c2a2f5aa0f1cce225cf354f83.zip
r10768: add a function to create a stream_connection from an already
existing socket connection, that's used for protocols which switch the client/server roles inside a session metze
Diffstat (limited to 'source/smbd')
-rw-r--r--source/smbd/service_stream.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/source/smbd/service_stream.c b/source/smbd/service_stream.c
index 1ed8b4d8af6..6f78643daed 100644
--- a/source/smbd/service_stream.c
+++ b/source/smbd/service_stream.c
@@ -78,6 +78,39 @@ static void stream_io_handler(struct event_context *ev, struct fd_event *fde,
}
}
+/*
+ this creates a stream_connection from an already existing connection,
+ used for protocols, where a client connection needs to switched into
+ a server connection
+*/
+NTSTATUS stream_new_connection_merge(struct event_context *ev,
+ const struct model_ops *model_ops,
+ struct socket_context *sock,
+ const struct stream_server_ops *stream_ops,
+ struct messaging_context *msg_ctx,
+ void *private_data,
+ struct stream_connection **_srv_conn)
+{
+ struct stream_connection *srv_conn;
+
+ srv_conn = talloc_zero(ev, struct stream_connection);
+ NT_STATUS_HAVE_NO_MEMORY(srv_conn);
+
+ talloc_steal(srv_conn, sock);
+
+ srv_conn->private = private_data;
+ srv_conn->model_ops = model_ops;
+ srv_conn->socket = sock;
+ srv_conn->server_id = 0;
+ srv_conn->ops = stream_ops;
+ srv_conn->msg_ctx = msg_ctx;
+ srv_conn->event.ctx = ev;
+ srv_conn->event.fde = event_add_fd(ev, srv_conn, socket_get_fd(sock),
+ EVENT_FD_READ,
+ stream_io_handler, srv_conn);
+ *_srv_conn = srv_conn;
+ return NT_STATUS_OK;
+}
/*
called when a new socket connection has been established. This is called in the process