public IRubyObject allocate(Ruby runtime, RubyClass klazz) { return new Option(runtime, klazz); } });
@JRubyMethod public IRubyObject setsockopt(ThreadContext context, IRubyObject option) { if (option instanceof Option) { Option rsockopt = (Option) option; return setsockopt(context, rsockopt.level(context), rsockopt.optname(context), rsockopt.data(context)); } else { throw context.runtime.newArgumentError(option.toString() + " is not a Socket::Option"); } }
@JRubyMethod public IRubyObject bool(ThreadContext context) { final Ruby runtime = context.getRuntime(); validateDataSize(runtime, data, 4); return runtime.newBoolean(unpackInt(data) != 0); }
private String optionValue() { switch (option) { case SO_DEBUG: case SO_ACCEPTCONN: case SO_BROADCAST: case SO_REUSEADDR: case SO_KEEPALIVE: case SO_OOBINLINE: case SO_SNDBUF: case SO_RCVBUF: case SO_DONTROUTE: case SO_RCVLOWAT: case SO_SNDLOWAT: return String.valueOf(unpackInt(data)); case SO_LINGER: int[] linger = Option.unpackLinger(data); return ((linger[0] == 0) ? "off " : "on ") + linger[1] + "sec"; case SO_RCVTIMEO: case SO_SNDTIMEO: return Sprintf.getNumberFormat(Locale.getDefault()).format(unpackInt(data) / 1000.0); case SO_ERROR: return Errno.valueOf(unpackInt(data)).description(); case SO_TYPE: return Sock.valueOf(unpackInt(data)).description(); } return ""; }
.append(metaClass.getRealClass().getName()) .append(": ") .append(noPrefix(family)); .append(noPrefix(option)); } else if (family == ProtocolFamily.PF_UNIX) { buf .append(level.longValue()) .append(' ') .append(noPrefix(option)); } else { buf .append(level.description()) .append(' ') .append(noPrefix(option)); .append(optionValue()) .append('>');
@JRubyMethod(required = 4, meta = true) public static IRubyObject bool(ThreadContext context, IRubyObject self, IRubyObject[] args) { ProtocolFamily family = SocketUtils.protocolFamilyFromArg(args[0]); SocketLevel level = SocketUtils.levelFromArg(args[1]); SocketOption option = SocketUtils.optionFromArg(args[2]); ByteList data = packInt(args[3].isTrue() ? 1 : 0); return new Option(context.getRuntime(), family, level, option, data); }
packedValue = Option.packLinger(0, 0); } else { packedValue = Option.packLinger(1, value); packedValue = Option.packInt(value); return new Option(runtime, ProtocolFamily.PF_INET, level, opt, packedValue);
@JRubyMethod(meta = true) public static IRubyObject linger(ThreadContext context, IRubyObject self, IRubyObject vonoff, IRubyObject vsecs) { ProtocolFamily family = ProtocolFamily.PF_UNSPEC; SocketLevel level = SocketLevel.SOL_SOCKET; SocketOption option = SocketOption.SO_LINGER; int coercedVonoff; if (!TypeConverter.checkIntegerType(context, vonoff).isNil()) { coercedVonoff = vonoff.convertToInteger().getIntValue(); } else { coercedVonoff = vonoff.isTrue() ? 1 : 0; } ByteList data = packLinger(coercedVonoff, vsecs.convertToInteger().getIntValue()); return new Option(context.getRuntime(), family, level, option, data); }
public void load(final Ruby runtime, boolean wrap) throws IOException { runtime.defineClass("SocketError", runtime.getStandardError(), runtime.getStandardError().getAllocator()); RubyBasicSocket.createBasicSocket(runtime); RubySocket.createSocket(runtime); RubyServerSocket.createServerSocket(runtime); if (runtime.getInstanceConfig().isNativeEnabled() && !Platform.IS_WINDOWS) { RubyUNIXSocket.createUNIXSocket(runtime); RubyUNIXServer.createUNIXServer(runtime); } RubyIPSocket.createIPSocket(runtime); RubyTCPSocket.createTCPSocket(runtime); RubyTCPServer.createTCPServer(runtime); RubyUDPSocket.createUDPSocket(runtime); Addrinfo.createAddrinfo(runtime); Option.createOption(runtime); Ifaddr.createIfaddr(runtime); } }
@JRubyMethod public IRubyObject inspect(ThreadContext context) { StringBuffer buf = new StringBuffer("#<"); buf .append(metaClass.getRealClass().getName()) .append(" ") .append(noPrefix(family)); if (level == SocketLevel.SOL_SOCKET) { buf .append(" SOCKET ") .append(noPrefix(option)); } else if (family == ProtocolFamily.PF_UNIX) { buf .append(" level:") .append(level.longValue()) .append(" ") .append(noPrefix(option)); } else { buf .append(" level:") .append(level.description()) .append(" ") .append(noPrefix(option)); } buf .append(" ") .append(optionValue()) .append(">"); return context.runtime.newString(buf.toString()); }
@JRubyMethod(name = "int", required = 4, meta = true) public static IRubyObject rb_int(ThreadContext context, IRubyObject self, IRubyObject[] args) { ProtocolFamily family = SocketUtils.protocolFamilyFromArg(args[0]); SocketLevel level = SocketUtils.levelFromArg(args[1]); SocketOption option = SocketUtils.optionFromArg(args[2]); ByteList data = packInt(RubyNumeric.fix2int(args[3])); return new Option(context.getRuntime(), family, level, option, data); }
packedValue = Option.packLinger(0, 0); } else { packedValue = Option.packLinger(1, value); packedValue = Option.packInt(value); return new Option(runtime, ProtocolFamily.PF_INET, level, opt, packedValue);
@JRubyMethod(meta = true) public static IRubyObject linger(ThreadContext context, IRubyObject self, IRubyObject vonoff, IRubyObject vsecs) { ProtocolFamily family = ProtocolFamily.PF_UNSPEC; SocketLevel level = SocketLevel.SOL_SOCKET; SocketOption option = SocketOption.SO_LINGER; int coercedVonoff; if (!TypeConverter.checkIntegerType(context, vonoff).isNil()) { coercedVonoff = vonoff.convertToInteger().getIntValue(); } else { coercedVonoff = vonoff.isTrue() ? 1 : 0; } ByteList data = packLinger(coercedVonoff, vsecs.convertToInteger().getIntValue()); return new Option(context.getRuntime(), family, level, option, data); }
public void load(final Ruby runtime, boolean wrap) throws IOException { runtime.defineClass("SocketError", runtime.getStandardError(), runtime.getStandardError().getAllocator()); RubyBasicSocket.createBasicSocket(runtime); RubySocket.createSocket(runtime); RubyServerSocket.createServerSocket(runtime); if (runtime.getInstanceConfig().isNativeEnabled() && !Platform.IS_WINDOWS) { RubyUNIXSocket.createUNIXSocket(runtime); RubyUNIXServer.createUNIXServer(runtime); } RubyIPSocket.createIPSocket(runtime); RubyTCPSocket.createTCPSocket(runtime); RubyTCPServer.createTCPServer(runtime); RubyUDPSocket.createUDPSocket(runtime); Addrinfo.createAddrinfo(runtime); Option.createOption(runtime); Ifaddr.createIfaddr(runtime); } }
private String optionValue() { switch (option) { case SO_DEBUG: case SO_ACCEPTCONN: case SO_BROADCAST: case SO_REUSEADDR: case SO_KEEPALIVE: case SO_OOBINLINE: case SO_SNDBUF: case SO_RCVBUF: case SO_DONTROUTE: case SO_RCVLOWAT: case SO_SNDLOWAT: return String.valueOf(unpackInt(data)); case SO_LINGER: int[] linger = Option.unpackLinger(data); return ((linger[0] == 0) ? "off " : "on ") + linger[1] + "sec"; case SO_RCVTIMEO: case SO_SNDTIMEO: return Sprintf.getNumberFormat(Locale.getDefault()).format(unpackInt(data) / 1000.0); case SO_ERROR: return Errno.valueOf(unpackInt(data)).description(); case SO_TYPE: return Sock.valueOf(unpackInt(data)).description(); } return ""; }
@JRubyMethod public IRubyObject inspect(ThreadContext context) { StringBuffer buf = new StringBuffer("#<"); buf .append(metaClass.getRealClass().getName()) .append(" ") .append(noPrefix(family)); if (level == SocketLevel.SOL_SOCKET) { buf .append(" SOCKET ") .append(noPrefix(option)); } else if (family == ProtocolFamily.PF_UNIX) { buf .append(" level:") .append(level.longValue()) .append(" ") .append(noPrefix(option)); } else { buf .append(" level:") .append(level.description()) .append(" ") .append(noPrefix(option)); } buf .append(" ") .append(optionValue()) .append(">"); return context.runtime.newString(buf.toString()); }
@JRubyMethod(required = 4, meta = true) public static IRubyObject bool(ThreadContext context, IRubyObject self, IRubyObject[] args) { ProtocolFamily family = SocketUtils.protocolFamilyFromArg(args[0]); SocketLevel level = SocketUtils.levelFromArg(args[1]); SocketOption option = SocketUtils.optionFromArg(args[2]); ByteList data = packInt(args[3].isTrue() ? 1 : 0); return new Option(context.getRuntime(), family, level, option, data); }
public IRubyObject allocate(Ruby runtime, RubyClass klazz) { return new Option(runtime, klazz); } });
@JRubyMethod public IRubyObject setsockopt(ThreadContext context, IRubyObject option) { if (option instanceof Option) { Option rsockopt = (Option) option; return setsockopt(context, rsockopt.level(context), rsockopt.optname(context), rsockopt.data(context)); } else { throw context.runtime.newArgumentError(option.toString() + " is not a Socket::Option"); } }
@JRubyMethod(name = "int") public IRubyObject asInt(ThreadContext context) { final Ruby runtime = context.getRuntime(); validateDataSize(runtime, data, 4); return runtime.newFixnum(unpackInt(data)); }