/** * Utility method for traversing a text node that we know * a-priori to be on a left or right boundary of the range. * This method does not properly handle text nodes that contain * both the start and end points of the range. * */ DOM_Node RangeImpl::traverseTextNode( DOM_Node n, bool isLeft, int how ) { DOMString txtValue = n.getNodeValue(); DOMString newNodeValue; DOMString oldNodeValue; if ( isLeft ) { int offset = getStartOffset(); newNodeValue = txtValue.substringData( offset , fStartContainer.getNodeValue().length()-offset); oldNodeValue = txtValue.substringData( 0, offset ); } else { int offset = getEndOffset(); newNodeValue = txtValue.substringData( 0, offset ); oldNodeValue = txtValue.substringData( offset , fEndContainer.getNodeValue().length()-offset ); } if ( how != CLONE_CONTENTS ) n.setNodeValue( oldNodeValue ); if ( how==DELETE_CONTENTS ) return null; DOM_Node newNode = n.cloneNode( false ); newNode.setNodeValue( newNodeValue ); return newNode; }
EppMarkMark* EppMarkMark::fromXML( const DOMNode& root, const char* ns) { EppMarkMark *_ret = new EppMarkMark(ns); DOMNodeList* list = root.getChildNodes(); int nsLen = strlen(ns); if( list == 0 ) { delete _ret; return NULL; } for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( name.substringData(0, nsLen + 1).equals((_ret->getNameSpace() + ":").c_str()) ) { name = name.substringData(nsLen + 1, name.length() - ( nsLen + 1 )); } if( name.equals("trademark") ) { EppTrademarkData *_tmd = EppTrademarkData::fromXML(*node, ns); if( NULL != _tmd ) { _ret->_marks.addElement(_tmd); } } else if ( name.equals("court") ) { EppCourtData *_cd = EppCourtData::fromXML(*node, ns); if( NULL != _cd ) { _ret->_marks.addElement(_cd); } } else if ( name.equals("treatyOrStatute") ) { EppTreatyOrStatuteData *_tsd = EppTreatyOrStatuteData::fromXML(*node, ns); if( NULL != _tsd ) { _ret->_marks.addElement(_tsd ); } } } return _ret; }
EppCommandInfoLaunchRegistration* EppCommandInfoLaunchRegistration::fromXML( const DOMNode& root ) { EppCommandInfoLaunchRegistration* cmd = new EppCommandInfoLaunchRegistration(); if( cmd == null ) { return null; } DOMNodeList* list = root.getChildNodes(); DOMNamedNodeMap* attrs = root.getAttributes(); for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( (name.length() > 7) && name.substringData(0, 7).equals("launch:") ) { name = name.substringData(7, name.length() - 7); } if( name.equals("phase") ) { EppLaunchPhase *_pptr = EppLaunchPhase::fromXML(*node); if( null != _pptr ) { cmd->_phase = *_pptr; delete _pptr; } _pptr = null; } else if ( name.equals("applicationID") ) { cmd->_appId = EppUtil::getText(*node); } } for( unsigned int i = 0;i<attrs->getLength();i++ ) { DOMNode* attr = attrs->item(i); if( XS(attr->getNodeName()).equals("includeMark") ) { DOMString _v = attr->getNodeValue(); if( _v.length() > 0 ) { if( _v.equals("true") ) { cmd->includeMark(true); } } break; } } return cmd; }
EppCommandCreateSecDns* EppCommandCreateSecDns::fromXML( const DOMNode &root ) { EppCommandCreateSecDns * cmd = new EppCommandCreateSecDns(); if( cmd == null ) { return null; } DOMNodeList* list = root.getChildNodes(); for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( name.substringData(0, 7).equals("secDNS:") ) { name = name.substringData(7, name.length() - 7); } if( name.equals("dsData") ) { EppSecDnsDsData * ds = EppSecDnsDsData::fromXML(*node); if( ds != null ) { cmd->add(*ds); delete ds; } } else if( name.equals("maxSigLife") ) { DOMString value = EppUtil::getText(*node); char *p = value.transcode(); if( p != null ) { cmd->maxSigLife = ::atoi(p); XercesString::Delete(p); } } else if( name.equals("keyData") ) { // FIXME(zhang) not supported cmd->keyDataPresent = true; EppSecDnsKeyData *kd = EppSecDnsKeyData::fromXML(*node); if( kd != null ) { cmd->add(*kd); delete kd; } } } return cmd; }
EppContact * EppContact::fromXML( const DOM_Node& root ) { EppContact * contact = new EppContact(); DOM_NodeList list = root.getChildNodes(); for( unsigned int i = 0; i < list.getLength(); i++ ) { DOM_Node node = list.item(i); DOMString name = node.getLocalName(); if( name == null ) { name = node.getNodeName(); } if( name == null ) { continue; } if( name.substringData(0, 8).equals("contact:") ) { name = name.substringData(8, name.length() - 8); } if( name.equals("id") ) { contact->id = EppUtil::getText(node); } else if( name.equals("ascii") ) { contact->ascii = EppContactData::fromXML(node); } else if( name.equals("i15d") ) { contact->i15d = EppContactData::fromXML(node); } else if( name.equals("voice") ) { contact->voice = EppE164::fromXML(node); } else if( name.equals("fax") ) { contact->fax = EppE164::fromXML(node); } else if( name.equals("email") ) { contact->email = EppUtil::getText(node); } else { contact->fromXMLCommon(node, name); } } return contact; }
EppResponseDataCreateLaunchRegistration* EppResponseDataCreateLaunchRegistration::fromXML( const DOMNode& root ) { EppResponseDataCreateLaunchRegistration *cmd = new EppResponseDataCreateLaunchRegistration(); if( cmd == null ) { return null; } DOMNodeList* list = root.getChildNodes(); for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( (name.length() > 7) && name.substringData(0, 7).equals("launch:") ) { name = name.substringData(7, name.length() - 7); } if( name.equals("phase") ) { EppLaunchPhase *_pptr = EppLaunchPhase::fromXML(*node); if( null != _pptr ) { cmd->_phase = *_pptr; delete _pptr; } _pptr = null; } else if( name.equals("applicationID") ) { cmd->_appId = EppUtil::getText(*node); } } return cmd; }
EppHost * EppHost::fromXML( const DOM_Node& root ) { EppHost * host = new EppHost(); DOM_NodeList list = root.getChildNodes(); for( unsigned int i = 0; i < list.getLength(); i++ ) { DOM_Node node = list.item(i); DOMString name = node.getLocalName(); if( name == null ) { name = node.getNodeName(); } if( name == null ) { continue; } if( name.substringData(0, 5).equals("host:") ) { name = name.substringData(5, name.length() - 5); } if( name.equals("name") ) { host->setName(EppUtil::getText(node)); } else if( name.equals("addr") ) { EppIpAddress * ip = EppIpAddress::fromXML(node); if ( ip != null ) { host->addAddress(*ip); delete ip; } } else { host->fromXMLCommon(node, name); } } return host; }
EppLaunchProtection* EppLaunchProtection::fromXML( const DOMNode& root, const char* ns ) { EppLaunchProtection *_ret = new EppLaunchProtection(ns); if( null == _ret ) return null; DOMNodeList* list = root.getChildNodes(); int nsLen = strlen(ns); for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( name.substringData(0, nsLen + 1).equals((_ret->getNameSpace() + ":").c_str() ) ) { name = name.substringData(nsLen + 1, name.length() - (nsLen + 1)); } if( name.equals("cc") ) { _ret->_cc = (EppUtil::getText(*node)).substringData(0, 2); } else if( name.equals("region") ) { _ret->_region = EppUtil::getText(*node); } else if( name.equals("ruling") ) { _ret->_ruling = EppUtil::getText(*node); } } return _ret; }
EppLaunchPhase* EppLaunchPhase::fromXML( const DOMNode& root ) { DOMNamedNodeMap* attrs = root.getAttributes(); EppLaunchPhase *_ret = new EppLaunchPhase(); if( null == _ret ) return null; { DOMNode* node = (DOMNode*)&root; DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNotNull() ) { if( name.substringData(0, 7).equals("launch:") ) { name = name.substringData(7, name.length() - 7); } if( name.equals("phase") ) { _ret->_phase = EppUtil::getText(*node); } } } for( unsigned int i = 0; i<attrs->getLength(); i++ ) { DOMNode* attr = attrs->item(i); DOMString _v = attr->getNodeValue(); if( XS(attr->getNodeName()).equals("name") ) { _ret->_sub_phase = attr->getNodeValue(); break; } } return _ret; }
DOMString EppUtil::substring(char sep , const DOMString & src) { DOMString name; if ( src.isNull() ) return name; name = src; char * nameStr = name.transcode(); if ( nameStr == null ) return name; int totalLen = name.length(); char * indexPtr = strchr(nameStr, sep); if ( indexPtr != null ) { int len = indexPtr - nameStr; name = name.substringData(len+1, totalLen); } XercesString::Delete(nameStr); return name; }
EppAddress * EppAddress::fromXML( const DOMNode& root ) { DOMString street[MAX_NUM_OF_STREETS]; DOMString city; DOMString sp; DOMString pc; DOMString cc; unsigned int i; for( i = 0; i < MAX_NUM_OF_STREETS; i++ ) { street[i] = NULLXS; } DOMNodeList* list = root.getChildNodes(); for( i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( name.substringData(0, 8).equals("contact:") ) { name = name.substringData(8, name.length() - 8); } if( name.substringData(0, 6).equals("xriAU:") ) { name = name.substringData(6, name.length() - 6); } if( name.equals("street") ) { for( int j = 0; j < MAX_NUM_OF_STREETS; j++ ) { if( street[j].isNull() ) { street[j] = EppUtil::getText(*node); break; } } } else if( name.equals("city") ) { city = EppUtil::getText(*node); } else if( name.equals("sp") ) { sp = EppUtil::getText(*node); } else if( name.equals("pc") ) { pc = EppUtil::getText(*node); } else if( name.equals("cc") ) { cc = EppUtil::getText(*node); } } return new EppAddress(street, city, sp, pc, cc); }
void EppLaunchProtection::countryCode(const DOMString &_c) { this->_cc = _c.substringData(0, 2); }
void EppLaunchProtection::ruling(const DOMString& _c) { this->_ruling = _c.substringData(0, 2); }
EppContactData * EppContactData::fromXML( const DOMNode& root ) { DOMString contact_name = NULLXS; DOMString contact_org = NULLXS; EppAddress * contact_addr = null; EppContactData * contact_data = null; bool has_org = false; DOMNodeList* list = root.getChildNodes(); for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( name.substringData(0, 8).equals("contact:") ) { name = name.substringData(8, name.length() - 8); } if( name.substringData(0, 6).equals("xriAU:") ) { name = name.substringData(6, name.length() - 6); } if( name.equals("name") ) { contact_name = EppUtil::getText(*node); } else if( name.equals("org") ) { contact_org = EppUtil::getText(*node); has_org = true; } else if( name.equals("addr") ) { if( contact_addr != null ) { delete contact_addr; } contact_addr = EppAddress::fromXML(*node); } } if( has_org || (contact_name.isNotNull()) || (contact_org.isNotNull()) || (contact_addr != null) ) { contact_data = new EppContactData(); if( contact_data != null ) { contact_data->setName(contact_name); contact_data->setOrganization(contact_org); if( contact_addr != null ) { contact_data->setAddress(*contact_addr); delete contact_addr; contact_addr = null; } contact_data->hasOrg = has_org; } } return contact_data; }
/* NOTE: need to keep _type field in consideration as attribute type/entitlement depends on it.*/ EppMarkHolder* EppMarkHolder::fromXML( const DOMNode& root, const char* ns ) { /* this->_name = _src._name; this->_org = _src._org; this->_addr = _src._addr; this->_voice = _src._voice; this->_fax = _src._fax; this->_email = _src._email; this->_addParam = _src._addParam; this->_type = _src._type; */ EppMarkHolder *_ret = new EppMarkHolder(EPPMARK_HOLDER, ns); //_ret->setNameSpace(ns); int nsLen = strlen(ns); if( null == _ret ) return null; DOMNodeList* list = root.getChildNodes(); DOMNamedNodeMap* attrs = root.getAttributes(); for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) continue; if( name.substringData(0, nsLen + 1).equals((_ret->getNameSpace() + ":").c_str()) ) { name = name.substringData(nsLen + 1, name.length() - ( nsLen + 1 )); if( name.equals("name") ) { _ret->_name = EppUtil::getText(*node); } else if ( name.equals("org") ) { _ret->_org = EppUtil::getText(*node); } else if ( name.equals("addr") ) { EppMarkAddress* mAddr = (EppMarkAddress*)EppMarkAddress::fromXML( *node, ns ); _ret->_addr = *mAddr; delete mAddr; } else if ( name.equals("voice") ) { EppE164 *_v = EppE164::fromXML(*node); if( NULL != _v ) { _ret->_voice = *_v; delete _v; } } else if ( name.equals("fax") ) { EppE164 *_f = EppE164::fromXML(*node); if( NULL != _f ) { _ret->_fax = *_f; delete _f; } } else if ( name.equals("email") ) { _ret->_email = EppUtil::getText(*node); } } } for( unsigned int i = 0; i < attrs->getLength();i++ ) { DOMNode* attr = attrs->item(i); DOMString _v = attr->getNodeValue(); if( XS(attr->getNodeName()).equals("entitlement") ) { _ret->_type = EPPMARK_HOLDER; if( _v.length() > 0 ) { _ret->_addParam = _v; } break; } else if ( XS(attr->getNodeName()).equals("type") ) { _ret->_type = EPPMARK_CONTACT; if( _v.length() > 0 ) { _ret->_addParam = _v; } break; } } return _ret; }
EppCommandCreateLaunchRegistration* EppCommandCreateLaunchRegistration::fromXML( const DOMNode& root ) { EppCommandCreateLaunchRegistration* cmd = new EppCommandCreateLaunchRegistration(); if( cmd == null ) { return null; } DOMNodeList* list = root.getChildNodes(); DOMNamedNodeMap* attrs = root.getAttributes(); for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( (name.length() > 7) && name.substringData(0, 7).equals("launch:") ) { name = name.substringData(7, name.length() - 7); } else if( (name.length() > 4) && name.substringData(0, 4).equals("smd:") ) { name = name.substringData(4, name.length() - 4); } if( name.equals("phase") ) { EppLaunchPhase *_pptr = EppLaunchPhase::fromXML(*node); if( null != _pptr ) { cmd->_phase = *_pptr; delete _pptr; } _pptr = null; } else if ( name.equals("notice") ) { DOMNodeList* noticeChildren = node->getChildNodes(); for( unsigned int j = 0; j < noticeChildren->getLength(); j++ ) { DOMNode* child = noticeChildren->item(j); DOMString chName = child->getLocalName(); if( chName.isNull() ) { chName = child->getNodeName(); } if( chName.isNull() ) { continue; } if( (chName.length() > 7) && chName.substringData(0, 7).equals("launch:") ) { chName = chName.substringData(7, chName.length() - 7); } if ( chName.equals("noticeID") ) { DOMString s = EppUtil::getText(*child); cmd->noticeID(s); } else if ( chName.equals("notAfter") ) { DOMString s = EppUtil::getText(*child); cmd->notAfter(s); } else if ( chName.equals("acceptedDate") ) { DOMString s = EppUtil::getText(*child); cmd->acceptedDate(s); } } } else if( name.equals("signedMark") ) { EppSignedMarkData *_nd = EppSignedMarkData::fromXML(*node); if( null != _nd ) { _nd->hasSMD(true); cmd->_signedMark = *_nd; delete _nd; } _nd = null; } else if( name.equals("encodedSignedMark") ) { EppEncodedSignedMarkData *_nd = EppEncodedSignedMarkData::fromXML(*node); if( null != _nd ) { _nd->hasSMD(true); cmd->_encSignedMark = *_nd; delete _nd; } _nd = null; } } for( unsigned int i = 0; i<attrs->getLength(); i++ ) { DOMNode* attr = attrs->item(i); DOMString _v = attr->getNodeValue(); if( XS(attr->getNodeName()).equals("type") ) { cmd->_type = attr->getNodeValue(); break; } } return cmd; }
EppSecDnsKeyData * EppSecDnsKeyData::fromXML( const DOMNode &root ) { EppSecDnsKeyData * data = new EppSecDnsKeyData(); if( data == null ) { return data; } char *p = null; DOMString value; DOMNodeList* list = root.getChildNodes(); for( unsigned int i = 0; i < list->getLength(); i++ ) { DOMNode* node = list->item(i); DOMString name = node->getLocalName(); if( name.isNull() ) { name = node->getNodeName(); } if( name.isNull() ) { continue; } if( name.substringData(0, 7).equals("secDNS:") ) { name = name.substringData(7, name.length() - 7); } if( name.equals("flags") ) { value = EppUtil::getText(*node); p = value.transcode(); if( p != null ) { uint16_t f = (uint16_t) ::atoi(p); XercesString::Delete(p); data->setFlags( f ); } } else if( name.equals("protocol") ) { value = EppUtil::getText(*node); p = value.transcode(); if( p != null ) { uint8_t proto = (uint8_t) ::atoi(p); XercesString::Delete(p); data->setProtocol( proto ); } } else if( name.equals("alg") ) { value = EppUtil::getText(*node); p = value.transcode(); if( p != null ) { uint8_t a = (uint8_t) ::atoi(p); XercesString::Delete(p); data->setAlgorithm(a); } } else if( name.equals("pubKey") ) { value = EppUtil::getText(*node); if( value.length() > 0 ) { data->setPublicKey(value); } } } return data; }