diff options
author | Volker Lendecke <vlendec@samba.org> | 2007-07-31 08:06:56 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:29:04 -0500 |
commit | 15dc8917dbe5a1fed5ca909bb1bee24cff59db0f (patch) | |
tree | 0c10b66c0b2d0d04440001bbf25d2b87d45dc2af | |
parent | 4254af71803b122449887258ac0e721f67ed39a3 (diff) | |
download | samba-15dc8917dbe5a1fed5ca909bb1bee24cff59db0f.tar.gz samba-15dc8917dbe5a1fed5ca909bb1bee24cff59db0f.tar.bz2 samba-15dc8917dbe5a1fed5ca909bb1bee24cff59db0f.zip |
r24089: Add reply_prep/post_legacy
Routines to ease the transition to the new API
(This used to be commit 1bb2b341e2cb6c0175376dc8bd2d1ce6d9c6c00e)
-rw-r--r-- | source3/smbd/process.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/source3/smbd/process.c b/source3/smbd/process.c index e99d70f236..1fba7e487c 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -67,6 +67,60 @@ void init_smb_request(struct smb_request *req, const uint8 *inbuf) req->outbuf = NULL; } +/* + * From within a converted call you might have to call non-converted + * subroutines that still take the old inbuf/outbuf/lenght/bufsize + * parameters. This takes a struct smb_request and prepares the legacy + * parameters. + */ + +BOOL reply_prep_legacy(struct smb_request *req, + char **pinbuf, char **poutbuf, + int *psize, int *pbufsize) +{ + const int bufsize = (BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE + + SAFETY_MARGIN); + char *inbuf, *outbuf; + + if (!(inbuf = TALLOC_ARRAY(req, char, bufsize))) { + DEBUG(0, ("Could not allocate legacy inbuf\n")); + return False; + } + memcpy(inbuf, req->inbuf, MIN(smb_len(req->inbuf)+4, bufsize)); + req->inbuf = (uint8 *)inbuf; + + if (!(outbuf = TALLOC_ARRAY(req, char, bufsize))) { + DEBUG(0, ("Could not allocate legacy outbuf\n")); + return False; + } + req->outbuf = (uint8 *)outbuf; + + construct_reply_common(inbuf, outbuf); + + *pinbuf = inbuf; + *poutbuf = outbuf; + *psize = smb_len(inbuf)+4; + *pbufsize = bufsize; + + return True; +} + +/* + * Post-process the output of the legacy routine so that the result fits into + * the new reply_xxx API + */ + +void reply_post_legacy(struct smb_request *req, int outsize) +{ + if (outsize > 0) { + smb_setlen((char *)req->inbuf, (char *)req->outbuf, + outsize); + } + else { + TALLOC_FREE(req->outbuf); + } +} + /**************************************************************************** structure to hold a linked list of queued messages. for processing. |