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;
}
Ejemplo n.º 2
0
short
EppUtil::getDnsSecMajorMinor(const DOMString &root,
	unsigned short &_major, unsigned short &_minor)
{
	char major[4] = "\0";
	char minor[4] = "\0";
	int8_t iter = 0;

	if( 0 >= root.length() || root.isNull() )
		return -1;

	char *str_val = root.transcode();
	if( null == str_val )
		return -1;

	char *needle = strrchr(str_val, '-');
	if( NULL == needle )
	{
		delete []str_val;
	}
	needle++;/*we already have '-' in it */
	char *part = major;
	while( *needle != '\0' )
	{
		if( *needle == '.' )
		{
			needle++;
			part = minor;
			iter = 0;
			continue;
		}
		if( iter > 2 )
		{
			iter = -1;
			break;
		}
		part[iter] = *needle;
		iter++;
		needle++;
	}
	XercesString::Delete(str_val);
	if( iter != -1 )
	{
		_major = (unsigned short)atoi(major);
		_minor = (unsigned short)atoi(minor);
		return 0;
	}
	return -1;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
time_t EppUtil::getDate( const DOMNode& root, bool dateOnly )
{
	time_t cal = 0;

	DOMString s = EppUtil::getText(root);
	if( s.isNotNull() && s.length() > 0 )
	{
		char * buf = s.transcode();
		if( buf != null )
		{
			cal = EppUtil::getDate(buf, dateOnly);
			XercesString::Delete(buf);
		}
	}

	return cal;
}
Ejemplo n.º 5
0
EppResponse * EppResponse::fromXML( const DOMNode& root )
{
	unsigned int i;
	EppResponse * rsp = null;
	DOMNode* response;
	bool found = false;

	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.equals("response") )
		{
			response = node;
			found = true;
			break;
		}
	}

	if( found == false )
	{
		return null;
	}

	rsp = new EppResponse();
	list = response->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.equals("result") )
		{
			EppResult * r = EppResult::fromXML(*node);
			if( r != null )
			{
				rsp->result->addElement(r);
			}
		}
		else if( name.equals("msgQ") )
		{
			DOMElement * elm = (DOMElement *) node;
			DOMString id = elm->getAttribute(XS("id"));
			if( id.isNotNull() && id.length() > 0 )
			{
				rsp->msgId = id;
			}
			DOMString str = elm->getAttribute(XS("count"));
			if( str.isNotNull() && str.length() > 0 )
			{
				char * p = str.transcode();
				if( p != null )
				{
					rsp->msgQCount = atoi(p);
					XercesString::Delete(p);
				}
			}

			DOMNodeList* qlist = node->getChildNodes();
			for( unsigned int j = 0; j < qlist->getLength(); j++ )
			{
				node = qlist->item(j);
				name = node->getLocalName();

				if( name.isNull() )
				{
					name = node->getNodeName();
				}
				if( name.isNull() )
				{
					continue;
				}
				if( name.equals("qDate") )
				{
					rsp->msgQDate = EppUtil::getDate(*node);
				}
				else if( name.equals("msg") )
				{
					rsp->msgQText = EppUtil::getText(*node);
				}
			}
		}
		else if( name.equals("resData") )
		{
			if( rsp->resData == null )
			{
				rsp->resData = EppResponseData::fromXML(*node);
				rsp->freeable = true;
			}
		}
		else if( name.equals("extension") )
		{
			DOMNodeList* clist = node->getChildNodes();
			for( unsigned int j = 0; j < clist->getLength(); j++ )
			{
				DOMNode* cnode   = clist->item(j);
				DOMString prefix = cnode->getPrefix();
				DOMString cname  = cnode->getLocalName();

				if( cname.isNull() )
				{
					cname = cnode->getNodeName();
				}
				if( cname.isNull() )
				{
					continue;
				}
				if(     cname.equals("neulevel:extension")
					|| (    (prefix.isNotNull()) && prefix.equals("neulevel")
					&& (cname.isNotNull()) && cname.equals("extension") ) )
				{
					EppUnspec * unspec = EppUnspec::fromXML(*cnode);
					if( unspec != null )
					{
						rsp->addExtension(unspec);
					}
				}
				else if( cname.isNotNull() )
				{
					EppExtension * ext = EppExtension::fromXML(*cnode);
					if( ext != null )
					{
						rsp->addExtension(ext);
					}
					// else other extension
				}
				else
				{
					// other extensions
				}
			}
		}
		else if( name.equals("trID") )
		{
			if( rsp->trID == null )
			{
				rsp->trID = EppTransactionId::fromXML(*node);
			}
		}
	}

	return rsp;
}
Ejemplo n.º 6
0
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;
}