Switch plugin ctors to shortcut methods, and default the Listener in config.
[shibboleth/cpp-sp.git] / shibsp / remoting / impl / TCPListener.cpp
index 4630ef3..65e4ec7 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <xercesc/util/XMLUniDefs.hpp>
 #include <xmltooling/unicode.h>
+#include <xmltooling/util/XMLHelper.h>
 
 #ifdef HAVE_UNISTD_H
 # include <sys/socket.h>
@@ -46,10 +47,6 @@ using namespace xercesc;
 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:
@@ -82,41 +79,24 @@ namespace shibsp {
     {
         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