public void AddTracker(IEnumerable <Uri> trackerURIs)
        {
            lock (_trackers)
            {
                foreach (Uri trackerURI in trackerURIs)
                {
                    bool trackerExists = false;

                    foreach (TrackerClient tracker in _trackers)
                    {
                        if (tracker.TrackerUri.Equals(trackerURI))
                        {
                            trackerExists = true;
                            break;
                        }
                    }

                    if (!trackerExists)
                    {
                        TrackerClient tracker = TrackerClient.Create(trackerURI, _networkID.Number, TrackerClientID.CreateDefaultID(), _customUpdateInterval);
                        tracker.Proxy = _proxy;

                        _trackers.Add(tracker);
                    }
                }
            }
        }
Beispiel #2
0
        protected override void ReadPlainTextFrom(BinaryReader bR)
        {
            if (Encoding.ASCII.GetString(bR.ReadBytes(2)) != "BP")
            {
                throw new BitChatException("Invalid BitChatProfile data format.");
            }

            byte version = bR.ReadByte();

            switch (version)
            {
            case 1:
                #region version 1

                //tracker client id
                TrackerClientID localClientID = new TrackerClientID(bR);

                //local cert store
                if (bR.ReadByte() == 1)
                {
                    _localCertStore = new CertificateStore(bR);
                }

                //bitchat local service end point
                _localEP = new IPEndPoint(new IPAddress(bR.ReadBytes(bR.ReadByte())), bR.ReadInt32());

                //default tracker urls
                _trackerURIs = DefaultTrackerURIs;

                break;

                #endregion

            case 2:
            case 3:
                #region version 2 & 3

                //local cert store
                if (bR.ReadByte() == 1)
                {
                    _localCertStore = new CertificateStore(bR);
                }

                //bitchat local service end point
                _localEP = new IPEndPoint(new IPAddress(bR.ReadBytes(bR.ReadByte())), bR.ReadInt32());

                //download folder
                _downloadFolder = Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadUInt16()));
                if (_downloadFolder == null)
                {
                    _downloadFolder = @"C:\";
                }

                //load tracker urls
                _trackerURIs = new Uri[bR.ReadByte()];
                for (int i = 0; i < _trackerURIs.Length; i++)
                {
                    _trackerURIs[i] = new Uri(Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadByte())));
                }

                //load bitchat info
                _bitChatInfoList = new BitChatInfo[bR.ReadByte()];
                for (int i = 0; i < _bitChatInfoList.Length; i++)
                {
                    _bitChatInfoList[i] = new BitChatInfo(bR);
                }

                if (version > 2)
                {
                    //check CertificateRevocationList
                    _checkCertificateRevocationList = bR.ReadBoolean();
                }
                else
                {
                    _checkCertificateRevocationList = true;
                }

                //generic client data
                int dataCount = bR.ReadInt32();
                if (dataCount > 0)
                {
                    _clientData = bR.ReadBytes(dataCount);
                }

                break;

                #endregion

            default:
                throw new BitChatException("BitChatProfile data version not supported.");
            }
        }
        public TrackerClient AddTracker(Uri trackerURI)
        {
            lock (_trackers)
            {
                foreach (TrackerClient tracker in _trackers)
                {
                    if (tracker.TrackerUri.Equals(trackerURI))
                    {
                        return(null);
                    }
                }

                {
                    TrackerClient tracker = TrackerClient.Create(trackerURI, _networkID.Number, TrackerClientID.CreateDefaultID(), _customUpdateInterval);
                    tracker.Proxy = _proxy;

                    _trackers.Add(tracker);
                    return(tracker);
                }
            }
        }
        public void StartTracking(IEnumerable <Uri> trackerURIs = null)
        {
            lock (_trackers)
            {
                if (trackerURIs != null)
                {
                    _trackers.Clear();

                    foreach (Uri trackerURI in trackerURIs)
                    {
                        TrackerClient tracker = TrackerClient.Create(trackerURI, _networkID.Number, TrackerClientID.CreateDefaultID(), _customUpdateInterval);
                        tracker.Proxy = _proxy;

                        _trackers.Add(tracker);
                    }
                }

                if (_trackerUpdateTimer == null)
                {
                    if ((_trackers.Count > 0) || (_ipv4DhtNode != null) || (_ipv6DhtNode != null))
                    {
                        _trackerUpdateTimer = new Timer(TrackerUpdateTimerCallBack, TrackerClientEvent.Started, 1000, Timeout.Infinite);
                    }
                }
            }
        }
