#include <xercesc/util/XMLUniDefs.hpp>
#include <xmltooling/unicode.h>
+#include <xmltooling/util/XMLHelper.h>
#ifdef HAVE_UNISTD_H
# include <sys/socket.h>
using namespace std;
namespace shibsp {
- static const XMLCh address[] = UNICODE_LITERAL_7(a,d,d,r,e,s,s);
- static const XMLCh port[] = UNICODE_LITERAL_4(p,o,r,t);
- static const XMLCh acl[] = UNICODE_LITERAL_3(a,c,l);
-
class TCPListener : virtual public SocketListener
{
public:
{
return new TCPListener(e);
}
+
+ static const XMLCh address[] = UNICODE_LITERAL_7(a,d,d,r,e,s,s);
+ static const XMLCh port[] = UNICODE_LITERAL_4(p,o,r,t);
+ static const XMLCh acl[] = UNICODE_LITERAL_3(a,c,l);
};
-TCPListener::TCPListener(const DOMElement* e) : SocketListener(e), m_address("127.0.0.1"), m_port(12345)
+TCPListener::TCPListener(const DOMElement* e)
+ : SocketListener(e), m_address(XMLHelper::getAttrString(e, "127.0.0.1", address)), m_port(XMLHelper::getAttrInt(e, 1600, port))
{
- // We're stateless, but we need to load the configuration.
- const XMLCh* tag=e->getAttributeNS(nullptr,address);
- if (tag && *tag) {
- auto_ptr_char a(tag);
- m_address=a.get();
- }
-
- tag=e->getAttributeNS(nullptr,port);
- if (tag && *tag) {
- m_port=XMLString::parseInt(tag);
- if (m_port==0)
- m_port=12345;
- }
-
- tag=e->getAttributeNS(nullptr,acl);
- if (tag && *tag) {
- auto_ptr_char temp(tag);
- string sockacl=temp.get();
- if (sockacl.length()) {
- int j = 0;
- for (unsigned int i=0; i < sockacl.length(); i++) {
- if (sockacl.at(i)==' ') {
- m_acl.insert(sockacl.substr(j, i-j));
- j = i+1;
- }
- }
- m_acl.insert(sockacl.substr(j, sockacl.length()-j));
+ int j = 0;
+ string sockacl = XMLHelper::getAttrString(e, "127.0.0.1", acl);
+ for (unsigned int i = 0; i < sockacl.length(); i++) {
+ if (sockacl.at(i) == ' ') {
+ m_acl.insert(sockacl.substr(j, i-j));
+ j = i+1;
}
}
- else
- m_acl.insert("127.0.0.1");
+ m_acl.insert(sockacl.substr(j, sockacl.length()-j));
}
void TCPListener::setup_tcp_sockaddr(struct sockaddr_in* addr) const