summaryrefslogtreecommitdiff
path: root/source4/libcli/raw/clitransport.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-01-15 11:58:52 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:08:50 -0500
commit61a3d370b98ca4b75cd61e22f0d6b0f3fb7561b3 (patch)
tree64923e274b14c4b238e341b2c5a54b536c80e88e /source4/libcli/raw/clitransport.c
parente89fd49df7e63dcf37ee1aa7e2f50965851725c9 (diff)
downloadsamba-61a3d370b98ca4b75cd61e22f0d6b0f3fb7561b3.tar.gz
samba-61a3d370b98ca4b75cd61e22f0d6b0f3fb7561b3.tar.bz2
samba-61a3d370b98ca4b75cd61e22f0d6b0f3fb7561b3.zip
r4758: - added async support to the session request code
- added async support to the negprot client code - removed two unused parameters from smbcli_full_connection() code - converted smbclient to use smbcli_full_connection() rather than reinventing everything itself (This used to be commit 71cbe2873473e039b4511511302cb63f1c50bce8)
Diffstat (limited to 'source4/libcli/raw/clitransport.c')
-rw-r--r--source4/libcli/raw/clitransport.c61
1 files changed, 44 insertions, 17 deletions
diff --git a/source4/libcli/raw/clitransport.c b/source4/libcli/raw/clitransport.c
index 855543d670..fc9de577ee 100644
--- a/source4/libcli/raw/clitransport.c
+++ b/source4/libcli/raw/clitransport.c
@@ -140,12 +140,12 @@ static void smbcli_transport_write_disable(struct smbcli_transport *transport)
transport->socket->event.fde->flags &= ~EVENT_FD_WRITE;
}
-/****************************************************************************
-send a session request (if appropriate)
-****************************************************************************/
-BOOL smbcli_transport_connect(struct smbcli_transport *transport,
- struct nmb_name *calling,
- struct nmb_name *called)
+/*
+ send a session request
+*/
+struct smbcli_request *smbcli_transport_connect_send(struct smbcli_transport *transport,
+ struct nmb_name *calling,
+ struct nmb_name *called)
{
uint8_t *p;
int len = NBT_HDR_SIZE;
@@ -155,13 +155,10 @@ BOOL smbcli_transport_connect(struct smbcli_transport *transport,
transport->called = *called;
}
- /* 445 doesn't have session request */
- if (transport->socket->port == 445) {
- return True;
- }
-
/* allocate output buffer */
- req = smbcli_request_setup_nonsmb(transport, NBT_HDR_SIZE + 2*nbt_mangled_name_len());
+ req = smbcli_request_setup_nonsmb(transport,
+ NBT_HDR_SIZE + 2*nbt_mangled_name_len());
+ if (req == NULL) return NULL;
/* put in the destination name */
p = req->out.buffer + NBT_HDR_SIZE;
@@ -176,15 +173,27 @@ BOOL smbcli_transport_connect(struct smbcli_transport *transport,
_smb_setlen(req->out.buffer,len-4);
SCVAL(req->out.buffer,0,0x81);
- if (!smbcli_request_send(req) ||
- !smbcli_request_receive(req)) {
+ if (!smbcli_request_send(req)) {
+ smbcli_request_destroy(req);
+ return NULL;
+ }
+
+ return req;
+}
+
+/*
+ finish a smbcli_transport_connect()
+*/
+BOOL smbcli_transport_connect_recv(struct smbcli_request *req)
+{
+ if (!smbcli_request_receive(req)) {
smbcli_request_destroy(req);
return False;
}
-
+
if (CVAL(req->in.buffer,0) != 0x82) {
- transport->error.etype = ETYPE_NBT;
- transport->error.e.nbt_error = CVAL(req->in.buffer,4);
+ req->transport->error.etype = ETYPE_NBT;
+ req->transport->error.e.nbt_error = CVAL(req->in.buffer,4);
smbcli_request_destroy(req);
return False;
}
@@ -194,6 +203,24 @@ BOOL smbcli_transport_connect(struct smbcli_transport *transport,
}
+/*
+ send a session request (if needed)
+*/
+BOOL smbcli_transport_connect(struct smbcli_transport *transport,
+ struct nmb_name *calling,
+ struct nmb_name *called)
+{
+ struct smbcli_request *req;
+
+ if (transport->socket->port == 445) {
+ return True;
+ }
+
+ req = smbcli_transport_connect_send(transport,
+ calling, called);
+ return smbcli_transport_connect_recv(req);
+}
+
/****************************************************************************
get next mid in sequence
****************************************************************************/