|
Mixe for Privacy and Anonymity in the Internet
|
00001 /* 00002 Copyright (c) 2000, The JAP-Team 00003 All rights reserved. 00004 Redistribution and use in source and binary forms, with or without modification, 00005 are permitted provided that the following conditions are met: 00006 00007 - Redistributions of source code must retain the above copyright notice, 00008 this list of conditions and the following disclaimer. 00009 00010 - Redistributions in binary form must reproduce the above copyright notice, 00011 this list of conditions and the following disclaimer in the documentation and/or 00012 other materials provided with the distribution. 00013 00014 - Neither the name of the University of Technology Dresden, Germany nor the names of its contributors 00015 may be used to endorse or promote products derived from this software without specific 00016 prior written permission. 00017 00018 00019 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS 00020 OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 00021 AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS 00022 BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00023 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 00024 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 00025 IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00026 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 00027 */ 00028 #include "StdAfx.h" 00029 #if !defined(ONLY_LOCAL_PROXY) && defined (PAYMENT) 00030 #include "CAXMLBI.hpp" 00031 #include "CAMsg.hpp" 00032 00033 const char* const CAXMLBI::ms_pXmlElemName="PaymentInstance"; 00034 00035 CAXMLBI::CAXMLBI() : CAAbstractXMLEncodable() 00036 { 00037 m_pVeryfire = NULL; 00038 m_pBiID = NULL; 00039 m_pHostName = NULL; 00040 m_pCert = NULL; 00041 } 00042 00043 CAXMLBI* CAXMLBI::getInstance(const UINT8 * biID, const UINT8 * hostName, const int portNumber, CACertificate * pCert) 00044 { 00045 if(biID==NULL||hostName==NULL) 00046 { 00047 return NULL; 00048 } 00049 CAXMLBI* pBI = new CAXMLBI(); 00050 if(pCert!=NULL) 00051 { 00052 pBI->m_pCert = pCert->clone(); 00053 } 00054 pBI->m_pBiID = new UINT8[strlen((char*)biID)+1]; 00055 strcpy((char*)pBI->m_pBiID, (char*)biID); 00056 memset(pBI->m_pBiID, 0, (strlen((char*)biID)+1)); 00057 pBI->m_pHostName = new UINT8[strlen((char*)hostName)+1]; 00058 strcpy((char*)pBI->m_pHostName, (char*)hostName); 00059 pBI->m_iPortNumber = portNumber; 00060 pBI->m_pVeryfire = NULL; 00061 return pBI; 00062 } 00063 00064 CAXMLBI* CAXMLBI::getInstance(DOMElement* elemRoot) 00065 { 00066 if (elemRoot == NULL) 00067 { 00068 return NULL; 00069 } 00070 CAXMLBI* pPI = new CAXMLBI(); 00071 if(pPI->setValues(elemRoot)!=E_SUCCESS) 00072 { 00073 delete pPI; 00074 return NULL; 00075 } 00076 return pPI; 00077 } 00078 00079 CAXMLBI::~CAXMLBI() 00080 { 00081 delete m_pCert; 00082 m_pCert = NULL; 00083 00084 delete m_pVeryfire; 00085 m_pVeryfire = NULL; 00086 00087 delete[] m_pBiID; 00088 m_pBiID = NULL; 00089 00090 delete m_pHostName; 00091 m_pHostName = NULL; 00092 } 00093 00094 SINT32 CAXMLBI::setValues(DOMElement* elemRoot) 00095 { 00096 DOMElement* elem=NULL; 00097 UINT8 strGeneral[256]; 00098 UINT32 strGeneralLen = 255; 00099 00100 if(!equals(elemRoot->getTagName(),CAXMLBI::getXMLElementName())) 00101 { 00102 return E_UNKNOWN; 00103 } 00104 00105 //Parse ID 00106 if(getDOMElementAttribute(elemRoot, "id", strGeneral, &strGeneralLen)==E_SUCCESS) 00107 { 00108 m_pBiID = new UINT8[strGeneralLen+1]; 00109 memset(m_pBiID, 0, (strGeneralLen+1)); 00110 memcpy(m_pBiID,strGeneral,strGeneralLen); 00111 } 00112 else 00113 { 00114 return E_UNKNOWN; 00115 } 00116 00117 //Parse PI Certificate 00118 DOMElement* elemCert=NULL; 00119 getDOMChildByName(elemRoot, "Certificate", elem, false); 00120 getDOMChildByName(elem, "X509Certificate", elemCert, false); 00121 CACertificate *pPICert = CACertificate::decode(elemCert, CERT_X509CERTIFICATE, NULL); 00122 if (pPICert != NULL) 00123 { 00124 m_pCert = pPICert; 00125 } 00126 else 00127 { 00128 CAMsg::printMsg(LOG_CRIT,"No certificate for payment instance available!\n"); 00129 return E_UNKNOWN; 00130 } 00131 00132 //Parse PI Host 00133 DOMElement* elemNet=NULL; 00134 DOMElement* elemListeners=NULL; 00135 DOMElement* elemListener=NULL; 00136 DOMElement* elemHost=NULL; 00137 DOMElement* elemPort=NULL; 00138 getDOMChildByName(elemRoot, "Network", elemNet, false); 00139 getDOMChildByName(elemNet, "ListenerInterfaces", elemListeners, false); 00140 getDOMChildByName(elemListeners, "ListenerInterface", elemListener, false); 00141 getDOMChildByName(elemListener, "Host", elemHost, false); 00142 getDOMChildByName(elemListener, "Port", elemPort, false); 00143 strGeneralLen=255; 00144 //Parse PI Host and Port 00145 if( getDOMElementValue(elemHost, strGeneral, &strGeneralLen)!=E_SUCCESS|| 00146 getDOMElementValue(elemPort, &m_iPortNumber)!=E_SUCCESS) 00147 { 00148 delete [] m_pBiID; 00149 m_pBiID=NULL; 00150 delete m_pCert; 00151 m_pCert=NULL; 00152 return E_UNKNOWN; 00153 } 00154 m_pHostName = new UINT8[strGeneralLen+1]; 00155 strcpy((char*)m_pHostName, (char*)strGeneral); 00156 return E_SUCCESS; 00157 } 00158 00159 SINT32 CAXMLBI::toXmlElement(XERCES_CPP_NAMESPACE::DOMDocument *a_doc, DOMElement* & elemRoot) 00160 { 00161 elemRoot = createDOMElement(a_doc,getXMLElementName()); 00162 setDOMElementAttribute(elemRoot, "id", m_pBiID); 00163 00164 //Set network settings 00165 DOMElement* elemNet = createDOMElement(a_doc,"Network"); 00166 elemRoot->appendChild(elemNet); 00167 DOMElement* elemListeners = createDOMElement(a_doc,"ListenerInterfaces"); 00168 elemNet->appendChild(elemListeners); 00169 DOMElement* elemListener = createDOMElement(a_doc,"ListenerInterface"); 00170 elemListeners->appendChild(elemListener); 00171 //Set Hostname 00172 DOMElement* elemHost = createDOMElement(a_doc,"Host"); 00173 elemListener->appendChild(elemHost); 00174 setDOMElementValue(elemHost, m_pHostName); 00175 //Set Port 00176 DOMElement* elemPort = createDOMElement(a_doc,"Port"); 00177 elemListener->appendChild(elemPort); 00178 setDOMElementValue(elemPort, m_iPortNumber); 00179 //Set Cert 00180 if(m_pCert!=NULL) 00181 { 00182 DOMElement* elemCert = createDOMElement(a_doc,"Certificate"); 00183 elemRoot->appendChild(elemCert); 00184 00185 DOMElement* tmpElem=NULL; 00186 m_pCert->encode(tmpElem, a_doc); 00187 elemCert->appendChild(tmpElem); 00188 } 00189 00190 return E_SUCCESS; 00191 } 00192 #endif //ONLY_LOCAL_PROXY
1.7.6.1