Developer Area

Changeset 507 for apps/iphone/superbook

Show
Ignore:
Timestamp:
08/13/09 15:11:02 (5 years ago)
Author:
henri
Message:

Changed the way RecordTXT works.
Added support for domain display strings.

Location:
apps/iphone/superbook/trunk/DotTel_SDK/Classes
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • apps/iphone/superbook/trunk/DotTel_SDK/Classes/DnsResolver.h

    r496 r507  
    7777 
    7878/** 
    79  * Retrieves all keyword TXT records in a domain and adds them to the provided 
    80  * array. Keyword TXT records are encapsulated in the RecordTxt class. 
    81  * Header TXT records (not keywords) are concatenated and returned as a string. 
    82  * Note that according to specs, there should only be a single Header TXT record 
    83  * per sub/domain. 
    84  * System messages are skipped. 
     79 * Retrieves all TXT records in a domain and adds them to the provided 
     80 * array. TXT records are encapsulated in the RecordTxt class. 
    8581 * Also note that TXT records are returned in random order. 
    8682 *  
     
    8884 * @param txtArray   the array to add the txt records to 
    8985 *  
    90  * @return         the domain's TXT header string. If no header string is found, 
    91  *                 returns the empty @"" string 
     86 * @return         the number of TXT records in the domain. 0 should mean error 
     87 * 
    9288 */ 
    93 - (NSString *)getTXTForTel:(NSString *)domain inArray:(NSMutableArray *)txtArray withError:(NSError **)error; 
     89- (NSUInteger)getTXTForTel:(NSString *)domain inArray:(NSMutableArray *)txtArray withError:(NSError **)error; 
    9490 
    9591/** 
  • apps/iphone/superbook/trunk/DotTel_SDK/Classes/DnsResolver.m

    r469 r507  
    7979} 
    8080 
    81 // This method returns a header text as it parses the txt records 
    82 - (NSString *)getTXTForTel:(NSString *)domain inArray:(NSMutableArray *)txtArray withError:(NSError **)error { 
    83          
    84         NSMutableString *_headerText = nil;      
    85          
     81// TODO: header will be made obsolete by NINFO 
     82- (NSUInteger)getTXTForTel:(NSString *)domain inArray:(NSMutableArray *)txtArray withError:(NSError **)error { 
     83                 
    8684#ifdef DEBUG 
    8785        NSLog(@"Domain %@: Retrieving TXT Records", domain); 
     
    8987        ldns_rr_list *txts = [self retrieveResourceRecordsOfType:LDNS_RR_TYPE_TXT fromDomain:domain withError:error]; 
    9088        if (!txts) { 
    91                 return _headerText; 
     89                return 0; 
    9290        } 
    9391         
     
    9997                RecordTxt *theRec = [RecordTxt recordWithRr:ldns_rr_list_rr(txts, i) date:lookupDate]; 
    10098                if (theRec.isValid) { 
    101                         if ([theRec isHeader]) { 
    102                                 if (!_headerText) { 
    103                                         _headerText = [NSMutableString stringWithString:theRec.textValue]; 
    104                                 } else { 
    105                                         //NSLog(theRec.textValue); 
    106                                         [_headerText appendFormat:@"\n %@", theRec.textValue]; 
    107                                 } 
    108                         } else { 
    109                                 [txtArray addObject:theRec]; 
    110                         } 
     99                        [txtArray addObject:theRec]; 
    111100                } 
    112101        } 
     
    115104        [lookupDate release]; 
    116105         
    117         return _headerText; 
     106        return count; 
    118107         
    119108} 
  • apps/iphone/superbook/trunk/DotTel_SDK/Classes/RecordTxt.h

    r496 r507  
    3333#define LocTelStr(key) [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:@"DotTel"] 
    3434 
     35enum RecordTxtSubTypes { 
     36        RecordTxtSubTypeString                  = 0,    // string header (will be made obsolete by NINFO) 
     37        RecordTxtSubTypeDDS                             = 1,    // domain display string 
     38        RecordTxtSubTypeKeyword                 = 2,    // keyword 
     39        RecordTxtSubTypeOtherTSM                = 3,    // other .tel system message 
     40        RecordTxtSubTypeAdvert                  = 4,    // .tad advert 
     41}; 
     42 
    3543@interface RecordTxt : NSObject { 
    3644         
    3745        BOOL isValid; 
    38  
    39         BOOL isHeader;                  // Non-keyword header text string 
    40         BOOL isKeyword;                 // Structured Keyword (.tkw) 
    41         BOOL isSystemMessage;   // System Message (.tsm) 
     46        NSUInteger subType;                                     // RecordTxtSubTypes value 
    4247         
    4348        // Derived attributes 
     
    7782 
    7883@property (readonly) BOOL isValid; 
    79  
    80 @property (readonly) BOOL isHeader; 
    81 @property (readonly) BOOL isKeyword; 
    82 @property (readonly) BOOL isSystemMessage; 
     84@property (readonly) NSUInteger subType; 
    8385 
    8486@property (readonly, nonatomic, retain) NSString *primaryDescription; 
  • apps/iphone/superbook/trunk/DotTel_SDK/Classes/RecordTxt.m

    r497 r507  
    3333@interface RecordTxt (PrivateMethods) 
    3434 
     35- (BOOL)parseDisplayStringFromRecord:(const ldns_rr *)rr; 
    3536- (BOOL)parseKeywordsFromRecord:(const ldns_rr *)rr; 
    3637 
     
    4243 
    4344@synthesize isValid; 
    44 @synthesize isHeader; 
    45 @synthesize isKeyword; 
    46 @synthesize isSystemMessage; 
     45@synthesize subType; 
    4746@synthesize expiryDate; 
    4847 
     
    6867        self = [super init]; 
    6968        isValid = NO; 
     69        subType = RecordTxtSubTypeString; 
    7070        return self; 
    7171} 
     
    7575        trimCharacterSet = [[NSCharacterSet whitespaceCharacterSet] retain]; 
    7676        isValid = NO; 
    77         isKeyword = NO; 
    7877 
    7978        if (ldns_rr_get_type(rr) != LDNS_RR_TYPE_TXT) 
     
    8685        if ([firstString isEqualToString:@".tkw"]) { 
    8786                // parse keywords 
    88                 isKeyword = YES; 
     87                subType = RecordTxtSubTypeKeyword; 
    8988                isValid = [self parseKeywordsFromRecord:rr]; 
    9089        } else if ([firstString isEqualToString:@".tsm"]) { 
    91                 // system message, do nothing 
     90                // system message 
     91                // let's see if it's something we know 
     92                NSString *smType = [self stringFromStringRdf:ldns_rr_rdf(rr,2)]; 
     93                if (smType != nil) { 
     94                        if ([smType isEqualToString:@"dds"]) { 
     95                                // Domain display string 
     96                                subType = RecordTxtSubTypeDDS; 
     97                                isValid = [self parseDisplayStringFromRecord:rr]; 
     98                                return self; 
     99                        } 
     100                } 
     101                subType = RecordTxtSubTypeOtherTSM; 
    92102                return self; 
    93103        } else if ([firstString isEqualToString:@".tad"]) { 
    94104                // advert, do nothing for now 
     105                subType = RecordTxtSubTypeAdvert; 
    95106                return self; 
    96107        } else { 
    97108                // header 
    98                 isHeader = YES; 
     109                subType = RecordTxtSubTypeString; 
    99110                primaryDescription = [@"" retain]; 
    100111                primaryValue = NULL; 
     
    110121         
    111122        return self; 
     123} 
     124 
     125- (BOOL)parseDisplayStringFromRecord:(const ldns_rr *)rr { 
     126        // That's the domain display string, which should replace the regular domain name 
     127        // ".tsm " "1" "dds" "John W. Smith" 
     128         
     129        // Check version 
     130        if ([[self stringFromStringRdf:ldns_rr_rdf(rr,1)] isEqualToString:@"1"]) { 
     131                // Version 1 
     132                textValue = [[self stringFromStringRdf:ldns_rr_rdf(rr,3)] retain]; 
     133                return TRUE; 
     134        } 
     135        textValue = nil; 
     136        return FALSE; 
    112137} 
    113138 
     
    167192 
    168193- (NSMutableString *)stringFromStringRdf:(const ldns_rdf *)rdf { 
     194        if (rdf == NULL) { 
     195                return nil; 
     196        } 
    169197        NSMutableString *res; 
    170198        const uint8_t *data = ldns_rdf_data(rdf); 
     
    180208- (void)dealloc { 
    181209        [trimCharacterSet release]; 
     210//      [primaryDescription release]; 
     211//      [primaryValue release]; 
     212//      [textValue release]; 
     213//      [keysAndValues release]; 
     214//      [expiryDate release]; 
    182215        [super dealloc]; 
    183216} 
Telnic
Search This Site
Partners
Neustar
ICANN
Main site | WHOIS | Sell .tel | FAQ | Archived Site | About Telnic | Contact Us