$v) { $this->$k = $v; } } } } class serverInfo { var $id; var $service_id; var $name; var $version; var $endpointURL; var $wsdlURL; function serverInfo($ar=NULL) { if (is_array($ar)) { foreach ($ar as $k=>$v) { $this->$k = $v; } } } } class Service { var $id; var $name; var $description; var $wsdlURL; var $websiteURL; function Service($ar=NULL) { if (is_array($ar)) { foreach ($ar as $k=>$v) { $this->$k = $v; } } } } class subscriberInfo { var $notificationID; var $expires; /* dateTime */ } class ChangeItem { var $id; var $timestamp; /* dateTime */ var $headline; var $notes; var $url; } function getLocalInteropServer($testname,$id,$localBaseUrl='http://localhost/soap_interop/') { $localServer = array(); $localServer['service_id']=$id; $localServer['name']='Local PEAR::SOAP'; $localServer['version']=SOAP_LIBRARY_VERSION; switch ($testname) { case 'Round 2 Base': $localServer['endpointURL']=$localBaseUrl.'server_Round2Base.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/interop.wsdl.php'; return new serverInfo($localServer); case 'Round 2 Group B': $localServer['endpointURL']=$localBaseUrl.'server_Round2GroupB.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/interopB.wsdl.php'; return new serverInfo($localServer); case 'Round 2 Group C': $localServer['endpointURL']=$localBaseUrl.'server_Round2GroupC.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/echoheadersvc.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D EmptySA': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDEmptySA.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/emptysa.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D Compound 1': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDCompound1.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/compound1.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D Compound 2': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDCompound2.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/compound2.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D DocLit': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDDocLit.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/InteropTestDocLit.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D DocLitParams': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDDocLitParams.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/InteropTestDocLitParameters.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D Import 1': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDImport1.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/import1.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D Import 2': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDImport2.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/import2.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D Import 3': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDImport3.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/import3.wsdl.php'; return new serverInfo($localServer); case 'Round 3 Group D RpcEnc': $localServer['endpointURL']=$localBaseUrl.'server_Round3GroupDRpcEnc.php'; $localServer['wsdlURL']=$localBaseUrl.'wsdl/InteropTestRpcEnc.wsdl.php'; return new serverInfo($localServer); #case 'Round 3 Group E DocLit': #case 'Round 3 Group E RpcEnc': #case 'Round 3 Group F Extensibility': #case 'Round 3 Group F ExtensibilityRequired': #case 'Round 3 Group F Headers': #case 'Round 4 DIME/Doc Attachments': #case 'Round 4 DIME/RPC Attachments': #case 'Round 4 MIME/Doc Attachments': #case 'Round 4 SwA/RPC Attachments': } return NULL; } class SOAP_Interop_registrationAndNotificationService_ServicesPort extends SOAP_Client { function SOAP_Interop_registrationAndNotificationService_ServicesPort() { $this->SOAP_Client("http://soap.4s4c.com/registration/soap.asp", 0); $this->_auto_translation = true; } function &ServiceList() { return $this->call("ServiceList", $v = NULL, array('namespace'=>'http://soap.pocketsoap.com/registration/services', 'soapaction'=>'http://soap.pocketsoap.com/registration/services#ServiceList', 'style'=>'rpc', 'use'=>'encoded')); } function &Servers($serviceID) { return $this->call("Servers", $v = array("serviceID"=>$serviceID), array('namespace'=>'http://soap.pocketsoap.com/registration/services', 'soapaction'=>'http://soap.pocketsoap.com/registration/services#Servers', 'style'=>'rpc', 'use'=>'encoded')); } function &Clients($serviceID) { return $this->call("Clients", $v = array("serviceID"=>$serviceID), array('namespace'=>'http://soap.pocketsoap.com/registration/services', 'soapaction'=>'http://soap.pocketsoap.com/registration/services#Clients', 'style'=>'rpc', 'use'=>'encoded')); } } class SOAP_Interop_registrationAndNotificationService_ClientsPort extends SOAP_Client { function SOAP_Interop_registrationAndNotificationService_ClientsPort() { $this->SOAP_Client("http://soap.4s4c.com/registration/soap.asp", 0); $this->_auto_translation = true; } function &RegisterClient($serviceID, $clientInfo) { return $this->call("RegisterClient", $v = array("serviceID"=>$serviceID, "clientInfo"=>$clientInfo), array('namespace'=>'http://soap.pocketsoap.com/registration/clients', 'soapaction'=>'http://soap.pocketsoap.com/registration/clients#RegisterClient', 'style'=>'rpc', 'use'=>'encoded')); } function &UpdateClient($clientID, $clientInfo) { return $this->call("UpdateClient", $v = array("clientID"=>$clientID, "clientInfo"=>$clientInfo), array('namespace'=>'http://soap.pocketsoap.com/registration/clients', 'soapaction'=>'http://soap.pocketsoap.com/registration/clients#UpdateClient', 'style'=>'rpc', 'use'=>'encoded')); } function &RemoveClient($clientID) { return $this->call("RemoveClient", $v = array("clientID"=>$clientID), array('namespace'=>'http://soap.pocketsoap.com/registration/clients', 'soapaction'=>'http://soap.pocketsoap.com/registration/clients#RemoveClient', 'style'=>'rpc', 'use'=>'encoded')); } } class SOAP_Interop_registrationAndNotificationService_ServersPort extends SOAP_Client { function SOAP_Interop_registrationAndNotificationService_ServersPort() { $this->SOAP_Client("http://soap.4s4c.com/registration/soap.asp", 0); $this->_auto_translation = true; } function &RegisterServer($serviceID, $serverInfo) { return $this->call("RegisterServer", $v = array("serviceID"=>$serviceID, "serverInfo"=>$serverInfo), array('namespace'=>'http://soap.pocketsoap.com/registration/servers', 'soapaction'=>'http://soap.pocketsoap.com/registration/servers#RegisterServer', 'style'=>'rpc', 'use'=>'encoded')); } function &UpdateServer($serverID, $serverInfo) { return $this->call("UpdateServer", $v = array("serverID"=>$serverID, "serverInfo"=>$serverInfo), array('namespace'=>'http://soap.pocketsoap.com/registration/servers', 'soapaction'=>'http://soap.pocketsoap.com/registration/servers#UpdateServer', 'style'=>'rpc', 'use'=>'encoded')); } function &RemoveServer($serverID) { return $this->call("RemoveServer", $v = array("serverID"=>$serverID), array('namespace'=>'http://soap.pocketsoap.com/registration/servers', 'soapaction'=>'http://soap.pocketsoap.com/registration/servers#RemoveServer', 'style'=>'rpc', 'use'=>'encoded')); } } class SOAP_Interop_registrationAndNotificationService_SubscriberPort extends SOAP_Client { function SOAP_Interop_registrationAndNotificationService_SubscriberPort() { $this->SOAP_Client("http://soap.4s4c.com/registration/soap.asp", 0); $this->_auto_translation = true; } function &Subscribe($serviceID, $ServerChanges, $ClientChanges, $NotificationURL) { return $this->call("Subscribe", $v = array("serviceID"=>$serviceID, "ServerChanges"=>$ServerChanges, "ClientChanges"=>$ClientChanges, "NotificationURL"=>$NotificationURL), array('namespace'=>'http://soap.pocketsoap.com/registration/subscriber', 'soapaction'=>'http://soap.pocketsoap.com/registration/subscriber#Subscribe', 'style'=>'rpc', 'use'=>'encoded')); } function &Renew($notificationID) { return $this->call("Renew", $v = array("notificationID"=>$notificationID), array('namespace'=>'http://soap.pocketsoap.com/registration/subscriber', 'soapaction'=>'http://soap.pocketsoap.com/registration/subscriber#Renew', 'style'=>'rpc', 'use'=>'encoded')); } function &Cancel($notificationID) { return $this->call("Cancel", $v = array("notificationID"=>$notificationID), array('namespace'=>'http://soap.pocketsoap.com/registration/subscriber', 'soapaction'=>'http://soap.pocketsoap.com/registration/subscriber#Cancel', 'style'=>'rpc', 'use'=>'encoded')); } } class SOAP_Interop_registrationAndNotificationService_ChangeLogPort extends SOAP_Client { function SOAP_Interop_registrationAndNotificationService_ChangeLogPort() { $this->SOAP_Client("http://soap.4s4c.com/registration/soap.asp", 0); $this->_auto_translation = true; } function &RecentChanges($MaxEntries) { return $this->call("RecentChanges", $v = array("MaxEntries"=>$MaxEntries), array('namespace'=>'http://soap.pocketsoap.com/registration/changeLog', 'soapaction'=>'http://soap.pocketsoap.com/registration/changeLog#RecentChanges', 'style'=>'rpc', 'use'=>'encoded')); } } class SOAP_Interop_registrationDB { var $DSN; var $dbc = NULL; var $client; // soap_client var $services; var $currentServiceId; var $servers; var $clients; function SOAP_Interop_registrationDB() { global $interopConfig; $this->DSN = $interopConfig['DSN']; $this->client =& new SOAP_Interop_registrationAndNotificationService_ServicesPort(); $this->connectDB(); $this->getServiceList(); } function connectDB() { if (!$this->dbc) $this->dbc =& DB::connect($this->DSN, true); if (PEAR::isError($this->dbc)) { echo $this->dbc->getMessage(); $this->dbc = NULL; return false; } return true; } function updateDB() { $this->updateServiceDb(); $this->updateServerDb(); $this->updateClientsDb(); } function &retreiveServiceList() { if (!$this->services) { $this->services =& $this->client->ServiceList(); } return $this->services; } function &retreiveServerList($serviceID) { if (!$this->servers || $this->currentServiceId != $serviceID) { $this->currentServiceId = $serviceID; $this->servers =& $this->client->Servers($serviceID); } return $this->servers; } function &retreiveClientList($serviceID) { if (!$this->clients || $this->currentServiceId != $serviceID) { $this->currentServiceId = $serviceID; $this->clients =& $this->client->Clients($serviceID); } return $this->clients; } function updateServiceDb() { if (!$this->connectDB()) return false; $this->retreiveServiceList(); echo "Updating Services\n"; foreach ($this->services as $service) { $res = $this->dbc->getRow("select id from services where id='{$service->id}'"); if ($res && !PEAR::isError($res)) { $res = $this->dbc->query("update services set name='{$service->name}',". "description='{$service->description}',wsdlURL='{$service->wsdlURL}',". "websiteURL='{$service->websiteURL}' where id='{$service->id}'"); } else { $res = $this->dbc->query("insert into services (id,name,description,wsdlURL,websiteURL) ". "values('{$service->id}','{$service->name}','{$service->description}','{$service->wsdlURL}','{$service->websiteURL}')"); } } } function _updateOrAddServer($id, $server) { $res = $this->dbc->getRow("select * from serverinfo where service_id='$id' and name='{$server->name}'"); if ($res && !PEAR::isError($res)) { $res = $this->dbc->query("update serverinfo set ". "version='{$server->version}', ". "endpointURL='{$server->endpointURL}', ". "wsdlURL='{$server->wsdlURL}' where id={$res->id}"); } else { $res = $this->dbc->query("insert into serverinfo (service_id,name,version,endpointURL,wsdlURL) ". "values('$id','{$server->name}','{$server->version}','{$server->endpointURL}','{$server->wsdlURL}')"); } if (PEAR::isError($res)) { echo $res->toString() . "\n"; } } function updateServerDb() { global $INTEROP_LOCAL_SERVER; if (!$this->connectDB()) return false; $this->retreiveServiceList(); $c = count($this->services); for ($i=0;$i<$c;$i++) { $this->retreiveServerList($this->services[$i]->id); echo "Updating Servers for {$this->services[$i]->name}\n"; if (!$this->servers) continue; foreach ($this->servers as $server) { $this->_updateOrAddServer($this->services[$i]->id, $server); } // add the local server now if ($INTEROP_LOCAL_SERVER) { $server = getLocalInteropServer($this->services[$i]->name, $this->services[$i]->id); if ($server) { $this->_updateOrAddServer($this->services[$i]->id, $server); } } } } function updateClientsDb() { if (!$this->connectDB()) return false; $this->retreiveServiceList(); foreach ($this->services as $service) { $this->retreiveClientList($service->id); echo "Updating Clients for {$service->name}\n"; if (!$this->clients) continue; foreach ($this->clients as $client) { $res = $this->dbc->getRow("select id from clientinfo where id='{$service->id}' and name='{$client->name}'"); if ($res && !PEAR::isError($res)) { $res = $this->dbc->query("update clientinfo set ". "version='{$client->version}', ". "resultsURL='{$client->resultsURL}' where ". "id='{$service->id}',name='{$client->name}'"); } else { $res = $this->dbc->query("insert into clientinfo (id,name,version,resultsURL) ". "values('{$service->id}','{$client->name}','{$client->version}','{$client->resultsURL}')"); } } } } function &getServiceList($forcefetch=FALSE) { if (!$forcefetch && !$this->services) { $this->dbc->setFetchMode(DB_FETCHMODE_OBJECT,'Service'); $this->services = $this->dbc->getAll('select * from services',NULL, DB_FETCHMODE_OBJECT ); } if ($forcefetch || !$this->services) { $this->updateServiceDb(); } return $this->services; } function &getServerList($serviceID,$forcefetch=FALSE) { if (!$forcefetch && (!$this->servers || $this->currentServiceId != $serviceID)) { $this->dbc->setFetchMode(DB_FETCHMODE_OBJECT,'serverInfo'); $this->servers = $this->dbc->getAll("select * from serverinfo where service_id = '$serviceID'",NULL, DB_FETCHMODE_OBJECT ); } if ($forcefetch || !$this->servers) { $this->updateServerDb(); $this->dbc->setFetchMode(DB_FETCHMODE_OBJECT,'serverInfo'); $this->servers = $this->dbc->getAll("select * from serverinfo where service_id = '$serviceID'",NULL, DB_FETCHMODE_OBJECT ); if (!$this->servers) { die("Error retrieving server list!\n"); } } return $this->servers; } function &getClientList($serviceID,$forcefetch=FALSE) { if (!$forcefetch && (!$this->clients || $this->currentServiceId != $serviceID)) { $this->dbc->setFetchMode(DB_FETCHMODE_OBJECT,'clientInfo'); $this->clients = $this->dbc->getAll("select * from clientinfo where id = '$serviceID'",NULL, DB_FETCHMODE_OBJECT ); } if ($forcefetch || !$this->clients) { $this->updateClientDb(); $this->dbc->setFetchMode(DB_FETCHMODE_OBJECT,'clientInfo'); $this->clients = $this->dbc->getAll("select * from clientinfo where id = '$serviceID'",NULL, DB_FETCHMODE_OBJECT ); if (!$this->clients) { die("Error retrieving client list!\n"); } } return $this->clients; } function &findService($serviceName) { $this->getServiceList(); $c = count($this->services); for ($i=0 ; $i<$c; $i++) { if (strcmp($serviceName, $this->services[$i]->name)==0) return $this->services[$i]; } return NULL; } } #$reg =& new SOAP_Interop_registrationAndNotificationDB(); #$reg->updateDB(); //print_r($l); ?>