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; }
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; }
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; }