From c8a6ba960dad63c305dc87d2d30d2de2b9dae5bc Mon Sep 17 00:00:00 2001 From: Ren RenJuan Date: Tue, 28 Jan 2014 18:16:48 +0000 Subject: [PATCH] * --- ACTK1_0/Makefile | 4 +- ...xtensionCommand.cpp => ACProxyCommand.cpp} | 6 +- ...xtensionCommand.hpp => ACProxyCommand.hpp} | 4 +- ACTK1_0/se/LPE/LPChkCmdExtension.cpp | 8 + ACTK1_0/se/LPE/LPChkRespExtension.cpp | 28 +- ACTK1_0/se/LPE/LPChkRespExtension.hpp | 7 +- ACTK1_0/se/LPE/LPCrtCmdExtension.cpp | 49 ++- ACTK1_0/se/LPE/LPCrtCmdExtension.hpp | 92 ++++- ACTK1_0/se/LPE/SMDExtension.cpp | 31 ++ ACTK1_0/se/LPE/SMDExtension.hpp | 21 + ACTK1_0/session/ACSession.cpp | 7 + ACTK1_0/session/ACSession.hpp | 22 +- APIG/build/drde-cd | Bin 4059218 -> 4059706 bytes APIG/client/commander.cpp | 9 +- APIG/include/mdCommander.h | 28 +- AusRegCliever/Makefile | 2 +- AusRegCliever/include/mdJSON.hpp | 25 ++ AusRegCliever/include/mdcommon.h | 12 +- AusRegCliever/server/masterDaemon.cpp | 6 +- AusRegCliever/server/mdAusReg.cpp | 362 ++++-------------- AusRegCliever/server/mdJSON.cpp | 55 +++ 21 files changed, 463 insertions(+), 315 deletions(-) rename ACTK1_0/se/{ACExtensionCommand.cpp => ACProxyCommand.cpp} (92%) rename ACTK1_0/se/{ACExtensionCommand.hpp => ACProxyCommand.hpp} (91%) create mode 100644 ACTK1_0/se/LPE/SMDExtension.cpp create mode 100644 ACTK1_0/se/LPE/SMDExtension.hpp create mode 100644 AusRegCliever/include/mdJSON.hpp create mode 100644 AusRegCliever/server/mdJSON.cpp diff --git a/ACTK1_0/Makefile b/ACTK1_0/Makefile index 5542b35..4e79cbd 100644 --- a/ACTK1_0/Makefile +++ b/ACTK1_0/Makefile @@ -135,7 +135,9 @@ build/ContactNotificationResponse.o build/DomainSecDNSUpdateCommandExtensi build/ContactTransferResponse.o build/DomainTransferResponse.o build/init.o build/Period.o build/SecDNSRemType.o build/UserPassMismatchException.o \ build/ContactUpdateCommand.o build/DomainUpdateCommand.o build/IPVersion.o build/PeriodUnit.o build/SendSE.o build/XMLDocument.o \ build/CreateResponse.o build/DomainUpdateSyncCommandExtension.o build/KVExtension.o build/PollOperation.o build/SessionFactory.o \ -build/DataResponse.o build/E164Extension.o build/Logger.o build/PollResponse.o build/SessionManagerFactory.o \ +build/DataResponse.o build/E164Extension.o build/Logger.o \ +build/SMDExtension.o build/ACProxyCommand.o \ +build/PollResponse.o build/SessionManagerFactory.o \ build/Disclose.o build/EnumDomainCreateCommand.o build/LoginCommand.o build/PostalInfo.o build/SessionManagerImpl.o .PHONY: tests diff --git a/ACTK1_0/se/ACExtensionCommand.cpp b/ACTK1_0/se/ACProxyCommand.cpp similarity index 92% rename from ACTK1_0/se/ACExtensionCommand.cpp rename to ACTK1_0/se/ACProxyCommand.cpp index 6bd0d82..2917286 100644 --- a/ACTK1_0/se/ACExtensionCommand.cpp +++ b/ACTK1_0/se/ACProxyCommand.cpp @@ -1,10 +1,10 @@ #include "common/ErrorPkg.hpp" #include "se/CLTRID.hpp" #include "se/IllegalArgException.hpp" -#include "se/ACExtensionCommand.hpp" +#include "se/ACProxyCommand.hpp" #include "xml/XMLHelper.hpp" -ACExtensionCommand::ACExtensionCommand( +ACProxyCommandCommand::ACProxyCommandCommand( const CommandType* commandType, const ObjectType* objectType, const std::string& ident, @@ -36,7 +36,7 @@ ACExtensionCommand::ACExtensionCommand( } -std::string ACExtensionCommand::toXMLImpl() +std::string ACProxyCommandCommand::toXMLImpl() { XMLHelper::setTextContent( xmlWriter->appendChild(command, "clTRID"), diff --git a/ACTK1_0/se/ACExtensionCommand.hpp b/ACTK1_0/se/ACProxyCommand.hpp similarity index 91% rename from ACTK1_0/se/ACExtensionCommand.hpp rename to ACTK1_0/se/ACProxyCommand.hpp index f82ff11..01fc360 100644 --- a/ACTK1_0/se/ACExtensionCommand.hpp +++ b/ACTK1_0/se/ACProxyCommand.hpp @@ -14,10 +14,10 @@ * class are responsible for building the part of the XML DOM tree common to * all ACTK 1.0 protocol extension commands. */ -class ACExtensionCommand : public SendSE +class ACProxyCommandCommand : public SendSE { public: - ACExtensionCommand( + ACProxyCommandCommand( const CommandType* commandType, const ObjectType* objectType, const std::string& ident, diff --git a/ACTK1_0/se/LPE/LPChkCmdExtension.cpp b/ACTK1_0/se/LPE/LPChkCmdExtension.cpp index 4958122..244fd0b 100644 --- a/ACTK1_0/se/LPE/LPChkCmdExtension.cpp +++ b/ACTK1_0/se/LPE/LPChkCmdExtension.cpp @@ -1,13 +1,21 @@ #include "se/LPE/LPChkCmdExtension.hpp" #include "se/Command.hpp" #include "se/LPE/LPExtension.hpp" +#include "se/LPE/SMDExtension.hpp" #include "xml/XMLHelper.hpp" namespace { + LPExtension& lpExtension() { static LPExtension* lpExtension = new LPExtension(); return *lpExtension; } + + SMDExtension& smdExtension() { + static SMDExtension* smdExtension = new SMDExtension(); + return *smdExtension; + } + }; // anonymous namespace void LPChkCmdExtension::addToCommand(const Command &command) const diff --git a/ACTK1_0/se/LPE/LPChkRespExtension.cpp b/ACTK1_0/se/LPE/LPChkRespExtension.cpp index 7cf74d4..94fc457 100644 --- a/ACTK1_0/se/LPE/LPChkRespExtension.cpp +++ b/ACTK1_0/se/LPE/LPChkRespExtension.cpp @@ -3,11 +3,11 @@ #include "se/ResponseExtension.hpp" #include "se/LPE/LPChkRespExtension.hpp" #include -#include +//#include extern mdLogger mdLog; -XALAN_USING_XALAN(XalanDOMString) +//XALAN_USING_XALAN(XalanDOMString) /* * Have to use static funcion instead of static variable @@ -16,26 +16,36 @@ XALAN_USING_XALAN(XalanDOMString) */ const std::string LPChkRespExtension::CKCLAIM_EXPR() { - return EXTENSION_EXPR() + "//launch:name@exists"; + return EXTENSION_EXPR() + "//*/@exists"; } +const std::string LPChkRespExtension::CKKEY_EXPR() +{ + return EXTENSION_EXPR() + "//launch:claimKey"; +} +const char *LPChkRespExtension::getClaimsKey() { return claimsKey.c_str(); } -LPChkRespExtension::LPChkRespExtension() : typeIsClaims(true), initialised(false) +LPChkRespExtension::LPChkRespExtension() : typeIsClaims(true), initialised(false), response(false), + claimsKey("") { } void LPChkRespExtension::fromXML(XMLDocument *xmlDoc) { + const std::string ckeyElement = CKKEY_EXPR(); const std::string respElement = CKCLAIM_EXPR(); - const XalanNode * responSE = xmlDoc->getElement(respElement); - const XalanDOMString respValue("false"); + const std::string respValue = xmlDoc->getNodeValue(respElement); + const std::string doesntExist("false"); initialised = true; - if (!responSE) { + if (respValue.empty() ) { mdLog.logN(0,"Parse error in LPChkResponse"); } else { - if (responSE->getNodeValue().compare(respValue) != 0) - response = true; + if (respValue.compare(doesntExist) != 0) { + response = true; + const std::string claimKey= xmlDoc->getNodeValue(ckeyElement); + claimsKey = claimKey; + } } diff --git a/ACTK1_0/se/LPE/LPChkRespExtension.hpp b/ACTK1_0/se/LPE/LPChkRespExtension.hpp index 803f230..406622c 100644 --- a/ACTK1_0/se/LPE/LPChkRespExtension.hpp +++ b/ACTK1_0/se/LPE/LPChkRespExtension.hpp @@ -15,8 +15,9 @@ class LPChkRespExtension : public ResponseExtension virtual void fromXML(XMLDocument *xmlDoc); bool affirmativeResponse(); - bool getClaimsStatus() { return response; } - virtual bool isInitialised() const; + bool doClaimsExist() { return response; } + virtual bool isInitialised() const; + const char *getClaimsKey(); private: const XMLDocument *xmlDoc; @@ -26,6 +27,8 @@ class LPChkRespExtension : public ResponseExtension bool response; // true/false attribute in reply static const std::string CKCLAIM_EXPR(); + static const std::string CKKEY_EXPR(); + std::string claimsKey; }; diff --git a/ACTK1_0/se/LPE/LPCrtCmdExtension.cpp b/ACTK1_0/se/LPE/LPCrtCmdExtension.cpp index 53f16e5..6f68a47 100644 --- a/ACTK1_0/se/LPE/LPCrtCmdExtension.cpp +++ b/ACTK1_0/se/LPE/LPCrtCmdExtension.cpp @@ -1,15 +1,27 @@ #include "se/LPE/LPCrtCmdExtension.hpp" #include "se/Command.hpp" #include "se/LPE/LPExtension.hpp" +#include "se/LPE/SMDExtension.hpp" #include "xml/XMLHelper.hpp" namespace { + LPExtension& lpExtension() { static LPExtension* lpExtension = new LPExtension(); return *lpExtension; - } + } + + SMDExtension& smdExtension() { + static SMDExtension* smdExtension = new SMDExtension(); + return *smdExtension; + } }; // anonymous namespace +void LPCrtCmdExtension::setSMD() +{ + haveSMD = true; + +} void LPCrtCmdExtension::addToCommand(const Command &command) const { XMLWriter* xmlWriter = command.getXmlWriter(); @@ -18,4 +30,39 @@ void LPCrtCmdExtension::addToCommand(const Command &command) const "create", lpExtension().getURI()); DOMElement* exPhaseElement = xmlWriter->appendChild(launchElement, "launch:phase"); XMLHelper::setTextContent(exPhaseElement, lpePhaseName); + + if (haveNoticeID) { + + DOMElement* noticeElement = xmlWriter->appendChild(launchElement, "launch:notice"); + + DOMElement* exPhaseElement1 = xmlWriter->appendChild(noticeElement, "launch:noticeID"); + XMLHelper::setTextContent( exPhaseElement1, noticeID ); + + DOMElement* exPhaseElement2 = xmlWriter->appendChild(noticeElement, "launch:notAfter"); + XMLHelper::setTextContent( exPhaseElement2, notAfter ); + + DOMElement* exPhaseElement3 = xmlWriter->appendChild(noticeElement, "launch:acceptedDate"); + XMLHelper::setTextContent( exPhaseElement3, acceptedDate ); + } + + if (haveSMD) { const string smd_id("1-2"); + const string notBefore("2009-08-16T09:00:00.0Z"); const string notAfter("2099-08-16T09:00:00.0Z"); + + DOMElement* createLPElement = xmlWriter->appendChild(extensionElement, "launch:create"); + DOMElement* smdElement = xmlWriter->appendChild(extensionElement, + "signedMark", smdExtension().getURI()); + + DOMElement* smdElement1 = xmlWriter->appendChild(smdElement, "smd:id"); + XMLHelper::setTextContent( smdElement1, smd_id ); + + DOMElement* smdElement2 = xmlWriter->appendChild(smdElement, "smd:notBefore"); + XMLHelper::setTextContent( smdElement2, notBefore ); + + DOMElement* smdElement3 = xmlWriter->appendChild(smdElement, "smd:notAfter"); + XMLHelper::setTextContent( smdElement3, notAfter ); + + DOMElement* smdElement4 = xmlWriter->appendChild(smdElement, "smd:endcodedSignedMark"); + XMLHelper::setTextContent( smdElement4, smdData ); + + } } diff --git a/ACTK1_0/se/LPE/LPCrtCmdExtension.hpp b/ACTK1_0/se/LPE/LPCrtCmdExtension.hpp index ab52766..ec81964 100644 --- a/ACTK1_0/se/LPE/LPCrtCmdExtension.hpp +++ b/ACTK1_0/se/LPE/LPCrtCmdExtension.hpp @@ -8,19 +8,28 @@ #include "se/CommandExtension.hpp" #include "se/IllegalArgException.hpp" +using namespace std; class LPCrtCmdExtension : public CommandExtension { public: - LPCrtCmdExtension(const std::string *phaseName); + LPCrtCmdExtension (const std::string *phaseName); virtual void addToCommand(const Command &command) const; + bool hasNoticeID() {return haveNoticeID;} + void setNoticeID(string &idVal,string ¬AftVal, string &acceptedVal) { + noticeID = idVal; notAfter = notAftVal; acceptedDate = acceptedVal; haveNoticeID = true; + } + void setSMD(); private: + bool haveNoticeID,haveSMD; std::string lpePhaseName; + std::string noticeID; + std::string notAfter; + std::string acceptedDate; }; -inline LPCrtCmdExtension::LPCrtCmdExtension( - const std::string *phaseName) +inline LPCrtCmdExtension::LPCrtCmdExtension( const std::string *phaseName) { if (phaseName == NULL) { @@ -29,6 +38,83 @@ inline LPCrtCmdExtension::LPCrtCmdExtension( } lpePhaseName = std::string(*phaseName); + haveNoticeID = haveSMD = false; } #endif // __DOMAIN_UPDATE_COMMAND_EXTENSION_HPP + +// just here for exploratory purposes + +static const string smdData( +"DQo8c21kOnNpZ25lZE1hcmsgeG1sbnM6c21kPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOnNpZ25l" +"ZE1hcmstMS4wIiBpZD0iX3NpZ25lZE1hcmsiPjxzbWQ6aWQ+MS0yPC9zbWQ6aWQ+DQogIDwhLS0g" +"aW5zZXJ0IHNtZDppZCAtLT4NCiAgPHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSIyIj4NCiAgICA8" +"c21kOm9yZz5FeGFtcGxlIEluYy48L3NtZDpvcmc+DQogICAgPHNtZDplbWFpbD5zdXBwb3J0QGV4" +"YW1wbGUudGxkPC9zbWQ6ZW1haWw+DQogICAgPHNtZDp1cmw+aHR0cDovL3d3dy5leGFtcGxlLnRs" +"ZDwvc21kOnVybD4NCiAgICA8c21kOnZvaWNlIHg9IjEyMzQiPisxLjcwMzU1NTU1NTU8L3NtZDp2" +"b2ljZT4NCiAgPC9zbWQ6aXNzdWVySW5mbz48c21kOm5vdEJlZm9yZT4yMDA5LTA4LTE2VDA5OjAw" +"OjAwLjBaPC9zbWQ6bm90QmVmb3JlPjxzbWQ6bm90QWZ0ZXI+MjA5OS0wOC0xNlQwOTowMDowMC4w" +"Wjwvc21kOm5vdEFmdGVyPg0KICA8IS0tIGluc2VydCBzbWQ6bm90QmVmb3JlIC0tPg0KICA8IS0t" +"IGluc2VydCBzbWQ6bm90QWZ0ZXIgLS0+DQogIDxtYXJrOm1hcmsgeG1sbnM6bWFyaz0idXJuOmll" +"dGY6cGFyYW1zOnhtbDpuczptYXJrLTEuMCI+DQogICAgPG1hcms6dHJhZGVtYXJrPg0KICAgICAg" +"PG1hcms6aWQ+MTIzNC0yPC9tYXJrOmlkPjxtYXJrOm1hcmtOYW1lPmJvw650ZSBkZSB0ZXN0PC9t" +"YXJrOm1hcmtOYW1lPg0KICAgICAgPCEtLSBpbnNlcnQgbWFyazptYXJrTmFtZSAtLT4NCiAgICAg" +"IDxtYXJrOmhvbGRlciBlbnRpdGxlbWVudD0ib3duZXIiPg0KICAgICAgICA8bWFyazpvcmc+RXhh" +"bXBsZSBJbmMuPC9tYXJrOm9yZz4NCiAgICAgICAgPG1hcms6YWRkcj4NCiAgICAgICAgICA8bWFy" +"azpzdHJlZXQ+MTIzIEV4YW1wbGUgRHIuPC9tYXJrOnN0cmVldD4NCiAgICAgICAgICA8bWFyazpz" +"dHJlZXQ+U3VpdGUgMTAwPC9tYXJrOnN0cmVldD4NCiAgICAgICAgICA8bWFyazpjaXR5PlJlc3Rv" +"bjwvbWFyazpjaXR5Pg0KICAgICAgICAgIDxtYXJrOnNwPlZBPC9tYXJrOnNwPg0KICAgICAgICAg" +"IDxtYXJrOnBjPjIwMTkwPC9tYXJrOnBjPg0KICAgICAgICAgIDxtYXJrOmNjPlVTPC9tYXJrOmNj" +"Pg0KICAgICAgICA8L21hcms6YWRkcj4NCiAgICAgIDwvbWFyazpob2xkZXI+DQogICAgICA8bWFy" +"azpqdXJpc2RpY3Rpb24+VVM8L21hcms6anVyaXNkaWN0aW9uPg0KICAgICAgPG1hcms6Y2xhc3M+" +"MzU8L21hcms6Y2xhc3M+DQogICAgICA8bWFyazpjbGFzcz4zNjwvbWFyazpjbGFzcz48bWFyazps" +"YWJlbD5ib2l0ZWRldGVzdDwvbWFyazpsYWJlbD48bWFyazpsYWJlbD5ib2l0ZWRlLXRlc3Q8L21h" +"cms6bGFiZWw+PG1hcms6bGFiZWw+Ym9pdGUtZGUtdGVzdDwvbWFyazpsYWJlbD4NCiAgICAgIDwh" +"LS0gaW5zZXJ0IG1hcms6bGFiZWwgLS0+DQogICAgICA8bWFyazpnb29kc0FuZFNlcnZpY2VzPg0K" +"ICAgICAgICBEaXJpZ2VuZGFzIGV0IGVpdXNtb2RpDQogICAgICAgIGZlYXR1cmluZyBpbmZyaW5n" +"byBpbiBhaXJmYXJlIGV0IGNhcnRhbSBzZXJ2aWNpYS4NCiAgICAgIDwvbWFyazpnb29kc0FuZFNl" +"cnZpY2VzPg0KICAgICAgPG1hcms6cmVnTnVtPjIzNDIzNTwvbWFyazpyZWdOdW0+DQogICAgICA8" +"bWFyazpyZWdEYXRlPjIwMDktMDgtMTZUMDk6MDA6MDAuMFo8L21hcms6cmVnRGF0ZT4NCiAgICAg" +"IDxtYXJrOmV4RGF0ZT4yMDk5LTA4LTE2VDA5OjAwOjAwLjBaPC9tYXJrOmV4RGF0ZT4NCiAgICA8" +"L21hcms6dHJhZGVtYXJrPg0KICA8L21hcms6bWFyaz4NCjxTaWduYXR1cmUgeG1sbnM9Imh0dHA6" +"Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxTaWduZWRJbmZvPjxDYW5vbmljYWxpemF0" +"aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMx" +"NG4jIiAvPjxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx" +"LzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2IiAvPjxSZWZlcmVuY2UgVVJJPSIjX3NpZ25lZE1h" +"cmsiPjxUcmFuc2Zvcm1zPjxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8y" +"MDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIgLz48VHJhbnNmb3JtIEFsZ29yaXRo" +"bT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIiAvPjwvVHJhbnNmb3Jt" +"cz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxl" +"bmMjc2hhMjU2IiAvPjxEaWdlc3RWYWx1ZT5CK2R6NWtzdno4K3FQbFMzUE8rKy93UnYxdEFRU1VE" +"NkhjaFZPTzkyN2FFPTwvRGlnZXN0VmFsdWU+PC9SZWZlcmVuY2U+PC9TaWduZWRJbmZvPjxTaWdu" +"YXR1cmVWYWx1ZT5VZ3VJQm5oRElRQXNqUTlkTkFRcXVDR3h5Q2o3UTlYV3FxSHdDa2xKZHpkMi9H" +"bDB2UHVwb282aFV4cUprU3lPbjI5OTZlQ1Z5NjQ0c3AvQVFISzl2N1VFRGJWcmp4WFlPT2JuVUQ1" +"RUlLMEcxbnM0UEh5MkhBSjNiVlNPL1JuVG4rU25KV1o1d0hSWHg2ZjhLd0pIUThVUHg0R3Q5SVZy" +"elRHQ0NwSkduMkU1djFTbjlTTXFDcWY4M1ZiMkxFellQbTg2Zkw4NUNwZmNFK2t0YnNsZHFmZno0" +"RXMyU2lobG9vY1BtaEJIeTg0eVNUS05MVWtmcXI4ZXk1YU1QeThHb2ErMXVHM1UwS2g0Zk5nZGdL" +"RmZUZnhBUHN0RCtYTzEwQTB3OCtxQnRQZFFwcVgwQVZKbUNSR04vRk52UWNCb0RvV1U5K2FsSEtq" +"c29sNXZRTDc0QWc9PTwvU2lnbmF0dXJlVmFsdWU+PEtleUluZm8+PFg1MDlEYXRhPjxYNTA5Q2Vy" +"dGlmaWNhdGU+TUlJRHNEQ0NBcGdDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUF3Z2FFeEN6QUpCZ05W" +"QkFZVEFsVlRNUk13RVFZRFZRUUlEQXBYWVhOb2FXNW5kRzl1TVJFd0R3WURWUVFIREFoQ1pXeHNa" +"WFoxWlRFUE1BMEdBMVVFQ2d3R1JHOXVkWFJ6TVEwd0N3WURWUVFMREFSVVpYTjBNU1V3SXdZRFZR" +"UUREQngwYldOb2RHVnpkSEp2YjNSalpYSjBNUzF2ZEdVdFpHOXVkWFJ6TVNNd0lRWUpLb1pJaHZj" +"TkFRa0JGaFJvYjNOMGJXRnpkR1Z5UUdSdmJuVjBjeTVqYnpBZUZ3MHhNekEzTVRBd05qUTNNelJh" +"RncweU16QTNNRGd3TmpRM016UmFNSUdaTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tW" +"MkZ6YUdsdVozUnZiakVSTUE4R0ExVUVCd3dJUW1Wc2JHVjJkV1V4RHpBTkJnTlZCQW9NQmtSdmJu" +"VjBjekVOTUFzR0ExVUVDd3dFVkdWemRERWRNQnNHQTFVRUF3d1VjMjFrWTJWeWRERXhMVzkwWlMx" +"a2IyNTFkSE14SXpBaEJna3Foa2lHOXcwQkNRRVdGR2h2YzNSdFlYTjBaWEpBWkc5dWRYUnpMbU52" +"TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3dEhkdmRtMTFJaVM5" +"aG02RkM1QlNKNmdEM2kxRGx1S2QyU0dpYWdjOU5WZmFKSW95RlhENlRzMjR5cDdIWHFrcitrMGdq" +"RjF3Tng5R0MrTkV5N0h6Vmo1TFNQQ0p0NEFobEZKWjlVbnVjYWRyWm55bVhuUWZwK2xRSXkyaEor" +"c3UxbTN4c3NXemdRYjgwdWg3QTZwZFJiRTNSNFZLRC9CZ1F1WG1rUnFqeUt3RkZpSTBCdjJQaEVj" +"NllJdTRQV25aYVZmWnovSE1Wbkt6R1dSMXFQazgzNkNaMk5MSkFhKzViak9nMFJHeHB1TDZjWXZa" +"ZHNKTTdqVXBRMFl6SGFJSlJjM0tmd2pEYVRHeTdyeHZHQzlMM250c0l4ZmFnTnZyOEh1MU9HdVcw" +"RSt2TzhHSFNnSExWeGRuZEVYUDFlQUJlS2F2NWFkYzZKcjVJaHE3UkdscndJREFRQUJNQTBHQ1Nx" +"R1NJYjNEUUVCQlFVQUE0SUJBUUJWQ0dHY3I1eTNZM2Ntd0hxNjdUVS96Slhqd3RmcFhQRFQyTTUv" +"YmFUK1ZGQ0s3Z1JQYWJwV3JCdmtodmtKbSt1VE9nQmM5WDdqK1l5aDN6U1IydE84Umx6NHdQZndC" +"cFdkWllkTmZXMUVZdDZ3Q0F4WlM3RlB5eEJ3cmEzUTczNEYyWUsvdjBUOG14WGhlVWVDYXhheHV6" +"aG11U2hRTTd4YkYrQUdRdWlBdmdJRUVhZ3VBcUdCOS9GMjhHYnYyNHpVcmxLcktSUGpReWxnR1V6" +"eXQxVS9tbVBrQ0JCd0ZWWCtlWkY1UjZmdFJDN1ZnaWFLZ3VTYlNyUjVuRjRpUzZXQUVtakdMZ01v" +"RHhzUU5KM3RSQUJMUGJSTHVIYVUxWjZ2UmRtQ3VMczVrcVFTWThZZXB1bGJaYnRyY3hEQU1BcE5q" +"SHVSc2M0a0NSZ1VvNlFHVG1zbTwvWDUwOUNlcnRpZmljYXRlPjwvWDUwOURhdGE+PC9LZXlJbmZv" +"PjwvU2lnbmF0dXJlPjwvc21kOnNpZ25lZE1hcms+"); diff --git a/ACTK1_0/se/LPE/SMDExtension.cpp b/ACTK1_0/se/LPE/SMDExtension.cpp new file mode 100644 index 0000000..c88cffc --- /dev/null +++ b/ACTK1_0/se/LPE/SMDExtension.cpp @@ -0,0 +1,31 @@ +/* + * SMDExtension.cpp + * + * Created on: Jan 28, 2014 + * Author: jdaugherty + */ + +#include "SMDExtension.hpp" + +SMDExtension::SMDExtension() { + // TODO Auto-generated constructor stub + +} + +SMDExtension::~SMDExtension() { + // TODO Auto-generated destructor stub +} + + + +std::string& SMDExtension::getURI() const +{ + static std::string uri = "urn:ietf:params:xml:ns:signedMark-1.0"; + return uri; +} + +std::string& SMDExtension::getSchemaLocation() const +{ + static std::string loc = "urn:ietf:params:xml:ns:signedMark-1.0 signedMark-1.0.xsd"; + return loc; +} diff --git a/ACTK1_0/se/LPE/SMDExtension.hpp b/ACTK1_0/se/LPE/SMDExtension.hpp new file mode 100644 index 0000000..ad91eae --- /dev/null +++ b/ACTK1_0/se/LPE/SMDExtension.hpp @@ -0,0 +1,21 @@ +/* + * SMDExtension.hpp + * + * Created on: Jan 28, 2014 + * Author: jdaugherty + */ + +#ifndef SMDEXTENSION_HPP_ +#define SMDEXTENSION_HPP_ + +#include "se/Extension.hpp" + +class SMDExtension: public Extension { +public: + SMDExtension(); + virtual ~SMDExtension(); + std::string& getURI() const; + std::string& getSchemaLocation() const; +}; + +#endif /* SMDEXTENSION_HPP_ */ diff --git a/ACTK1_0/session/ACSession.cpp b/ACTK1_0/session/ACSession.cpp index dab4356..ff1f743 100644 --- a/ACTK1_0/session/ACSession.cpp +++ b/ACTK1_0/session/ACSession.cpp @@ -40,6 +40,13 @@ ACSession::ACSession(SessionManagerProperties* props) ACSession::~ACSession() { } +void ACSession::proxy(string XML,string commandMonicker) { + + + + +} + void ACSession::run() { mdLog.logN(1,"Begin Toolkit Scenario %d Session",tkScenario); diff --git a/ACTK1_0/session/ACSession.hpp b/ACTK1_0/session/ACSession.hpp index c062a58..55c62f5 100644 --- a/ACTK1_0/session/ACSession.hpp +++ b/ACTK1_0/session/ACSession.hpp @@ -5,9 +5,12 @@ #include "session/SessionPool.hpp" #include "session/SessionManagerImpl.hpp" #include - +#include #include #include +#define SANS_BOOST +#include +#include class ACSession : public SessionManagerImpl { @@ -19,8 +22,23 @@ void shutdown(); void run(); + void proxy(std::string XML,std::string command); // for submissions received from the MD + // command is either the lower case standard command or something else if a variant + // such as an extension is intended. There are three levels: base IETF standards + // unextended commands. Commands with hardcoded extensions, e.g. LPE, KV, E164, + // etc. which use the c++ SE camel case class name, or caps with underscore + // and a company prefix if custom biz rule engine. - + void proxy(mdDatagram *incoming,std::string command); + // A msgpack dgram is received from a CD. This is a deliberately crude interface to + // short circuit full blown XML processing and drive the base and extended SEs but + // nothing else thru msgpack datagrams. Generalizing from mdAusReg.cpp:doOTEB this + // has scripting that as its intial use case. mdAusReg.cpp:doOTEC calls this interface + // as a proxy to execute the command (without + // OTEB case that uses plain c/c++, + // which is meant to be a rescripting of the OTEB test process giving an ability to + // drive the test process remotely if no recompile of the central AC programs is + // nee }; diff --git a/APIG/build/drde-cd b/APIG/build/drde-cd index 0fcc0c05e63e0f5c541527e09a378df6b9d771d6..1465d64b52e9e8a57589ecd6cac9305dc42b84e9 100755 GIT binary patch delta 107449 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

