/** * get the info about a backend * * proxy.backend[0]. * connected_clients => clients using this backend * address => ip:port or unix-path of to the backend * state => int(BACKEND_STATE_UP|BACKEND_STATE_DOWN) * type => int(BACKEND_TYPE_RW|BACKEND_TYPE_RO) * * @return nil or requested information * @see backend_state_t backend_type_t */ static int proxy_backend_get(lua_State *L) { network_backend_t *backend = *(network_backend_t **)luaL_checkself(L); gsize keysize = 0; const char *key = luaL_checklstring(L, 2, &keysize); if (strleq(key, keysize, C("connected_clients"))) { lua_pushinteger(L, backend->connected_clients); } else if (strleq(key, keysize, C("dst"))) { network_address_lua_push(L, backend->addr); } else if (strleq(key, keysize, C("state"))) { lua_pushinteger(L, backend->state); } else if (strleq(key, keysize, C("type"))) { lua_pushinteger(L, backend->type); } else if (strleq(key, keysize, C("uuid"))) { if (backend->uuid->len) { lua_pushlstring(L, S(backend->uuid)); } else { lua_pushnil(L); } } else if (strleq(key, keysize, C("weight"))) { lua_pushinteger(L, backend->weight); } else { lua_pushnil(L); } return 1; }
static int proxy_socket_get(lua_State *L) { network_socket *sock = *(network_socket **)luaL_checkself(L); gsize keysize = 0; const char *key = luaL_checklstring(L, 2, &keysize); /** * we to split it in .client and .server here */ if (strleq(key, keysize, C("default_db"))) { lua_pushlstring(L, sock->conn_attr.default_db->str, sock->conn_attr.default_db->len); return 1; }else if (strleq(key, keysize, C("charset_client"))) { lua_pushlstring(L, sock->conn_attr.charset_client->str, sock->conn_attr.charset_client->len); return 1; }else if (strleq(key, keysize, C("charset_connection"))) { lua_pushlstring(L, sock->conn_attr.charset_connection->str, sock->conn_attr.charset_connection->len); return 1; }else if (strleq(key, keysize, C("charset_results"))) { lua_pushlstring(L, sock->conn_attr.charset_results->str, sock->conn_attr.charset_results->len); return 1; }else if (strleq(key, keysize, C("address"))) { return luaL_error(L, ".address is deprecated. Use .src.name or .dst.name instead"); } else if (strleq(key, keysize, C("src"))) { return network_address_lua_push(L, sock->src); } else if (strleq(key, keysize, C("dst"))) { return network_address_lua_push(L, sock->dst); } if (sock->response) { if (strleq(key, keysize, C("username"))) { lua_pushlstring(L, S(sock->response->username)); return 1; } else if (strleq(key, keysize, C("scrambled_password"))) { lua_pushlstring(L, S(sock->response->response)); return 1; } } if (sock->challenge) { /* only the server-side has mysqld_version set */ if (strleq(key, keysize, C("mysqld_version"))) { lua_pushinteger(L, sock->challenge->server_version); return 1; } else if (strleq(key, keysize, C("thread_id"))) { lua_pushinteger(L, sock->challenge->thread_id); return 1; } else if (strleq(key, keysize, C("scramble_buffer"))) { lua_pushlstring(L, S(sock->challenge->challenge)); return 1; } } g_critical("%s: sock->challenge: %p, sock->response: %p (looking for %s)", G_STRLOC, (void *)sock->challenge, (void *)sock->response, key ); lua_pushnil(L); return 1; }