Web Services in Objective C Part 3

This is my caller file. It is a .mm file not a .m file so I can micx C++ and Objective C. Sorry for my newbieness.
This is SakaiServer.mm – look in the doLogin method.
Again, Creative Commons Public Domain blah blah.


//
// SakaiServer.m
// SakaiDesktop
//
// Created by Charles Severance on 12/29/05.
// Copyright 2005 __MyCompanyName__. All rights reserved.
//
// Needed for SoapUtils
#include
#import “SakaiServer.h”
#import “SoapUtils.h”;
#define checkErr(err) \
while (err != noErr) { fprintf(stderr, “Failed at line %d, error %d\n”, __LINE__, err); exit(-1); }
@implementation SakaiServer
– (void) init
{
host = nil;
title = nil;
xmlDoc = nil;
account = nil;
password = nil;
session = nil;
// Initially we allow logins, and have neither tried, nor failed logging in
suppressLogin = NO;
goodLogin = NO;
triedLogin = NO;
}
– (IBAction) setHost:(NSString *) theHost
{
host = [theHost retain];
}
– (IBAction) setTitle:(NSString *) theTitle
{
title = [theTitle retain];
}
– (IBAction) setAccount:(NSString *) theAccount
{
account = theAccount;
}
– (IBAction) setPassword:(NSString *) thePassword
{
password = thePassword;
}
– (IBAction) setSuppressLogin:(BOOL) theValue
{
suppressLogin = theValue;
}
– (NSString *)title
{
return title;
}
– (NSString *)host
{
return host;
}
– (NSString *)account
{
return account;
}
// Instead of handing back the password, we simply allow our caller
// to know if it is nil
– (BOOL) passwordIsNil
{
if ( password == nil ) return YES;
return NO;
}
– (BOOL) suppressLogin
{
return suppressLogin;
}
– (BOOL) goodLogin
{
return goodLogin;
}
– (BOOL) triedLogin
{
return triedLogin;
}
// Log in to a Sakai Server
– (BOOL) doLogin :(NSTextField *) statusField
{
if ( triedLogin == YES ) {
[statusField setStringValue:@”Prior login failed…”];
return goodLogin;
}
triedLogin = YES;
goodLogin = NO;
OSErr err;
AEDesc soapParms;
err = createSoapParameters(&soapParms);
checkErr(err);
// Build up Soap Parameters – Ignore Errors while building up parameters
err = addSoapParameter(&soapParms, “id”, typeChar, [account cString]);
err = addSoapParameter(&soapParms, “pw”, typeChar, [password cString]);
char newSession[1024];
char errorMessage[1024];
[statusField setStringValue:@”Making web service call for login…”];
err = makeSoapCall([[host stringByAppendingString:@”/sakai-axis/SakaiLogin.jws”] cString],
“login”, &soapParms, newSession, sizeof(newSession), errorMessage, sizeof(errorMessage), false, true);
AEDisposeDesc(&soapParms);
if ( err == noErr ) {
fprintf(stderr,”Success String = %s!\n\n”, newSession);
} else {
fprintf(stderr,”Error String = %s!\n\n”, errorMessage);
[statusField setStringValue:[NSString stringWithUTF8String:errorMessage]];
return NO;
}
// Retrieve the sites
err = createSoapParameters(&soapParms);
checkErr(err);
err = addSoapParameter(&soapParms, “session”, typeChar, newSession);
err = addSoapParameter(&soapParms, “search”, typeChar, “”);
int i = 1;
err = addSoapParameter(&soapParms, “first”, typeSInt32, &i);
i = 999;
err = addSoapParameter(&soapParms, “last”, typeSInt32, &i);
// fullString = [string stringByAppendingString:@”Extra Text”];
char sitesDom[100000];
[statusField setStringValue:@”Making web service call retrieving sites…”];
err = makeSoapCall([[host stringByAppendingString:@”/sakai-axis/SakaiSite.jws”] cString],
“getToolsDom”, &soapParms, sitesDom, sizeof(sitesDom), errorMessage, sizeof(errorMessage), false, true);
AEDisposeDesc(&soapParms);
if ( err == noErr ) {
fprintf(stderr,”Success String = %s!\n\n”, sitesDom);
} else {
fprintf(stderr,”Error String = %s!\n\n”, errorMessage);
[statusField setStringValue:[NSString stringWithUTF8String:errorMessage]];
return NO;
}
// Parse it all
// Release if this has been done before
if ( xmlDoc != nil ) {
[xmlDoc release];
xmlDoc = nil;
}
// NSXMLDocument *xmlDoc;
NSString *bar;
NSError *nsErr = nil;
bar = [NSString stringWithUTF8String:sitesDom];
NSLog(bar);
xmlDoc = [ [ [ NSXMLDocument alloc] initWithXMLString:bar options:0 error:&nsErr ] retain ] ;
if ( xmlDoc == nil ) {
[statusField setStringValue:@”Unable to parse returned XML from web Service”];
return NO;
}
[statusField setStringValue:@”Web Service Login Successful”];
goodLogin = YES;
return goodLogin;
}
@end