 87776a8935
			
		
	
	87776a8935
	
	
	
		
			
			Updates the iOS code to use the new signaling model. Removes old Channel API code. Note that this no longer logs messages to UI. UI update forthcoming. BUG= R=glaznev@webrtc.org, jiayl@webrtc.org Review URL: https://webrtc-codereview.appspot.com/35369004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7852 4adac7df-926f-26a2-2b94-8c16560cd09d
		
			
				
	
	
		
			133 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
| //
 | |
| //   Copyright 2012 Square Inc.
 | |
| //
 | |
| //   Licensed under the Apache License, Version 2.0 (the "License");
 | |
| //   you may not use this file except in compliance with the License.
 | |
| //   You may obtain a copy of the License at
 | |
| //
 | |
| //       http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| //   Unless required by applicable law or agreed to in writing, software
 | |
| //   distributed under the License is distributed on an "AS IS" BASIS,
 | |
| //   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| //   See the License for the specific language governing permissions and
 | |
| //   limitations under the License.
 | |
| //
 | |
| 
 | |
| #import <Foundation/Foundation.h>
 | |
| #import <Security/SecCertificate.h>
 | |
| 
 | |
| typedef enum {
 | |
|     SR_CONNECTING   = 0,
 | |
|     SR_OPEN         = 1,
 | |
|     SR_CLOSING      = 2,
 | |
|     SR_CLOSED       = 3,
 | |
| } SRReadyState;
 | |
| 
 | |
| typedef enum SRStatusCode : NSInteger {
 | |
|     SRStatusCodeNormal = 1000,
 | |
|     SRStatusCodeGoingAway = 1001,
 | |
|     SRStatusCodeProtocolError = 1002,
 | |
|     SRStatusCodeUnhandledType = 1003,
 | |
|     // 1004 reserved.
 | |
|     SRStatusNoStatusReceived = 1005,
 | |
|     // 1004-1006 reserved.
 | |
|     SRStatusCodeInvalidUTF8 = 1007,
 | |
|     SRStatusCodePolicyViolated = 1008,
 | |
|     SRStatusCodeMessageTooBig = 1009,
 | |
| } SRStatusCode;
 | |
| 
 | |
| @class SRWebSocket;
 | |
| 
 | |
| extern NSString *const SRWebSocketErrorDomain;
 | |
| extern NSString *const SRHTTPResponseErrorKey;
 | |
| 
 | |
| #pragma mark - SRWebSocketDelegate
 | |
| 
 | |
| @protocol SRWebSocketDelegate;
 | |
| 
 | |
| #pragma mark - SRWebSocket
 | |
| 
 | |
| @interface SRWebSocket : NSObject <NSStreamDelegate>
 | |
| 
 | |
| @property (nonatomic, weak) id <SRWebSocketDelegate> delegate;
 | |
| 
 | |
| @property (nonatomic, readonly) SRReadyState readyState;
 | |
| @property (nonatomic, readonly, retain) NSURL *url;
 | |
| 
 | |
| // This returns the negotiated protocol.
 | |
| // It will be nil until after the handshake completes.
 | |
| @property (nonatomic, readonly, copy) NSString *protocol;
 | |
| 
 | |
| // Protocols should be an array of strings that turn into Sec-WebSocket-Protocol.
 | |
| - (id)initWithURLRequest:(NSURLRequest *)request protocols:(NSArray *)protocols;
 | |
| - (id)initWithURLRequest:(NSURLRequest *)request;
 | |
| 
 | |
| // Some helper constructors.
 | |
| - (id)initWithURL:(NSURL *)url protocols:(NSArray *)protocols;
 | |
| - (id)initWithURL:(NSURL *)url;
 | |
| 
 | |
| // Delegate queue will be dispatch_main_queue by default.
 | |
| // You cannot set both OperationQueue and dispatch_queue.
 | |
| - (void)setDelegateOperationQueue:(NSOperationQueue*) queue;
 | |
| - (void)setDelegateDispatchQueue:(dispatch_queue_t) queue;
 | |
| 
 | |
| // By default, it will schedule itself on +[NSRunLoop SR_networkRunLoop] using defaultModes.
 | |
| - (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
 | |
| - (void)unscheduleFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode;
 | |
| 
 | |
| // SRWebSockets are intended for one-time-use only.  Open should be called once and only once.
 | |
| - (void)open;
 | |
| 
 | |
| - (void)close;
 | |
| - (void)closeWithCode:(NSInteger)code reason:(NSString *)reason;
 | |
| 
 | |
| // Send a UTF8 String or Data.
 | |
| - (void)send:(id)data;
 | |
| 
 | |
| // Send Data (can be nil) in a ping message.
 | |
| - (void)sendPing:(NSData *)data;
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark - SRWebSocketDelegate
 | |
| 
 | |
| @protocol SRWebSocketDelegate <NSObject>
 | |
| 
 | |
| // message will either be an NSString if the server is using text
 | |
| // or NSData if the server is using binary.
 | |
| - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
 | |
| 
 | |
| @optional
 | |
| 
 | |
| - (void)webSocketDidOpen:(SRWebSocket *)webSocket;
 | |
| - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
 | |
| - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
 | |
| - (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload;
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark - NSURLRequest (CertificateAdditions)
 | |
| 
 | |
| @interface NSURLRequest (CertificateAdditions)
 | |
| 
 | |
| @property (nonatomic, retain, readonly) NSArray *SR_SSLPinnedCertificates;
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark - NSMutableURLRequest (CertificateAdditions)
 | |
| 
 | |
| @interface NSMutableURLRequest (CertificateAdditions)
 | |
| 
 | |
| @property (nonatomic, retain) NSArray *SR_SSLPinnedCertificates;
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark - NSRunLoop (SRWebSocket)
 | |
| 
 | |
| @interface NSRunLoop (SRWebSocket)
 | |
| 
 | |
| + (NSRunLoop *)SR_networkRunLoop;
 | |
| 
 | |
| @end
 |