/** * Open connection to graylog2 server */ static switch_socket_t *open_graylog2_socket(const char *host, switch_port_t port, switch_memory_pool_t *pool) { switch_sockaddr_t *graylog2_addr = NULL; switch_socket_t *graylog2_sock = NULL; if (switch_sockaddr_info_get(&graylog2_addr, host, SWITCH_UNSPEC, port, 0, pool) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bad address: %s:%d\n", host, port); return NULL; } if (switch_socket_create(&graylog2_sock, switch_sockaddr_get_family(graylog2_addr), SOCK_DGRAM, 0, pool) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to open UDP socket\n"); return NULL; } if (switch_socket_connect(graylog2_sock, graylog2_addr) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to connect to: %s:%d\n", host, port); switch_socket_close(graylog2_sock); return NULL; } return graylog2_sock; }
static JSBool socket_connect(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) { js_socket_obj_t *socket = JS_GetPrivate(cx, obj); if (socket == NULL) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to find js object.\n"); return JS_FALSE; } if (argc == 2) { char *host = JS_GetStringBytes(JS_ValueToString(cx, argv[0])); int32 port; switch_sockaddr_t *addr; switch_status_t ret; JS_ValueToInt32(cx, argv[1], &port); ret = switch_sockaddr_info_get(&addr, host, AF_INET, (switch_port_t) port, 0, socket->pool); if (ret != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "switch_sockaddr_info_get failed: %d.\n", ret); return JS_FALSE; } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Connecting to: %s:%d.\n", host, port); socket->saveDepth = JS_SuspendRequest(cx); ret = switch_socket_connect(socket->socket, addr); JS_ResumeRequest(cx, socket->saveDepth); if (ret != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "switch_socket_connect failed: %d.\n", ret); *rval = BOOLEAN_TO_JSVAL(JS_FALSE); } else *rval = BOOLEAN_TO_JSVAL(JS_TRUE); } return JS_TRUE; }