Beispiel #1
0
static int proxy_tty_register(struct serial_adapter *adapter,
                              const char *uuid128, const char *address,
                              struct termios *ti, char *outpath, size_t size,
                              gboolean save)
{
    struct termios sys_ti;
    struct serial_proxy *prx;
    int sk, ret;

    sk = open(address, O_RDONLY | O_NOCTTY);
    if (sk < 0) {
        error("Cant open TTY: %s(%d)", strerror(errno), errno);
        return -EINVAL;
    }

    prx = g_new0(struct serial_proxy, 1);
    prx->address = g_strdup(address);
    prx->uuid128 = g_strdup(uuid128);
    prx->type = TTY_PROXY;
    adapter_get_address(adapter->btd_adapter, &prx->src);
    prx->adapter = adapter;

    /* Current TTY settings */
    memset(&sys_ti, 0, sizeof(sys_ti));
    tcgetattr(sk, &sys_ti);
    memcpy(&prx->sys_ti, &sys_ti, sizeof(sys_ti));
    close(sk);

    if (!ti) {
        /* Use current settings */
        memcpy(&prx->proxy_ti, &sys_ti, sizeof(sys_ti));
    } else {
        /* New TTY settings: user provided */
        memcpy(&prx->proxy_ti, ti, sizeof(*ti));
    }

    ret = register_proxy_object(prx, outpath, size);
    if (ret < 0)
        proxy_free(prx);

    if (save)
        proxy_store(&prx->src, uuid128, address, NULL,
                    prx->channel, 0, &prx->proxy_ti);

    return ret;
}
Beispiel #2
0
static int proxy_tcp_register(struct serial_adapter *adapter,
                              const char *uuid128, const char *address,
                              char *outpath, size_t size, gboolean save)
{
    struct serial_proxy *prx;
    int ret;

    prx = g_new0(struct serial_proxy, 1);
    prx->address = g_strdup(address);
    prx->uuid128 = g_strdup(uuid128);
    prx->type = TCP_SOCKET_PROXY;
    adapter_get_address(adapter->btd_adapter, &prx->src);
    prx->adapter = adapter;

    ret = register_proxy_object(prx, outpath, size);
    if (ret < 0)
        proxy_free(prx);

    if (save)
        proxy_store(&prx->src, uuid128, address, NULL,
                    prx->channel, 0, NULL);

    return ret;
}
Beispiel #3
0
static int proxy_tcp_register(struct serial_adapter *adapter,
				const char *uuid128, const char *address,
				struct serial_proxy **proxy)
{
	struct serial_proxy *prx;
	int ret;

	prx = g_new0(struct serial_proxy, 1);
	prx->address = g_strdup(address);
	prx->uuid128 = g_strdup(uuid128);
	prx->type = TCP_SOCKET_PROXY;
	adapter_get_address(adapter->btd_adapter, &prx->src);
	prx->adapter = adapter;

	ret = register_proxy_object(prx);
	if (ret < 0) {
		proxy_free(prx);
		return ret;
	}

	*proxy = prx;

	return ret;
}