Example #1
0
        public static int blockOrUnblock6(bool block, FileDescriptor fd, byte[] group, int index, byte[] source)
        {
#if FIRST_PASS
            return(0);
#else
            try
            {
                const System.Net.Sockets.SocketOptionName MCAST_BLOCK_SOURCE   = (System.Net.Sockets.SocketOptionName) 43;
                const System.Net.Sockets.SocketOptionName MCAST_UNBLOCK_SOURCE = (System.Net.Sockets.SocketOptionName) 44;
                // group_source_req
                byte[] optionValue = new byte[264];
                optionValue[0] = (byte)index;
                optionValue[1] = (byte)(index >> 8);
                optionValue[2] = (byte)(index >> 16);
                optionValue[3] = (byte)(index >> 24);
                PutSockAddrIn6(optionValue, 8, group);
                PutSockAddrIn6(optionValue, 136, source);
                fd.getSocket().SetSocketOption(System.Net.Sockets.SocketOptionLevel.IPv6, block ? MCAST_BLOCK_SOURCE : MCAST_UNBLOCK_SOURCE, optionValue);
                return(0);
            }
            catch (System.Net.Sockets.SocketException x)
            {
                throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x);
            }
            catch (System.ObjectDisposedException)
            {
                throw new global::java.net.SocketException("Socket is closed");
            }
#endif
        }
        public static void SetMaximumTcpRetransmissionTime(System.Net.Sockets.Socket socket, int amountInSeconds = 3)
        {
            //On windows this is TCP_MAXRT elsewhere USER_TIMEOUT

            //Mono checks the options and will not call setsocketopt if the name is not known to the Mono Runtime.
            //A work around would be to either define the call for get and set socketopt in this library or call the SetSocketOption_internal method for mono.

            System.Net.Sockets.SocketOptionName optionName = (System.Net.Sockets.SocketOptionName)(Common.Extensions.OperatingSystemExtensions.IsWindows ? 5 : 18);

            SetTcpOption(socket, optionName, amountInSeconds);
        }
Example #3
0
        public static void setIntOption0(FileDescriptor fd, bool mayNeedConversion, int level, int opt, int arg, bool isIPv6)
        {
#if !FIRST_PASS
            if (level == global::[email protected]_IPV6 && opt == global::[email protected]_TCLASS)
            {
                return;
            }
            System.Net.Sockets.SocketOptionLevel sol = (System.Net.Sockets.SocketOptionLevel)level;
            System.Net.Sockets.SocketOptionName  son = (System.Net.Sockets.SocketOptionName)opt;
            if (mayNeedConversion)
            {
                const int IPTOS_TOS_MASK  = 0x1e;
                const int IPTOS_PREC_MASK = 0xe0;
                if (sol == System.Net.Sockets.SocketOptionLevel.IP &&
                    son == System.Net.Sockets.SocketOptionName.TypeOfService)
                {
                    arg &= (IPTOS_TOS_MASK | IPTOS_PREC_MASK);
                }
            }
            try
            {
                fd.getSocket().SetSocketOption(sol, son, arg);
            }
            catch (System.Net.Sockets.SocketException x)
            {
                if (mayNeedConversion)
                {
                    if (x.ErrorCode == global::java.net.SocketUtil.WSAENOPROTOOPT &&
                        sol == System.Net.Sockets.SocketOptionLevel.IP &&
                        (son == System.Net.Sockets.SocketOptionName.TypeOfService || son == System.Net.Sockets.SocketOptionName.MulticastLoopback))
                    {
                        return;
                    }
                    if (x.ErrorCode == global::java.net.SocketUtil.WSAEINVAL &&
                        sol == System.Net.Sockets.SocketOptionLevel.IP &&
                        son == System.Net.Sockets.SocketOptionName.TypeOfService)
                    {
                        return;
                    }
                }
                throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x);
            }
            catch (System.ObjectDisposedException)
            {
                throw new global::java.net.SocketException("Socket is closed");
            }
#endif
        }
Example #4
0
        public static bool _GetSocketOption_System_Net_Sockets_Socket_System_Net_Sockets_SocketOptionLevel_System_Net_Sockets_SocketOptionName_System_Int32( )
        {
            //Parameters
            System.Net.Sockets.SocketOptionLevel optionLevel = null;
            System.Net.Sockets.SocketOptionName  optionName  = null;
            System.Int32 optionLength = null;

            //ReturnType/Value
            System.Byte[] returnVal_Real        = null;
            System.Byte[] returnVal_Intercepted = null;

            //Exception
            Exception exception_Real        = null;
            Exception exception_Intercepted = null;

            InterceptionMaintenance.disableInterception( );

            try
            {
                returnValue_Real = System.Net.Sockets.Socket.GetSocketOption(optionLevel, optionName, optionLength);
            }

            catch (Exception e)
            {
                exception_Real = e;
            }


            InterceptionMaintenance.enableInterception( );

            try
            {
                returnValue_Intercepted = System.Net.Sockets.Socket.GetSocketOption(optionLevel, optionName, optionLength);
            }

            catch (Exception e)
            {
                exception_Intercepted = e;
            }


            Return((exception_Real.Messsage == exception_Intercepted.Message) && (returnValue_Real == returnValue_Intercepted));
        }
