version 1.37, 2013/03/22 16:00:26 |
version 1.38, 2013/03/25 10:11:45 |
|
|
/* Global session list. */ |
/* Global session list. */ |
struct sessions sessions; |
struct sessions sessions; |
struct sessions dead_sessions; |
struct sessions dead_sessions; |
u_int next_session; |
u_int next_session_id; |
struct session_groups session_groups; |
struct session_groups session_groups; |
|
|
struct winlink *session_next_alert(struct winlink *); |
struct winlink *session_next_alert(struct winlink *); |
|
|
return (RB_FIND(sessions, &sessions, &s)); |
return (RB_FIND(sessions, &sessions, &s)); |
} |
} |
|
|
/* Find session by index. */ |
/* Find session by id. */ |
struct session * |
struct session * |
session_find_by_index(u_int idx) |
session_find_by_id(u_int id) |
{ |
{ |
struct session *s; |
struct session *s; |
|
|
RB_FOREACH(s, sessions, &sessions) { |
RB_FOREACH(s, sessions, &sessions) { |
if (s->idx == idx) |
if (s->id == id) |
return (s); |
return (s); |
} |
} |
return (NULL); |
return (NULL); |
|
|
|
|
if (name != NULL) { |
if (name != NULL) { |
s->name = xstrdup(name); |
s->name = xstrdup(name); |
s->idx = next_session++; |
s->id = next_session_id++; |
} else { |
} else { |
s->name = NULL; |
s->name = NULL; |
do { |
do { |
s->idx = next_session++; |
s->id = next_session_id++; |
free (s->name); |
free (s->name); |
xasprintf(&s->name, "%u", s->idx); |
xasprintf(&s->name, "%u", s->id); |
} while (RB_FIND(sessions, &sessions, s) != NULL); |
} while (RB_FIND(sessions, &sessions, s) != NULL); |
} |
} |
RB_INSERT(sessions, &sessions, s); |
RB_INSERT(sessions, &sessions, s); |