'- intIP is the source address of the request packet, which implies the source interface
- ctrlURL is the the control URL of IGD server, client will do discovery if it is None'

def __init__(self, bindIP='0.0.0.0', ctrlURL=None, service='WANIPC', edebug=False, pprint=False, timeout=2.0, available=True):

    if (not available):
        self.ctrlURL = None
        return
    self.debug = edebug
    self.pprint = pprint
    self.isv6 = False
    self.timeout = timeout
    if ctrlURL:
        self.ctrlURL = urlparse(self.ctrlURL)
        self.bindIP = self._getOutgoingLocalAddress(self.ctrlURL.hostname)
        self.isv6 = (self.bindIP.version == 6)
    else:
        self.ctrlURL = None
        self.bindIP = netaddr.IPAddress(bindIP)
        self.isv6 = (self.bindIP.version == 6)
        if self.isv6:
            self.igdsvc = 'IP6FWCTL'
        else:
            self.igdsvc = 'WANIPC'
        self.discovery()
        if (not self.ctrlURL):
            self.discovery(st='upnp:rootdevice')
    if self.available:
        self.intIP = self._getOutgoingLocalAddress()
