1//
2// Copyright (c) ZeroC, Inc. All rights reserved.
3//
4
5#import <Request.h>
6
7@implementation ICERequest
8-(ICECurrent*) getCurrent
9{
10    return current;
11}
12
13+(id) request:(ICECurrent*)current is:(id<ICEInputStream>)is os:(id<ICEOutputStream>)os
14{
15    ICERequest* result = [((ICERequest*)[ICERequest alloc]) init:current is:is os:os];
16    [result autorelease];
17    return result;
18}
19
20-(id) init:(ICECurrent*)current_ is:(id<ICEInputStream>)is_ os:(id<ICEOutputStream>)os_
21{
22    if(![super init])
23    {
24        return nil;
25    }
26    current = [current_ retain];
27    is = [is_ retain];
28    os = [os_ retain];
29    needReset = NO;
30    return self;
31}
32
33-(void) callDispatch:(ICEServant*)servant
34{
35    if(needReset == NO)
36    {
37        needReset = YES;
38    }
39    else
40    {
41        [is rewind];
42        [os reset:NO];
43    }
44    [servant iceDispatch:current is:is os:os];
45}
46
47-(void) dealloc
48{
49    [current release];
50    [is release];
51    [os release];
52    [super dealloc];
53}
54@end
55