]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: master-service - Add master_service_connection_get_type().
authorStephan Bosch <stephan.bosch@open-xchange.com>
Wed, 23 Nov 2022 01:05:02 +0000 (02:05 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Sun, 11 Dec 2022 21:58:50 +0000 (21:58 +0000)
src/lib-master/master-service.c
src/lib-master/master-service.h

index 266e2ac29e9f73b06752eb6f2b75f0a880ff9e83..926dd8f6c123a56a2385c95487460b6d51e9124c 100644 (file)
@@ -1426,6 +1426,30 @@ void master_service_client_connection_destroyed(struct master_service *service)
        }
 }
 
+const char *
+master_service_connection_get_type(const struct master_service_connection *conn)
+{
+       i_assert(conn->type != NULL);
+       if (*conn->type != '\0')
+               return conn->type;
+
+       const char *name, *suffix;
+
+       name = strrchr(conn->name, '/');
+       if (name == NULL)
+               name = conn->name;
+       else
+               name++;
+
+       suffix = strrchr(name, '-');
+       if (suffix == NULL)
+               suffix = name;
+       else
+               suffix++;
+
+       return suffix;
+}
+
 static void master_service_set_login_state(struct master_service *service,
                                           enum master_login_state state)
 {
index 61059ddbc83074fb76abc3c371eb39d11d298439..a6e1b6f825be5b972111208ffdc50930e527bd49 100644 (file)
@@ -267,6 +267,13 @@ void master_service_client_connection_accept(struct master_service_connection *c
 void master_service_client_connection_created(struct master_service *service);
 /* Call whenever a client connection is destroyed. */
 void master_service_client_connection_destroyed(struct master_service *service);
+/* Returns the listener type for this connection. If the type is unassigned, the
+   connection name is parsed for a "-suffix" which is returned instead to easily
+   implement backwards compatibility for custom listeners that are still
+   configured without an explicit type. */
+const char *
+master_service_connection_get_type(
+       const struct master_service_connection *conn);
 
 /* Deinitialize the service. */
 void master_service_deinit(struct master_service **service);