/*
* And now, the actual GSXMLRPC class.
*/
@implementation GSXMLRPC
- (NSData*) buildMethod: (NSString*)method
params: (NSArray*)params
{
return [[self buildMethodCall: method params: params] dataUsingEncoding:
NSUTF8StringEncoding];
}
- (NSString*) buildMethodCall: (NSString*)method
params: (NSArray*)params
{
NSMutableString *str = [NSMutableString stringWithCapacity: 1024];
unsigned c = [params count];
unsigned i;
if ([method length] == 0)
{
return nil;
}
else
{
static NSCharacterSet *illegal = nil;
NSRange r;
if (illegal == nil)
{
NSMutableCharacterSet *tmp = [NSMutableCharacterSet new];
[tmp addCharactersInRange: NSMakeRange('0', 10)];
[tmp addCharactersInRange: NSMakeRange('a', 26)];
[tmp addCharactersInRange: NSMakeRange('A', 26)];
[tmp addCharactersInString: @"_.:/"];
[tmp invert];
illegal = [tmp copy];
RELEASE(tmp);
}
r = [method rangeOfCharacterFromSet: illegal];
if (r.length > 0)
{
return nil; // Bad method name.
}
}
[str appendString: @"<?xml version='"1.0'"?>'n"];
[str appendString: @"<methodCall>"];
NL;
INDENT(1);
[str appendFormat: @"<methodName>%@</methodName>",
[method stringByEscapingXML]];
NL;
if (c > 0)
{
INDENT(1);
[str appendString: @"<params>"];
NL;
for (i = 0; i < c; i++)
{
INDENT(2);
[str appendString: @"<param>"];
NL;
INDENT(3);
[str appendString: @"<value>"];
NL;
[[params objectAtIndex: i] appendToXMLRPC: str indent: 3 for: self];
NL;
INDENT(3);
[str appendString: @"</value>"];
NL;
INDENT(2);
[str appendString: @"</param>"];
NL;
}
INDENT(1);
[str appendString: @"</params>"];
NL;
}
[str appendString: @"</methodCall>"];
NL;
return str;
}
http://www.google.com/codesearch?hl=en&q=NSURLConnection+initWithRequest+show:thO0Gy4XKz8:WITO_lYqkRQ:OGAQEqv7aks&sa=N&cd=3&ct=rc&cs_p=ftp://ftp.gnustep.org/pub/daily-snapshots/core.current.tar.bz2&cs_f=core/base/Source/Additions/GSXML.m
コメント一覧
この記事にコメントしてください
(*) は必須入力項目です。