Beispiel #5
0
        private void StartTracking(Uri[] trackerURIs = null)
        {
            if (trackerURIs != null)
            {
                lock (_trackers)
                {
                    _trackers.Clear();

                    foreach (Uri trackerURI in trackerURIs)
                    {
                        _trackers.Add(TrackerClient.Create(trackerURI, _network.NetworkID.ID, TrackerClientID.CreateDefaultID()));
                    }
                }
            }

            if (_trackerUpdateTimer == null)
            {
                _trackerUpdateTimer = new Timer(UpdateTracker, TrackerClientEvent.Started, 1000, Timeout.Infinite);
            }
        }
Beispiel #6
0
        public TrackerClient AddTracker(Uri trackerURI)
        {
            lock (_trackers)
            {
                foreach (TrackerClient tracker in _trackers)
                {
                    if (tracker.TrackerUri.Equals(trackerURI))
                    {
                        return(null);
                    }
                }

                TrackerClient newTracker = TrackerClient.Create(trackerURI, _network.NetworkID.ID, TrackerClientID.CreateDefaultID());

                _trackers.Add(newTracker);

                return(newTracker);
            }
        }
        protected override void ReadPlainTextFrom(BinaryReader bR)
        {
            if (Encoding.ASCII.GetString(bR.ReadBytes(2)) != "BP")
                throw new BitChatException("Invalid BitChatProfile data format.");

            byte version = bR.ReadByte();

            switch (version)
            {
                case 1:
                    #region version 1

                    //tracker client id
                    TrackerClientID localClientID = new TrackerClientID(bR);

                    //local cert store
                    if (bR.ReadByte() == 1)
                        _localCertStore = new CertificateStore(bR);

                    //bitchat local service end point
                    _localEP = new IPEndPoint(new IPAddress(bR.ReadBytes(bR.ReadByte())), bR.ReadInt32());

                    //default tracker urls
                    _trackerURIs = DefaultTrackerURIs;

                    break;

                    #endregion

                case 2:
                case 3:
                    #region version 2 & 3

                    //local cert store
                    if (bR.ReadByte() == 1)
                        _localCertStore = new CertificateStore(bR);

                    //bitchat local service end point
                    _localEP = new IPEndPoint(new IPAddress(bR.ReadBytes(bR.ReadByte())), bR.ReadInt32());

                    //download folder
                    _downloadFolder = Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadUInt16()));
                    if (_downloadFolder == null)
                        _downloadFolder = @"C:\";

                    //load tracker urls
                    _trackerURIs = new Uri[bR.ReadByte()];
                    for (int i = 0; i < _trackerURIs.Length; i++)
                        _trackerURIs[i] = new Uri(Encoding.UTF8.GetString(bR.ReadBytes(bR.ReadByte())));

                    //load bitchat info
                    _bitChatInfoList = new BitChatInfo[bR.ReadByte()];
                    for (int i = 0; i < _bitChatInfoList.Length; i++)
                        _bitChatInfoList[i] = new BitChatInfo(bR);

                    if (version > 2)
                    {
                        //check CertificateRevocationList
                        _checkCertificateRevocationList = bR.ReadBoolean();
                    }
                    else
                    {
                        _checkCertificateRevocationList = true;
                    }

                    //generic client data
                    int dataCount = bR.ReadInt32();
                    if (dataCount > 0)
                        _clientData = bR.ReadBytes(dataCount);

                    break;

                    #endregion

                default:
                    throw new BitChatException("BitChatProfile data version not supported.");
            }
        }