DZ|iJItMj`%wxiF-ZDyzY`(Q5I0r6_b+IkY6!N zi+Hc+E{?>qTDgaytVMZztE|5$h5pLy;TCAV=&yo3X#Iejjn;ogZ+&YuiMHG<`*Yjv zcH~MDjKgg2@ppNxBL48rESdbe$jy%x@u+%@dRQY6n{HMYq@d9Oa?$c1X$$CdevcW; z!Ydoc{D0cgsZIBC@|_7VcBSc|Fq~^I`z}~&-=LdN{@Sfig!y$ zcW0mGkk5Ze%SRBuk3tStuyszr;{zmqSn7PHKn?X`?6=;c!o3*#7j9AULiBX#b%uls zCE=w4eUssx&vkRSzR7S8K?y*Si_z#9lsks^aiZ6SQ))edco$d9SvISY-jwTen~L_P zJlkz5*_&E_d7Es-ZSD??*>5wJ9=}Z-<)S<;b0h+#>$X039*i=1!Y9|11mbOh><61H z!&GQLHxHLQHD&;PUqZyvKo#GQ;!*=ux-chD74&lpbX|WtjU%gENC5*2MeExblroeP z{Hkg|3LYK5-58UhxZmGxnD@+}PG^QR&*aSys0N2c-<4F8uQW(sC*18Q>rr09d3OiO zZWK9zaQEBH>W#9Oy9W0Nlo}KnAnpk$2T}BkJj%x?a&zHch_VmG>nJW&QzH!M_x%Z* z<-UKI`Bac97(mr71gR>a>m8~|IOq=5A@sRJ*?i!HJ5;zZ?hX|XADMbbr*nmwsw8dh zxgh8-N-dO!S=yRb$o6>TwY%6G?{*X4Dt6K~tHVAxv}lw%D+O&Hr97{vt;11K-$!&gJn?X{s6ykT2cp76MFc)PXiHGz~-0MBFa^fq;sNhH3hFgyz z+sCM!fmHC|7*z&G?kDeF3vSf>tR>4W-81rS7TO66t=-I=1e6&QI-Pg)E>QpNpmv&? zLERIGpD4|0->mMwfx0D!F-rf)YEn<`j4-wQ2By!zyHuGl{w{5u934@_Io@5@ww!?b zONp3d63(B~k(!MtRI3Nkw-FOn*&wPOKT*{| zuf&N)f^sbZBY7)#XB?nwqdx;>4T@&35VzM)GLnyfOFe!g_DZIx^c%6ae~K!AUbRz< z1l4azfy~chjuNBwcC*Hy9On~BKXHqjg4}}a&0TjceqV?-=EdYKYT977MM2Y8@}vRd zwy4d6dF#whs@R8&z|~sdFt4Y}Gzu1dMoFwhf9 z=-cYybR!0$0t zCk6&TW*FFeZ379^e*x(<10TPwhWcV4AYO(0V!#$}7-+q=fqD!qBAsTyRHRmmff0|Z zGBM!)xM5&e(KV|O@eVHskxnx(rbzuH27(flZ3qU2Cm05%U)w-A29}aeGcdbI%^QM& zkSA1*7zljAFpzm|1AZkOd6G^uu&zj*z<^iilb!naiTK%$tIh4U;DJwdI)9Xb@Nq9o z@}@wm{#uHx2Zh_Yad}$qTW#*u$gNKs7f(AyoPWC0Ia&H?*jBaK=El>u*@neCw)V76 zAB!P7*fh-1Eyf_X%rPvcu*Lj#j$v`}RyA@c7CnDwSX^;!i`7`M|6aFfM?U>~!=eL= z|Mz>t;wM|xUa@FRGAw>^ZHqCbOs-_zVhVC|vSBfoCiptpusE_p8zuf4cU^Vzqi0W)tSCvSBPHZxg|$-DLS&vG% z$X?4Dg3|T}b;_SL`5wM`a5HP$gU_pA;f&{1v@rE~l`KqtUgZdv@=XQdNfU5eG4 z!>Q%Wa!%UR`QdIisek}C5Az3@2_U*uU4N_Ft?t!CM=vlon0Azh7sz#- zZuR@4e0e}yG2J7Oi@I|ppln~D?Y*oS$i=$sUWmMfMB3(~8YLG+ZUNowl0$7B;WpIW zfhd+%FOpr&E{?)bw9|kH6v?3-j3%I@FHm*AcH`h4nKEPxY%N4?GRmt)K28ShF_s#?7FiAk2*1mXwrll}lM;VY3p z;PU{t(&k5AQ1Qa%7gW0NYrZ!iJjKuTh4p+@LDl)hI$x?B1TBq~43kLn)QPXb6 zUN*87?RRzMFrK-wc6ZFnnYPd0|q_-O>@3UYNrMVGOqDGFy z=AvaPdL*r~V3|=^YKhdDPjdW)bJOL<@{Sz3+_-`9tK?n}MPCF^!cgvB&Hzp@6t4}k z%u=0E%Z)m|Rw7M3%$$P35K2oTLaW+aMro~N^ zr5K8o=97zuBUTvIuIyE953e+WwJJB1NXxT1B&}_g;n|>VYV)0V7Pm@O-Rb7ai)ymziyM~QaoU*=E{X>?YJ)m#bGF;b5Z)Q)?1@ziF#UFqGUOhs?8)`d)oKU zZE9Yq+c1}v>iRKUw=R-*yBZ_npucfntbT(yU_8~R&NXs;qvaT4O(4GYb(Is!50f&G z`>XrLa^qfz=(9%E5j>!pd?VHv`L5rtUK&GTEhlBS*}-+;-Koco56 z_Sf6RE6!f_QE;AChI=mZ$vnM#tmP=pd3q`JZ>m z?|(|?yt`eU7)R;60^Ko=QctZ@w(-!uPK86SvQ-1kgZa8IUy8!u{-;R+toMYDQD1n<@qbx&|l9L`6~`kd_^8QU=QgBt~dPp z$SBT^#j)#+;v6UuJ;k~C?PnPf-LF56gm&lse7pMTSCkdIUfCv47EgY}!`KOwHB&F^ z0O_Z9r~le0s}*zejk2uX|KQQudi_cpg1nXpxzf7Dpp^D03xa2=Z_#&KMW0OFr*I>}2|cOTH0=$8A(iQts@Hssj$)d=>i{ zq|5EDL?O!Bs~Fouc-BUhd^g5&a0ZV3xQ{W-nOY9i`h;uF5WX8{BwuA8`;sq#`0ahd zCEr5A*Kbt85tO@Tqly-$;fF9CKZHs2kdR8&MX)Wze{JozCj3jw%z>NDJp=gzBD7_; z5TzDH-(MRs+CJKjQbde)Am~8ZCW^c(=2s^*&=(791WLJ9+;Hn0WIO#k5f@IU){yWAjzny||E_FB?*Suk`#*=XP4u61zjqdz5QhLOl;e z^1F{aQOuiIP~`rp5XEPcer2sj_9a3)#I{pa|4kgYh@F%jYI7t7P1&TXA}J_xlWG#K z-K098S2+onNy3aB>ZKW61ad#(B3hum8!qF^ z-mL1N*U`+qiF5u{V`5$(cc>h!NK;ojIypPm9mDpWT;yvyA6GGA#rQB80Gku z_H2@kcMB^JP_JXmYV2$yUUP3mse0*t${4HOqzpGpgA9uIL>z$_ zs6Ig)Fd27!iwv)Rt9iu*mH5IU<$1pxypdox3A85Q6B5%V(**SdXl3x-2O5_riR6eY zHk!bJG6O|x0>4jq_FrtgI)nQYi;cpzma3nyW!_(`Y!7h6+DL>}NX515UyiX0-Nn?S zv`R7Z1f&(y#OQ;kx>W6a05@&#bn0JLt}oSoDCZV&)MUC_T^~goBp}|V#)z1Kn5uq* zIG_;M^SX02YPp8Fyr<_lO|s2;4$G%JJJNHEzzb`MQO;?-9QPRFZ!cjwbN6gbLAky} z6-;4UnTwoIqN6p?VuWV&IS zQA7qxr%^;9a@01xh-zF;+GaTC@veF)iXvXyrV64k{Q`-E`?jej=yFnxiKaE?aNRtu zek0;a#FOgzXt!J4$`Pk4muZC7BhFN}h}f!y-ZzZ|gO0P^(G!eEJfJ6-sf9`c_YA~Q zJM^1<_d=BMD6%=SR%j00cSleeOZ8xE80x_h33sNH`RM|D+ zg4Bo_5D_85Qba(|fS6FCSrMg(2#5|%?&5#1(gdWP3nZ|FND~#*tB64tY>0q>ib#?F zojLQ(CM);mc{VfeJKyv<-+-#G_`+aGTufqVN~E3f182)M3muL@spVp00LoCC}2 zt>`GWH&&^s-ZFq906Ez&Q9v#ODgd6NkZTIakc=;JXQPm81!PDbz%&XeQb2|*1DKAG z1o4Qf1T_M}&!6vud7A%zY(M4VEhT~*YH>lq<*nfdg?!E$ep;riC_F>r17TX6#qAa2h!e6`>nu{g|DV`3^Wc94{ag5daExc!k7 z+=M)o^#M`MNvp&I%+#0?2*1EP_lZe=paR|i!UrN;D?av+-cY%Q@M8!cStZ z@fGfSYoR#B9bx7w{#7m>ip0OG9_x-hjv)lFqXM_$IRMQ8m?E6W`qrSL-s!4clnVXktqMCT`@J{h+}rEPqbFmx z0-^?PQFW+x61Va#RvnsKeo=?me(;xX;qm<;oUv7P`!bLo0Qpo)l+n9Y_4K2w`PBZn zwM+vcCp=?U^AGxCcR`fYFcmpdl64cFBjTS*Di2cEhzzdg=?^2VDgRc{@IE4$)>=qi zCi3!XF{45+Z{xEcMwMr7wZ{`1nVFkzS^7hatXja}i&-0})@iV-a7tPa?i>2Oz%U;|BsGy-eZu zLww z_==Cu14eq8!tIFo!flNB!p%Z_;i5dNh1(VJh1(MG6(9d7Fw)BuZYJUjw+`Y9w*le{ z*NgbVeHihDI}P!LTfU9Q4~BaU@r8Q{@dw8=zOC{0>++QgVYMY+;Un)a6{ij3`R!^A za1CHCfK)sgKZ`9GH3GAL!W<0AjK&a)uDym|9gOkt>voz@Rxltjci`tN2HZ;7WeuR>tRJU{QXLB6|RSJ z$OGtJqBiN_KUKm#Ls8PRC4AseaRruIPc>rBAg~>`O+aGR&f(Nmsr7)PIsEM)BUezp z0o(xA*=T?+rSfSQV>3Yg!2Fj{)cc8!sn3iGJtviL%0Ot zZvk`tw2{+0E`1*ec7a{yNULS)eW*NNaWdFsKz+1te z2OC!buSiX<%C7++Yq_dt85eoI2{H9zvM-`=R=hlT*IDt3;9X1cmI1t>;>DBzEV8n! zfOmlv^%}f>D{98Cm?KiuY=BV|H4k8n6}1T75mwY?@bGAZ&In;z>8T1e{-uqCGe)nyy7b0t&K8>os!sV0F6p5 zHIZ=%>qG<$5;LuA0E}RDatdIW0Ai!02p}I|DGpA@ECU!}rCS2;VDQ#H3qVf*QP!Ai z06Dxf8m3XkABHgm*Y6Ge$ z+>NDtig1sY@+EL>=VYVDHoT05X(>M@f-aWwE5f~uYL12b7m^Te=1x9PxcztXDZ-t$ zlP?kOx}AKxaF6Ze$AlZZi(e7$`JFs%oW*;DTaNg`h5QuZE<$|aBAxBR9gFzFMfz8S z>qY!0;UZs;aBCyJa8aHq!o}KciEyu%^6kRyhWJlnVpXv7y7gY!5o>tDQ@HIQ!_24f zKz|Ve9urz=VuV(z^j4UXtA_C(KL2TP#lgF0r?n>#cMYHvKyH_1T*LcZRY*)Wze&iRs=A|D$+7|r+^pbZd@XGl%mRDs&qE80^v(`@&)5@PT)`U%6O~??%Q?!#%rR{ zrbjf|tgtHY{TCh;>{8o@V*%a1)|EJms7Rc=dM67*`C-Uwd=;i)(a+iEPpTnJC9EXJRr~241D#F_bJ3U$%eNv@p%AUExrie z9O9P&VAs9?8#X1V?32OkH)h$8<;pck59S6R@2=;!v6-o-A(vv3}1V<__{i4@szJ2TE&Tgr{ItNa!vTnXED7IWq>GldfZre2k%B- zeTlxB12D(p*TTDi_(K3ei$4SJUcrmLtp@AB@2u*de=a)ODcbck<@kL#M>}g%hPPJX zF?Po?Rh|ps(CD~jNXK8MR^lZ9?LWQBcZk7X0WcCFV(_=R1~38%)DqRC9a1&(5*5xs z*#;ndh^TPh(27<^6@6%zB>CfNWdA=Ci@xQEf#wied_a=fR5L`wnUO^cln7%JUP_);zSbX_+kD9b( z#Nm^z1hN4(637GC0I*cdFp2;~964WD1~BZCt6UynC_#gUE?vLz4pNS8x{gns8dJCJ zkUy^9C=e>9!@BT-$l6+wFLDwirW%T|?y`F1A6UmfKt#s=)J zckCXX1Gnu!)MuJVcx|PGqn_1o^$-bHAmPpBILa;LcC6z|i(=~LIQL$^aYPjHgGv$E zA?rQ@UNlT|d^B+z zQ;HPn>SWev76odK@DX3~lPC~dcMM;;M7keUVD}RR)ACUV)Y!$?!~s7PAsas*lm-?yz|h)y??lV<5~;~*mylpFUBId4nI+hY5H2k9btJ7 z!Mnloo`Lt8<*il?Um@n5{V^#H*_(h1!>~7CNWx4JIu@|`x$8H3bFCZ;a}Yl1oP4C` zT#G7Z{;o{QR;=&F17Aef=6*l+Z2iCU*?!Da0tjA?WTTsH2)C;BB9#TAak=APHo`_x5oU%e4BXZsOVeFkQoz-Nxc18E0$Zio%xZ{m{!GE z30-9}Pb;@rxpS4fP`OK#`w!**Q@NXzyIr|KF8w}o=sD%Y*t$c!kQGX5_()9^+l_+KNKy>`VEuC@8h-A}~+ z7?YT5L#(tKn>?5m8ee%d@eF?J_&G@WP( z+|4_G7h~ce$mmJ2>us@S>g3o5n9Vg~^we1V;>^)g?RR%)p_lpU-S+>mzzp;GGW*)< z?0mV|>ae|zja@D`dmRxT<9&1ZC-#q>Eby|~?pymWiOe^fH~QV)o*gbX^M1E~g~<=^ z_=mj%3zeJsf7tzL%>KT4G10N3Aq(x`>pM7-?{n=D%PJUuv3WBw{l$(vu0xw6%3fme z8`sdvoc%xg7`5pl=UPyu*>4ny-Y`v-3;ijBY(w zKor6LJ^XG2XU|l@S))!Q8n*T9@x9fJZaEjM4Cd(!J_E6y{XRS1XyHi5tp_PA+Qa7| zh2ntDAny-mv}o*XBr{m4=#A{@QR9pjO|wtRVr@|LCYH#U;fUI;G47YZWg0h=c#p>I zB`(*vv&8QgYvMjh?A7=YiT7#zn8f=v9xw3$ja&R?Ljj&um-{BxS>oq3en{eCg-_aA zh@Hmed4{oxO_V{WUa*GLCbs@3k(9mM>a|U*Ok#(||B*Oe<5LnRXna-TYUTV!N5^f& z#&k+|*=dokU*U)C)xWkO_dD?45j9h@DUux^*?BtdbBBf0VO`zX5+Bw04T(bODG4ryEqSGyxBs9JP08~F~bQ;N)bcRI3cw|G^rzMEg9Wxw6+W`fA64E7V*DxEJa>z!j9wsNKn7*6tKv zaZ0Gmi;WX3by=;c@IYNQZkF&y0t>F;JKH5lE%|%9gs*JOx0Zj>0R+^frzP&J@m~^mQTVWJB$Rif88}4B>Y^1L zQ9b`9W8Mp5^E-mrpp$-I;`cQET;h!y|0wY$jW0{Qc`yG*--O$WeOAIqm#-A*h7|5^ z|K(qzB@^Ek>?zIuA=y@vJ+I@AUnHa^={%m5*st*{iDzouWQ>rXw^u1G&e}?1krudH z;(*5YO1x6zp+iLimvsT2lK7g&&q{2(P3`@%#L*frme~HbQd*q7BZ+ESV2i{~jrT}g zTjL`V*U|VJi8C}lE3r%Cs}eWVIDVL@K+|GPWJsd9#+edlY5X&e-Z`S$Y5b?e9W{=_ zfjUQ2w#La4do?yNnxJh|3oc^cyegH}&VC7%l-6=~yu6aqite8fR$9y1_|}n1YdPC7 zBvNTDXR+X_Dy`*g$b*%X);$j=gq7BE<{KQTw3f5&k47r3<*YV1t+X~joM3K#xZ0CH z3Z>QX?&_A(>f{w3D6IjVt8d3rX$!BNQ(Y>pdvmH|YUkojdRLcIyCJ=+m!%eOQ|+;U zHI!HEc8#+n-l1`}#3dT{l(#ZkL8u~(`9<6UdWE?~zb zwrPA$Vy5t6TYse@7O?74McCI<%zw%&+}LL+s|9R}#5RrhO3Z-ki8;dp_Jt&(w7@Be zqxbQ<9vKp8AxHmM9&YW7FT-YVG*I_^-Z0`}|bj+6MX#*-yJ zs&R_E;zOh&7O>kSaY_rclK8yFcS?L&<393=`?oH@5Q$4P9w%{74rzgZNqku2O%i{m@otHaYW%Up6&fFxIHd8<5`U-h6^Tz3YoeM|31>7;llZ*G zUrCklo5nv$d|Bf^B)+C`j8qZE1{yb(iuku`!PiJdz zD;}CSi3JXre-2Ijevnv!hDsAhM6u95-hFpsZx-0c7fN?OKPg<-ex6kZ*SDWPC*06} z^H5ph;7sN}VKzUTSPM&K)B8)}cpIv<@jP7SJ8U+(nCP>yz$fO6UlX5XsNtpG6JKY6 zBm9+1i3^$ULw?&Ia6_N+ZGR*#M(~4|6K6C3$L2Se6KmLPhI#JK#CvTlbkMx>YGRI! z`9C#hT!RN$eR4hVPLWlO8&cx4ErXI83x1j{=~fZ*EtXUhF^`#>qLOOZSnw-zPjpf} zcq+_qW0IQQ#sY`T>dlglF&6yD{OR_j>Cr57*nBE0>7b~Hr)|=%<}7%eUmcS46mogO zm(=F%#h+ZIgJj#ve+&#pDlMN~+U0@IJ}e%0;|folb3u`)J%m;=UStBz{oi z`y}qSk8it_bX##yr~8ZKy?d>E^6ZIa%=nz$iT{{cYBpW6d6Lal?C0!}O+u=U&f_tO zT^f&uJ~g#NHj?P51$s#A)%Zb)dunWq6A28^1*j=;p2qbg_G#Qg;t?8W zOFU|?(%YZ2dnGYe3k;MvU*pjdPtGmAB`UlMaP z{zBq;8vpXDmCN#5&_2|*dNtN{Wan`fg z7G96myOI>v+sD~=*bS<>9zD*6k6{t((c^60XcnQjkFzZgvG98I(W^;ey?vb7AzyVp zdYla##Uj?D$63kaNQ2g+A6-qF@zK><=0{g+Kj9E6`p%eSOGQ5vD?CuqPsJsF8|9!) z#uPp%A$f#jw%T({=KB+p+sCJjx5oP`6L?&;m#78Z98Y?NPWn?U~eSFMju=zf`)SlTI3TlgO-27U`Pk63bSIIu6+(p-;3|oNB z{~6B!OKc+*yWvsZs!np#+!C9J!{+x}#vYr3bjoe3mBb8IsC?^`JB|I^D&EN0siNR1 za)4btg=F{JHYkzm{GB?<%?9na`7s+rs;{zNUq!0>Rg~NrtXxSZ_^c|uz(yMx2bKKT z7uc9E8YMCqaT*z%vei)HS^W0Yf%WOy@ z@T|a+_y~;~HGf0#3vB3w$Bm3Mb_Kad&Hs1tG}e0(N|w$<^GD5J+ZfEo$ zy`su3??&?<(vq8kv4(o{pX!S=cN#tU~GGheG9b=WfWDL(w zM^{EA3qLM4&6g~(*KP>C44Qw9>5 zTuEY|knl4@d~OwgW5@F88OcrS`YVY9MPX;Ku}b9VSbhK^V8S)d6dgF19aSP-dG)%< z&1`ecJL)Enie;|Ge8p|aa_V*Twq$Hs1sn4%jX+?_>P(~L%h8V2>Y{GK&t@ifa_msh zWwyILIo_ckK0I#rXqW7bc8pRFBVzfyj>+TVUsCY;L^IBvJUq$~`;1kadgjyF$*W^p zcO7S8dQ{c0MYLh--<=t+vPEx285s*@m$Ug}UuFG|)BrZ`?~>e##glw~KA+JwdCp*$ zdakgR6)eO^afq>nt$o*l$7JKJWkusb$NPZ4Rl>)2 zOHNMhsDj^R<3?b3I=}kf+NL|m|IsbEE%TP}&$=ZyWPu!hrCV|%Hm`)&?+!Ou!g~tW zDCJMVEq0bt=6CpO8EL5#bL0k{OViDv@zT;1ou%nL#h}v_?bY=EEdiaO=v++?egkw} zMf((u2Oo!Ui*rPE&KW7&Wj(WfC~y~zt4n;3#;Fo_)wq$w-8613ad(aHlDLP)y(I3b z@k7Ou=%tBGyF~$f4qU?cThI1MJXGVaBp#;lQQP*5+&Z4)WY)G1$) zc$UTqa(|)0Y)xcH;$@9nNIWNpx9ypX$)Qg8kmS8CE2CID-(*8Ux8Xk~hnoF|WWSJX zu431-O<3wdiVok8oqDFHxc1k=?b^eps>S-sJG)a4UPiUF5#sR@Qc8{eVjQ zeqZ!X4o?oZvZMGyY}Lu(R@Mew)rS>Z*_`3weLvpwzGR>6(;2JoOEy>CcgumZVtzRB z&J=5YI5%5(Fh5**SBithyOchDjIWGkoq$-LU|l>3WY-)m_o&c56!y1$La-%H$9;|mhE)A+i??KO7n67f4| zoGkGj8rPS&qsA=+ZX4y+#LM!M_BF9C2+qWX?uZ(y@g|9fHR07pq}1t~-;Cr&uN88W zbUITco~-f95>L^1nZ#2yeplk6dwIc#l-rv6b-KOZ73mt8RzCgh|6DB|L+r(WEO9dV z?hz@qi=8Tzv&L@<-m6n>BXLiSJ4u|YamABDet^cOB=%|io5Z6uHl7ml`5NDXVUJzg zI=TQ21re2@aT|$U8ha&fsPX+0H`O>#;^rEUkvL1^NfNiy_$Ajtmq(}IR|mgT^X1WLqvpiD3MI;n*Uj`E_I->Ghe-DXi&We%E=j?J`KbL!0WAN@EAGu)AZUtRp_;dd*3f~${T1N?5ouOWVo@N0};6a1Ru z*9^Z*{BFmuIesnhYl&Yg{Ic+Cjb9scxTEb`$9vFvd%Rj`Go#Q>{)u7EN&Z{Zikle) zPV!?_&V#kHQhU(yyp9$sw39zQ%sI(FM=j4qV&s2if|Z#0{*P?~tOqUVU)7?8cJeO> zb58O*)O=qgNq%&aRX*yi1T9o(Cx4AF=Olj%%@sJwk4*#aZIG4LU4^yMGKF^Xw+VAj z@~_fdfs_1LtH^?xFaF#%KPKf{waXyNPJV1eSY@XjiSM;gp`HAv!km-*8ESnm5+gsh zB&@_}Z=#+SDzuZoewcHTe}v`=oaD#8hLsp?WjwBh3hm?{6Xu-cU$40WC;72&VI@Wz z81HGJLOc04hdC$ttEn9XQBCq!_o>8av!bRJDzuY7Da<*^-%4`@PV!?r!zvl=YqZuv zg?93{3v*8LPf@!HqGaTsI$R}2`xDPm-JNf&C zIVbsdXs*CXer#J2&YXr_e+fK@?$T=N{lu|Ue`i}cJeO@b58Q#&|HC&{Ma_J5~KYSo7w>p8kzjjVa`eZCp1^! zBtJG-ti))iWtlYd>9bCSQY+Qbn#lfTJCt3}L5u4cL7`H^02f<5RUYBMd5F`)d-!<>`+ zBQ;mxB>&@-?&O%(uIL`LoitjD7TU=_Hq1H6AEQ<&qNwD@mXqu}^Z1@DFEhv2Y3H}~ zpna$~9ih-p{`fHGB!6Aa6*$RX4+)13woNn7t!i6rGtX{p>y7C_8(Q6TcNN;n-!sfP z$v;p}3JRR$$L7`>HCm^coj%NZA*u&$b>(TvLOc0~ggGbqpVC}`ll+*LSZ(mg`)z|Y z&FgozMoT<;cWb|mmv+Ixc=jIQ?bWUIT60^itWY#hP0RA(>24O9ik67=brTfY$=@){ zImtgqbC`uF|0}8wdeHjvRV{@1hw?87b58Q#sg{YNL&=Y|CqLW~SC9(3OUo46$?pww zPV(QUxdJEou?+p&6=dQH3Z?d-73u>zTA`i%eZ!oS`~%erRuq-|Sk+eUNhOh|CDD`0 zKP1dK$^Vq*(38raKUwwUktf>i--(H|xiqu=4>4&p@uWE;xp=g*G^>3uZQ;* z@+Z$&>S>Q(2mJ0ZmwGxL#Quaia%so1$6gEBqRpl@w+|2QkMP;i?v@TRQ*iO!(e68v zyy}>;cS@8j=)SEyKE~ZL-rm|;|JqygE-~&7@rTD-`0#i>P2k@CZc@ItpO*<-XOp$< z3abYe3!JMktRK1vJV4&JN+ zT*s#;Q>1JQ?r^y8V0eE+7YBlE7x^^dem|O*3HSYOoW;YPa-DY(uHoR*gzFn+mc_f@ z5a+qZS92#vISsGyq!d%T$;8#aC?mJ^^0f_W&#HW~LG4ZQJ?Uu%HE&hPbiABkC?w6f)!p$nhW=Yp!#z07zQ^hd zo01mRS~f$Jk0;f1w`3RxUEmheA!U;LUdlNQIzCT4tb&D^sX@o+iN6IN!P9Yi;#(>{ z^s;qYSDxOa4+f{{U3BDK^)6snjSg9h= z5q{$LD;`JrWfH`nS3I5QCq4xlLsX1T_7mS(@#2KP+-9eM$5jB?J5UYgDxT~fh~KDq zvVS1HLh)n=L40hqRiJ9>lsWkRvL@|hfD>;?yGLTb{BIZ!D?XqGk+h#h*#9ZsH`|hb zLCL2>zlgzT@Xkr@R>fq;LG?STg8eER;vKP8G_t%PzNO;H_Ja6b zC^jfyy$T4ZjES#MJlRSR?})Psv@$}zt>Vdag5(D(o=hk#9)0_~3Lskwitvu&$)>h_F8*!fX|RY%eH6x#GzNgZT4`CtD2SJ2cm?K882Ex$t8QzFz!*ji@#Uf-O855PtoL!4{^~OUVa2(sbnNT!K9MAaN8}o*=A5MDLu@@MR3E2yrquARoIkY5W!@aL9t1rW%2rH2qwD> z3MK`Hxv&T(vkVF*b>-#HBRI{c@^-2IAnoLTn{P~Ww;Vc8g;P6kQ`#$__(*-_d&g?W zbt=6LN{_i#T0AK*nyul6nhyQuU1bGF>amdGBlVbnwI%Tw{WYa+rNYRmP2l1rn$i{~ zn2@476~U9DJ0HPIMJE*6<%j^9Ig&{U)qoTonU)YwicXlAh(F><(UGMI@ucXYA>X2M z1k!Z=E!IeTK_+JyG!u03&h>Enw)64zFmlLH#jm7Dt&zbBwF{{=GFc&>)EXJB5Kn52 zY)R-UCatDyO8!0}B;yi_KodeTG9jMy+xN3Qha24V)2zGgk*$55l9u1 zF$(cCAta*|;z>7>aSHJ?AtWOe;`M~^R74GELP$m{6oJ$y8Ltpe6GAd#A)fRp8M6>i z6GCCsB1aAdkcK7e7UF3_h>4%eodTnV11>BjayMAxi+Y?CtWWWg3fA?WB_F9^LyC`7 zu)&R%JgtUl=4fn^JTI*8PD~A0z=%|{UcRC}ri-D?e0zP|)ajfzT|A^#$=rZ=QmbTk zKs?PKwB;bd5+cP+1{lPXVkScj;z==+K?d=pn8`51 z;xWoeF_VP`MIgmYmKwy9VkV0X;z==+;Rf-fn91mYMulF|ll21y&EQP|Zj&lL-m&q?pN+gm_ZS z{le+jkXb(r$6BL|ZwSrnJzDV0*<(j7kaV^Eujl}nbRiGD0KE{$al>7|EhnH$Y8)5zy{M?E* zT?Nw$&&%f{xL3fsH1q=S9#smzY8IGN%D=6OcO9~l8?KVOu6QrMfaHpOhppgYDtK0+ zYPC-+ew5<>qj>KJ7LPZ}%fIGm4bcdJBNqRi;%6$}_o2lfRs7eA4}B{6V&jYo=!E8z zz5Ji55pW1u^8Syj@~0JVs0BM?S*7=xl^*5uu;N``T6~3)-=KJdk4JLFp<`AswU-ZzC{euNR~G++inf#Z z3X4Cdco+7rW&5gblyAI8*eJyZKeFVhxa$=kvih})K>?RkfJ@bXh|1ueI;ud&t%Pu{ zQvU5$yqEWC>TcDH497?t(DIH9zx*n>qkMc*cZ!3iJw5quz*I8vqS!Rc8Ne?fxR?yC z=*CG)H8Q*+p5`8B6yn9kUbX3)0{@xWrZhGw8=#VS`>liG-RknJk4py zV2gN~(~#j7@ieEIUZtQ=v$O)7StS7P=SGW(?k9sTN{Hq(WY|SK&1uNMi+GyTkf9gx za!zv}G9ZgD3ZOX+S$+{ubDE$ks7v)bEh9sF`6rp~mO1BDIQ2Nqa*Tae*G0~9f{I_K z(xYXhe?LAWRYmz_faG_#-+^~BT6f=<>GPcsWTVNX0wEXdw~DnJtp zVRs;BA{0O~3$i~To@N$ghd?~dEas>R5MPvP^?g9`^VHa*8@Q`+SIN9!So!OvU{D3n z9h~FN&Wsuc9a#`9ApZ8LJ3d)fP>r?nRE80LDIMM$BLfMNcf_LpLJg3O1O?D4lB^_% z*ZNf*&8MrER*_`HK)hDC5%OB$k_`bx&>A-)g4VbZywbEt6>e3&*w7lcYJj0NZUnD2ZUj%ONV1}!ifM%#A#W+%wwN)f0GApp zTH`7n^E&xA6Qf!T#zA~V7VfR*RWJ<=t%&P)mEwO>#ESo$B5q*GM=m#gw^@ATax-A@ z_vneLp2s${B1A4dLyCV<)q{5U{EhgO*0=*?se|!!_3Ar-G9Msb-vJ_ceFuo(=?*}4 z5|j?z0hGPO-|qlqI6)EU4nPJJ#M2#s3@M1GI{+C}5KngiGOV!pN_POVu%HNZ2OvWW z;^_`RCJQtK=ng=p3&hhMfJ_*O*LMK2WuO4M1CUJv@pK0u+Xmw44nQ^z#M2#sEIg||o%myyDXolH$g-Vtl*b-S`)AfEI(8J`eOdR^IsgeR_~*vU8~T4hX% zos2|?C&f<2BE*wkC!-PKNw1Ufh{dB%NU@U@2}K~qPSzyElVT^M65>g(lW__0q}R#F zgm|gf#baTzHlYAg>|}L9JSldvJ|Uj;I$5C*PkNoKQHUqKE{sy-n4|zw>|~unJSldv zQX!sZ(tg$VF4bkE*8_?tz5Xugb#;CX>r9!yF;hLE*$^>^NYe)uAF1j6w|A9UMrwL* zbBmAE^sW{bAJ+5_Tcg*f0_Lk4kft|US`i{OeL(S%n%=9f!s&c`4fn0ZpUUZ3lF?J0 zKU1k2CnT@WK@n}7l{`*4sk3Ah5S1o;wf}aWspxe-Y@Aa@Q=Jp7vPR1 zd_os@cbFma?ZDVk{;3NdN#vTT_qdB;8n~1%=?XF5Jo8{z_j5KDu=AYm$RM*9(12e^)0lPgS0u9HJX~Zb3bgEk2D|YhX!L=<>s)5 zL^<*U=9T^;KfJP;4RD`B`WFVce_^3g^W-CFLcFxM^&phXb-2r8V3d0o3k3M=(dfzzXvWd#2xF%?WsG}d6#EE$HV)~{EawfLL_pvN ze)35SF&Bo$Q*eD(O_neFemj5Ag{M(uel4E?+kzIHI&P{i=TcCmuKLNxnLnOWTAz4wWYgd8$-Q@lm^4eEPQVR z>C#c*hN^9U0bd_&o4?B(#zm)vc9O*6!th3cX{%ic=n;0yi{e0tccXwM|^Uvkt zV!#`p(*j7gDL%m#K!rxd@C5-hbVvhzjR@9--2X4IN$vp9a zs3>0RllCD}z`HccJ``j4Admk@YPI)1Lf5+Rj<=6MUuHb>WB0iYH<^1FkBHt*~m8|EqcWKccUL zSIqb?gxYZNSx4Q4_!@%kOK6WQe&I{BZ0IL*<1uk-48btF0_F7bRTb#^{X5L~g#ew;~rW zZ~eWyRhy6+|MWyDJC@1bGtOJRnxz_HHh6KXd8XW4@V!u>p?&6CKf1TFH1CqCSCA*! zO2K!YPdF`lEsCf8?EV}DyYRD6LH;di8t2PT)qMaer~au2~pvf>g3m}s*<&;v8~n4ZhH&ocin{PdrQmA{V!xF-(x0S6FodH$cJ4Q$(oM8P-qr-<8|hF8wSmfPxrLoQY+b3D*UxkR=)(#@dXHHzVG?5 zSPv>w%KOH73ZgGqLraEXC4bM(ir<{LM12ql>%waV>9c*lWxw*s%QFPOaM9(f* zf)7pdV9pd=VUDTg5k2r1PfJE6L)WcJ^jDSG_?p%2m&^Gugfss?_=04#kztO$#Upeg zZgVNfG4KZ;R>w1#&3(o!tK-3yI>79l=7Ab^ne)@(vfwY~$qZ4H&=oVSo(Fvye1(s> z741d_a?h$PeH*QI3!UNzZ}k*l=GxgMQt+1W1@%#>!*<@F0opVFO>;~GkDQ%MZs@_C zYGOHG(g3VuHl9{dcxxt4>wxmO_^J+`S24|U-yu37znpjJh>AM-wvI^6 zf6+YMQ4}k*m|t{b{QCBpOFW*hL0sTdvN0kaw8Ig%lEpQmqyp}_ zmnU^Xeg(AZCyn*e0$8YZl1m9*ni-A^r9K}@$Ef4gWCjD@#J|J zq#V~wq>Bru%(~^%b=X4kcuYKp=kye#_Xm7r9vwXi)7V~~x6=Xo65LaA--oSw$&Az?GzzF@w-?|SY!NqO&qb7m<=CS)d zm;t1!v^AF!UuI44Dz%T z`fQNr7v}qpcgYh2J|ABr7UO%bc^Wt>?fmanhf#;F8f!Idu*}Ty;aWp+pC9VMOvPM0 v)bkB`=n9`Q90_eG=Vimu9-%Vx;&9J%(Khdl@uNKW-HBheIeye#2WI_0>Cfyn diff --git a/APIG/client/commander.cpp b/APIG/client/commander.cpp index 0cfc0c7..b32cb57 100644 --- a/APIG/client/commander.cpp +++ b/APIG/client/commander.cpp @@ -330,7 +330,7 @@ void mdCommander::say(char *what) void mdCommander::greet() { const char *title="AusReg Cliever Commander", - *warn="NB: this program is meant to be powerful and fast, not safe or user friendly", + *warn="NB: this program is meant to be powerful, reliable, and fast, not safe or user friendly", *prompt="Enter ? or command"; sprintf(theBanner,banner,thisConfig->shellProcess,thisConfig->daemonProcess); @@ -404,6 +404,13 @@ void mdCommander::eppMainMenu() { mvprintw(16,50," n = 1 : epp-1.0.xsd 2: domain-1-0.xsd 3: contact-1.0.xsd"); mvprintw(17,50," 4: registrant-1.0.xsd 5: host-1-0.xsd 6: kv-1.0.xsd"); + mvprintw(18,50," 7: launch-1.0.xsd 8: mark-1-0.xsd 9: signedMark-1.0.xsd"); + + mvprintw(20,70,"Commands are actually executed by the AC master daemon using,"); + mvprintw(21,70,"either the standard defined transactions or specific boost "); + mvprintw(22,70,"FSM implementations (AC BRE) with proprietary biz rules"); + mvprintw(23,70,"so use the mlog command to track execution,"); + say((char *)"Action sequence or ? to exit"); } diff --git a/APIG/include/mdCommander.h b/APIG/include/mdCommander.h index f346208..632b796 100644 --- a/APIG/include/mdCommander.h +++ b/APIG/include/mdCommander.h @@ -2,6 +2,7 @@ #define MD_CHARGUI #define MAX_CMDS 20 +#define MAX_FSM 20 typedef struct { @@ -13,15 +14,17 @@ typedef struct { - void *schema; - char *xml; // For the ad-hoc write, the internals store uses a convention + void *schema[9]; + char *xml; // For the ad-hoc write, the internals store uses a convention } eppXML; typedef struct { - bool hasXML:1; - bool reserved:7; + bool hasXML:1; + bool reserved:7; + void bre[MAX_FSM]; + char *fsm[MAX_FSM]; // by which known at MD } eppState; @@ -36,7 +39,7 @@ class mdCommander { eppXML xmlIO[9]; eppState state[MAX_CMDS]; char wwork[1024]; - char* schemaFileNames[6]; + char* schemaFileNames[9]; public: @@ -62,6 +65,21 @@ class mdCommander { schemaFileNames[3]="registrant-1.0.xsd"; schemaFileNames[4]="host-1.0.xsd"; schemaFileNames[5]="kv-1.0.xsd"; + schemaFileNames[6]="launch-1.0.xsd"; + schemaFileNames[7]="mark-1.0.xsd"; + schemaFileNames[8]="signedMark-1.0.xsd"; + + state[0].fsm[0] = "Check" ; + state[0].fsm[1] = "Check (LPE claims)" ; + state[1].fsm[0] = "Info" ; + state[2].fsm[0] = "Transfer Query" ; + state[3].fsm[0] = "Poll" ; + state[4].fsm[0] = "Create "; + state[4].fsm[1] = "Create (LPE) "; + state[5].fsm[0] = "Renew" ; + state[6].fsm[0] = "Update"; + state[7].fsm[0] = "Delete"; + state[8].fsm[0] = "Transfer"; } ~mdCommander() {} diff --git a/AusRegCliever/Makefile b/AusRegCliever/Makefile index 3bbf17c..95cdfcd 100644 --- a/AusRegCliever/Makefile +++ b/AusRegCliever/Makefile @@ -63,7 +63,7 @@ endif SLIBS= -L/usr/lib $(BOSTLIB) $(LOG4LIB) $(ARTKLIB) -l boost_system -l boost_thread -l log4cpp -l ACTK1_0 DLIBS= -L/usr/lib $(BOSTLIB) $(LOG4LIB) $(ARTKLIB) -l boost_system -l boost_thread -l log4cpp -SINCL= -I include -I /usr/include/log4cpp $(BOSINCL) +SINCL= -I include -I /usr/include/log4cpp -I /usr/include/jsoncpp $(BOSINCL) CFLAGS= -DCURRENT_DEBUG=1000 -ggdb3 -DARTKENABLED=$(ARTKENABLED) -DAC_MD # diff --git a/AusRegCliever/include/mdJSON.hpp b/AusRegCliever/include/mdJSON.hpp new file mode 100644 index 0000000..32d464a --- /dev/null +++ b/AusRegCliever/include/mdJSON.hpp @@ -0,0 +1,25 @@ +/* + * mdJSON.hpp + * + * Created on: Jan 28, 2014 + * Author: jdaugherty + */ + +#ifndef MDJSON_HPP_ +#define MDJSON_HPP_ + +class mdJSON { +private: + + static bool parsedOK; + std::string script; + +public: + mdJSON(char *fileName); + ~mdJSON(); + bool run(); + bool didParseOK(); +}; + +#endif /* MDJSON_HPP_ */ + diff --git a/AusRegCliever/include/mdcommon.h b/AusRegCliever/include/mdcommon.h index 0cf48c0..a524fbe 100644 --- a/AusRegCliever/include/mdcommon.h +++ b/AusRegCliever/include/mdcommon.h @@ -55,12 +55,16 @@ #ifndef MD_COMMON #define MD_COMMON +#ifndef SANS_BOOST #include +#endif using namespace std; +#ifndef SANS_BOOST using boost::asio::ip::udp; +#endif -#define MAX_SCENARIO 1 // defined by increasing assumption of control from TK +#define MAX_SCENARIO 4 // defined by increasing assumption of control from TK #define MAX_AC 1 #define MAX_CLIENTS 1 #define MAX_CLIEVER 10 @@ -214,8 +218,8 @@ extern const char *clientTypes[N_MDDEV_TYPES]; /* \brief mdProcess * Abstract base class of various subprocesses * - * AC is (potentially) a distributed system with various subprocesses - * spanning the central server, the 'Cliever' middleware component and clients. + * AC is a distributed system with various subprocesses + * spanning the central server, the 'Cliever' and other programs using their interfaces. * Root class for these. * */ @@ -256,6 +260,7 @@ struct { unsigned reserved:30; } mdCnctBool; +#ifndef SANS_BOOST typedef struct MD_CONTROL_BLOCK {int handle; // debug mark @@ -483,6 +488,7 @@ class mdDGChannel }; +#endif // ifndef SANS_BOOST typedef std::map mdErrMsgMap; diff --git a/AusRegCliever/server/masterDaemon.cpp b/AusRegCliever/server/masterDaemon.cpp index c061b20..e4629e4 100644 --- a/AusRegCliever/server/masterDaemon.cpp +++ b/AusRegCliever/server/masterDaemon.cpp @@ -248,9 +248,9 @@ void oteC() { #if (ARTKENABLED > 0) int nthDay; - theseLogs->logNdebug(MAX_DEBUG,0,"OTE Full Access BOJ"); - thisService->artk->doOTEB(); - theseLogs->logNdebug(MAX_DEBUG,0,"OTE Full Access end of Batch"); + theseLogs->logNdebug(MAX_DEBUG,0,"JSON Scripted Directory Monitor/Executor BOJ"); + thisService->artk->doOTEC(); + theseLogs->logNdebug(MAX_DEBUG,0,"JSON Scripted Directory Monitor/Executor EOJ"); #endif } diff --git a/AusRegCliever/server/mdAusReg.cpp b/AusRegCliever/server/mdAusReg.cpp index c88b6b4..1d956c0 100644 --- a/AusRegCliever/server/mdAusReg.cpp +++ b/AusRegCliever/server/mdAusReg.cpp @@ -21,24 +21,27 @@ #include "se/DomainTransferApproveCommand.hpp" #include "se/DomainTransferRequestCommand.hpp" #include "se/DomainTransferResponse.hpp" +#include +#include +#include +#include "mdJSON.hpp"" using namespace std; -//class RRJPI : public PostalInfo { -// public: -// RRJPI(const PostalInfoType *type,const string& name, const string& org, -// const std::vector& street, const string& city, -// const string& state,const string& pc, const string& guo) -// : PostalInfo (type, name, org, street, city, state, pc, guo) { }; -//}; - -char *name1 = "bestever.camera"; // -char *name2 = "yoda.guru"; -char *name3 = "pricey.holdings"; // -char *name4 = "unicycles.bike"; -char *name5 = "greedy.ventures"; // -char *name6 = "shady.ventures"; // -char *name7 = "hemmarhoid.camera"; // +#define EVENT_SIZE ( sizeof (struct inotify_event) ) +#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) ) +//char *name1 = "bestever.camera"; // +//char *name3 = "pricey.holdings"; // +//char *name5 = "greedy.ventures"; // +//char *name6 = "shady.ventures"; // +//char *name7 = "hemmarhoid.camera"; // +//char *name3 = "pricey.holdings"; // +char *name1 = "yoda.guru"; +char *name2 = "unicycles.bike"; +char *name3 = "test-validate.claimsgasix"; +char *name4 = "horny.singles"; +char *name5 = "atmospheric.lighting"; +char *name6 = "mushroomtheory.management"; static TestEnvironment props; @@ -104,282 +107,83 @@ void ausRegEPPTK::doOTEA() theseLogs->logN(2,"General Exception during OTE A (%s).",op.c_str()); } } -void ausRegEPPTK::doOTEB() - { - bool addDomains = false, debug=true, contactCreated = true, doTransfers = true, - transferGainer = false; - int cmd=0; - const char *thatAccount="secura2-ote2", *thisAccount="secura1-ote"; +#include "donutsOTEB.h" +void ausRegEPPTK::doOTEC() { + // This scenario generalizes OTEB so that its operations can be performed + // by json scripting. This is a quick and dirty which can be extended in + // obvious ways and monitors a directory for new or changed files. - string op("newInstance"); - const string claims("claims"), sunrise("sunrise"), - landrush("landrush"); + bool actionableFileEvent,monitoring=true; + int length, i = 0; + int fd; + int wd; + char buffer[BUF_LEN]; - Transaction thisTest; + fd = inotify_init(); - scenario(thisConfig->tkScenario,thisConfig->cfg_path); + if ( fd < 0 ) { + theseLogs->logN(0,"Fatal error, couldn't init inotify."); + return; + } - while(debug) { debug=false; // debugger needs this - try { - Timer::setTime("20140101.010101"); - auto_ptr manager(SessionManagerFactory::newInstance(&props)); - auto_ptr sess(SessionFactory::newInstance(&props)); - op = "startup"; - manager->startup(); - op = "run (keep-alive)"; - manager->run(); + theseLogs->logN(0,"Monitoring ./json for changes."); - sess->open(); + wd = inotify_add_watch( fd, "./json", IN_MODIFY | IN_CREATE | IN_DELETE ); + length = read( fd, buffer, BUF_LEN ); - theseLogs->logN(2,"OTE %s [Hello] (%d).",thisAccount,cmd++); - sess->writeXML(TEST_SE); - sess->read(); - - theseLogs->logN(1,"OTE Basic Access Setup (%d).",cmd++); - - const std::string rrj("renjuan"); - const std::string rrjPW("Ab9dW@rd"); - const std::string rrjEmail("juan@acm.org"); - const std::string rrjName("Ren Ren-Juan"); - const std::string rrjCity("Niagara Falls"); - const std::vector - rrjCrib(1,"2926 2nd Strt"); - const std::string rrjProv("NY"); - const std::string rrjPC("14305"); - const std::string rrjGuo("US"); - const std::string rrjOrg("American Kybernetik"); - - const IntPostalInfo rrjPO(rrjName,rrjOrg, - rrjCrib,rrjCity,rrjProv,rrjPC,rrjGuo); - - ContactCreateCommand oteCommand_0(rrj,rrjPW,&rrjPO,rrjEmail); - ContactCreateResponse oteResponse_0; - - theseLogs->logN(1,"(skip) Create Contact(s)."); - - if (!contactCreated) try { - thisTest = Transaction(&oteCommand_0, &oteResponse_0); - manager->execute(thisTest); - } - catch(const std::exception e) - { - theseLogs->logN(1,"Case %d: %s.",cmd++,e.what()); - } - catch(...) - { - theseLogs->logN(1,"Case %d Failed, harness catch.",cmd++); - } - - theseLogs->logN(1,"Continue OTE Transactions."); - sleep(2); - theseLogs->logN(1,"(%d) Non-LPE check of yoda.guru",cmd++); - - DomainCheckCommand oteCommand_1(name2); - DomainCheckResponse oteResponse_1; - - try { - thisTest = Transaction(&oteCommand_1, &oteResponse_1); - manager->execute(thisTest); - } - catch(...) - { - theseLogs->logN(0,"Case %d Failed, harness catch.",cmd++); - } - - theseLogs->logN(1,"(%d) Perform Claims type Check of unicycles.bike",cmd++); - - DomainCheckCommand oteCommand_2("unicycles.bike"); - LPChkCmdExtension chkE(&claims); - oteCommand_2.appendExtension(chkE); - DomainCheckResponse oteResponse_2; - LPChkRespExtension chkRspE; - oteResponse_2.registerExtension(&chkRspE); - - try { - thisTest = Transaction(&oteCommand_2, &oteResponse_2); - manager->execute(thisTest); - } - catch (EPPException& e) - { const char *eMsg = e.getMessage().c_str(); - const char *opNow = op.c_str(); - theseLogs->logN(2,"EPP Exception during OTE B (%s): %s .",opNow,eMsg); - throw e; - } - catch (...) - { - theseLogs->logN(1,"General Exception OTE B (%s).",op.c_str()); - } - - // Used in all of below - - const std::string pw("Ab9dW@rd"); - const std::string RID("renjuan"); - std::vector tech(1,std::string("renjuan") ); - std::vector admin(1,std::string("renjuan") ); - std::vector billing(1,std::string("renjuan") ); - std::vector ns(1,std::string("ns1.google.com") );; - - - LPCrtCmdExtension crtE1(&sunrise); - - if (addDomains) { - - try { - - if (1) { - - theseLogs->logN(3," (%d) normal create %s in OTE %s.",cmd++, name6, thisAccount); - DomainCreateCommand - oteCommand_3(name6,pw,&RID, &tech, &ns, &admin, &billing); - DomainCreateResponse oteResponse_3; - thisTest = Transaction(&oteCommand_3, &oteResponse_3); - manager->execute(thisTest); - - } if (1) { - - theseLogs->logN(3," (%d) normal create %s in OTE %s.",cmd++, name7, thisAccount); - DomainCreateCommand - oteCommand_3a(name7,pw,&RID, &tech, &ns, &admin, &billing); - DomainCreateResponse oteResponse_3a; - thisTest = Transaction(&oteCommand_3a, &oteResponse_3a); - manager->execute(thisTest); - - } if (0) { - theseLogs->logN(3," (%d) LPE create %s in OTE %s.",cmd++, name5, thisAccount); - DomainCreateCommand - oteCommand_3b(name5,pw,&RID, &tech, &ns, &admin, &billing); - oteCommand_3b.appendExtension(crtE1); - DomainCreateResponse oteResponse_3b; - - thisTest = Transaction(&oteCommand_3b, &oteResponse_3b); - manager->execute(thisTest); - } if (0) { - theseLogs->logN(3," (%d) LPE create %s in OTE %s.",cmd++, name4, thisAccount); - /* DomainCreateCommand - oteCommand_3c(name4,pw,&RID, &tech, &ns, &admin, &billing); - oteCommand_3c.appendExtension(crtE1); - DomainCreateResponse oteResponse_3c; - - thisTest = Transaction(&oteCommand_3c, &oteResponse_3c); - manager->execute(thisTest); */ - } - } - catch (EPPException& e) - { const char *eMsg = e.getMessage().c_str(); - const char *opNow = op.c_str(); - theseLogs->logN(2,"EPP Exception during OTE B (%s): %s .",opNow,eMsg); - throw e; - } - catch (...) - { - theseLogs->logN(1,"General Exception OTE B (%s).",op.c_str()); - } - } - - - if (doTransfers) { - - // const TransferOp *thisTransfer = - // transferGainer ? new TransferOp("request") : new TransferOp("approve") ; - - DomainTransferRequestCommand - oteCommand_4a(name1,rrjPW); - DomainTransferApproveCommand - oteCommand_4b(name1,rrjPW); - DomainTransferResponse oteResponse_4; - - DomainTransferRequestCommand - oteCommand_4c(name7,rrjPW); - DomainTransferApproveCommand - oteCommand_4d(name7,rrjPW); - DomainTransferResponse oteResponse_4a; - - try { - - theseLogs->logN(4," %s (%d) %s -> %s.", (transferGainer ? "Request" : "Approve") ,cmd++, name1,thatAccount); - - thisTest = transferGainer ? Transaction(&oteCommand_4a, &oteResponse_4) : - Transaction(&oteCommand_4b, &oteResponse_4) ; - manager->execute(thisTest); - - theseLogs->logN(4," %s (%d) %s -> %s.", (transferGainer ? "Request" : "Approve") ,cmd++, name7,thatAccount); - - thisTest = transferGainer ? Transaction(&oteCommand_4c, &oteResponse_4a) : - Transaction(&oteCommand_4d, &oteResponse_4) ; - - manager->execute(thisTest); - - } - catch(...) - { - theseLogs->logN(0,"Case %d Failed, harness catch.",cmd++); - } - - } - - theseLogs->logN(2,"(%d) Sunrise create %s with ICANN SMD test files.",cmd++,name5); - - DomainCreateCommand oteCommand_5(name5,pw,&RID, &tech, &ns, &admin, &billing); - oteCommand_5.appendExtension(crtE1); - DomainCreateResponse oteResponse_5; - - try { - thisTest = Transaction(&oteCommand_5, &oteResponse_5); - manager->execute(thisTest); - } - catch (EPPException& e) - { const char *eMsg = e.getMessage().c_str(); - const char *opNow = op.c_str(); - theseLogs->logN(2,"EPP Exception during OTE B (%s): %s .",opNow,eMsg); - throw e; - } - catch (...) - { - theseLogs->logN(1,"General Exception OTE B (%s).",op.c_str()); - } - - theseLogs->logN(1,"(%d) Create test-validate.claimsgasix (TCN).",cmd++); - - DomainCreateCommand oteCommand_6("test-validate.claimsgasix",pw,&RID, &tech, &ns, &admin, &billing); - oteCommand_6.appendExtension(crtE1); - DomainCreateResponse oteResponse_6; - - try { - thisTest = Transaction(&oteCommand_6, &oteResponse_6); - manager->execute(thisTest); - } - catch (EPPException& e) - { const char *eMsg = e.getMessage().c_str(); - const char *opNow = op.c_str(); - theseLogs->logN(2,"EPP Exception during OTE B (%s): %s .",opNow,eMsg); - throw e; - } - catch (...) - { - theseLogs->logN(1,"General Exception OTE B (%s).",op.c_str()); - } - - - theseLogs->logN(0,"End OTE Session."); - - sess->close(); - manager->shutdown(); + if ( length < 0 ) { + theseLogs->logN(0,"Fatal error, initial inotify read failed."); + } + while ( i < length && monitoring) + { actionableFileEvent = false; + struct inotify_event *event = ( struct inotify_event * ) &buffer[ i ]; + if ( event->len ) { + if ( event->mask & IN_CREATE ) { + if ( event->mask & IN_ISDIR ) { + theseLogs->logN(1,"The directory %s was created.\n", event->name ); } - catch (EPPException& e) - { const char *eMsg = e.getMessage().c_str(); - const char *opNow = op.c_str(); - theseLogs->logN(2,"Outer EPP Exception during OTE (%s): %s .",opNow,eMsg); - throw e; + else { + theseLogs->logN(1,"The file %s was created.\n", event->name ); + actionableFileEvent = true; } - catch (...) - { - theseLogs->logN(2,"Outer General Exception in OTE (%s).",op.c_str()); + } + else if ( event->mask & IN_DELETE ) { + if ( event->mask & IN_ISDIR ) { + theseLogs->logN(1,"The directory %s was deleted.\n", event->name ); } + else { + printf( "The file %s was deleted.\n", event->name ); + } + } + else if ( event->mask & IN_MODIFY ) { + if ( event->mask & IN_ISDIR ) { + theseLogs->logN(1, "The directory %s was modified.\n", event->name ); + } + else { + theseLogs->logN(1, "The file %s was modified.\n", event->name ); + actionableFileEvent = true; + } + } + } + i += EVENT_SIZE + event->len; + if (actionableFileEvent) { mdJSON scriptor(event->name); + if (scriptor.didParseOK()) { + if (!scriptor.run()) { monitoring = false; + theseLogs->logN(1, "Run of %s failed. ,/json monitoring stops.\n", event->name ); + } + } + else { + theseLogs->logN(1, "Parse of %s failed. ,/json monitoring continues.\n", event->name ); + } + } + else sleep(1); + } + + ( void ) inotify_rm_watch( fd, wd ); + ( void ) close( fd ); - }// debug while } - void ausRegEPPTK::doOTEP() { int hours,hoops; diff --git a/AusRegCliever/server/mdJSON.cpp b/AusRegCliever/server/mdJSON.cpp new file mode 100644 index 0000000..ca6096f --- /dev/null +++ b/AusRegCliever/server/mdJSON.cpp @@ -0,0 +1,55 @@ +/* + * mdJSON.cpp + * + * Created on: Jan 28, 2014 + * Author: jdaugherty + */ + +#include "cliever-md.h" +#include "session/SessionFactory.hpp" +#include "session/SessionManagerProperties.hpp" +#include "session/Transaction.hpp" +#include "common/SystemProperties.hpp" +#include "session/Session.hpp" +#include "session/StatsManager.hpp" +#include "se/DomainCheckCommand.hpp" +#include "se/DomainCheckResponse.hpp" +#include "se/LPE/LPChkCmdExtension.hpp" +#include "se/LPE/LPChkRespExtension.hpp" +#include "se/LPE/LPCrtCmdExtension.hpp" +#include "se/LPE/LPCrtRespExtension.hpp" +#include "se/TransferOp.hpp" +#include "se/IntPostalInfo.hpp" +#include "se/ContactCreateCommand.hpp" +#include "se/ContactCreateResponse.hpp" +#include "se/DomainCreateCommand.hpp" +#include "se/DomainCreateResponse.hpp" +#include "se/DomainTransferApproveCommand.hpp" +#include "se/DomainTransferRequestCommand.hpp" +#include "se/DomainTransferResponse.hpp" +#include "mdJSON.hpp" + +using namespace std; + +mdJSON::mdJSON(char *fileName) { + + script = string(fileName); + +} + +mdJSON::~mdJSON() { + // TODO Auto-generated destructor stub +} + +mdJSON::mdJSON(char *script) { + +} +bool mdJSON::run() { + +} +bool mdJSON::didParseOK() { + + + done: return true; +} +