xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/GRPCClient/GRPCInterceptor.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker /*
2*cc02d7e2SAndroid Build Coastguard Worker  *
3*cc02d7e2SAndroid Build Coastguard Worker  * Copyright 2019 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker  *
5*cc02d7e2SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker  *
9*cc02d7e2SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker  *
11*cc02d7e2SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker  * limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker  *
17*cc02d7e2SAndroid Build Coastguard Worker  */
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker /**
20*cc02d7e2SAndroid Build Coastguard Worker  * \file GRPCInterceptor.h
21*cc02d7e2SAndroid Build Coastguard Worker  * API for interceptors implementation. This feature is currently EXPERIMENTAL and is subject to
22*cc02d7e2SAndroid Build Coastguard Worker  * breaking changes without prior notice.
23*cc02d7e2SAndroid Build Coastguard Worker  *
24*cc02d7e2SAndroid Build Coastguard Worker  * The interceptors in the gRPC system forms a chain. When a call is made by the user, each
25*cc02d7e2SAndroid Build Coastguard Worker  * interceptor on the chain has chances to react to events of the call and make necessary
26*cc02d7e2SAndroid Build Coastguard Worker  * modifications to the call's parameters, data, metadata, or flow.
27*cc02d7e2SAndroid Build Coastguard Worker  *
28*cc02d7e2SAndroid Build Coastguard Worker  * \verbatim
29*cc02d7e2SAndroid Build Coastguard Worker                                      -----------
30*cc02d7e2SAndroid Build Coastguard Worker                                     | GRPCCall2 |
31*cc02d7e2SAndroid Build Coastguard Worker                                      -----------
32*cc02d7e2SAndroid Build Coastguard Worker                                           |
33*cc02d7e2SAndroid Build Coastguard Worker                                           |
34*cc02d7e2SAndroid Build Coastguard Worker                              --------------------------
35*cc02d7e2SAndroid Build Coastguard Worker                             | GRPCInterceptorManager 1 |
36*cc02d7e2SAndroid Build Coastguard Worker                              --------------------------
37*cc02d7e2SAndroid Build Coastguard Worker                             | GRPCInterceptor 1        |
38*cc02d7e2SAndroid Build Coastguard Worker                              --------------------------
39*cc02d7e2SAndroid Build Coastguard Worker                                           |
40*cc02d7e2SAndroid Build Coastguard Worker                                          ...
41*cc02d7e2SAndroid Build Coastguard Worker                                           |
42*cc02d7e2SAndroid Build Coastguard Worker                              --------------------------
43*cc02d7e2SAndroid Build Coastguard Worker                             | GRPCInterceptorManager N |
44*cc02d7e2SAndroid Build Coastguard Worker                              --------------------------
45*cc02d7e2SAndroid Build Coastguard Worker                             | GRPCInterceptor N        |
46*cc02d7e2SAndroid Build Coastguard Worker                              --------------------------
47*cc02d7e2SAndroid Build Coastguard Worker                                           |
48*cc02d7e2SAndroid Build Coastguard Worker                                           |
49*cc02d7e2SAndroid Build Coastguard Worker                                  ------------------
50*cc02d7e2SAndroid Build Coastguard Worker                                 | GRPCCallInternal |
51*cc02d7e2SAndroid Build Coastguard Worker                                  ------------------
52*cc02d7e2SAndroid Build Coastguard Worker    \endverbatim
53*cc02d7e2SAndroid Build Coastguard Worker  *
54*cc02d7e2SAndroid Build Coastguard Worker  * The chain of interceptors is initialized when the corresponding GRPCCall2 object or proto call
55*cc02d7e2SAndroid Build Coastguard Worker  * object (GRPCUnaryProtoCall and GRPCStreamingProtoCall) is initialized. The initialization of the
56*cc02d7e2SAndroid Build Coastguard Worker  * chain is controlled by the property interceptorFactories in the callOptions parameter of the
57*cc02d7e2SAndroid Build Coastguard Worker  * corresponding call object. Property interceptorFactories is an array of
58*cc02d7e2SAndroid Build Coastguard Worker  * id<GRPCInterceptorFactory> objects provided by the user. When a call object is initialized, each
59*cc02d7e2SAndroid Build Coastguard Worker  * interceptor factory generates an interceptor object for the call. gRPC internally links the
60*cc02d7e2SAndroid Build Coastguard Worker  * interceptors with each other and with the actual call object. The order of the interceptors in
61*cc02d7e2SAndroid Build Coastguard Worker  * the chain is exactly the same as the order of factory objects in interceptorFactories property.
62*cc02d7e2SAndroid Build Coastguard Worker  * All requests (start, write, finish, cancel, receive next) initiated by the user will be processed
63*cc02d7e2SAndroid Build Coastguard Worker  * in the order of interceptors, and all responses (initial metadata, data, trailing metadata, write
64*cc02d7e2SAndroid Build Coastguard Worker  * data done) are processed in the reverse order.
65*cc02d7e2SAndroid Build Coastguard Worker  *
66*cc02d7e2SAndroid Build Coastguard Worker  * Each interceptor in the interceptor chain should behave as a user of the next interceptor, and at
67*cc02d7e2SAndroid Build Coastguard Worker  * the same time behave as a call to the previous interceptor. Therefore interceptor implementations
68*cc02d7e2SAndroid Build Coastguard Worker  * must follow the state transition of gRPC calls and must also forward events that are consistent
69*cc02d7e2SAndroid Build Coastguard Worker  * with the current state of the next/previous interceptor. They should also make sure that the
70*cc02d7e2SAndroid Build Coastguard Worker  * events they forwarded to the next and previous interceptors will, in the end, make the neighbour
71*cc02d7e2SAndroid Build Coastguard Worker  * interceptor terminate correctly and reaches "finished" state. The diagram below shows the state
72*cc02d7e2SAndroid Build Coastguard Worker  * transitions. Any event not appearing on the diagram means the event is not permitted for that
73*cc02d7e2SAndroid Build Coastguard Worker  * particular state.
74*cc02d7e2SAndroid Build Coastguard Worker  *
75*cc02d7e2SAndroid Build Coastguard Worker  * \verbatim
76*cc02d7e2SAndroid Build Coastguard Worker                                         writeData
77*cc02d7e2SAndroid Build Coastguard Worker                                     receiveNextMessages
78*cc02d7e2SAndroid Build Coastguard Worker                                  didReceiveInitialMetadata
79*cc02d7e2SAndroid Build Coastguard Worker                                       didReceiveData
80*cc02d7e2SAndroid Build Coastguard Worker                                        didWriteData                   receiveNextmessages
81*cc02d7e2SAndroid Build Coastguard Worker              writeData  -----             -----                 ----  didReceiveInitialMetadata
82*cc02d7e2SAndroid Build Coastguard Worker    receiveNextMessages |     |           |     |               |    | didReceiveData
83*cc02d7e2SAndroid Build Coastguard Worker                        |     V           |     V               |    V didWriteData
84*cc02d7e2SAndroid Build Coastguard Worker                  -------------  start   ---------   finish    ------------
85*cc02d7e2SAndroid Build Coastguard Worker                 | initialized | -----> | started | --------> | half-close |
86*cc02d7e2SAndroid Build Coastguard Worker                  -------------          ---------             ------------
87*cc02d7e2SAndroid Build Coastguard Worker                        |                     |                      |
88*cc02d7e2SAndroid Build Coastguard Worker                        |                     | didClose             | didClose
89*cc02d7e2SAndroid Build Coastguard Worker                        |cancel               | cancel               | cancel
90*cc02d7e2SAndroid Build Coastguard Worker                        |                     V                      |
91*cc02d7e2SAndroid Build Coastguard Worker                        |                 ----------                 |
92*cc02d7e2SAndroid Build Coastguard Worker                         --------------> | finished | <--------------
93*cc02d7e2SAndroid Build Coastguard Worker                                          ----------
94*cc02d7e2SAndroid Build Coastguard Worker                                           |      ^ writeData
95*cc02d7e2SAndroid Build Coastguard Worker                                           |      | finish
96*cc02d7e2SAndroid Build Coastguard Worker                                            ------  cancel
97*cc02d7e2SAndroid Build Coastguard Worker                                                    receiveNextMessages
98*cc02d7e2SAndroid Build Coastguard Worker    \endverbatim
99*cc02d7e2SAndroid Build Coastguard Worker  *
100*cc02d7e2SAndroid Build Coastguard Worker  * An interceptor must forward responses to its previous interceptor in the order of initial
101*cc02d7e2SAndroid Build Coastguard Worker  * metadata, message(s), and trailing metadata. Forwarding responses out of this order (e.g.
102*cc02d7e2SAndroid Build Coastguard Worker  * forwarding a message before initial metadata) is not allowed.
103*cc02d7e2SAndroid Build Coastguard Worker  *
104*cc02d7e2SAndroid Build Coastguard Worker  * Events of requests and responses are dispatched to interceptor objects using the interceptor's
105*cc02d7e2SAndroid Build Coastguard Worker  * dispatch queue. The dispatch queue should be serial queue to make sure the events are processed
106*cc02d7e2SAndroid Build Coastguard Worker  * in order. Interceptor implementations must derive from GRPCInterceptor class. The class makes
107*cc02d7e2SAndroid Build Coastguard Worker  * some basic implementation of all methods responding to an event of a call. If an interceptor does
108*cc02d7e2SAndroid Build Coastguard Worker  * not care about a particular event, it can use the basic implementation of the GRPCInterceptor
109*cc02d7e2SAndroid Build Coastguard Worker  * class, which simply forward the event to the next or previous interceptor in the chain.
110*cc02d7e2SAndroid Build Coastguard Worker  *
111*cc02d7e2SAndroid Build Coastguard Worker  * The interceptor object should be unique for each call since the call context is not passed to the
112*cc02d7e2SAndroid Build Coastguard Worker  * interceptor object in a call event. However, the interceptors can be implemented to share states
113*cc02d7e2SAndroid Build Coastguard Worker  * by receiving state sharing object from the factory upon construction.
114*cc02d7e2SAndroid Build Coastguard Worker  */
115*cc02d7e2SAndroid Build Coastguard Worker 
116*cc02d7e2SAndroid Build Coastguard Worker #import "GRPCCall.h"
117*cc02d7e2SAndroid Build Coastguard Worker #import "GRPCDispatchable.h"
118*cc02d7e2SAndroid Build Coastguard Worker 
119*cc02d7e2SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_BEGIN
120*cc02d7e2SAndroid Build Coastguard Worker 
121*cc02d7e2SAndroid Build Coastguard Worker @class GRPCInterceptorManager;
122*cc02d7e2SAndroid Build Coastguard Worker @class GRPCInterceptor;
123*cc02d7e2SAndroid Build Coastguard Worker @class GRPCRequestOptions;
124*cc02d7e2SAndroid Build Coastguard Worker @class GRPCCallOptions;
125*cc02d7e2SAndroid Build Coastguard Worker @protocol GRPCResponseHandler;
126*cc02d7e2SAndroid Build Coastguard Worker 
127*cc02d7e2SAndroid Build Coastguard Worker /**
128*cc02d7e2SAndroid Build Coastguard Worker  * The GRPCInterceptorInterface defines the request events that can occur to an interceptor.
129*cc02d7e2SAndroid Build Coastguard Worker  */
130*cc02d7e2SAndroid Build Coastguard Worker @protocol GRPCInterceptorInterface <NSObject, GRPCDispatchable>
131*cc02d7e2SAndroid Build Coastguard Worker 
132*cc02d7e2SAndroid Build Coastguard Worker /**
133*cc02d7e2SAndroid Build Coastguard Worker  * To start the call. This method will only be called once for each instance.
134*cc02d7e2SAndroid Build Coastguard Worker  */
135*cc02d7e2SAndroid Build Coastguard Worker - (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions
136*cc02d7e2SAndroid Build Coastguard Worker                     callOptions:(GRPCCallOptions *)callOptions;
137*cc02d7e2SAndroid Build Coastguard Worker 
138*cc02d7e2SAndroid Build Coastguard Worker /**
139*cc02d7e2SAndroid Build Coastguard Worker  * To write data to the call.
140*cc02d7e2SAndroid Build Coastguard Worker  */
141*cc02d7e2SAndroid Build Coastguard Worker - (void)writeData:(id)data;
142*cc02d7e2SAndroid Build Coastguard Worker 
143*cc02d7e2SAndroid Build Coastguard Worker /**
144*cc02d7e2SAndroid Build Coastguard Worker  * To finish the stream of requests.
145*cc02d7e2SAndroid Build Coastguard Worker  */
146*cc02d7e2SAndroid Build Coastguard Worker - (void)finish;
147*cc02d7e2SAndroid Build Coastguard Worker 
148*cc02d7e2SAndroid Build Coastguard Worker /**
149*cc02d7e2SAndroid Build Coastguard Worker  * To cancel the call.
150*cc02d7e2SAndroid Build Coastguard Worker  */
151*cc02d7e2SAndroid Build Coastguard Worker - (void)cancel;
152*cc02d7e2SAndroid Build Coastguard Worker 
153*cc02d7e2SAndroid Build Coastguard Worker /**
154*cc02d7e2SAndroid Build Coastguard Worker  * To indicate the call that the previous interceptor is ready to receive more messages.
155*cc02d7e2SAndroid Build Coastguard Worker  */
156*cc02d7e2SAndroid Build Coastguard Worker - (void)receiveNextMessages:(NSUInteger)numberOfMessages;
157*cc02d7e2SAndroid Build Coastguard Worker 
158*cc02d7e2SAndroid Build Coastguard Worker @end
159*cc02d7e2SAndroid Build Coastguard Worker 
160*cc02d7e2SAndroid Build Coastguard Worker /**
161*cc02d7e2SAndroid Build Coastguard Worker  * An interceptor factory object is used to create interceptor object for the call at the call
162*cc02d7e2SAndroid Build Coastguard Worker  * start time.
163*cc02d7e2SAndroid Build Coastguard Worker  */
164*cc02d7e2SAndroid Build Coastguard Worker @protocol GRPCInterceptorFactory
165*cc02d7e2SAndroid Build Coastguard Worker 
166*cc02d7e2SAndroid Build Coastguard Worker /**
167*cc02d7e2SAndroid Build Coastguard Worker  * Create an interceptor object. gRPC uses the returned object as the interceptor for the current
168*cc02d7e2SAndroid Build Coastguard Worker  * call
169*cc02d7e2SAndroid Build Coastguard Worker  */
170*cc02d7e2SAndroid Build Coastguard Worker - (GRPCInterceptor *)createInterceptorWithManager:(GRPCInterceptorManager *)interceptorManager;
171*cc02d7e2SAndroid Build Coastguard Worker 
172*cc02d7e2SAndroid Build Coastguard Worker @end
173*cc02d7e2SAndroid Build Coastguard Worker 
174*cc02d7e2SAndroid Build Coastguard Worker /**
175*cc02d7e2SAndroid Build Coastguard Worker  * GRPCInterceptorManager is a helper class to forward messages between the interceptors. The
176*cc02d7e2SAndroid Build Coastguard Worker  * interceptor manager object retains reference to the next and previous interceptor object in the
177*cc02d7e2SAndroid Build Coastguard Worker  * interceptor chain, and forward corresponding events to them.
178*cc02d7e2SAndroid Build Coastguard Worker  *
179*cc02d7e2SAndroid Build Coastguard Worker  * All methods except the initializer of the class can only be called on the manager's dispatch
180*cc02d7e2SAndroid Build Coastguard Worker  * queue. Since the manager's dispatch queue targets corresponding interceptor's dispatch queue, it
181*cc02d7e2SAndroid Build Coastguard Worker  * is also safe to call the manager's methods in the corresponding interceptor instance's methods
182*cc02d7e2SAndroid Build Coastguard Worker  * that implement GRPCInterceptorInterface.
183*cc02d7e2SAndroid Build Coastguard Worker  *
184*cc02d7e2SAndroid Build Coastguard Worker  * When an interceptor is shutting down, it must invoke -shutDown method of its corresponding
185*cc02d7e2SAndroid Build Coastguard Worker  * manager so that references to other interceptors can be released and proper clean-up is made.
186*cc02d7e2SAndroid Build Coastguard Worker  */
187*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCInterceptorManager : NSObject <GRPCInterceptorInterface, GRPCResponseHandler>
188*cc02d7e2SAndroid Build Coastguard Worker 
189*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)init NS_UNAVAILABLE;
190*cc02d7e2SAndroid Build Coastguard Worker 
191*cc02d7e2SAndroid Build Coastguard Worker + (instancetype)new NS_UNAVAILABLE;
192*cc02d7e2SAndroid Build Coastguard Worker 
193*cc02d7e2SAndroid Build Coastguard Worker - (nullable instancetype)initWithFactories:(nullable NSArray<id<GRPCInterceptorFactory>> *)factories
194*cc02d7e2SAndroid Build Coastguard Worker                        previousInterceptor:(nullable id<GRPCResponseHandler>)previousInterceptor
195*cc02d7e2SAndroid Build Coastguard Worker                                transportID:(GRPCTransportID)transportID;
196*cc02d7e2SAndroid Build Coastguard Worker 
197*cc02d7e2SAndroid Build Coastguard Worker /**
198*cc02d7e2SAndroid Build Coastguard Worker  * Notify the manager that the interceptor has shut down and the manager should release references
199*cc02d7e2SAndroid Build Coastguard Worker  * to other interceptors and stop forwarding requests/responses.
200*cc02d7e2SAndroid Build Coastguard Worker  */
201*cc02d7e2SAndroid Build Coastguard Worker - (void)shutDown;
202*cc02d7e2SAndroid Build Coastguard Worker 
203*cc02d7e2SAndroid Build Coastguard Worker // Methods to forward GRPCInterceptorInterface calls to the next interceptor
204*cc02d7e2SAndroid Build Coastguard Worker 
205*cc02d7e2SAndroid Build Coastguard Worker /** Notify the next interceptor in the chain to start the call and pass arguments */
206*cc02d7e2SAndroid Build Coastguard Worker - (void)startNextInterceptorWithRequest:(GRPCRequestOptions *)requestOptions
207*cc02d7e2SAndroid Build Coastguard Worker                             callOptions:(GRPCCallOptions *)callOptions;
208*cc02d7e2SAndroid Build Coastguard Worker 
209*cc02d7e2SAndroid Build Coastguard Worker /** Pass a message to be sent to the next interceptor in the chain */
210*cc02d7e2SAndroid Build Coastguard Worker - (void)writeNextInterceptorWithData:(id)data;
211*cc02d7e2SAndroid Build Coastguard Worker 
212*cc02d7e2SAndroid Build Coastguard Worker /** Notify the next interceptor in the chain to finish the call */
213*cc02d7e2SAndroid Build Coastguard Worker - (void)finishNextInterceptor;
214*cc02d7e2SAndroid Build Coastguard Worker 
215*cc02d7e2SAndroid Build Coastguard Worker /** Notify the next interceptor in the chain to cancel the call */
216*cc02d7e2SAndroid Build Coastguard Worker - (void)cancelNextInterceptor;
217*cc02d7e2SAndroid Build Coastguard Worker 
218*cc02d7e2SAndroid Build Coastguard Worker /** Notify the next interceptor in the chain to receive more messages */
219*cc02d7e2SAndroid Build Coastguard Worker - (void)receiveNextInterceptorMessages:(NSUInteger)numberOfMessages;
220*cc02d7e2SAndroid Build Coastguard Worker 
221*cc02d7e2SAndroid Build Coastguard Worker // Methods to forward GRPCResponseHandler callbacks to the previous object
222*cc02d7e2SAndroid Build Coastguard Worker 
223*cc02d7e2SAndroid Build Coastguard Worker /** Forward initial metadata to the previous interceptor in the chain */
224*cc02d7e2SAndroid Build Coastguard Worker - (void)forwardPreviousInterceptorWithInitialMetadata:(nullable NSDictionary *)initialMetadata;
225*cc02d7e2SAndroid Build Coastguard Worker 
226*cc02d7e2SAndroid Build Coastguard Worker /** Forward a received message to the previous interceptor in the chain */
227*cc02d7e2SAndroid Build Coastguard Worker - (void)forwardPreviousInterceptorWithData:(nullable id)data;
228*cc02d7e2SAndroid Build Coastguard Worker 
229*cc02d7e2SAndroid Build Coastguard Worker /** Forward call close and trailing metadata to the previous interceptor in the chain */
230*cc02d7e2SAndroid Build Coastguard Worker - (void)forwardPreviousInterceptorCloseWithTrailingMetadata:
231*cc02d7e2SAndroid Build Coastguard Worker             (nullable NSDictionary *)trailingMetadata
232*cc02d7e2SAndroid Build Coastguard Worker                                                       error:(nullable NSError *)error;
233*cc02d7e2SAndroid Build Coastguard Worker 
234*cc02d7e2SAndroid Build Coastguard Worker /** Forward write completion to the previous interceptor in the chain */
235*cc02d7e2SAndroid Build Coastguard Worker - (void)forwardPreviousInterceptorDidWriteData;
236*cc02d7e2SAndroid Build Coastguard Worker 
237*cc02d7e2SAndroid Build Coastguard Worker @end
238*cc02d7e2SAndroid Build Coastguard Worker 
239*cc02d7e2SAndroid Build Coastguard Worker /**
240*cc02d7e2SAndroid Build Coastguard Worker  * Base class for a gRPC interceptor. The implementation of the base class provides default behavior
241*cc02d7e2SAndroid Build Coastguard Worker  * of an interceptor, which is simply forward a request/callback to the next/previous interceptor in
242*cc02d7e2SAndroid Build Coastguard Worker  * the chain. The base class implementation uses the same dispatch queue for both requests and
243*cc02d7e2SAndroid Build Coastguard Worker  * callbacks.
244*cc02d7e2SAndroid Build Coastguard Worker  *
245*cc02d7e2SAndroid Build Coastguard Worker  * An interceptor implementation should inherit from this base class and initialize the base class
246*cc02d7e2SAndroid Build Coastguard Worker  * with [super initWithInterceptorManager:dispatchQueue:] for the default implementation to function
247*cc02d7e2SAndroid Build Coastguard Worker  * properly.
248*cc02d7e2SAndroid Build Coastguard Worker  */
249*cc02d7e2SAndroid Build Coastguard Worker @interface GRPCInterceptor : NSObject <GRPCInterceptorInterface, GRPCResponseHandler>
250*cc02d7e2SAndroid Build Coastguard Worker 
251*cc02d7e2SAndroid Build Coastguard Worker - (instancetype)init NS_UNAVAILABLE;
252*cc02d7e2SAndroid Build Coastguard Worker + (instancetype)new NS_UNAVAILABLE;
253*cc02d7e2SAndroid Build Coastguard Worker 
254*cc02d7e2SAndroid Build Coastguard Worker /**
255*cc02d7e2SAndroid Build Coastguard Worker  * Initialize the interceptor with the next interceptor in the chain, and provide the dispatch queue
256*cc02d7e2SAndroid Build Coastguard Worker  * that this interceptor's methods are dispatched onto.
257*cc02d7e2SAndroid Build Coastguard Worker  */
258*cc02d7e2SAndroid Build Coastguard Worker - (nullable instancetype)initWithInterceptorManager:(GRPCInterceptorManager *)interceptorManager
259*cc02d7e2SAndroid Build Coastguard Worker                                       dispatchQueue:(dispatch_queue_t)dispatchQueue;
260*cc02d7e2SAndroid Build Coastguard Worker 
261*cc02d7e2SAndroid Build Coastguard Worker // Default implementation of GRPCInterceptorInterface
262*cc02d7e2SAndroid Build Coastguard Worker 
263*cc02d7e2SAndroid Build Coastguard Worker - (void)startWithRequestOptions:(GRPCRequestOptions *)requestOptions
264*cc02d7e2SAndroid Build Coastguard Worker                     callOptions:(GRPCCallOptions *)callOptions;
265*cc02d7e2SAndroid Build Coastguard Worker - (void)writeData:(id)data;
266*cc02d7e2SAndroid Build Coastguard Worker - (void)finish;
267*cc02d7e2SAndroid Build Coastguard Worker - (void)cancel;
268*cc02d7e2SAndroid Build Coastguard Worker - (void)receiveNextMessages:(NSUInteger)numberOfMessages;
269*cc02d7e2SAndroid Build Coastguard Worker 
270*cc02d7e2SAndroid Build Coastguard Worker // Default implementation of GRPCResponeHandler
271*cc02d7e2SAndroid Build Coastguard Worker 
272*cc02d7e2SAndroid Build Coastguard Worker - (void)didReceiveInitialMetadata:(nullable NSDictionary *)initialMetadata;
273*cc02d7e2SAndroid Build Coastguard Worker - (void)didReceiveData:(id)data;
274*cc02d7e2SAndroid Build Coastguard Worker - (void)didCloseWithTrailingMetadata:(nullable NSDictionary *)trailingMetadata
275*cc02d7e2SAndroid Build Coastguard Worker                                error:(nullable NSError *)error;
276*cc02d7e2SAndroid Build Coastguard Worker - (void)didWriteData;
277*cc02d7e2SAndroid Build Coastguard Worker 
278*cc02d7e2SAndroid Build Coastguard Worker @end
279*cc02d7e2SAndroid Build Coastguard Worker 
280*cc02d7e2SAndroid Build Coastguard Worker NS_ASSUME_NONNULL_END
281