blob: 775b70af56ff0aae07e5278e9abc6f1a19d6cd06 [file] [log] [blame]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Normally, we'd "import <Foundation/Foundation.h>"
// but that would mean that ffigen would process every file in the Foundation
// framework, which is huge. So just import the headers that we need.
#import <Foundation/NSObject.h>
#import <Foundation/NSURLSession.h>
#include "dart-sdk/include/dart_api_dl.h"
/**
* The type of message being sent to a Dart port. See CUPHTTPClientDelegate.
*/
typedef NS_ENUM(NSInteger, MessageType) {
ResponseMessage = 0,
DataMessage = 1,
CompletedMessage = 2,
RedirectMessage = 3,
FinishedDownloading = 4,
WebSocketOpened = 5,
WebSocketClosed = 6,
};
/**
* The configuration associated with a NSURLSessionTask.
* See CUPHTTPClientDelegate.
*/
@interface CUPHTTPTaskConfiguration : NSObject
- (id) initWithPort:(Dart_Port)sendPort;
@property (readonly) Dart_Port sendPort;
@end
/**
* A delegate for NSURLSession that forwards events for registered
* NSURLSessionTasks and forwards them to a port for consumption in Dart.
*
* The messages sent to the port are contained in a List with one of 3
* possible formats:
*
* 1. When the delegate receives a HTTP redirect response:
* [MessageType::RedirectMessage, <int: pointer to CUPHTTPForwardedRedirect>]
*
* 2. When the delegate receives a HTTP response:
* [MessageType::ResponseMessage, <int: pointer to CUPHTTPForwardedResponse>]
*
* 3. When the delegate receives some HTTP data:
* [MessageType::DataMessage, <int: pointer to CUPHTTPForwardedData>]
*
* 4. When the delegate is informed that the response is complete:
* [MessageType::CompletedMessage, <int: pointer to CUPHTTPForwardedComplete>]
*/
@interface CUPHTTPClientDelegate : NSObject
/**
* Instruct the delegate to forward events for the given task to the port
* specified in the configuration.
*/
- (void)registerTask:(NSURLSessionTask *)task
withConfiguration:(CUPHTTPTaskConfiguration *)config;
@end