Пример #1
0
        private void CreateInvitationPrivateChat(BinaryNumber hashedPeerEmailAddress, BinaryNumber networkID, IPEndPoint peerEP, string message)
        {
            BitChatNetwork network = new BitChatNetwork(_connectionManager, _trustedRootCertificates, _supportedCryptoOptions, hashedPeerEmailAddress, networkID, null, BitChatNetworkStatus.Offline, peerEP.ToString(), message);
            BitChat        chat    = CreateBitChat(network, BinaryNumber.GenerateRandomNumber160().ToString(), BinaryNumber.GenerateRandomNumber256().Number, 0, null, new BitChatProfile.SharedFileInfo[] { }, _profile.TrackerURIs, true, false, false);

            RaiseEventBitChatInvitationReceived(chat);
        }
Пример #2
0
        public void RefreshBucket(DhtNode dhtNode)
        {
            List <KBucket> allLeafKBuckets = GetAllLeafKBuckets();

            foreach (KBucket kBucket in allLeafKBuckets)
            {
                if (kBucket._contacts != null)
                {
                    if ((DateTime.UtcNow - kBucket._lastChanged).TotalSeconds > BUCKET_STALE_TIMEOUT_SECONDS)
                    {
                        ThreadPool.QueueUserWorkItem(delegate(object state)
                        {
                            //get random node ID in the bucket range
                            BinaryNumber randomNodeID = BinaryNumber.GenerateRandomNumber160();

                            if (kBucket._bucketID != null)
                            {
                                randomNodeID = (randomNodeID >> kBucket._bucketDepth) | kBucket._bucketID;
                            }

                            //find closest contacts for current node id
                            NodeContact[] initialContacts = kBucket.GetKClosestContacts(randomNodeID);

                            if (initialContacts.Length > 0)
                            {
                                dhtNode.QueryFindNode(initialContacts, randomNodeID);
                            }
                        });
                    }
                }
            }
        }
Пример #3
0
        public bool RequestStartTcpRelay(BinaryNumber[] networkIDs, Uri[] trackerURIs, int timeout)
        {
            BinaryNumber channelName = BinaryNumber.GenerateRandomNumber160();
            object       lockObject  = new object();

            lock (_tcpRelayRequestLockList)
            {
                _tcpRelayRequestLockList.Add(channelName, lockObject);
            }

            try
            {
                lock (lockObject)
                {
                    using (MemoryStream mS = new MemoryStream(1024))
                    {
                        byte[] XORnetworkID    = new byte[20];
                        byte[] randomChannelID = channelName.Number;

                        //write networkid list
                        mS.WriteByte(Convert.ToByte(networkIDs.Length));

                        foreach (BinaryNumber networkID in networkIDs)
                        {
                            byte[] network = networkID.Number;

                            for (int i = 0; i < 20; i++)
                            {
                                XORnetworkID[i] = (byte)(randomChannelID[i] ^ network[i]);
                            }

                            mS.Write(XORnetworkID, 0, 20);
                        }

                        //write tracker uri list
                        mS.WriteByte(Convert.ToByte(trackerURIs.Length));

                        foreach (Uri trackerURI in trackerURIs)
                        {
                            byte[] buffer = Encoding.UTF8.GetBytes(trackerURI.AbsoluteUri);
                            mS.WriteByte(Convert.ToByte(buffer.Length));
                            mS.Write(buffer, 0, buffer.Length);
                        }

                        byte[] data = mS.ToArray();

                        WriteFrame(SignalType.StartTcpRelay, channelName, data, 0, data.Length);
                    }

                    return(Monitor.Wait(lockObject, timeout));
                }
            }
            finally
            {
                lock (_tcpRelayRequestLockList)
                {
                    _tcpRelayRequestLockList.Remove(channelName);
                }
            }
        }
Пример #4
0
        public IPEndPoint[] GetKClosestRandomNodeEPs()
        {
            NodeContact[] contacts = _routingTable.GetKClosestContacts(BinaryNumber.GenerateRandomNumber160());
            IPEndPoint[]  nodeEPs  = new IPEndPoint[contacts.Length];

            for (int i = 0; i < contacts.Length; i++)
            {
                nodeEPs[i] = contacts[i].NodeEP;
            }

            return(nodeEPs);
        }
Пример #5
0
        public BitChat CreateGroupChat(string networkName, string sharedSecret, bool enableTracking, bool dhtOnlyTracking)
        {
            Uri[] trackerURIs;

            if (dhtOnlyTracking)
            {
                trackerURIs = new Uri[] { }
            }
            ;
            else
            {
                trackerURIs = _profile.TrackerURIs;
            }

            BitChatNetwork network = new BitChatNetwork(_connectionManager, _trustedRootCertificates, _supportedCryptoOptions, networkName, sharedSecret, null, null, new Certificate[] { }, BitChatNetworkStatus.Online);

            return(CreateBitChat(network, BinaryNumber.GenerateRandomNumber160().ToString(), BinaryNumber.GenerateRandomNumber256().Number, -1, null, new BitChatProfile.SharedFileInfo[] { }, trackerURIs, enableTracking, false, false));
        }
Пример #6
0
        public BitChat CreatePrivateChat(MailAddress peerEmailAddress, string sharedSecret, bool enableTracking, bool dhtOnlyTracking, string invitationMessage)
        {
            Uri[] trackerURIs;

            if (dhtOnlyTracking)
            {
                trackerURIs = new Uri[] { }
            }
            ;
            else
            {
                trackerURIs = _profile.TrackerURIs;
            }

            BitChatNetwork network = new BitChatNetwork(_connectionManager, _trustedRootCertificates, _supportedCryptoOptions, peerEmailAddress, sharedSecret, null, null, new Certificate[] { }, BitChatNetworkStatus.Online, _profile.LocalCertificateStore.Certificate.IssuedTo.EmailAddress.Address, invitationMessage);

            return(CreateBitChat(network, BinaryNumber.GenerateRandomNumber160().ToString(), BinaryNumber.GenerateRandomNumber256().Number, 0, null, new BitChatProfile.SharedFileInfo[] { }, trackerURIs, enableTracking, !string.IsNullOrEmpty(invitationMessage), false));
        }
Пример #7
0
 public void SendNOOP()
 {
     WriteFrame(SignalType.NOOP, BinaryNumber.GenerateRandomNumber160(), null, 0, 0);
 }