Author: geechorama
Date: Fri Jul 24 15:58:07 2009
New Revision: 797545
URL: http://svn.apache.org/viewvc?rev=797545&view=rev
Log:
THRIFT-549. Make socket client compatible with iPhone SDK as well as OS X
Modified:
incubator/thrift/trunk/lib/cocoa/src/transport/TSocketClient.m
Modified: incubator/thrift/trunk/lib/cocoa/src/transport/TSocketClient.m
URL:
http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cocoa/src/transport/TSocketClient.m?rev=797545&r1=797544&r2=797545&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/cocoa/src/transport/TSocketClient.m (original)
+++ incubator/thrift/trunk/lib/cocoa/src/transport/TSocketClient.m Fri Jul 24
15:58:07 2009
@@ -16,28 +16,39 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-#import <Foundation/Foundation.h>
#import "TSocketClient.h"
+#import <CFNetwork/CFSocketStream.h>
@implementation TSocketClient
- (id) initWithHostname: (NSString *) hostname
port: (int) port
{
- NSInputStream * input = nil;
- NSOutputStream * output = nil;
-
- [NSStream getStreamsToHost: [NSHost hostWithName: hostname]
- port: port
- inputStream: &input
- outputStream: &output];
-
- self = [super initWithInputStream: input outputStream: output];
- [input open];
- [output open];
-
- return self;
+ NSInputStream * inputStream = NULL;
+ NSOutputStream * outputStream = NULL;
+ CFReadStreamRef readStream = NULL;
+ CFWriteStreamRef writeStream = NULL;
+ CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
(CFStringRef)hostname, port, &readStream, &writeStream);
+ if (readStream && writeStream) {
+ CFReadStreamSetProperty(readStream,
kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
+ CFWriteStreamSetProperty(writeStream,
kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
+
+ inputStream = (NSInputStream *)readStream;
+ [inputStream retain];
+ [inputStream setDelegate:self];
+ [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
+ [inputStream open];
+
+ outputStream = (NSOutputStream *)writeStream;
+ [outputStream retain];
+ [outputStream setDelegate:self];
+ [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
+ [outputStream open];
+ }
+
+ self = [super initWithInputStream: inputStream outputStream:
outputStream];
+
+ return self;
}