diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-01-15 11:58:52 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:08:50 -0500 |
commit | 61a3d370b98ca4b75cd61e22f0d6b0f3fb7561b3 (patch) | |
tree | 64923e274b14c4b238e341b2c5a54b536c80e88e /source4/libcli/raw/clitransport.c | |
parent | e89fd49df7e63dcf37ee1aa7e2f50965851725c9 (diff) | |
download | samba-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.c | 61 |
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 ****************************************************************************/ |