#include <gnutls/gnutls.h>
#include <gnutls/crypto.h>
+struct smbXcli_transport;
struct smbXcli_conn;
struct smbXcli_req;
struct smbXcli_session;
struct smbXcli_tcon;
+struct smbXcli_transport {
+ struct smb_transport transport;
+ int sock_fd;
+ struct samba_sockaddr laddr;
+ struct samba_sockaddr raddr;
+};
+
struct smbXcli_conn {
int sock_fd;
struct sockaddr_storage local_ss;
} smb2;
};
+static int smbXcli_transport_destructor(struct smbXcli_transport *xtp)
+{
+ if (xtp->sock_fd != -1) {
+ close(xtp->sock_fd);
+ xtp->sock_fd = -1;
+ }
+
+ return 0;
+}
+
+struct smbXcli_transport *smbXcli_transport_bsd(TALLOC_CTX *mem_ctx,
+ int fd,
+ const struct smb_transport *tp)
+{
+ struct smbXcli_transport *xtp = NULL;
+ int ret;
+
+ xtp = talloc_zero(mem_ctx, struct smbXcli_transport);
+ if (xtp == NULL) {
+ return NULL;
+ }
+
+ xtp->transport = *tp;
+ xtp->sock_fd = fd;
+
+ xtp->laddr.sa_socklen = sizeof(xtp->laddr.u);
+ ret = getsockname(fd, &xtp->laddr.u.sa, &xtp->laddr.sa_socklen);
+ if (ret == -1) {
+ TALLOC_FREE(xtp);
+ return NULL;
+ }
+
+ xtp->raddr.sa_socklen = sizeof(xtp->raddr.u);
+ ret = getpeername(fd, &xtp->raddr.u.sa, &xtp->raddr.sa_socklen);
+ if (ret == -1) {
+ TALLOC_FREE(xtp);
+ return NULL;
+ }
+
+ ret = set_blocking(fd, false);
+ if (ret < 0) {
+ TALLOC_FREE(xtp);
+ return NULL;
+ }
+
+ talloc_set_destructor(xtp, smbXcli_transport_destructor);
+ return xtp;
+}
+
static int smbXcli_conn_destructor(struct smbXcli_conn *conn)
{
/*
#include "lib/util/time.h"
#include "lib/util/data_blob.h"
+struct smbXcli_transport;
struct smbXcli_conn;
struct smbXcli_session;
struct smbXcli_tcon;
struct iovec;
struct smb2_create_blobs;
struct smb_create_returns;
+struct smb_transport;
struct smb311_capabilities;
+struct smbXcli_transport *smbXcli_transport_bsd(TALLOC_CTX *mem_ctx,
+ int fd,
+ const struct smb_transport *tp);
+
struct smbXcli_conn *smbXcli_conn_create(TALLOC_CTX *mem_ctx,
int fd,
const char *remote_name,