473 lines
20 KiB
PHP
473 lines
20 KiB
PHP
<?php
|
|
require_once 'DB.php'; // PEAR/DB
|
|
require_once 'SOAP/Client.php';
|
|
require_once 'config.php';
|
|
|
|
class clientInfo {
|
|
var $name;
|
|
var $version;
|
|
var $resultsURL;
|
|
|
|
function clientInfo($ar=NULL) {
|
|
if (is_array($ar)) {
|
|
foreach ($ar as $k=>$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);
|
|
?>
|