Пример #1
0
        /// <param name="socket">A UDP <see cref="Socket"/> that will use for query. You can also use <see cref="UdpClient.Client"/></param>
        /// <param name="server">Server address</param>
        /// <param name="queryType">Query type</param>
        /// <param name="natTypeDetectionRfc">Rfc algorithm type</param>
        public static STUNQueryResult Query(Socket socket, IPEndPoint server, STUNQueryType queryType,
                                            IPAddress[] localIPs, NATTypeDetectionRFC natTypeDetectionRfc)
        {
            if (natTypeDetectionRfc == NATTypeDetectionRFC.Rfc3489)
            {
                return(STUNRfc3489.Query(socket, server, queryType, localIPs, ReceiveTimeout));
            }

            if (natTypeDetectionRfc == NATTypeDetectionRFC.Rfc5780)
            {
                return(STUNRfc5780.Query(socket, server, queryType, localIPs, ReceiveTimeout));
            }

            return(new STUNQueryResult());
        }
Пример #2
0
        private static STUNQueryFullResult QueryInternal(Socket socket, IPEndPoint server, STUNQueryType queryType,
                                                         NATTypeDetectionRFC natTypeDetectionRfc)
        {
            if (natTypeDetectionRfc == NATTypeDetectionRFC.Rfc3489)
            {
                return(STUNRfc3489.Query(socket, server, queryType, ReceiveTimeout));
            }

            if (natTypeDetectionRfc == NATTypeDetectionRFC.Rfc5780)
            {
                return(STUNRfc5780.Query(socket, server, queryType, ReceiveTimeout));
            }

            throw new Exception($"Unexpected RFC type {natTypeDetectionRfc}");
        }
Пример #3
0
        /// <param name="server">Server address</param>
        /// <param name="queryType">Query type</param>
        /// <param name="closeSocket">
        /// Set to true if created socket should closed after the query
        /// else <see cref="STUNQueryResult.Socket"/> will leave open and can be used.
        /// </param>
        public static STUNQueryResult Query(IPEndPoint server, STUNQueryType queryType, bool closeSocket)
        {
            Socket     socket       = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint bindEndPoint = new IPEndPoint(IPAddress.Any, 0);

            socket.Bind(bindEndPoint);

            var result = STUNRfc5780.Query(socket, server, queryType, ReceiveTimeout);

            if (closeSocket)
            {
                socket.Dispose();
                result.Socket = null;
            }

            return(result);
        }