Esempio n. 1
0
CAMLprim value
uwt_udp_set_membership_na(value o_udp, value o_mul,
                          value o_int, value o_mem)
{
  HANDLE_INIT_NA(u, o_udp);
  /* uninit allowed, will trigger implicit binding */
  uv_membership membership = Long_val(o_mem) ? UV_JOIN_GROUP : UV_LEAVE_GROUP;
  const char* multicast_addr = String_val(o_mul);
  char* interface_addr = NULL;
  if ( !uwt_is_safe_string(o_mul) ){
    return VAL_UWT_INT_RESULT_ECHARSET;
  }
  if ( o_int != Val_unit ){
    value s = Field(o_int,0);
    if ( !uwt_is_safe_string(s) ){
      return VAL_UWT_INT_RESULT_ECHARSET;
    }
    interface_addr = String_val(s);
  }
  int ret = uv_udp_set_membership((uv_udp_t*)u->handle,
                                  multicast_addr,
                                  interface_addr,
                                  membership);
  if ( ret >= 0 ){
    u->initialized = 1;
  }
  return (VAL_UWT_UNIT_RESULT(ret));
}
Esempio n. 2
0
File: udp.c Progetto: luvit/luv
static int luv_udp_set_membership(lua_State* L) {
    uv_udp_t* handle = luv_check_udp(L, 1);
    const char* multicast_addr = luaL_checkstring(L, 2);
    const char* interface_addr = luaL_checkstring(L, 3);
    uv_membership membership = (uv_membership)luaL_checkoption(L, 4, NULL, luv_membership_opts);
    int ret = uv_udp_set_membership(handle, multicast_addr, interface_addr, membership);
    if (ret < 0) return luv_error(L, ret);
    lua_pushinteger(L, ret);
    return 1;
}
Esempio n. 3
0
/*  const char* interface_addr, uv_membership membership);*/
int luv_udp_set_membership(lua_State* L) {
  uv_udp_t* handle = (uv_udp_t*)luv_checkudata(L, 1, "udp");
  const char* multicast_addr = luaL_checkstring(L, 2);
  const char* interface_addr = luaL_checkstring(L, 3);
  int option = luaL_checkoption (L, 4, "membership", luv_membership_options);
  uv_membership membership = option ? UV_LEAVE_GROUP : UV_JOIN_GROUP;

  if (uv_udp_set_membership(handle, multicast_addr, interface_addr, membership)) {
    uv_err_t err = uv_last_error(luv_get_loop(L));
    return luaL_error(L, "udp_set_membership: %s", uv_strerror(err));
  }

  return 0;
}
Esempio n. 4
0
/*
 * Class:     com_oracle_libuv_handles_UDPHandle
 * Method:    _set_membership
 * Signature: (JLjava/lang/String;Ljava/lang/String;I)I
 */
