diff options
| author | Teddy Wing | 2012-09-29 17:33:05 -0400 |
|---|---|---|
| committer | Teddy Wing | 2012-09-29 17:33:05 -0400 |
| commit | d14fe86d8c411ad41635a4736c2c736027f6b19b (patch) | |
| tree | ee6517a2d2cd22bdd0a067b437a8589a05cfe58c /Vendor/UnittWebSocketClient/include/WebSocket.h | |
| parent | aaa15ec5beeb3df296b7b0fa6d693f04fd52170b (diff) | |
| download | babblr-iOS-d14fe86d8c411ad41635a4736c2c736027f6b19b.tar.bz2 | |
Got pushing/sending to websockets working. Think I got receiving working too but not sure just yet.
Diffstat (limited to 'Vendor/UnittWebSocketClient/include/WebSocket.h')
| -rw-r--r-- | Vendor/UnittWebSocketClient/include/WebSocket.h | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/Vendor/UnittWebSocketClient/include/WebSocket.h b/Vendor/UnittWebSocketClient/include/WebSocket.h new file mode 100644 index 0000000..d23f14a --- /dev/null +++ b/Vendor/UnittWebSocketClient/include/WebSocket.h @@ -0,0 +1,202 @@ +// +// WebSocket.h +// UnittWebSocketClient +// +// Created by Josh Morris on 9/26/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 "GCDAsyncSocket.h" +#import <Security/Security.h> +#import <CommonCrypto/CommonDigest.h> +#import <CommonCrypto/CommonCryptor.h> +#import "NSData+Base64.h" +#import "MutableQueue.h" +#import "WebSocketConnectConfig.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) + WebSocketCloseStatusLegacyMessageTooLarge = 1004, //indicates that an endpoint is terminating the connection + //because it has received a message that is too large (prior to rfc6455) + WebSocketCloseStatusNormalButMissingStatus = 1005, //designated for use in applications expecting a status code + //to indicate that no status code was actually present + WebSocketCloseStatusAbnormalButMissingStatus = 1006, //designated for use in applications expecting a status code + //to indicate that the connection was closed abnormally, e.g. + //without sending or receiving a Close control frame. + WebSocketCloseStatusInvalidData = 1007, //indicates that an endpoint is terminating the connection because it has + //received data that is invalid, ex: supposed be UTF-8 (such as in a text frame) + // that was in fact not valid UTF-8 + WebSocketCloseStatusViolatesPolicy = 1008, //indicates that an endpoint is terminating the connection because it has + // received a message that violates its policy. This is a generic status code + // that can be returned when there is no other more suitable status code + // or if there is a need to hide specific details about the policy. + WebSocketCloseStatusMessageTooLarge = 1009, //indicates that an endpoint is terminating the connection + //because it has received a message that is too large + WebSocketCloseStatusMissingExtensions = 1010, //indicates that an endpoint (client) is terminating the connection because + // it has expected the server to negotiate one or more extension, but the + // server didn't return them in the response message of the WebSocket handshake + WebSocketCloseStatusServerError = 1011, //indicates that a server is terminating the connection because it encountered an + // unexpected condition that prevented it from fulfilling the request + WebSocketCloseStatusTlsHandshakeError = 1015 //indicate that the connection was closed due to a failure to perform a TLS handshake +}; +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; + + +@protocol WebSocketDelegate <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 + + +@interface WebSocket : NSObject +{ +@protected + AsyncSocket* socket; + GCDAsyncSocket *gcdSocket; + NSError* closingError; + NSString* wsSecKey; + NSString* wsSecKeyHandshake; + MutableQueue* pendingFragments; + BOOL isClosing; + NSUInteger closeStatusCode; + NSString* closeMessage; + BOOL sendCloseInfoToListener; + NSMutableData* fragmentBuffer; +@private + id<WebSocketDelegate> delegate; + WebSocketReadyState readystate; + WebSocketConnectConfig* config; + dispatch_queue_t wsQueue; + dispatch_queue_t delegateQueue; + NSTimer* pingTimer; +} + + +/** + * Callback delegate for websocket events. + **/ +@property(nonatomic,retain) id<WebSocketDelegate> delegate; + +/** + * Config info for the websocket connection. + **/ +@property(nonatomic,retain) WebSocketConnectConfig* config; + +/** + * 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; + + ++ (id) webSocketWithConfig:(WebSocketConnectConfig*) aConfig delegate:(id<WebSocketDelegate>) aDelegate; +- (id) initWithConfig:(WebSocketConnectConfig*) aConfig delegate:(id<WebSocketDelegate>) aDelegate; ++ (id) webSocketWithConfig:(WebSocketConnectConfig*) aConfig queue:(dispatch_queue_t) aDispatchQueue delegate:(id<WebSocketDelegate>) aDelegate; +- (id) initWithConfig:(WebSocketConnectConfig*) aConfig queue:(dispatch_queue_t) aDispatchQueue delegate:(id<WebSocketDelegate>) aDelegate; + + +/** + * 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 WebSocketException; +extern NSString *const WebSocketErrorDomain; + +@end |