Example #5
0
        public static int getIntOption0(FileDescriptor fd, bool mayNeedConversion, int level, int opt)
        {
#if FIRST_PASS
            return(0);
#else
            if (level == global::[email protected]_IPV6 && opt == global::[email protected]_TCLASS)
            {
                return(0);
            }
            System.Net.Sockets.SocketOptionLevel sol = (System.Net.Sockets.SocketOptionLevel)level;
            System.Net.Sockets.SocketOptionName  son = (System.Net.Sockets.SocketOptionName)opt;
            try
            {
                object obj = fd.getSocket().GetSocketOption(sol, son);
                System.Net.Sockets.LingerOption linger = obj as System.Net.Sockets.LingerOption;
                if (linger != null)
                {
                    return(linger.Enabled ? linger.LingerTime : -1);
                }
                return((int)obj);
            }
            catch (System.Net.Sockets.SocketException x)
            {
                if (mayNeedConversion)
                {
                    if (x.ErrorCode == global::java.net.SocketUtil.WSAENOPROTOOPT &&
                        sol == System.Net.Sockets.SocketOptionLevel.IP &&
                        son == System.Net.Sockets.SocketOptionName.TypeOfService)
                    {
                        return(0);
                    }
                }
                throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x);
            }
            catch (System.ObjectDisposedException)
            {
                throw new global::java.net.SocketException("Socket is closed");
            }
#endif
        }
Example #6
0
        public static int joinOrDrop6(bool join, FileDescriptor fd, byte[] group, int index, byte[] source)
        {
#if FIRST_PASS
            return(0);
#else
            try
            {
                if (source == null)
                {
                    fd.getSocket().SetSocketOption(System.Net.Sockets.SocketOptionLevel.IPv6,
                                                   join ? System.Net.Sockets.SocketOptionName.AddMembership : System.Net.Sockets.SocketOptionName.DropMembership,
                                                   new System.Net.Sockets.IPv6MulticastOption(new System.Net.IPAddress(group), index));
                }
                else
                {
                    const System.Net.Sockets.SocketOptionName MCAST_JOIN_SOURCE_GROUP  = (System.Net.Sockets.SocketOptionName) 45;
                    const System.Net.Sockets.SocketOptionName MCAST_LEAVE_SOURCE_GROUP = (System.Net.Sockets.SocketOptionName) 46;
                    // group_source_req
                    byte[] optionValue = new byte[264];
                    optionValue[0] = (byte)index;
                    optionValue[1] = (byte)(index >> 8);
                    optionValue[2] = (byte)(index >> 16);
                    optionValue[3] = (byte)(index >> 24);
                    PutSockAddrIn6(optionValue, 8, group);
                    PutSockAddrIn6(optionValue, 136, source);
                    fd.getSocket().SetSocketOption(System.Net.Sockets.SocketOptionLevel.IPv6, join ? MCAST_JOIN_SOURCE_GROUP : MCAST_LEAVE_SOURCE_GROUP, optionValue);
                }
                return(0);
            }
            catch (System.Net.Sockets.SocketException x)
            {
                throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x);
            }
            catch (System.ObjectDisposedException)
            {
                throw new global::java.net.SocketException("Socket is closed");
            }
#endif
        }
Example #7
0
        static StackObject *SetSocketOption_0(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 4);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            System.Int32 optionValue = ptr_of_this_method->Value;
            ptr_of_this_method = ILIntepreter.Minus(__esp, 2);
            System.Net.Sockets.SocketOptionName optionName = (System.Net.Sockets.SocketOptionName) typeof(System.Net.Sockets.SocketOptionName).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);
            ptr_of_this_method = ILIntepreter.Minus(__esp, 3);
            System.Net.Sockets.SocketOptionLevel optionLevel = (System.Net.Sockets.SocketOptionLevel) typeof(System.Net.Sockets.SocketOptionLevel).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);
            ptr_of_this_method = ILIntepreter.Minus(__esp, 4);
            System.Net.Sockets.Socket instance_of_this_method;
            instance_of_this_method = (System.Net.Sockets.Socket) typeof(System.Net.Sockets.Socket).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            instance_of_this_method.SetSocketOption(optionLevel, optionName, optionValue);

            return(__ret);
        }
        public static bool _SetSocketOption_System_Net_Sockets_Socket_System_Net_Sockets_SocketOptionLevel_System_Net_Sockets_SocketOptionName_System_Int32( )
        {
            //Parameters
            System.Net.Sockets.SocketOptionLevel optionLevel = null;
            System.Net.Sockets.SocketOptionName  optionName  = null;
            System.Int32 optionValue = null;


            //Exception
            Exception exception_Real        = null;
            Exception exception_Intercepted = null;

            InterceptionMaintenance.disableInterception( );

            try
            {
                returnValue_Real = System.Net.Sockets.Socket.SetSocketOption(optionLevel, optionName, optionValue);
            }

            catch (Exception e)
            {
                exception_Real = e;
            }


            InterceptionMaintenance.enableInterception( );

            try
            {
                returnValue_Intercepted = System.Net.Sockets.Socket.SetSocketOption(optionLevel, optionName, optionValue);
            }

            catch (Exception e)
            {
                exception_Intercepted = e;
            }
        }
