diff options
author | Stefan Metzmacher <metze@samba.org> | 2008-07-03 13:39:55 +0200 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2008-07-03 15:49:56 +0200 |
commit | 8bd7dabb072942ed0955c8b2e26ee41c3edae0bf (patch) | |
tree | 2e225245cd98b0793768e9483dc2dfcb3c137565 | |
parent | d8ac9bde86f349fecb997a2c8c4d0e2cbfe22542 (diff) | |
download | samba-8bd7dabb072942ed0955c8b2e26ee41c3edae0bf.tar.gz samba-8bd7dabb072942ed0955c8b2e26ee41c3edae0bf.tar.bz2 samba-8bd7dabb072942ed0955c8b2e26ee41c3edae0bf.zip |
rpc_server: use the same chunk_size logic as we we use in the client
metze
(This used to be commit 9ff0ce42b32bf0f1463d2cb9c2a6595f51b13d04)
-rw-r--r-- | source4/rpc_server/dcerpc_server.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c index e0351bb259..d8dafd61f6 100644 --- a/source4/rpc_server/dcerpc_server.c +++ b/source4/rpc_server/dcerpc_server.c @@ -886,7 +886,7 @@ _PUBLIC_ NTSTATUS dcesrv_reply(struct dcesrv_call_state *call) struct ndr_push *push; NTSTATUS status; DATA_BLOB stub; - uint32_t total_length; + uint32_t total_length, chunk_size; struct dcesrv_connection_context *context = call->context; /* call the reply function */ @@ -917,20 +917,20 @@ _PUBLIC_ NTSTATUS dcesrv_reply(struct dcesrv_call_state *call) total_length = stub.length; + /* we can write a full max_recv_frag size, minus the dcerpc + request header size */ + chunk_size = call->conn->cli_max_recv_frag - (DCERPC_MAX_SIGN_SIZE+DCERPC_REQUEST_LENGTH); + do { uint32_t length; struct data_blob_list_item *rep; struct ncacn_packet pkt; + const uint32_t overhead = (DCERPC_MAX_SIGN_SIZE+DCERPC_RESPONSE_LENGTH); rep = talloc(call, struct data_blob_list_item); NT_STATUS_HAVE_NO_MEMORY(rep); - length = stub.length; - if (length + DCERPC_RESPONSE_LENGTH > call->conn->cli_max_recv_frag) { - /* the 32 is to cope with signing data */ - length = call->conn->cli_max_recv_frag - - (DCERPC_MAX_SIGN_SIZE+DCERPC_RESPONSE_LENGTH); - } + length = MIN(chunk_size, stub.length); /* form the dcerpc response packet */ dcesrv_init_hdr(&pkt, lp_rpc_big_endian(call->conn->dce_ctx->lp_ctx)); |