aboutsummaryrefslogtreecommitdiffstats
path: root/Vendor/UnittWebSocketClient/include/WebSocket07.h
diff options
context:
space:
mode:
Diffstat (limited to 'Vendor/UnittWebSocketClient/include/WebSocket07.h')
-rw-r--r--Vendor/UnittWebSocketClient/include/WebSocket07.h242
1 files changed, 242 insertions, 0 deletions
diff --git a/Vendor/UnittWebSocketClient/include/WebSocket07.h b/Vendor/UnittWebSocketClient/include/WebSocket07.h
new file mode 100644
index 0000000..54398ef
--- /dev/null
+++ b/Vendor/UnittWebSocketClient/include/WebSocket07.h
@@ -0,0 +1,242 @@
+//
+// WebSocket07.h
+// UnittWebSocketClient
+//
+// Created by Josh Morris on 5/3/11.
+// Copyright 2011 UnitT Software. All rights reserved.
+//
+// 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 "AsyncSocket.h"
+#import <Security/Security.h>
+#import <CommonCrypto/CommonDigest.h>
+#import <CommonCrypto/CommonCryptor.h>
+#import "NSData+Base64.h"
+#import "MutableQueue.h"
+
+
+enum
+{
+ WebSocketCloseStatusNormal = 1000, //indicates a normal closure, meaning whatever purpose the
+ //connection was established for has been fulfilled
+ WebSocketCloseStatusEndpointGone = 1001, //indicates that an endpoint is "going away", such as a
+ //server going down, or a browser having navigated away from
+ //a page
+ WebSocketCloseStatusProtocolError = 1002, //indicates that an endpoint is terminating the connection
+ //due to a protocol error
+ WebSocketCloseStatusInvalidDataType = 1003, //indicates that an endpoint is terminating the connection
+ //because it has received a type of data it cannot accept
+ //(e.g. an endpoint that understands only text data MAY
+ //send this if it receives a binary message)
+ WebSocketCloseStatusMessageTooLarge = 1004 //indicates that an endpoint is terminating the connection
+ //because it has received a message that is too large
+};
+typedef NSUInteger WebSocketCloseStatus;
+
+enum
+{
+ WebSocketReadyStateConnecting = 0, //The connection has not yet been established.
+ WebSocketReadyStateOpen = 1, //The WebSocket connection is established and communication is possible.
+ WebSocketReadyStateClosing = 2, //The connection is going through the closing handshake.
+ WebSocketReadyStateClosed = 3 //The connection has been closed or could not be opened
+};
+typedef NSUInteger WebSocketReadyState;
+
+
+__attribute__((deprecated))
+@protocol WebSocket07Delegate <NSObject>
+
+/**
+ * Called when the web socket connects and is ready for reading and writing.
+ **/
+- (void) didOpen;
+
+/**
+ * Called when the web socket closes. aError will be nil if it closes cleanly.
+ **/
+- (void) didClose:(NSUInteger) aStatusCode message:(NSString*) aMessage error:(NSError*) aError;
+
+/**
+ * Called when the web socket receives an error. Such an error can result in the
+ socket being closed.
+ **/
+- (void) didReceiveError:(NSError*) aError;
+
+/**
+ * Called when the web socket receives a message.
+ **/
+- (void) didReceiveTextMessage:(NSString*) aMessage;
+
+/**
+ * Called when the web socket receives a message.
+ **/
+- (void) didReceiveBinaryMessage:(NSData*) aMessage;
+
+@optional
+/**
+ * Called when pong is sent... For keep-alive optimization.
+ **/
+- (void) didSendPong:(NSData*) aMessage;
+
+@end
+
+
+__attribute__((deprecated))
+@interface WebSocket07 : NSObject
+{
+@private
+ id<WebSocket07Delegate> delegate;
+ NSURL* url;
+ NSString* origin;
+ AsyncSocket* socket;
+ WebSocketReadyState readystate;
+ NSError* closingError;
+ BOOL isSecure;
+ NSTimeInterval timeout;
+ NSDictionary* tlsSettings;
+ NSArray* protocols;
+ NSString* serverProtocol;
+ NSString* wsSecKey;
+ NSString* wsSecKeyHandshake;
+ BOOL verifyHandshake;
+ NSUInteger maxPayloadSize;
+ MutableQueue* pendingFragments;
+ BOOL isClosing;
+ NSUInteger closeStatusCode;
+ NSString* closeMessage;
+ BOOL sendCloseInfoToListener;
+ NSTimeInterval closeTimeout;
+}
+
+
+/**
+ * Callback delegate for websocket events.
+ **/
+@property(nonatomic,retain) id<WebSocket07Delegate> delegate;
+
+/**
+ * Max size of the payload. Any messages larger will be sent as fragments.
+ **/
+@property(nonatomic,assign) NSUInteger maxPayloadSize;
+
+/**
+ * Timeout used for sending messages, not establishing the socket connection. A
+ * value of -1 will result in no timeouts being applied.
+ **/
+@property(nonatomic,assign) NSTimeInterval timeout;
+
+/**
+ * Timeout used for the closing handshake. If this timeout is exceeded, the socket
+ * will be forced closed. A value of -1 will result in no timeouts being applied.
+ **/
+@property(nonatomic,assign) NSTimeInterval closeTimeout;
+
+/**
+ * URL of the websocket
+ **/
+@property(nonatomic,readonly) NSURL* url;
+
+/**
+ * Origin is used more in a browser setting, but it is intended to prevent cross-site scripting. If
+ * nil, the client will fill this in using the url provided by the websocket.
+ **/
+@property(nonatomic,readonly) NSString* origin;
+
+/**
+ * Represents the state of the connection. It can have the following values:
+ * - WebSocketReadyStateConnecting: The connection has not yet been established.
+ * - WebSocketReadyStateOpen: The WebSocket connection is established and communication is possible.
+ * - WebSocketReadyStateClosing: The connection is going through the closing handshake.
+ * - WebSocketReadyStateClosed: The connection has been closed or could not be opened.
+ **/
+@property(nonatomic,readonly) WebSocketReadyState readystate;
+
+
+/**
+ * Settings for securing the connection using SSL/TLS.
+ *
+ * The possible keys and values for the TLS settings are well documented.
+ * Some possible keys are:
+ * - kCFStreamSSLLevel
+ * - kCFStreamSSLAllowsExpiredCertificates
+ * - kCFStreamSSLAllowsExpiredRoots
+ * - kCFStreamSSLAllowsAnyRoot
+ * - kCFStreamSSLValidatesCertificateChain
+ * - kCFStreamSSLPeerName
+ * - kCFStreamSSLCertificates
+ * - kCFStreamSSLIsServer
+ *
+ * Please refer to Apple's documentation for associated values, as well as other possible keys.
+ *
+ * If the value is nil or an empty dictionary, then the websocket cannot be secured.
+ **/
+@property(nonatomic,readonly) NSDictionary* tlsSettings;
+
+/**
+ * The subprotocols supported by the client. Each subprotocol is represented by an NSString.
+ **/
+@property(nonatomic,readonly) NSArray* protocols;
+
+/**
+ * True if the client should verify the handshake values sent by the server. Since many of
+ * the web socket servers may not have been updated to support this, set to false to ignore
+ * and simply accept the connection to the server.
+ **/
+@property(nonatomic,readonly) BOOL verifyHandshake;
+
+/**
+ * The subprotocol selected by the server, nil if none was selected
+ **/
+@property(nonatomic,readonly) NSString* serverProtocol;
+
+
++ (id) webSocketWithURLString:(NSString*) aUrlString delegate:(id<WebSocket07Delegate>) aDelegate origin:(NSString*) aOrigin protocols:(NSArray*) aProtocols tlsSettings:(NSDictionary*) aTlsSettings verifyHandshake:(BOOL) aVerifyHandshake;
+- (id) initWithURLString:(NSString *) aUrlString delegate:(id<WebSocket07Delegate>) aDelegate origin:(NSString*) aOrigin protocols:(NSArray*) aProtocols tlsSettings:(NSDictionary*) aTlsSettings verifyHandshake:(BOOL) aVerifyHandshake;
+
+
+/**
+ * Connect the websocket and prepare it for reading and writing.
+ **/
+- (void) open;
+
+/**
+ * Finish all reads/writes and close the websocket. Sends a status of WebSocketCloseStatusNormal and no message.
+ **/
+- (void) close;
+
+/**
+ * Finish all reads/writes and close the websocket. Sends the specified status and message.
+ **/
+- (void) close:(NSUInteger) aStatusCode message:(NSString*) aMessage;
+
+/**
+ * Write a UTF-8 encoded NSString message to the websocket.
+ **/
+- (void) sendText:(NSString*)message;
+
+/**
+ * Write a binary message to the websocket.
+ **/
+- (void) sendBinary:(NSData*)message;
+
+/**
+ * Send ping message to the websocket
+ */
+- (void) sendPing:(NSData*)message;
+
+extern NSString *const WebSocket07Exception;
+extern NSString *const WebSocket07ErrorDomain;
+
+@end