Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
AdminProtocolAccessObj.m
// |
// AdminProtocolAccessObj.m |
// QTSSStatusView |
// |
// Created by John Anderson on Fri Mar 08 2002. |
// Copyright (c) 2002 Apple. All rights reserved. |
// |
#import "AdminProtocolAccessObj.h" |
#import "base64.h" |
#import "Socket.h" |
@implementation AdminProtocolAccessObj |
- (id)initWithUsername:(NSString *)username password:(NSString *)password host:(NSString *)host |
{ |
NSString *newAuthString; |
NSString *str = @""; |
char *encodedAuthString; |
int authStringLength; |
int resultCode; |
NSMutableArray *result = [NSMutableArray array]; |
int i; |
[super init]; |
myHost = [host retain]; |
newAuthString = [NSString stringWithFormat:@"%@:%@", username, password]; |
authStringLength = [newAuthString cStringLength]; |
//authStringLength = Base64encode_len(authStringLength); |
for (i = 0; i < authStringLength; i++) { |
str = [str stringByAppendingString:@" "]; |
} |
encodedAuthString = [str cString]; |
Base64encode(encodedAuthString, [newAuthString cString], authStringLength); |
newAuthString = [NSString stringWithCString:encodedAuthString]; |
[self setAuthString:newAuthString]; |
resultCode = [self makeRequest:@"/modules/admin/server/*" withResult:result]; |
if (resultCode != 200) { // wasn't authorized |
[self release]; // make this object go away |
return nil; // signal a failed attempt to init |
} |
//[self getValue:@"/modules/admin/server/qtssSvrModuleObjects/QTSSMP3StreamingModule/qtssModPrefs/mp3_broadcast_password" withResult:result]; |
//NSLog(@"test result: %@", [result objectAtIndex:0]); |
return self; // this only happens if the return code is 200 |
} |
- (int)getAllValuesAtPath:(NSString *)path withResult:(NSMutableDictionary *)result |
{ |
int resultCode; |
NSMutableArray *responseArray = [NSMutableArray array]; |
NSEnumerator *enumerator; |
id obj; |
MORegularExpression *containerRegexp = [MORegularExpression regularExpressionWithString:@"^Container="]; |
MORegularExpression *errorRegexp = [MORegularExpression regularExpressionWithString:@"^Error:"]; |
MORegularExpression *valueExp = [MORegularExpression regularExpressionWithString:@"^([^=]+)=(.+)$"]; |
MORegularExpression *pathExp = [MORegularExpression regularExpressionWithString:@"(.+)\\/"]; |
MORegularExpression *removeQuotesExp = [MORegularExpression regularExpressionWithString:@"^\\\"*([^\\\"]*)\\\"*$"]; |
NSString *fixedVal; |
NSLog(@"getAllValuesAtPath:%@", path); |
resultCode = [self makeRequest:path withResult:responseArray]; |
enumerator = [responseArray objectEnumerator]; |
[result removeAllObjects]; |
while (obj = [enumerator nextObject]) { |
if ((![containerRegexp matchesString:obj]) && (![errorRegexp matchesString:obj])) { |
if ([valueExp matchesString:obj]) { |
fixedVal = [valueExp substringForSubexpressionAtIndex:2 inString:obj]; |
fixedVal = [removeQuotesExp substringForSubexpressionAtIndex:1 inString:fixedVal]; |
[result setObject:fixedVal |
forKey:[valueExp substringForSubexpressionAtIndex:1 inString:obj]]; |
} |
else if ([pathExp matchesString:obj]) { |
[result setObject:@"*" |
forKey:obj]; |
} |
} |
} |
return resultCode; |
} |
- (int)getValue:(NSString *)value withResult:(NSMutableArray *)result |
{ |
int resultCode; |
NSString *resultString; |
NSMutableArray *responseArray = [NSMutableArray array]; |
NSEnumerator *enumerator; |
id obj; |
NSString *objAsString; |
NSString *regexpstring; |
NSString *regexpstring2; |
MORegularExpression *regexp; |
MORegularExpression *regexp2; |
resultCode = [self makeRequest:value withResult:responseArray]; |
enumerator = [responseArray objectEnumerator]; |
regexpstring = [[value lastPathComponent] stringByAppendingString:@"=(.+)"]; |
regexp = [MORegularExpression regularExpressionWithString:regexpstring]; |
regexpstring2 = @"^\\\"*([^\\\"]*)\\\"*$"; // remove the quotes from the beginning and end |
regexp2 = [MORegularExpression regularExpressionWithString:regexpstring2]; |
[result removeAllObjects]; |
while (obj = [enumerator nextObject]) { |
objAsString = (NSString *)obj; |
resultString = [regexp substringForSubexpressionAtIndex:1 inString:objAsString]; |
if (resultString) { |
resultString = [regexp2 substringForSubexpressionAtIndex:1 inString:resultString]; // strip quotes |
[result addObject:resultString]; |
} |
} |
return resultCode; |
} |
- (int)makeRequest:(NSString *)request withResult:(NSMutableArray *)result |
{ |
NSString *httpRequest; |
Socket *socket = [Socket socket]; |
NSMutableData *response = [[[NSMutableData alloc] init] autorelease]; |
NSString *responseString; |
NSArray *responseArray; |
NSMutableArray *headerArray = [NSMutableArray array]; |
NSMutableArray *bodyArray = [NSMutableArray array]; |
NSString *regexpstring; |
MORegularExpression *regexp; |
int resultCode; |
NSEnumerator *enumerator; |
id obj; |
BOOL isHeader = YES; |
httpRequest = [NSString stringWithFormat:@"GET %@ HTTP/1.1\r\nConnection: Keep-Alive\r\nUser-Agent: QTSSPlaylistBuilder/1.0\r\nPragma: no-cache\r\nHost: %@:554\r\nAuthorization: Basic %@\r\n\r\n", request, myHost, authString]; |
[socket setBlocking:YES]; |
[socket connectToHostName:myHost port:554]; |
[socket writeString:httpRequest]; |
while ( [socket readData:response] ) { |
// Read until other side disconnects |
} |
responseString = [[[NSString alloc] initWithData:response |
encoding:[NSString defaultCStringEncoding]] autorelease]; |
responseArray = [responseString componentsSeparatedByString:[NSString stringWithFormat:@"\n"]]; |
enumerator = [responseArray objectEnumerator]; |
while (obj = [enumerator nextObject]) { |
if ([obj isEqualToString:@"\r"]) |
isHeader = NO; |
else { |
if (isHeader) |
[headerArray addObject:obj]; |
else |
[bodyArray addObject:obj]; |
} |
} |
regexpstring = @"HTTP/([0-9.]+)\\s([0-9]+)\\s"; |
regexp = [MORegularExpression regularExpressionWithString:regexpstring]; |
resultCode = [[regexp substringForSubexpressionAtIndex:2 inString:responseString] intValue]; |
[result setArray:bodyArray]; |
return resultCode; |
} |
- (void)setAuthString:(NSString *)newAuthString |
{ |
[newAuthString retain]; |
if (authString) |
[authString release]; |
authString = newAuthString; |
} |
@end |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14