Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (BOOL)setupSocketStreams {
- // Make sure streams were created correctly
- if ( readStream == nil || writeStream == nil ) {
- [self close];
- return NO;
- }
- // Create buffers
- incomingDataBuffer = [[NSMutableData alloc] init];
- outgoingDataBuffer = [[NSMutableData alloc] init];
- // Indicate that we want socket to be closed whenever streams are closed
- CFReadStreamSetProperty(
- readStream,
- kCFStreamPropertyShouldCloseNativeSocket,
- kCFBooleanTrue
- );
- CFWriteStreamSetProperty(
- writeStream,
- kCFStreamPropertyShouldCloseNativeSocket,
- kCFBooleanTrue
- );
- const void* values[] = { CFSTR("kCFStreamSocketSecurityLevelTLSv1_0SSLv3") };
- const void* keys[] = { kCFStreamSSLLevel };
- CFDictionaryRef sslSettingsDict = CFDictionaryCreate(kCFAllocatorDefault, keys, values, 1,
- &kCFTypeDictionaryKeyCallBacks,
- &kCFTypeDictionaryValueCallBacks);
- CFReadStreamSetProperty(
- readStream,
- kCFStreamPropertySSLSettings,
- sslSettingsDict
- );
- CFWriteStreamSetProperty(writeStream,
- kCFStreamPropertySSLSettings,
- sslSettingsDict
- );
- CFRelease(sslSettingsDict);
- // We will be handling the following stream events
- CFOptionFlags registeredEvents =
- kCFStreamEventOpenCompleted |
- kCFStreamEventHasBytesAvailable |
- kCFStreamEventCanAcceptBytes |
- kCFStreamEventEndEncountered |
- kCFStreamEventErrorOccurred
- ;
- // Setup stream context - reference to 'self' will be passed to stream event handling callbacks
- CFStreamClientContext ctx = {
- 0, // version
- self, // info
- NULL, // retain callback
- NULL, // release callback
- NULL // copyDescription callback
- };
- // Specify callbacks that will be handling stream events
- CFReadStreamSetClient(
- readStream,
- registeredEvents,
- readStreamEventHandler,
- &ctx
- );
- CFWriteStreamSetClient(
- writeStream,
- registeredEvents,
- writeStreamEventHandler,
- &ctx
- );
- // Schedule streams with current run loop
- CFReadStreamScheduleWithRunLoop(
- readStream,
- CFRunLoopGetCurrent(),
- kCFRunLoopCommonModes
- );
- CFWriteStreamScheduleWithRunLoop(
- writeStream,
- CFRunLoopGetCurrent(),
- kCFRunLoopCommonModes
- );
- // Open both streams
- if ( ! CFReadStreamOpen(readStream) || ! CFWriteStreamOpen(writeStream)) {
- [self close];
- return NO;
- }
- if ([self.delegate respondsToSelector:@selector(establishedConnection:)]) {
- [self.delegate establishedConnection:self];
- }
- return YES;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement