summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/util/server_id.c36
-rw-r--r--lib/util/util.h2
-rwxr-xr-xlib/util/wscript_build3
-rw-r--r--librpc/idl/server_id.idl7
-rw-r--r--source3/Makefile.in2
-rw-r--r--source3/include/messages.h7
-rw-r--r--source3/include/proto.h1
-rw-r--r--source3/lib/g_lock.c10
-rw-r--r--source3/lib/util.c18
-rw-r--r--source3/locking/brlock.c2
-rw-r--r--source3/smbd/oplock.c10
-rw-r--r--source3/smbd/sesssetup.c2
-rw-r--r--source3/utils/net_g_lock.c2
-rw-r--r--source3/utils/net_serverid.c12
-rw-r--r--source3/utils/smbcontrol.c6
-rw-r--r--source4/cluster/cluster.c11
-rw-r--r--source4/cluster/cluster.h1
-rw-r--r--source4/cluster/cluster_private.h2
-rw-r--r--source4/cluster/local.c11
-rw-r--r--source4/lib/messaging/messaging.c8
-rw-r--r--source4/smb_server/smb/receive.c2
-rw-r--r--source4/smbd/service_stream.c2
22 files changed, 77 insertions, 80 deletions
diff --git a/lib/util/server_id.c b/lib/util/server_id.c
new file mode 100644
index 0000000000..a67c40eb19
--- /dev/null
+++ b/lib/util/server_id.c
@@ -0,0 +1,36 @@
+/*
+ Unix SMB/CIFS implementation.
+ Samba utility functions
+ Copyright (C) Andrew Bartlett 2011
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "librpc/gen_ndr/server_id.h"
+
+char *server_id_str(TALLOC_CTX *mem_ctx, const struct server_id *id)
+{
+ if (id->vnn == NONCLUSTER_VNN && id->task_id == 0) {
+ return talloc_asprintf(mem_ctx,
+ "%llu",
+ (unsigned long long)id->pid);
+ } else {
+ return talloc_asprintf(mem_ctx,
+ "%u:%llu:%u",
+ (unsigned)id->vnn,
+ (unsigned long long)id->pid,
+ (unsigned)id->task_id);
+ }
+}
diff --git a/lib/util/util.h b/lib/util/util.h
index e89c4ac997..e50cc38a2f 100644
--- a/lib/util/util.h
+++ b/lib/util/util.h
@@ -916,5 +916,7 @@ char *data_path(TALLOC_CTX *mem_ctx, const char *name);
**/
const char *shlib_ext(void);
+struct server_id;
+char *server_id_str(TALLOC_CTX *mem_ctx, const struct server_id *id);
#endif /* _SAMBA_UTIL_H_ */
diff --git a/lib/util/wscript_build b/lib/util/wscript_build
index 8ce30eb689..6c4bb37884 100755
--- a/lib/util/wscript_build
+++ b/lib/util/wscript_build
@@ -5,7 +5,8 @@ common_util_sources = '''talloc_stack.c smb_threads.c xfile.c data_blob.c
genrand.c fsusage.c blocking.c become_daemon.c
signal.c system.c params.c util.c util_id.c util_net.c
util_strlist.c util_paths.c idtree.c debug.c fault.c base64.c
- util_str.c util_str_common.c substitute.c ms_fnmatch.c'''
+ util_str.c util_str_common.c substitute.c ms_fnmatch.c
+ server_id.c'''
common_util_headers = 'debug.h'
common_util_public_deps = 'talloc pthread LIBCRYPTO CHARSET'
diff --git a/librpc/idl/server_id.idl b/librpc/idl/server_id.idl
index 51900000ed..414e05a190 100644
--- a/librpc/idl/server_id.idl
+++ b/librpc/idl/server_id.idl
@@ -4,6 +4,13 @@
interface server_id
{
+ /*
+ * Virtual Node Numbers are identifying a node within a cluster.
+ * Ctdbd sets this, we retrieve our vnn from it.
+ */
+
+ const int NONCLUSTER_VNN = 0xFFFFFFFF;
+
/* used to look like the following, note that unique_id was not
* marshalled at all...
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 8165d2585c..a06c8c7c09 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -429,7 +429,7 @@ UTIL_OBJ = ../lib/util/rbtree.o ../lib/util/signal.o ../lib/util/time.o \
../lib/util/tevent_werror.o \
../lib/util/smb_threads.o ../lib/util/util_id.o \
../lib/util/blocking.o ../lib/util/rfc1738.o \
- ../lib/util/select.o ../lib/util/util_pw.o
+ ../lib/util/select.o ../lib/util/util_pw.o ../lib/util/server_id.o
CRYPTO_OBJ = ../lib/crypto/crc32.o ../lib/crypto/md5.o \
../lib/crypto/hmacmd5.o ../lib/crypto/arcfour.o \
diff --git a/source3/include/messages.h b/source3/include/messages.h
index a78599055d..41d5bb19fd 100644
--- a/source3/include/messages.h
+++ b/source3/include/messages.h
@@ -49,13 +49,6 @@
/*
- * Virtual Node Numbers are identifying a node within a cluster. Ctdbd sets
- * this, we retrieve our vnn from it.
- */
-
-#define NONCLUSTER_VNN (0xFFFFFFFF)
-
-/*
* ctdb gives us 64-bit server ids for messaging_send. This is done to avoid
* pid clashes and to be able to register for special messages like "all
* smbds".
diff --git a/source3/include/proto.h b/source3/include/proto.h
index c04dc94e20..42c62d2f6f 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -594,7 +594,6 @@ bool cluster_id_equal(const struct server_id *id1,
const struct server_id *id2);
bool procid_is_me(const struct server_id *pid);
struct server_id interpret_pid(const char *pid_string);
-char *procid_str(TALLOC_CTX *mem_ctx, const struct server_id *pid);
char *procid_str_static(const struct server_id *pid);
bool procid_valid(const struct server_id *pid);
bool procid_is_local(const struct server_id *pid);
diff --git a/source3/lib/g_lock.c b/source3/lib/g_lock.c
index f2452919af..006ee3698c 100644
--- a/source3/lib/g_lock.c
+++ b/source3/lib/g_lock.c
@@ -108,7 +108,7 @@ static bool g_lock_parse(TALLOC_CTX *mem_ctx, TDB_DATA data,
DEBUG(10, ("locks:\n"));
for (i=0; i<num_locks; i++) {
DEBUGADD(10, ("%s: %s %s\n",
- procid_str(talloc_tos(), &locks[i].pid),
+ server_id_str(talloc_tos(), &locks[i].pid),
((locks[i].lock_type & 1) == G_LOCK_READ) ?
"read" : "write",
(locks[i].lock_type & G_LOCK_PENDING) ?
@@ -118,7 +118,7 @@ static bool g_lock_parse(TALLOC_CTX *mem_ctx, TDB_DATA data,
&& !process_exists(locks[i].pid)) {
DEBUGADD(10, ("lock owner %s died -- discarding\n",
- procid_str(talloc_tos(),
+ server_id_str(talloc_tos(),
&locks[i].pid)));
if (i < (num_locks-1)) {
@@ -146,7 +146,7 @@ static void g_lock_cleanup(int *pnum_locks, struct g_lock_rec *locks)
continue;
}
DEBUGADD(10, ("%s does not exist -- discarding\n",
- procid_str(talloc_tos(), &locks[i].pid)));
+ server_id_str(talloc_tos(), &locks[i].pid)));
if (i < (num_locks-1)) {
locks[i] = locks[num_locks-1];
@@ -496,7 +496,7 @@ static void g_lock_got_retry(struct messaging_context *msg,
bool *pretry = (bool *)private_data;
DEBUG(10, ("Got retry message from pid %s\n",
- procid_str(talloc_tos(), &server_id)));
+ server_id_str(talloc_tos(), &server_id)));
*pretry = true;
}
@@ -587,7 +587,7 @@ static NTSTATUS g_lock_force_unlock(struct g_lock_ctx *ctx, const char *name,
&data_blob_null);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("sending retry to %s failed: %s\n",
- procid_str(talloc_tos(),
+ server_id_str(talloc_tos(),
&locks[i].pid),
nt_errstr(status)));
} else {
diff --git a/source3/lib/util.c b/source3/lib/util.c
index ca30858914..5fb8a41dae 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -1987,25 +1987,9 @@ struct server_id interpret_pid(const char *pid_string)
return result;
}
-char *procid_str(TALLOC_CTX *mem_ctx, const struct server_id *pid)
-{
- if (pid->vnn == NONCLUSTER_VNN && pid->task_id == 0) {
- return talloc_asprintf(mem_ctx,
- "%llu",
- (unsigned long long)pid->pid);
- }
- else {
- return talloc_asprintf(mem_ctx,
- "%u:%llu:%u",
- (unsigned)pid->vnn,
- (unsigned long long)pid->pid,
- (unsigned)pid->task_id);
- }
-}
-
char *procid_str_static(const struct server_id *pid)
{
- return procid_str(talloc_tos(), pid);
+ return server_id_str(talloc_tos(), pid);
}
bool procid_valid(const struct server_id *pid)
diff --git a/source3/locking/brlock.c b/source3/locking/brlock.c
index 52e23ec003..ad0f9d5e52 100644
--- a/source3/locking/brlock.c
+++ b/source3/locking/brlock.c
@@ -51,7 +51,7 @@ static void print_lock_struct(unsigned int i, struct lock_struct *pls)
i,
(unsigned long long)pls->context.smblctx,
(unsigned int)pls->context.tid,
- procid_str(talloc_tos(), &pls->context.pid) ));
+ server_id_str(talloc_tos(), &pls->context.pid) ));
DEBUG(10,("start = %.0f, size = %.0f, fnum = %d, %s %s\n",
(double)pls->start,
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index 8482a00f64..56481e9700 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -459,7 +459,7 @@ void process_oplock_async_level2_break_message(struct messaging_context *msg_ctx
message_to_share_mode_entry(&msg, (char *)data->data);
DEBUG(10, ("Got oplock async level 2 break message from pid %s: "
- "%s/%lu\n", procid_str(talloc_tos(), &src),
+ "%s/%lu\n", server_id_str(talloc_tos(), &src),
file_id_string_tos(&msg.id), msg.share_file_id));
fsp = initial_break_processing(sconn, msg.id, msg.share_file_id);
@@ -510,7 +510,7 @@ static void process_oplock_break_message(struct messaging_context *msg_ctx,
message_to_share_mode_entry(&msg, (char *)data->data);
DEBUG(10, ("Got oplock break message from pid %s: %s/%lu\n",
- procid_str(talloc_tos(), &src), file_id_string_tos(&msg.id),
+ server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id),
msg.share_file_id));
fsp = initial_break_processing(sconn, msg.id, msg.share_file_id);
@@ -617,7 +617,7 @@ static void process_kernel_oplock_break(struct messaging_context *msg_ctx,
file_id = (unsigned long)IVAL(data->data, 24);
DEBUG(10, ("Got kernel oplock break message from pid %s: %s/%u\n",
- procid_str(talloc_tos(), &src), file_id_string_tos(&id),
+ server_id_str(talloc_tos(), &src), file_id_string_tos(&id),
(unsigned int)file_id));
fsp = initial_break_processing(sconn, id, file_id);
@@ -704,7 +704,7 @@ static void process_oplock_break_response(struct messaging_context *msg_ctx,
message_to_share_mode_entry(&msg, (char *)data->data);
DEBUG(10, ("Got oplock break response from pid %s: %s/%lu mid %llu\n",
- procid_str(talloc_tos(), &src), file_id_string_tos(&msg.id),
+ server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id),
msg.share_file_id, (unsigned long long)msg.op_mid));
schedule_deferred_open_message_smb(msg.op_mid);
@@ -732,7 +732,7 @@ static void process_open_retry_message(struct messaging_context *msg_ctx,
message_to_share_mode_entry(&msg, (char *)data->data);
DEBUG(10, ("Got open retry msg from pid %s: %s mid %llu\n",
- procid_str(talloc_tos(), &src), file_id_string_tos(&msg.id),
+ server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id),
(unsigned long long)msg.op_mid));
schedule_deferred_open_message_smb(msg.op_mid);
diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c
index ee305c478e..98bed880df 100644
--- a/source3/smbd/sesssetup.c
+++ b/source3/smbd/sesssetup.c
@@ -1223,7 +1223,7 @@ static int shutdown_other_smbds(const struct connections_key *key,
struct shutdown_state *state = (struct shutdown_state *)private_data;
DEBUG(10, ("shutdown_other_smbds: %s, %s\n",
- procid_str(talloc_tos(), &crec->pid), crec->addr));
+ server_id_str(talloc_tos(), &crec->pid), crec->addr));
if (!process_exists(crec->pid)) {
DEBUG(10, ("process does not exist\n"));
diff --git a/source3/utils/net_g_lock.c b/source3/utils/net_g_lock.c
index 6ed5d1776a..bfb9a225ab 100644
--- a/source3/utils/net_g_lock.c
+++ b/source3/utils/net_g_lock.c
@@ -113,7 +113,7 @@ static int net_g_lock_dump_fn(struct server_id pid, enum g_lock_type lock_type,
{
char *pidstr;
- pidstr = procid_str(talloc_tos(), &pid);
+ pidstr = server_id_str(talloc_tos(), &pid);
d_printf("%s: %s (%s)\n", pidstr,
(lock_type & 1) ? "WRITE" : "READ",
(lock_type & G_LOCK_PENDING) ? "pending" : "holder");
diff --git a/source3/utils/net_serverid.c b/source3/utils/net_serverid.c
index 08a1a7f298..2c3320f40e 100644
--- a/source3/utils/net_serverid.c
+++ b/source3/utils/net_serverid.c
@@ -26,7 +26,7 @@
static int net_serverid_list_fn(const struct server_id *id,
uint32_t msg_flags, void *priv)
{
- char *str = procid_str(talloc_tos(), id);
+ char *str = server_id_str(talloc_tos(), id);
d_printf("%s %llu 0x%x\n", str, (unsigned long long)id->unique_id,
(unsigned int)msg_flags);
TALLOC_FREE(str);
@@ -51,7 +51,7 @@ static int net_serverid_wipe_fn(struct db_record *rec,
}
status = rec->delete_rec(rec);
if (!NT_STATUS_IS_OK(status)) {
- char *str = procid_str(talloc_tos(), id);
+ char *str = server_id_str(talloc_tos(), id);
DEBUG(1, ("Could not delete serverid.tdb record %s: %s\n",
str, nt_errstr(status)));
TALLOC_FREE(str);
@@ -75,13 +75,13 @@ static int net_serverid_wipedbs_conn(
NTSTATUS status;
DEBUG(10, ("Deleting connections.tdb record for pid %s\n",
- procid_str(talloc_tos(), &key->pid)));
+ server_id_str(talloc_tos(), &key->pid)));
status = rec->delete_rec(rec);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("Could not delete connections.tdb record "
"for pid %s: %s\n",
- procid_str(talloc_tos(), &key->pid),
+ server_id_str(talloc_tos(), &key->pid),
nt_errstr(status)));
}
}
@@ -97,13 +97,13 @@ static int net_serverid_wipedbs_sessionid(struct db_record *rec,
NTSTATUS status;
DEBUG(10, ("Deleting sessionid.tdb record for pid %s\n",
- procid_str(talloc_tos(), &session->pid)));
+ server_id_str(talloc_tos(), &session->pid)));
status = rec->delete_rec(rec);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("Could not delete session.tdb record "
"for pid %s: %s\n",
- procid_str(talloc_tos(), &session->pid),
+ server_id_str(talloc_tos(), &session->pid),
nt_errstr(status)));
}
}
diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c
index 5bf5c5da7b..0a3a94a1df 100644
--- a/source3/utils/smbcontrol.c
+++ b/source3/utils/smbcontrol.c
@@ -119,7 +119,7 @@ static void print_pid_string_cb(struct messaging_context *msg,
{
char *pidstr;
- pidstr = procid_str(talloc_tos(), &pid);
+ pidstr = server_id_str(talloc_tos(), &pid);
printf("PID %s: %.*s", pidstr, (int)data->length,
(const char *)data->data);
TALLOC_FREE(pidstr);
@@ -433,7 +433,7 @@ static void pong_cb(struct messaging_context *msg,
struct server_id pid,
DATA_BLOB *data)
{
- char *src_string = procid_str(NULL, &pid);
+ char *src_string = server_id_str(NULL, &pid);
printf("PONG from pid %s\n", src_string);
TALLOC_FREE(src_string);
num_replies++;
@@ -1143,7 +1143,7 @@ static void winbind_validate_cache_cb(struct messaging_context *msg,
struct server_id pid,
DATA_BLOB *data)
{
- char *src_string = procid_str(NULL, &pid);
+ char *src_string = server_id_str(NULL, &pid);
printf("Winbindd cache is %svalid. (answer from pid %s)\n",
(*(data->data) == 0 ? "" : "NOT "), src_string);
TALLOC_FREE(src_string);
diff --git a/source4/cluster/cluster.c b/source4/cluster/cluster.c
index 767e6a719f..757489ebce 100644
--- a/source4/cluster/cluster.c
+++ b/source4/cluster/cluster.c
@@ -56,17 +56,6 @@ struct server_id cluster_id(uint64_t pid, uint32_t task_id)
return ops->cluster_id(ops, pid, task_id);
}
-
-/*
- return a server_id as a string
-*/
-char *cluster_id_string(TALLOC_CTX *mem_ctx, struct server_id id)
-{
- cluster_init();
- return ops->cluster_id_string(ops, mem_ctx, id);
-}
-
-
/*
open a temporary tdb in a cluster friendly manner
*/
diff --git a/source4/cluster/cluster.h b/source4/cluster/cluster.h
index a6f74f956c..3dd9f4ce7c 100644
--- a/source4/cluster/cluster.h
+++ b/source4/cluster/cluster.h
@@ -41,7 +41,6 @@ typedef void (*cluster_message_fn_t)(struct imessaging_context *, DATA_BLOB);
/* prototypes */
struct server_id cluster_id(uint64_t id, uint32_t task_id);
-char *cluster_id_string(TALLOC_CTX *mem_ctx, struct server_id id);
struct tdb_wrap *cluster_tdb_tmp_open(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, const char *dbname, int flags);
void *cluster_backend_handle(void);
diff --git a/source4/cluster/cluster_private.h b/source4/cluster/cluster_private.h
index 5f038dd92f..6f68ad62bd 100644
--- a/source4/cluster/cluster_private.h
+++ b/source4/cluster/cluster_private.h
@@ -24,8 +24,6 @@
struct cluster_ops {
struct server_id (*cluster_id)(struct cluster_ops *ops, uint64_t id, uint32_t id2);
- char *(*cluster_id_string)(struct cluster_ops *ops,
- TALLOC_CTX *, struct server_id );
struct tdb_wrap *(*cluster_tdb_tmp_open)(struct cluster_ops *,
TALLOC_CTX *,
struct loadparm_context *,
diff --git a/source4/cluster/local.c b/source4/cluster/local.c
index e7b648fc9b..833a86b07f 100644
--- a/source4/cluster/local.c
+++ b/source4/cluster/local.c
@@ -42,16 +42,6 @@ static struct server_id local_id(struct cluster_ops *ops, uint64_t pid, uint32_t
/*
- return a server_id as a string
-*/
-static char *local_id_string(struct cluster_ops *ops,
- TALLOC_CTX *mem_ctx, struct server_id id)
-{
- return talloc_asprintf(mem_ctx, "%u.%llu.%u", id.vnn, (unsigned long long)id.pid, id.task_id);
-}
-
-
-/*
open a tmp tdb for the local node. By using smbd_tmp_path() we don't need
TDB_CLEAR_IF_FIRST as the tmp path is wiped at startup
*/
@@ -98,7 +88,6 @@ static NTSTATUS local_message_send(struct cluster_ops *ops,
static struct cluster_ops cluster_local_ops = {
.cluster_id = local_id,
- .cluster_id_string = local_id_string,
.cluster_tdb_tmp_open = local_tdb_tmp_open,
.backend_handle = local_backend_handle,
.message_init = local_message_init,
diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c
index 3a330d5794..aa1b43308f 100644
--- a/source4/lib/messaging/messaging.c
+++ b/source4/lib/messaging/messaging.c
@@ -109,7 +109,7 @@ static void irpc_handler(struct imessaging_context *, void *,
static void ping_message(struct imessaging_context *msg, void *private_data,
uint32_t msg_type, struct server_id src, DATA_BLOB *data)
{
- char *task_id = cluster_id_string(NULL, src);
+ char *task_id = server_id_str(NULL, &src);
DEBUG(1,("INFO: Received PING message from server %s [%.*s]\n",
task_id, (int)data->length,
data->data?(const char *)data->data:""));
@@ -134,7 +134,7 @@ static NTSTATUS irpc_uptime(struct irpc_message *msg,
static char *imessaging_path(struct imessaging_context *msg, struct server_id server_id)
{
TALLOC_CTX *tmp_ctx = talloc_new(msg);
- const char *id = cluster_id_string(tmp_ctx, server_id);
+ const char *id = server_id_str(tmp_ctx, &server_id);
char *s;
if (id == NULL) {
return NULL;
@@ -284,8 +284,8 @@ static void imessaging_send_handler(struct imessaging_context *msg)
if (!NT_STATUS_IS_OK(status)) {
TALLOC_CTX *tmp_ctx = talloc_new(msg);
DEBUG(1,("messaging: Lost message from %s to %s of type %u - %s\n",
- cluster_id_string(tmp_ctx, rec->header->from),
- cluster_id_string(tmp_ctx, rec->header->to),
+ server_id_str(tmp_ctx, &rec->header->from),
+ server_id_str(tmp_ctx, &rec->header->to),
rec->header->msg_type,
nt_errstr(status)));
talloc_free(tmp_ctx);
diff --git a/source4/smb_server/smb/receive.c b/source4/smb_server/smb/receive.c
index 1e5d5681f4..1379fe31cf 100644
--- a/source4/smb_server/smb/receive.c
+++ b/source4/smb_server/smb/receive.c
@@ -502,7 +502,7 @@ static void switch_message(int type, struct smbsrv_request *req)
}
}
- task_id = cluster_id_string(NULL, req->smb_conn->connection->server_id);
+ task_id = server_id_str(NULL, &req->smb_conn->connection->server_id);
DEBUG(5,("switch message %s (task_id %s)\n",
smb_fn_name(type), task_id));
talloc_free(task_id);
diff --git a/source4/smbd/service_stream.c b/source4/smbd/service_stream.c
index efbcfb490a..6e65122063 100644
--- a/source4/smbd/service_stream.c
+++ b/source4/smbd/service_stream.c
@@ -217,7 +217,7 @@ static void stream_new_connection(struct tevent_context *ev,
stream_socket->ops->name,
tsocket_address_string(srv_conn->remote_address, tmp_ctx),
tsocket_address_string(srv_conn->local_address, tmp_ctx),
- cluster_id_string(tmp_ctx, server_id));
+ server_id_str(tmp_ctx, &server_id));
if (title) {
stream_connection_set_title(srv_conn, title);
}