JNIEXPORT jint JNICALL Java_com_oracle_libuv_handles_UDPHandle__1set_1membership
  (JNIEnv *env, jobject that, jlong udp, jstring multicastAddress, jstring interfaceAddress, jint membership) {

  assert(udp);
  uv_udp_t* handle = reinterpret_cast<uv_udp_t*>(udp);
  const char* maddr = env->GetStringUTFChars(multicastAddress, 0);
  const char* iaddr = env->GetStringUTFChars(interfaceAddress, 0);
  int r = uv_udp_set_membership(handle, maddr, iaddr, static_cast<uv_membership>(membership));
  env->ReleaseStringUTFChars(multicastAddress, maddr);
  env->ReleaseStringUTFChars(interfaceAddress, iaddr);
  if (r) {
    ThrowException(env, handle->loop, "uv_udp_set_membership");
  }
  return r;
}
Esempio n. 5
0
static int lluv_udp_set_membership(lua_State *L){
  static const lluv_uv_const_t FLAGS[] = {
    { UV_LEAVE_GROUP,   "leave" },
    { UV_JOIN_GROUP,    "join"  },

    { 0, NULL }
  };

  lluv_handle_t  *handle = lluv_check_udp(L, 1, LLUV_FLAG_OPEN);
  const char *multicast_addr = luaL_checkstring(L, 2);
  const char *interface_addr = luaL_checkstring(L, 3);
  uv_membership membership   = (uv_membership)lluv_opt_named_const(L, 4, UV_JOIN_GROUP, FLAGS);

  int err = uv_udp_set_membership(LLUV_H(handle, uv_udp_t), multicast_addr, interface_addr, membership);
  if(err < 0){
    return lluv_fail(L, handle->flags, LLUV_ERR_UV, err, NULL);
  }

  lua_settop(L, 1);
  return 1;
}
Esempio n. 6
0
File: udp.c Progetto: jppommet/pyuv
static PyObject *
UDP_func_set_membership(UDP *self, PyObject *args)
{
    int r, membership;
    char *multicast_address, *interface_address;

    interface_address = NULL;

    RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL);

    if (!PyArg_ParseTuple(args, "si|s:set_membership", &multicast_address, &membership, &interface_address)) {
        return NULL;
    }

    r = uv_udp_set_membership((uv_udp_t *)UV_HANDLE(self), multicast_address, interface_address, membership);
    if (r != 0) {
        RAISE_UV_EXCEPTION(UV_HANDLE_LOOP(self), PyExc_UDPError);
        return NULL;
    }

    Py_RETURN_NONE;
}
Esempio n. 7
0
File: udp.c Progetto: imclab/pyuv
static PyObject *
UDP_func_set_membership(UDP *self, PyObject *args)
{
    int err, membership;
    char *multicast_address, *interface_address;

    interface_address = NULL;

    RAISE_IF_HANDLE_NOT_INITIALIZED(self, NULL);
    RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL);

    if (!PyArg_ParseTuple(args, "si|s:set_membership", &multicast_address, &membership, &interface_address)) {
        return NULL;
    }

    err = uv_udp_set_membership(&self->udp_h, multicast_address, interface_address, membership);
    if (err < 0) {
        RAISE_UV_EXCEPTION(err, PyExc_UDPError);
        return NULL;
    }

    Py_RETURN_NONE;
}
Esempio n. 8
0
int  UvUdpSocket::leaveMuticastGroup(string muticastAddr,string interfaceAddr)
{
	return uv_udp_set_membership(m_uv_udp, muticastAddr.c_str(), interfaceAddr.c_str(), UV_LEAVE_GROUP);
}
Esempio n. 9
0
int main(int argc, char *argv[])
{
	helix_session_t session;
	struct sockaddr_in addr;
	helix_protocol_t proto;
	struct config cfg = {};
	uv_udp_t socket;
	int err;

	program = basename(argv[0]);

	parse_options(&cfg, argc, argv);

	if (!cfg.symbol) {
		fprintf(stderr, "error: symbol is not specified. Use the '-s' option to specify it.\n");
		exit(1);
	}

	if (!cfg.multicast_proto) {
		fprintf(stderr, "error: multicast protocol is not specified. Use the '-c' option to specify it.\n");
		exit(1);
	}

	if (!cfg.multicast_addr) {
		fprintf(stderr, "error: multicast address is not specified. Use the '-a' option to specify it.\n");
		exit(1);
	}

	if (!cfg.multicast_port) {
		fprintf(stderr, "error: multicast port is not specified. Use the '-p' option to specify it.\n");
		exit(1);
	}

	if (!strcmp(cfg.format, "pretty")) {
		fmt_ops = &fmt_pretty_ops;
	} else if (!strcmp(cfg.format, "csv")) {
		fmt_ops = &fmt_csv_ops;
	} else {
		fprintf(stderr, "error: %s: unsupported format\n", cfg.format);
		exit(1);
	}

	if (cfg.output) {
		output = fopen(cfg.output, "w");
		if (!output) {
			fprintf(stderr, "error: %s: %s\n", cfg.output, strerror(errno));
			exit(1);
		}
	} else {
		output = stdout;
	}

	proto = helix_protocol_lookup(cfg.multicast_proto);
	if (!proto) {
		fprintf(stderr, "error: protocol '%s' is not supported\n", cfg.multicast_proto);
		exit(1);
	}

	session = helix_session_create(proto, cfg.symbol, process_ob_event, process_trade_event, NULL);
	if (!session) {
		fprintf(stderr, "error: unable to create new session\n");
		exit(1);
	}

	err = uv_udp_init(uv_default_loop(), &socket);
	if (err) {
		libuv_error("uv_udp_init", err);
	}
	socket.data = session;

	err = uv_ip4_addr("0.0.0.0", cfg.multicast_port, &addr);
	if (err) {
		libuv_error("uv_ip4_addr", err);
	}

	err = uv_udp_bind(&socket, (const struct sockaddr *)&addr, UV_UDP_REUSEADDR);
	if (err) {
		libuv_error("uv_udp_bind", err);
	}

	err = uv_udp_set_membership(&socket, cfg.multicast_addr, NULL, UV_JOIN_GROUP);
	if (err) {
		libuv_error("uv_udp_set_membership", err);
	}

	err = uv_udp_recv_start(&socket, alloc_packet, recv_packet);
	if (err) {
		libuv_error("uv_udp_recv_start", err);
	}

	fmt_ops->fmt_header();

	uv_run(uv_default_loop(), UV_RUN_DEFAULT);
}
Esempio n. 10
0
extern "C" int
rust_uv_udp_set_membership
(uv_udp_t* handle, const char* m_addr, const char* i_addr, uv_membership membership) {
    return uv_udp_set_membership(handle, m_addr, i_addr, membership);
}
Esempio n. 11
0
int main(int argc, char *argv[])
{
	helix_session_t session;
	struct sockaddr_in addr;
	helix_protocol_t proto;
	struct config cfg = {};
	uv_udp_t socket;
	int err;

	program = basename(argv[0]);

	parse_options(&cfg, argc, argv);

	if (!cfg.symbol) {
		fprintf(stderr, "error: symbol is not specified. Use the '-s' option to specify it.\n");
		exit(1);
	}

	if (!cfg.proto) {
		fprintf(stderr, "error: multicast protocol is not specified. Use the '-P' option to specify it.\n");
		exit(1);
	}

	if (!cfg.multicast_addr) {
		fprintf(stderr, "error: multicast address is not specified. Use the '-a' option to specify it.\n");
		exit(1);
	}

	if (!cfg.multicast_port) {
		fprintf(stderr, "error: multicast port is not specified. Use the '-p' option to specify it.\n");
		exit(1);
	}

	proto = helix_protocol_lookup(cfg.proto);
	if (!proto) {
		fprintf(stderr, "error: protocol '%s' is not supported\n", cfg.proto);
		exit(1);
	}

	session = helix_session_create(proto, process_ob_event, process_trade_event, NULL);
	if (!session) {
		fprintf(stderr, "error: unable to create new session\n");
		exit(1);
	}

	helix_session_subscribe(session, cfg.symbol, cfg.max_orders);

	err = uv_udp_init(uv_default_loop(), &socket);
	if (err) {
		libuv_error("uv_udp_init", err);
	}
	socket.data = session;

	err = uv_ip4_addr("0.0.0.0", cfg.multicast_port, &addr);
	if (err) {
		libuv_error("uv_ip4_addr", err);
	}

	err = uv_udp_bind(&socket, (const struct sockaddr *)&addr, UV_UDP_REUSEADDR);
	if (err) {
		libuv_error("uv_udp_bind", err);
	}

	err = uv_udp_set_membership(&socket, cfg.multicast_addr, NULL, UV_JOIN_GROUP);
	if (err) {
		libuv_error("uv_udp_set_membership", err);
	}

	err = uv_udp_recv_start(&socket, alloc_packet, recv_packet);
	if (err) {
		libuv_error("uv_udp_recv_start", err);
	}

	initscr();

	clear();

	refresh();

	uv_run(uv_default_loop(), UV_RUN_DEFAULT);

	endwin();

	return 0;
}