From: Alexander Strange Date: Sun, 19 Oct 2003 02:11:02 +0000 (+0000) Subject: gb2Attic X-Git-Tag: v0.1~11 X-Git-Url: http://git.ithinksw.org/ITFoundation.git/commitdiff_plain/2a102862ea91854a43c87a7693e73c1323481e5d gb2Attic --- diff --git a/ITInetServerSocket.h b/ITInetServerSocket.h deleted file mode 100755 index 56b6bb6..0000000 --- a/ITInetServerSocket.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// ITInetServerSocket.h -// ITFoundation -// -// Created by Alexander Strange on Thu Feb 13 2003. -// Copyright (c) 2003 __MyCompanyName__. All rights reserved. -// - -#import - -@class ITInetSocket; - -@protocol ITInetServerSocketOwner -- (oneway void)newClientJoined:(ITInetSocket*)client; -@end - -@interface ITInetServerSocket : NSObject { - @private - int sockfd; - volatile int dieflag; - NSMutableSet *clients; - NSNetService *service; - id delegate; - short port; - NSString *rndType,*rndName; - NSTimer *timer; -} - -- (id)init; -- (id)initWithDelegate:(id)d; - -- (BOOL)start; -- (void)stop; - -- (int)sockfd; -- (NSSet*)clients; -- (id)delegate; -- (short)port; - -- (void)setServiceType:(NSString*)type useForPort:(BOOL)p; -- (void)setServiceName:(NSString*)name; // generally the computer's AppleTalk name -- (void)setPort:(short)p; -@end diff --git a/ITInetServerSocket.m b/ITInetServerSocket.m deleted file mode 100755 index 8fd8c54..0000000 --- a/ITInetServerSocket.m +++ /dev/null @@ -1,224 +0,0 @@ -// -// ITInetServerSocket.m -// ITFoundation -// -// Created by Alexander Strange on Thu Feb 13 2003. -// Copyright (c) 2003 __MyCompanyName__. All rights reserved. -// - -#import "ITInetServerSocket.h" -#import "ITInetSocket.h" -#import -#import -#import -#import -#import -#import -#import -#import - -@interface ITInetServerSocket(Private) --(short)lookupPortForServiceType:(NSString*)name; --(void)setupConnection; --(void)stopConnection; --(void)setupRendezvousAdvertising; --(void)stopRendezvousAdvertising; --(void)setupThread; --(void)stopThread; --(void)newClient:(int)cfd; --(void)socketAcceptLoop:(id)data; -@end - -@implementation ITInetServerSocket -- (id)init -{ - if (self = [super init]) - { - sockfd = -1; - delegate = nil; - clients = [[NSMutableSet alloc] init]; - service = nil; - port = 0; - dieflag = 0; - rndType = rndName = nil; - timer = nil; - } - return self; -} - -- (id)initWithDelegate:(id)d -{ - if (self = [super init]) - { - sockfd = -1; - delegate = [d retain]; - clients = [[NSMutableSet alloc] init]; - service = nil; - port = 0; - dieflag = 0; - rndType = rndName = nil; - timer = nil; - } - return self; -} - -- (void)dealloc -{ - [self stopConnection]; - [clients release]; - [delegate release]; - [rndName release]; - [rndType release]; -} - -- (BOOL)start -{ - if (!rndName || !rndType || !port) return NO; - [self setupConnection]; - return YES; -} - -- (int)sockfd -{ - return sockfd; -} - -- (NSSet*)clients -{ - return clients; -} - -- (id)delegate -{ - return delegate; -} - -- (short)port -{ - return port; -} - -- (void)stop -{ - [self stopConnection]; -} - -- (void)setServiceType:(NSString*)type useForPort:(BOOL)p -{ - rndType = [type retain]; - if (p) { - port = [self lookupPortForServiceType:type]; - } -} - -- (void)setServiceName:(NSString*)name -{ - rndName = [name retain]; -} - -- (void)setPort:(short)p -{ - port = p; -} -@end - -@implementation ITInetServerSocket(Private) --(short)lookupPortForServiceType:(NSString*)name -{ - const char *_name = [name cString]; - struct addrinfo *res; - short p; - getaddrinfo(NULL,_name,NULL,&res); - p = ntohs(((struct sockaddr_in *)res->ai_addr)->sin_port); - freeaddrinfo(res); - return p; -} - --(void)setupConnection -{ - struct addrinfo hints, *ai; - hints.ai_flags = AI_PASSIVE; - hints.ai_family = PF_INET6; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - hints.ai_addrlen = 0; - hints.ai_canonname = hints.ai_addr = hints.ai_next = NULL; - getaddrinfo(NULL,[[[NSNumber numberWithShort:port] stringValue] cString],&hints,&ai); - sockfd = socket(PF_INET6,SOCK_STREAM,IPPROTO_TCP); - bind(sockfd,ai->ai_addr,ai->ai_addrlen); - listen(sockfd, SOMAXCONN); - freeaddrinfo(ai); - [self setupRendezvousAdvertising]; - [self setupThread]; -} - -- (void)stopConnection -{ - [self stopRendezvousAdvertising]; - [clients makeObjectsPerformSelector:@selector(disconnect)]; - [self stopThread]; - close(sockfd); - sockfd = -1; -} - -- (void)setupRendezvousAdvertising -{ - NSString *a = [NSString stringWithFormat:@"_%@._tcp.",rndType]; - service = [[NSNetService alloc] initWithDomain:@"" type:a name:rndName port:htons(port)]; - NSLog(@"Advertising a service of type %@ name %@",a,rndName); - [service publish]; -} - -- (void)stopRendezvousAdvertising -{ - [service stop]; - [service release]; - service = nil; -} - -- (void)setupThread -{ - NSPort *p1 = [NSPort port], *p2 = [NSPort port]; - NSConnection *dcon = [[NSConnection alloc] initWithReceivePort:p1 sendPort:p2]; - NSArray *par = [NSArray arrayWithObjects:p2,p1,nil]; - [dcon setRootObject:self]; - NSLog(@"detached server thread"); - [NSThread detachNewThreadSelector:@selector(socketAcceptLoop:) toTarget:self withObject:par]; -} - -- (void)stopThread -{ - NSLog(@"stopping server thread"); - dieflag = 1; - do {} while (dieflag == 1); -} - -- (void)newClient:(int)cfd -{ - ITInetSocket *csocket = [[ITInetSocket alloc] initWithFD:cfd delegate:delegate]; - NSLog(@"new client for this server"); - [clients addObject:csocket]; -} - -- (void)socketAcceptLoop:(id)data -{ - NSAutoreleasePool *ap = [[NSAutoreleasePool alloc] init]; - NSArray *par = data; - NSConnection *dcon = [[NSConnection alloc] initWithReceivePort:[par objectAtIndex:0] sendPort:[par objectAtIndex:1]]; - NSProxy *dp = [dcon rootProxy]; - while ((sockfd >= 0) && !dieflag) - { - signed int cfd; - cfd = accept(sockfd,NULL,NULL); - NSLog(@"Someone connected!"); - [(id)dp newClient:cfd]; - [ap release]; - ap = [[NSAutoreleasePool alloc] init]; - } - - NSLog(@"suiciding"); - dieflag = 0; - [dcon release]; - [ap release]; -} -@end \ No newline at end of file diff --git a/ITInetSocket.h b/ITInetSocket.h deleted file mode 100755 index 592cc5d..0000000 --- a/ITInetSocket.h +++ /dev/null @@ -1,129 +0,0 @@ -// -// ITInetSocket.h -// ITFoundation -// -// Created by Alexander Strange on Tue Feb 11 2003. -// Copyright (c) 2003 __MyCompanyName__. All rights reserved. -// - -#import -#import -#import -#import "ITByteStream.h" - -/*! - * @header ITInetSocket - * @abstract Definitions for the ITInetSocket class - */ - - -/*! - * @enum ITInetSocketState - * @abstract Possible states of a socket - * @constant ITInetSocketConnecting The socket is negotiating a connection. - * @constant ITInetSocketListening The socket is a server socket. - * @constant ITInetSocketReading The socket is reading data from the other side. - * @constant ITInetSocketWriting The socket is sending data to the other side. - * @constant ITInetSocketDisconnected The socket does not have a connection. - */ -typedef enum { - ITInetSocketConnecting, - ITInetSocketListening, - ITInetSocketReading, - ITInetSocketWriting, - ITInetSocketDisconnected -} ITInetSocketState; - -/*! - * @enum ITInetSocketError - * @abstract Possible error conditions of a socket - * @constant ITInetHostNotFound The host specified does not actually exist. - * @constant ITInetConnectionDropped The remote side dropped the connection. - * @constant ITInetCouldNotConnect The socket was unable to connect for some reason - */ -typedef enum { - ITInetHostNotFound, - ITInetConnectionDropped, - ITInetCouldNotConnect -} ITInetSocketError; - -@class ITInetSocket; - -/*! - * @protocol ITInetSocketDelegate - * @abstract Delegate methods for ITInetSocket - * @discussion ITInetSockets use these methods to communicate with their delegates - */ -@protocol ITInetSocketDelegate -/*! - * @method errorOccured:during:onSocket: - * @abstract Alerts the delegate of an error condition. - * @discussion The delegate can try retryCondition. - * @param err The error class. - * @param state What the socket was doing when the error occured. - * @param sender The socket the error occured on. - */ -- (oneway void) errorOccured:(ITInetSocketError)err during:(ITInetSocketState)state onSocket:(ITInetSocket*)sender; -/*! - * @method finishedConnecting: - * @abstract Alerts the delegate of a successful connection attempt. - * @discussion The delegate should send whatever initial data is required for the protocol (nickname for IRC, etc.) - * @param sender The socket that established the connection. - */ -- (oneway void) finishedConnecting:(ITInetSocket *)sender; -@end - -/*! - * @class ITInetSocket - * @abstract An Internet socket class. - * @discussion ITInetSocket is an Internet socket class supporting IPv6 and Rendezvous. - */ -@interface ITInetSocket : NSObject { - int sockfd; - int port; - int nc; - unsigned short bufs; - volatile int dieflag; - volatile int actionflag; - id delegate; - struct addrinfo *ai, *ai_cur; - ITByteStream *readPipe, *writePipe; - ITInetSocketState state; - NSArray *sarr; -} -/*! - * @method startAutoconnectingToService:delegate: - * @abstract Automatically creates sockets whenever a certain type of Rendezvous service appears. - * @discussion The auto-created sockets will send finishedConnecting: to the delegate. - * @param type The type of Rendezvous service to listen on. - * @param d The delegate that the sockets will belong to. - */ -+(void)startAutoconnectingToService:(NSString*)type delegate:(id )d; -/*! - * @method initWithFD:delegate: - * @abstract Wraps a socket around an existing socket descriptor. - * @discussion The socket will start listening on the descriptor as normal. - * @param fd The descriptor. - * @param d The delegate for the socket. - */ --(id) initWithFD:(int)fd delegate:(id )d; -/*! - * @method initWithDelegate: - * @abstract Creates a new socket. - * @discussion The socket will not be connected to anything. - * @param d The delegate of the socket. - */ --(id) initWithDelegate:(id )d; - --(id )delegate; --(unsigned short)bufferSize; --(void)setBufferSize:(unsigned short)bufs; --(void) connectToHost:(NSString*)host onPort:(short)port; --(void) connectToHost:(NSString*)host onNamedPort:(NSString*)port; --(void) connectWithSockaddrArray:(NSArray*)arr; --(ITInetSocketState) state; --(void) retryConnection; --(void) disconnect; --(ITByteStream *)readPipe; --(ITByteStream *)writePipe; -@end diff --git a/ITInetSocket.m b/ITInetSocket.m deleted file mode 100755 index b7441cb..0000000 --- a/ITInetSocket.m +++ /dev/null @@ -1,309 +0,0 @@ -// -// ITInetSocket.m -// ITFoundation -// -// Created by Alexander Strange on Tue Feb 11 2003. -// Copyright (c) 2003 __MyCompanyName__. All rights reserved. -// - -#import "ITInetSocket.h" -#import "ITServiceBrowserDelegate.h" -#import -#import -#import - -@interface ITInetSocket(Debugging) --(NSString*)dumpv6Addrinfo:(struct addrinfo *)_ai; -@end - -@interface ITInetSocket(Private) --(void)doConnSetupWithHost:(NSString*)host namedPort:(NSString*)namedPort; --(void)realDoConnection; --(void)spinoffReadLoop; --(void)socketReadLoop:(id)data; -@end - -@implementation ITInetSocket -+(void)startAutoconnectingToService:(NSString*)type delegate:(id )d -{ - NSNetServiceBrowser *browse = [[NSNetServiceBrowser alloc] init]; - ITServiceBrowserDelegate *bd = [[ITServiceBrowserDelegate alloc] initWithDelegate:d]; - - [browse setDelegate:bd]; - [browse searchForServicesOfType:[NSString stringWithFormat:@"_%@._tcp.",type] inDomain:@""]; -} - --(id)initWithFD:(int)fd delegate:(id )d -{ - if (self = [super init]) - { - state = ITInetSocketListening; - sockfd = fd; - delegate = [d retain]; - port = 0; - writePipe = [[ITByteStream alloc] initWithDelegate:self]; - readPipe = [[ITByteStream alloc] initWithDelegate:d]; - ai = nil; - sarr = nil; - bufs = 512; - actionflag = dieflag = 0; - nc = 0; - } - [self spinoffReadLoop]; - return self; -} - --(id)initWithDelegate:(id )d -{ - if (self = [super init]) - { - state = ITInetSocketDisconnected; - sockfd = -1; - delegate = [d retain]; - port = 0; - writePipe = [[ITByteStream alloc] initWithDelegate:self]; - readPipe = [[ITByteStream alloc] initWithDelegate:d]; - ai = nil; - sarr = nil; - bufs = 512; - actionflag = dieflag = 0; - nc = 1; - } - return self; -} - - --(void) dealloc -{ - shutdown(sockfd,2); - [delegate release]; - [writePipe release]; - [readPipe release]; - if (!sarr) freeaddrinfo(ai); - [sarr release]; -} - --(void) connectToHost:(NSString*)host onPort:(short)thePort -{ - if (state == ITInetSocketDisconnected) - { - NSString *nport = [[NSNumber numberWithShort:thePort] stringValue]; - [self doConnSetupWithHost:host namedPort:nport]; - } -} - --(void) connectToHost:(NSString*)host onNamedPort:(NSString*)_port -{ - if (state == ITInetSocketDisconnected) - { - [self doConnSetupWithHost:host namedPort:_port]; - } -} - --(void) connectWithSockaddrArray:(NSArray*)arr -{ - if (state == ITInetSocketDisconnected) - { - NSEnumerator *e = [arr objectEnumerator]; - NSData *d; - struct addrinfo *a,*oa; - ai = malloc(sizeof(struct addrinfo)); - ai_cur = ai; - oa = a = ai; - bzero(a,sizeof(struct addrinfo)); - while (d = [e nextObject]) - { - struct sockaddr *s = (struct sockaddr*)[d bytes]; - bzero(a,sizeof(struct addrinfo)); - a->ai_family = s->sa_family; - a->ai_addr = s; - a->ai_next = malloc(sizeof(struct addrinfo)); - oa = a; - a = a->ai_next; - } - free(a); - oa->ai_next = NULL; - NSLog(@"Sockaddr connecting...."); - [self dumpv6Addrinfo:ai]; - [self realDoConnection]; - } -} - --(void)disconnect -{ - NSLog(@"Got a disconnect"); - dieflag = 1; - do {} while (dieflag == 1); -} - --(void)retryConnection -{ - ai_cur = ai_cur->ai_next?ai_cur->ai_next:ai_cur; - [self disconnect]; - [self realDoConnection]; -} - --(ITInetSocketState)state -{ - return state; -} --(id )delegate -{ - return delegate; -} - --(unsigned short)bufferSize -{ - return bufs; -} - --(void)setBufferSize:(unsigned short)_bufs -{ - bufs = _bufs; -} - --(void)newDataAdded:(ITByteStream*)sender -{ -} - --(ITByteStream*)readPipe {return readPipe;} --(ITByteStream*)writePipe {return writePipe;} -@end - -@implementation ITInetSocket(Debugging) --(NSString*)dumpv6Addrinfo:(struct addrinfo *)_ai -{ - const char *cfmt = - "{\n" - "Flags = %x\n" - "Family = %x\n" - "Socktype = %x\n" - "Protocol = %x\n" - "Canonname = %s\n" - "Sockaddr = \n" - "\t{\n" - "\tLength = %x\n" - "\tFamily = %x\n" - "\tPort = %d\n" - "\tFlowinfo = %x\n" - "\tAddr = {%hx:%hx:%hx:%hx:%hx:%hx:%hx:%hx}\n" - "\tScope = %x\n" - "\t}\n" - "Next = %@\n" - "}\n"; - NSString *nsfmt = [NSString stringWithCString:cfmt]; - struct sockaddr_in6 *sa = (struct sockaddr_in6 *)_ai->ai_addr; - NSString *buf = [[NSMutableString alloc] initWithFormat:nsfmt,_ai->ai_flags,_ai->ai_family,_ai->ai_socktype,_ai->ai_protocol,_ai->ai_canonname?_ai->ai_canonname:"",sa->sin6_len,sa->sin6_family,sa->sin6_port,sa->sin6_flowinfo,sa->sin6_addr.__u6_addr.__u6_addr16[0],sa->sin6_addr.__u6_addr.__u6_addr16[1],sa->sin6_addr.__u6_addr.__u6_addr16[2],sa->sin6_addr.__u6_addr.__u6_addr16[3],sa->sin6_addr.__u6_addr.__u6_addr16[4],sa->sin6_addr.__u6_addr.__u6_addr16[5],sa->sin6_addr.__u6_addr.__u6_addr16[6],sa->sin6_addr.__u6_addr.__u6_addr16[7],sa->sin6_scope_id,_ai->ai_next?[self dumpv6Addrinfo:_ai->ai_next]:@"nil"]; - - return buf; -} -@end - -@implementation ITInetSocket(Private) --(void)doConnSetupWithHost:(NSString*)host namedPort:(NSString*)namedPort -{ - struct addrinfo hints; - int err; - const char *portNam = [namedPort cString], *hostCStr = [host cString]; - state = ITInetSocketConnecting; - hints.ai_flags = 0; - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - hints.ai_addrlen = 0; - hints.ai_canonname = NULL; - hints.ai_addr = NULL; - hints.ai_next = NULL; - - err = getaddrinfo(hostCStr,portNam,&hints,&ai); - - NSLog(@"%s, h %@ p %@",gai_strerror(err),host,namedPort); - NSLog(ai?[self dumpv6Addrinfo:ai]:@""); - ai_cur = ai; - [self realDoConnection]; -} - --(void)realDoConnection -{ - sockfd = socket(ai_cur->ai_family,SOCK_STREAM,IPPROTO_TCP); - [self spinoffReadLoop]; -} - --(void)spinoffReadLoop -{ - NSPort *p1 = [NSPort port], *p2 = [NSPort port]; - NSConnection *dcon = [[NSConnection alloc] initWithReceivePort:p1 sendPort:p2]; - NSArray *par = [NSArray arrayWithObjects:p2,p1,nil]; - [dcon setRootObject:delegate]; - [NSThread detachNewThreadSelector:@selector(socketReadLoop:) toTarget:self withObject:par]; //spawn read thread -} - --(void)socketReadLoop:(id)data -{ - NSAutoreleasePool *ap = [[NSAutoreleasePool alloc] init]; - NSConnection *dcon = [[NSConnection alloc] initWithReceivePort:[data objectAtIndex:0] sendPort:[data objectAtIndex:1]]; - NSProxy *dp = [[dcon rootProxy] retain]; - char *buf = malloc(bufs); - unsigned long readLen = 0,wpl = 0; - signed int err; - [readPipe setDelegate:(id )dp]; - if (nc){ - NSLog(@"Connecting"); - err = connect(sockfd,ai_cur->ai_addr,ai_cur->ai_addrlen); - if (err == -1) - { - perror("CAwh"); - *((char*)NULL) = 12; - [(id)dp errorOccured:ITInetCouldNotConnect during:ITInetSocketConnecting onSocket:self]; - goto dieaction; - } - } - NSLog(@"Sending finishedConnecting"); - [(id)dp finishedConnecting:self]; -lstart: - state = ITInetSocketListening; - while (!actionflag && !dieflag && !(wpl = CFDataGetLength((CFDataRef)writePipe->data))) - { - readLen = recv(sockfd,buf,bufs,0); - state = ITInetSocketReading; - if (readLen == -1) {[(id)dp errorOccured:ITInetConnectionDropped during:ITInetSocketReading onSocket:self];goto dieaction;} - if (readLen) { - NSLog(@"recv'd"); - NSLog(@"Doing writeData to readPipe"); - [readPipe writeBytes:buf len:readLen]; - [ap release]; - ap = [[NSAutoreleasePool alloc] init]; - } - } - state = ITInetSocketListening; - actionflag = 0; - - if (dieflag) - { -dieaction: - state = ITInetSocketDisconnected; - perror("Awh"); - free(buf); - shutdown(sockfd,2); - [dcon release]; - [dp release]; - [ap release]; - dieflag = 0; - return; - } - - { - const char *d = CFDataGetBytePtr((CFDataRef)writePipe->data); - state = ITInetSocketWriting; - NSLog(@"Writing"); - [writePipe lockStream]; - wpl = send(sockfd,d,wpl,0); - [writePipe shortenData:wpl]; - [writePipe unlockStream]; - [ap release]; - ap = [[NSAutoreleasePool alloc] init]; - goto lstart; - } - goto dieaction; -} -@end \ No newline at end of file diff --git a/ITServiceBrowserDelegate.h b/ITServiceBrowserDelegate.h deleted file mode 100755 index 2cecadf..0000000 --- a/ITServiceBrowserDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// ITServiceBrowserDelegate.h -// ITFoundation -// -// Created by Alexander Strange on Sat Mar 15 2003. -// Copyright (c) 2003 __MyCompanyName__. All rights reserved. -// - -#import -#import - -@interface ITServiceBrowserDelegate : NSObject { - id delegate; -} --(id) initWithDelegate:(id)delegate; -@end diff --git a/ITServiceBrowserDelegate.m b/ITServiceBrowserDelegate.m deleted file mode 100755 index 6d368c6..0000000 --- a/ITServiceBrowserDelegate.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// ITServiceBrowserDelegate.m -// ITFoundation -// -// Created by Alexander Strange on Sat Mar 15 2003. -// Copyright (c) 2003 __MyCompanyName__. All rights reserved. -// - -#import "ITServiceBrowserDelegate.h" -#import "ITInetSocket.h" -#import - -@implementation ITServiceBrowserDelegate -- (id) initWithDelegate:(id)_delegate -{ - if (self = [super init]) - { - delegate = [_delegate retain]; - } - return self; -} - -- (void) dealloc -{ - [delegate release]; -} - -- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing -{ - ITInetSocket *sock; - NSArray *arr; - id d = delegate; - if (!moreComing) - { - NSLog(@"Nothing more coming"); - [[aNetService retain] autorelease]; - [aNetServiceBrowser stop]; - [aNetServiceBrowser release]; - [self release]; - } - sock = [[ITInetSocket alloc] initWithDelegate:d]; - NSLog(@"Detected a service! name %@ type %@",[aNetService name],[aNetService type]); - arr = [aNetService addresses]; - if ([arr count]) - [sock connectWithSockaddrArray:arr]; - else - NSLog(@"There are no sockaddrs for this service!"); -} - -@end diff --git a/ITStringScanner.h b/ITStringScanner.h deleted file mode 100755 index 910c6a9..0000000 --- a/ITStringScanner.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * ITFoundation - * ITStringScanner - * A super-fast replacement for NSScanner - * - * Original Author : Alexander Strange - * Responsibility : Matt Judy - * Responsibility : Alexander Strange - * - * Copyright (c) 2002 - 2003 iThink Software. - * All Rights Reserved - * - */ - -#import -#import - -/*! -@class ITStringScanner -@discussion A super-fast replacement for NSScanner -*/ - -@interface ITStringScanner : NSObject { - NSString *_string; - char *_cString; - size_t _currentPosition; - size_t _size; -} -- (id)initWithString:(NSString*)string; -- (NSString *)scanUpToCharacter:(char)character; -- (NSString *)scanUpToString:(NSString*)string; -@end diff --git a/ITStringScanner.m b/ITStringScanner.m deleted file mode 100755 index 0e71ff7..0000000 --- a/ITStringScanner.m +++ /dev/null @@ -1,111 +0,0 @@ -// I *could* use OWStringScanner, but I don't want to. Shut up, sabi :) - -#import "ITStringScanner.h" - -@implementation ITStringScanner - -- (id)init -{ - if ( ( self = [super init] ) ) - { - _cString = NULL; - _string = nil; - _currentPosition = 0; - _size = 0; - } - return self; -} - -- (id)initWithString:(NSString*)string -{ - if ( ( self = [super init] ) ) - { - _cString = (char *)[string cString]; - _string = [string retain]; - _currentPosition = 0; - _size = [string length]; - } - return self; -} - -- (NSString *)scanUpToCharacter:(char)character -{ - size_t i=_currentPosition,j=0; - - if (_cString[i] == character) - { - i++; - return @""; - } - else - { - NSRange r = {i,0}; - NSString *tmpStr = nil; - const size_t tmp = _size; - unsigned char foundIt = NO; - - do - { - i++,j++; - - if (_cString[i] == character) - { - foundIt = YES; - r.length = j; - } - - } - while ((!foundIt) && (i