private PortMapper()
        {
            natpmpPortMapper = new NATPMPPortMapper();
            upnpPortMapper = new UPnPPortMapper();

            portMappings = new List<PortMapping>();
            portMappingsToRemove = new List<PortMapping>();

            existingUPnPPortMappingsToRemove = new List<ExistingUPnPPortMapping>();
        }
        private void upnpPortMapper_DidGetExternalIPAddress(UPnPPortMapper sender, IPAddress ip)
        {
            DebugLog.WriteLine("upnpPortMapper_DidGetExternalIPAddress: {0}", ip);

            bool shouldNotify = false;

            if (upnpStatus == MappingStatus.Trying)
            {
                upnpStatus = MappingStatus.Works;
                mappingProtocol = MappingProtocol.UPnP;
                shouldNotify = true;
            }

            externalIPAddress = ip;
            OnExternalIPAddressDidChange();

            if (shouldNotify)
            {
                OnDidFinishSearchForRouter();
            }
        }
 private void upnpPortMapper_DidEndWorking(UPnPPortMapper sender)
 {
     DecreaseWorkCount();
 }
        private void upnpPortMapper_DidFail(UPnPPortMapper sender)
        {
            DebugLog.WriteLine("upnpPortMapper_DidFail");

            if (upnpStatus == MappingStatus.Trying)
            {
                upnpStatus = MappingStatus.Failed;
            }
            else if (upnpStatus == MappingStatus.Works)
            {
                externalIPAddress = null;
            }

            if (natpmpStatus == MappingStatus.Failed)
            {
                OnDidFinishSearchForRouter();
            }
        }
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
 private void upnpPortMapper_DidBeginWorking(UPnPPortMapper sender)
 {
     IncreaseWorkCount();
 }