tsocket: move tsocket_sendto_queue_send/recv() to tsocket_helpers.c
authorStefan Metzmacher <metze@samba.org>
Fri, 3 Apr 2009 15:52:15 +0000 (17:52 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 1 May 2009 15:38:26 +0000 (17:38 +0200)
metze

lib/tsocket/tsocket.c
lib/tsocket/tsocket_helpers.c

index 606642e98392e82031fe54031f5a1a785a79e66c..55a7f032066d3391b27da1c91669d62da654babc 100644 (file)
@@ -404,133 +404,3 @@ int tdgram_disconnect_recv(struct tevent_req *req,
        return ret;
 }
 
-struct tdgram_sendto_queue_state {
-       /* this structs are owned by the caller */
-       struct {
-               struct tevent_context *ev;
-               struct tdgram_context *dgram;
-               const uint8_t *buf;
-               size_t len;
-               const struct tsocket_address *dst;
-       } caller;
-       ssize_t ret;
-};
-
-static void tdgram_sendto_queue_trigger(struct tevent_req *req,
-                                        void *private_data);
-static void tdgram_sendto_queue_done(struct tevent_req *subreq);
-
-/**
- * @brief Queue a dgram blob for sending through the socket
- * @param[in] mem_ctx  The memory context for the result
- * @param[in] ev       The event context the operation should work on
- * @param[in] dgram    The tdgram_context to send the message buffer
- * @param[in] queue    The existing dgram queue
- * @param[in] buf      The message buffer
- * @param[in] len      The message length
- * @param[in] dst      The destination socket address
- * @retval             The async request handle
- *
- * This function queues a blob for sending to destination through an existing
- * dgram socket. The async callback is triggered when the whole blob is
- * delivered to the underlying system socket.
- *
- * The caller needs to make sure that all non-scalar input parameters hang
- * arround for the whole lifetime of the request.
- */
-struct tevent_req *tdgram_sendto_queue_send(TALLOC_CTX *mem_ctx,
-                                           struct tevent_context *ev,
-                                           struct tdgram_context *dgram,
-                                           struct tevent_queue *queue,
-                                           const uint8_t *buf,
-                                           size_t len,
-                                           struct tsocket_address *dst)
-{
-       struct tevent_req *req;
-       struct tdgram_sendto_queue_state *state;
-       bool ok;
-
-       req = tevent_req_create(mem_ctx, &state,
-                               struct tdgram_sendto_queue_state);
-       if (!req) {
-               return NULL;
-       }
-
-       state->caller.ev        = ev;
-       state->caller.dgram     = dgram;
-       state->caller.buf       = buf;
-       state->caller.len       = len;
-       state->caller.dst       = dst;
-       state->ret              = -1;
-
-       ok = tevent_queue_add(queue,
-                             ev,
-                             req,
-                             tdgram_sendto_queue_trigger,
-                             NULL);
-       if (!ok) {
-               tevent_req_nomem(NULL, req);
-               goto post;
-       }
-
-       return req;
-
- post:
-       tevent_req_post(req, ev);
-       return req;
-}
-
-static void tdgram_sendto_queue_trigger(struct tevent_req *req,
-                                        void *private_data)
-{
-       struct tdgram_sendto_queue_state *state = tevent_req_data(req,
-                                       struct tdgram_sendto_queue_state);
-       struct tevent_req *subreq;
-
-       subreq = tdgram_sendto_send(state,
-                                   state->caller.ev,
-                                   state->caller.dgram,
-                                   state->caller.buf,
-                                   state->caller.len,
-                                   state->caller.dst);
-       if (tevent_req_nomem(subreq, req)) {
-               return;
-       }
-       tevent_req_set_callback(subreq, tdgram_sendto_queue_done, req);
-}
-
-static void tdgram_sendto_queue_done(struct tevent_req *subreq)
-{
-       struct tevent_req *req = tevent_req_callback_data(subreq,
-                                struct tevent_req);
-       struct tdgram_sendto_queue_state *state = tevent_req_data(req,
-                                       struct tdgram_sendto_queue_state);
-       ssize_t ret;
-       int sys_errno;
-
-       ret = tdgram_sendto_recv(subreq, &sys_errno);
-       talloc_free(subreq);
-       if (ret == -1) {
-               tevent_req_error(req, sys_errno);
-               return;
-       }
-       state->ret = ret;
-
-       tevent_req_done(req);
-}
-
-ssize_t tdgram_sendto_queue_recv(struct tevent_req *req, int *perrno)
-{
-       struct tdgram_sendto_queue_state *state = tevent_req_data(req,
-                                       struct tdgram_sendto_queue_state);
-       ssize_t ret;
-
-       ret = tsocket_simple_int_recv(req, perrno);
-       if (ret == 0) {
-               ret = state->ret;
-       }
-
-       tevent_req_received(req);
-       return ret;
-}
-
index 303be2de11ec5ffd4e177ef1c862431182aa1ff8..eb506fef16f628e2883ff52c9016a07569ad3601 100644 (file)
@@ -54,3 +54,134 @@ int tsocket_simple_int_recv(struct tevent_req *req, int *perrno)
        *perrno = EIO;
        return -1;
 }
