Neels Hofmeyr has uploaded this change for review. ( 
https://gerrit.osmocom.org/13581


Change subject: add vty_is_active()
......................................................................

add vty_is_active()

For async callbacks it is useful to determine whether a given VTY pointer is 
still valid.

For example, in osmo-msc, a silent call can be triggered by VTY, which causes a
Paging. The paging_cb then writes to the VTY console that the silent call has
succeeded. Unless the telnet vty session has already ended, in which case
osmo-msc crashes; e.g. from an osmo_interact_vty.py command invocation. With
this function, osmo-msc can ask whether the vty pointer passed to the paging
callback is still active, and skip vty_out() if not.

Change-Id: I42cf2af47283dd42c101faae0fac293c3a68d599
---
M include/osmocom/vty/vty.h
M src/vty/telnet_interface.c
2 files changed, 12 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/81/13581/1

diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h
index 8d2e1b3..03a2924 100644
--- a/include/osmocom/vty/vty.h
+++ b/include/osmocom/vty/vty.h
@@ -2,6 +2,7 @@

 #include <stdio.h>
 #include <stdarg.h>
+#include <stdbool.h>

 #include <osmocom/core/linuxlist.h>

@@ -192,6 +193,7 @@
 void vty_reset (void);
 struct vty *vty_new (void);
 struct vty *vty_create (int vty_sock, void *priv);
+bool vty_is_active(struct vty *vty);
 int vty_out (struct vty *, const char *, ...) VTY_PRINTF_ATTRIBUTE(2, 3);
 int vty_out_va(struct vty *vty, const char *format, va_list ap);
 int vty_out_newline(struct vty *);
diff --git a/src/vty/telnet_interface.c b/src/vty/telnet_interface.c
index dc23b12..a1fc999 100644
--- a/src/vty/telnet_interface.c
+++ b/src/vty/telnet_interface.c
@@ -197,6 +197,16 @@
        return 0;
 }

+bool vty_is_active(struct vty *vty)
+{
+       struct telnet_connection *connection;
+       llist_for_each_entry(connection, &active_connections, entry) {
+               if (connection->vty == vty)
+                       return true;
+       }
+       return false;
+}
+
 /*! callback from core VTY code about VTY related events */
 void vty_event(enum event event, int sock, struct vty *vty)
 {

--
To view, visit https://gerrit.osmocom.org/13581
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I42cf2af47283dd42c101faae0fac293c3a68d599
Gerrit-Change-Number: 13581
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr <[email protected]>

Reply via email to