|
|
|
@@ -71,60 +71,6 @@ static NSDictionary* ircNumericCodeList; |
|
|
|
return [self new]; |
|
|
|
} |
|
|
|
|
|
|
|
/*************************************/ |
|
|
|
#pragma mark - Useful helper functions |
|
|
|
/*************************************/ |
|
|
|
|
|
|
|
+(NSData *) nickFromNickUserHost:(NSData *)nickUserHost { |
|
|
|
if (nickUserHost == nil) |
|
|
|
return nil; |
|
|
|
|
|
|
|
NSRange rangeOfNickUserSeparator = [nickUserHost rangeOfData:[NSData dataFromCString:"!"] |
|
|
|
options:(NSDataSearchOptions) 0 |
|
|
|
range:NSRangeMake(0, nickUserHost.length)]; |
|
|
|
|
|
|
|
return (rangeOfNickUserSeparator.location == NSNotFound |
|
|
|
? nickUserHost |
|
|
|
: [nickUserHost subdataWithRange:NSRangeMake(0, rangeOfNickUserSeparator.location)]); |
|
|
|
} |
|
|
|
|
|
|
|
+(NSData *) userFromNickUserHost:(NSData *)nickUserHost { |
|
|
|
if (nickUserHost == nil) |
|
|
|
return nil; |
|
|
|
|
|
|
|
NSRange rangeOfNickUserSeparator = [nickUserHost rangeOfData:[NSData dataFromCString:"!"] |
|
|
|
options:(NSDataSearchOptions) 0 |
|
|
|
range:NSRangeMake(0, nickUserHost.length)]; |
|
|
|
|
|
|
|
NSRange rangeOfUserHostSeparator = [nickUserHost rangeOfData:[NSData dataFromCString:"@"] |
|
|
|
options:(NSDataSearchOptions) 0 |
|
|
|
range:NSRangeMake(0, nickUserHost.length)]; |
|
|
|
|
|
|
|
return (( rangeOfNickUserSeparator.location == NSNotFound |
|
|
|
|| rangeOfUserHostSeparator.location == NSNotFound) |
|
|
|
? [NSData data] |
|
|
|
: [nickUserHost subdataWithRange:NSRangeMake(rangeOfNickUserSeparator.location + 1, |
|
|
|
rangeOfUserHostSeparator.location - (rangeOfNickUserSeparator.location + 1))]); |
|
|
|
} |
|
|
|
|
|
|
|
+(NSData *) hostFromNickUserHost:(NSData *)nickUserHost { |
|
|
|
if (nickUserHost == nil) |
|
|
|
return nil; |
|
|
|
|
|
|
|
NSRange rangeOfUserHostSeparator = [nickUserHost rangeOfData:[NSData dataFromCString:"@"] |
|
|
|
options:(NSDataSearchOptions) 0 |
|
|
|
range:NSRangeMake(0, nickUserHost.length)]; |
|
|
|
|
|
|
|
return (rangeOfUserHostSeparator.location == NSNotFound |
|
|
|
? [NSData data] |
|
|
|
: [nickUserHost subdataWithRange:NSRangeMake(rangeOfUserHostSeparator.location + 1, |
|
|
|
nickUserHost.length - (rangeOfUserHostSeparator.location + 1))]); |
|
|
|
} |
|
|
|
|
|
|
|
/***************************/ |
|
|
|
#pragma mark - Class methods |
|
|
|
/***************************/ |
|
|
|
|
|
|
|
-(instancetype) init { |
|
|
|
if (!(self = [super init])) |
|
|
|
return nil; |
|
|
|
@@ -154,30 +100,30 @@ static NSDictionary* ircNumericCodeList; |
|
|
|
_callbacks.event_numeric = onNumericEvent; |
|
|
|
_callbacks.event_dcc_chat_req = onDCCChatRequest; |
|
|
|
_callbacks.event_dcc_send_req = onDCCSendRequest; |
|
|
|
|
|
|
|
|
|
|
|
_irc_session = irc_create_session(&_callbacks); |
|
|
|
|
|
|
|
|
|
|
|
if (!_irc_session) { |
|
|
|
NSLog(@"Could not create irc_session."); |
|
|
|
return nil; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Strip server info from nicks. |
|
|
|
// irc_option_set(_irc_session, LIBIRC_OPTION_STRIPNICKS); |
|
|
|
|
|
|
|
// irc_option_set(_irc_session, LIBIRC_OPTION_STRIPNICKS); |
|
|
|
|
|
|
|
// Set debug mode. |
|
|
|
// irc_option_set(_irc_session, LIBIRC_OPTION_DEBUG); |
|
|
|
|
|
|
|
// irc_option_set(_irc_session, LIBIRC_OPTION_DEBUG); |
|
|
|
|
|
|
|
irc_set_ctx(_irc_session, (__bridge void *)(self)); |
|
|
|
|
|
|
|
|
|
|
|
unsigned int high, low; |
|
|
|
irc_get_version (&high, &low); |
|
|
|
|
|
|
|
|
|
|
|
_version = [[NSString stringWithFormat:@"IRCClient Framework v%s (Said Achmiz) - libirc v%d.%d (Georgy Yunaev)", |
|
|
|
IRCCLIENTVERSION, |
|
|
|
high, |
|
|
|
low] dataAsUTF8]; |
|
|
|
|
|
|
|
|
|
|
|
_channels = [NSMutableDictionary dictionary]; |
|
|
|
_encoding = NSUTF8StringEncoding; |
|
|
|
|
|
|
|
@@ -190,10 +136,64 @@ static NSDictionary* ircNumericCodeList; |
|
|
|
if (irc_is_connected(_irc_session)) { |
|
|
|
NSLog(@"Warning: IRC Session is not disconnected on dealloc"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
irc_destroy_session(_irc_session); |
|
|
|
} |
|
|
|
|
|
|
|
/***************************/ |
|
|
|
#pragma mark - Class methods |
|
|
|
/***************************/ |
|
|
|
|
|
|
|
+(NSData *) nickFromNickUserHost:(NSData *)nickUserHost { |
|
|
|
if (nickUserHost == nil) |
|
|
|
return nil; |
|
|
|
|
|
|
|
NSRange rangeOfNickUserSeparator = [nickUserHost rangeOfData:[NSData dataFromCString:"!"] |
|
|
|
options:(NSDataSearchOptions) 0 |
|
|
|
range:NSRangeMake(0, nickUserHost.length)]; |
|
|
|
|
|
|
|
return (rangeOfNickUserSeparator.location == NSNotFound |
|
|
|
? nickUserHost |
|
|
|
: [nickUserHost subdataWithRange:NSRangeMake(0, rangeOfNickUserSeparator.location)]); |
|
|
|
} |
|
|
|
|
|
|
|
+(NSData *) userFromNickUserHost:(NSData *)nickUserHost { |
|
|
|
if (nickUserHost == nil) |
|
|
|
return nil; |
|
|
|
|
|
|
|
NSRange rangeOfNickUserSeparator = [nickUserHost rangeOfData:[NSData dataFromCString:"!"] |
|
|
|
options:(NSDataSearchOptions) 0 |
|
|
|
range:NSRangeMake(0, nickUserHost.length)]; |
|
|
|
|
|
|
|
NSRange rangeOfUserHostSeparator = [nickUserHost rangeOfData:[NSData dataFromCString:"@"] |
|
|
|
options:(NSDataSearchOptions) 0 |
|
|
|
range:NSRangeMake(0, nickUserHost.length)]; |
|
|
|
|
|
|
|
return (( rangeOfNickUserSeparator.location == NSNotFound |
|
|
|
|| rangeOfUserHostSeparator.location == NSNotFound) |
|
|
|
? [NSData data] |
|
|
|
: [nickUserHost subdataWithRange:NSRangeMake(rangeOfNickUserSeparator.location + 1, |
|
|
|
rangeOfUserHostSeparator.location - (rangeOfNickUserSeparator.location + 1))]); |
|
|
|
} |
|
|
|
|
|
|
|
+(NSData *) hostFromNickUserHost:(NSData *)nickUserHost { |
|
|
|
if (nickUserHost == nil) |
|
|
|
return nil; |
|
|
|
|
|
|
|
NSRange rangeOfUserHostSeparator = [nickUserHost rangeOfData:[NSData dataFromCString:"@"] |
|
|
|
options:(NSDataSearchOptions) 0 |
|
|
|
range:NSRangeMake(0, nickUserHost.length)]; |
|
|
|
|
|
|
|
return (rangeOfUserHostSeparator.location == NSNotFound |
|
|
|
? [NSData data] |
|
|
|
: [nickUserHost subdataWithRange:NSRangeMake(rangeOfUserHostSeparator.location + 1, |
|
|
|
nickUserHost.length - (rangeOfUserHostSeparator.location + 1))]); |
|
|
|
} |
|
|
|
|
|
|
|
/*************************************/ |
|
|
|
#pragma mark - Class methods (private) |
|
|
|
/*************************************/ |
|
|
|
|
|
|
|
+(void) loadNumericCodes { |
|
|
|
NSString* numericCodeListPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"IRC_Numerics" |
|
|
|
ofType:@"plist"]; |
|
|
|
@@ -205,6 +205,10 @@ static NSDictionary* ircNumericCodeList; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/******************************/ |
|
|
|
#pragma mark - Instance methods |
|
|
|
/******************************/ |
|
|
|
|
|
|
|
-(int) connect { |
|
|
|
return irc_connect(_irc_session, |
|
|
|
_server.terminatedCString, |
|
|
|
@@ -251,7 +255,7 @@ static NSDictionary* ircNumericCodeList; |
|
|
|
message.terminatedCString); |
|
|
|
} |
|
|
|
|
|
|
|
- (int) quit:(NSData *)reason { |
|
|
|
-(int) quit:(NSData *)reason { |
|
|
|
return irc_send_raw(_irc_session, |
|
|
|
"QUIT :%s", |
|
|
|
(reason |