tevent_req_received(req);
return 0;
}
+
+
+/* SOCKETPAIR for internal rpc communication */
+
+/* file_type is FILE_TYPE_BYTE_MODE_PIPE or FILE_TYPE_MESSAGE_MODE_PIPE */
+int _tstream_npa_socketpair(uint16_t file_type,
+ TALLOC_CTX *mem_ctx1,
+ struct tstream_context **pstream1,
+ TALLOC_CTX *mem_ctx2,
+ struct tstream_context **pstream2,
+ const char *location)
+{
+ struct tstream_context *stream1 = NULL;
+ struct tstream_context *stream2 = NULL;
+ int fds[2];
+ int fd1;
+ int fd2;
+ int rc;
+
+ rc = socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
+ if (rc == -1) {
+ return -1;
+ }
+ fd1 = fds[0];
+ fd2 = fds[1];
+
+ rc = _tstream_npa_existing_socket(mem_ctx1,
+ fd1,
+ file_type,
+ &stream1,
+ location);
+ if (rc == -1) {
+ int sys_errno = errno;
+ close(fd1);
+ close(fd2);
+ errno = sys_errno;
+ return -1;
+ }
+
+ rc = _tstream_npa_existing_socket(mem_ctx2,
+ fd2,
+ file_type,
+ &stream2,
+ location);
+ if (rc == -1) {
+ int sys_errno = errno;
+ talloc_free(stream1);
+ close(fd2);
+ errno = sys_errno;
+ return -1;
+ }
+
+ *pstream1 = stream1;
+ *pstream2 = stream2;
+
+ return 0;
+}
session_info, \
__location__)
+int _tstream_npa_socketpair(uint16_t file_type,
+ TALLOC_CTX *mem_ctx1,
+ struct tstream_context **pstream1,
+ TALLOC_CTX *mem_ctx2,
+ struct tstream_context **pstream2,
+ const char *location);
+#define tstream_npa_socketpair(ft, mem1, stream1, mem2, stream2) \
+ _tstream_npa_socketpair(ft, mem1, stream1, mem2, stream2, \
+ __location__)
+
#endif /* NPA_TSTREAM_H */