From: Ralph Boehme Date: Wed, 21 Sep 2016 21:27:14 +0000 (-0700) Subject: libcli/util: add tstream_full_request_u32 and tstream_full_request_u16 X-Git-Tag: talloc-2.4.2~1047 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8800f4f8a3b1fa4a1ded1e1a17d1de355f16ef25;p=thirdparty%2Fsamba.git libcli/util: add tstream_full_request_u32 and tstream_full_request_u16 Signed-off-by: Ralph Boehme Reviewed-by: Andrew Bartlett --- diff --git a/libcli/util/tstream.c b/libcli/util/tstream.c index dd830e2aa44..b4317f23ade 100644 --- a/libcli/util/tstream.c +++ b/libcli/util/tstream.c @@ -175,3 +175,30 @@ NTSTATUS tstream_read_pdu_blob_recv(struct tevent_req *req, return NT_STATUS_OK; } +NTSTATUS tstream_full_request_u32(struct tstream_context *stream, + void *private_data, + DATA_BLOB blob, size_t *size) +{ + if (blob.length < 4) { + return STATUS_MORE_ENTRIES; + } + *size = 4 + RIVAL(blob.data, 0); + if (*size > blob.length) { + return STATUS_MORE_ENTRIES; + } + return NT_STATUS_OK; +} + +NTSTATUS tstream_full_request_u16(struct tstream_context *stream, + void *private_data, + DATA_BLOB blob, size_t *size) +{ + if (blob.length < 2) { + return STATUS_MORE_ENTRIES; + } + *size = 2 + RSVAL(blob.data, 0); + if (*size > blob.length) { + return STATUS_MORE_ENTRIES; + } + return NT_STATUS_OK; +} diff --git a/libcli/util/tstream.h b/libcli/util/tstream.h index 3bf80f0e925..6d30e04c70a 100644 --- a/libcli/util/tstream.h +++ b/libcli/util/tstream.h @@ -90,4 +90,31 @@ NTSTATUS tstream_read_pdu_blob_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, DATA_BLOB *pdu_blob); +/** + * @brief Get a PDU size with a 32 bit size header field + * + * Work out if a packet is complete for protocols that use a 32 bit + * network byte order length. + * + * @see tstream_read_pdu_blob_send() + * @see tstream_read_pdu_blob_recv() + */ +NTSTATUS tstream_full_request_u32(struct tstream_context *stream, + void *private_data, + DATA_BLOB blob, size_t *size); + +/** + * @brief Get a PDU size with a 16 bit size header field + * + * Work out if a packet is complete for protocols that use a 16 bit + * network byte order length. + * + * @see tstream_read_pdu_blob_send() + * @see tstream_read_pdu_blob_recv() + */ +NTSTATUS tstream_full_request_u16(struct tstream_context *stream, + void *private_data, + DATA_BLOB blob, size_t *size); + + #endif /* _LIBCLI_UTIL_TSTREAM_H_ */