Example #9
0
        public static FileDescriptor socket0(bool preferIPv6, bool stream, bool reuse)
        {
#if FIRST_PASS
            return(null);
#else
            try
            {
                System.Net.Sockets.AddressFamily addressFamily = preferIPv6
                                        ? System.Net.Sockets.AddressFamily.InterNetworkV6
                                        : System.Net.Sockets.AddressFamily.InterNetwork;
                System.Net.Sockets.SocketType socketType = stream
                                        ? System.Net.Sockets.SocketType.Stream
                                        : System.Net.Sockets.SocketType.Dgram;
                System.Net.Sockets.ProtocolType protocolType = stream
                                        ? System.Net.Sockets.ProtocolType.Tcp
                                        : System.Net.Sockets.ProtocolType.Udp;
                System.Net.Sockets.Socket socket = new System.Net.Sockets.Socket(addressFamily, socketType, protocolType);
                if (preferIPv6)
                {
                    // enable IPv4 over IPv6 sockets (note that we don't have to check for >= Vista here, because nio sockets only support IPv6 on >= Vista)
                    const System.Net.Sockets.SocketOptionName IPV6_V6ONLY = (System.Net.Sockets.SocketOptionName) 27;
                    socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.IPv6, IPV6_V6ONLY, 0);
                }
                if (!stream)
                {
                    setConnectionReset(socket, false);
                }
                FileDescriptor fd = new FileDescriptor();
                fd.setSocket(socket);
                return(fd);
            }
            catch (System.Net.Sockets.SocketException x)
            {
                throw global::java.net.SocketUtil.convertSocketExceptionToIOException(x);
            }
#endif
        }
Example #10
0
 public void GetSocketOption(System.Net.Sockets.SocketOptionLevel optionLevel, System.Net.Sockets.SocketOptionName optionName, byte[] optionValue)
 {
 }
Example #11
0
 public object GetSocketOption(System.Net.Sockets.SocketOptionLevel optionLevel, System.Net.Sockets.SocketOptionName optionName)
 {
     throw null;
 }
Example #12
0
 public byte[] GetSocketOption(System.Net.Sockets.SocketOptionLevel optionLevel, System.Net.Sockets.SocketOptionName optionName, int optionLength)
 {
     return(default(byte[]));
 }
Example #13
0
 public object GetSocketOption(System.Net.Sockets.SocketOptionLevel optionLevel, System.Net.Sockets.SocketOptionName optionName)
 {
     return(default(object));
 }
        public static void SetMaximumSegmentSize(System.Net.Sockets.Socket socket, int size)
        {
            System.Net.Sockets.SocketOptionName optionName = (System.Net.Sockets.SocketOptionName)(Common.Extensions.OperatingSystemExtensions.IsWindows ? 4 : 2);

            SetTcpOption(socket, optionName, size);
        }
        //Should verify the value for the option is correct for the OS.

        public static void GetMaximumSegmentSize(System.Net.Sockets.Socket socket, out int result)
        {
            System.Net.Sockets.SocketOptionName optionName = (System.Net.Sockets.SocketOptionName)(Common.Extensions.OperatingSystemExtensions.IsWindows ? 4 : 2);

            result = (int)socket.GetSocketOption(System.Net.Sockets.SocketOptionLevel.Tcp, optionName);
        }
Example #16
0
 public byte[] GetSocketOption(System.Net.Sockets.SocketOptionLevel optionLevel, System.Net.Sockets.SocketOptionName optionName, int optionLength)
 {
     throw null;
 }
Example #17
0
 public void SetSocketOption(System.Net.Sockets.SocketOptionLevel optionLevel, System.Net.Sockets.SocketOptionName optionName, object optionValue)
 {
 }
        //Should also have a TrySetSocketOption

        //Should ensure that the correct options are being set, these are all verified as windows options but Linux or Mac may not have them

        //SetSocketOption_internal should be determined by OperatingSystemExtensions and RuntimeExtensions.
        //Will need to build a Map of names to values for those platforms and translate.

        internal static void SetTcpOption(System.Net.Sockets.Socket socket, System.Net.Sockets.SocketOptionName name, int value)
        {
            /*if (Common.Extensions.OperatingSystemExtensions.IsWindows) */ socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Tcp, name, value);
            //else SetSocketOption_internal
        }