+
+struct tdgram_sendto_queue_state {
+       /* this structs are owned by the caller */
+       struct {
+               struct tevent_context *ev;
+               struct tdgram_context *dgram;
+               const uint8_t *buf;
+               size_t len;
+               const struct tsocket_address *dst;
+       } caller;
+       ssize_t ret;
+};
+
+static void tdgram_sendto_queue_trigger(struct tevent_req *req,
+                                        void *private_data);
+static void tdgram_sendto_queue_done(struct tevent_req *subreq);
+
+/**
+ * @brief Queue a dgram blob for sending through the socket
+ * @param[in] mem_ctx  The memory context for the result
+ * @param[in] ev       The event context the operation should work on
+ * @param[in] dgram    The tdgram_context to send the message buffer
+ * @param[in] queue    The existing dgram queue
+ * @param[in] buf      The message buffer
+ * @param[in] len      The message length
+ * @param[in] dst      The destination socket address
+ * @retval             The async request handle
+ *
+ * This function queues a blob for sending to destination through an existing
+ * dgram socket. The async callback is triggered when the whole blob is
+ * delivered to the underlying system socket.
+ *
+ * The caller needs to make sure that all non-scalar input parameters hang
+ * arround for the whole lifetime of the request.
+ */
+struct tevent_req *tdgram_sendto_queue_send(TALLOC_CTX *mem_ctx,
+                                           struct tevent_context *ev,
+                                           struct tdgram_context *dgram,
+                                           struct tevent_queue *queue,
+                                           const uint8_t *buf,
+                                           size_t len,
+                                           struct tsocket_address *dst)
+{
+       struct tevent_req *req;
+       struct tdgram_sendto_queue_state *state;
+       bool ok;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct tdgram_sendto_queue_state);
+       if (!req) {
+               return NULL;
+       }
+
+       state->caller.ev        = ev;
+       state->caller.dgram     = dgram;
+       state->caller.buf       = buf;
+       state->caller.len       = len;
+       state->caller.dst       = dst;
+       state->ret              = -1;
+
+       ok = tevent_queue_add(queue,
+                             ev,
+                             req,
+                             tdgram_sendto_queue_trigger,
+                             NULL);
+       if (!ok) {
+               tevent_req_nomem(NULL, req);
+               goto post;
+       }
+
+       return req;
+
+ post:
+       tevent_req_post(req, ev);
+       return req;
+}
+
+static void tdgram_sendto_queue_trigger(struct tevent_req *req,
+                                        void *private_data)
+{
+       struct tdgram_sendto_queue_state *state = tevent_req_data(req,
+                                       struct tdgram_sendto_queue_state);
+       struct tevent_req *subreq;
+
+       subreq = tdgram_sendto_send(state,
+                                   state->caller.ev,
+                                   state->caller.dgram,
+                                   state->caller.buf,
+                                   state->caller.len,
+                                   state->caller.dst);
+       if (tevent_req_nomem(subreq, req)) {
+               return;
+       }
+       tevent_req_set_callback(subreq, tdgram_sendto_queue_done, req);
+}
+
+static void tdgram_sendto_queue_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req = tevent_req_callback_data(subreq,
+                                struct tevent_req);
+       struct tdgram_sendto_queue_state *state = tevent_req_data(req,
+                                       struct tdgram_sendto_queue_state);
+       ssize_t ret;
+       int sys_errno;
+
+       ret = tdgram_sendto_recv(subreq, &sys_errno);
+       talloc_free(subreq);
+       if (ret == -1) {
+               tevent_req_error(req, sys_errno);
+               return;
+       }
+       state->ret = ret;
+
+       tevent_req_done(req);
+}
+
+ssize_t tdgram_sendto_queue_recv(struct tevent_req *req, int *perrno)
+{
+       struct tdgram_sendto_queue_state *state = tevent_req_data(req,
+                                       struct tdgram_sendto_queue_state);
+       ssize_t ret;
+
+       ret = tsocket_simple_int_recv(req, perrno);
+       if (ret == 0) {
+               ret = state->ret;
+       }
+
+       tevent_req_received(req);
+       return ret;
+}
+