Dpid services list is now a vector.

This commit is contained in:
2026-01-11 02:24:09 -05:00
parent a682d18b83
commit 3061a4ae71
3 changed files with 26 additions and 16 deletions
+20 -12
View File
@@ -19,6 +19,9 @@
/*! \file /*! \file
* Main functions to set-up dpi information and to initialise sockets * Main functions to set-up dpi information and to initialise sockets
*/ */
#include <memory>
#include <vector>
#include <errno.h> #include <errno.h>
#include <stdlib.h> /* for exit */ #include <stdlib.h> /* for exit */
#include <fcntl.h> /* for F_SETFD, F_GETFD, FD_CLOEXEC */ #include <fcntl.h> /* for F_SETFD, F_GETFD, FD_CLOEXEC */
@@ -45,6 +48,8 @@ using namespace std::literals::string_literals;
#define QUEUE 5 #define QUEUE 5
struct service;
volatile sig_atomic_t caught_sigchld = 0; volatile sig_atomic_t caught_sigchld = 0;
char *SharedKey = NULL; char *SharedKey = NULL;
@@ -92,16 +97,17 @@ void free_plugin_list(struct dp **dpi_attr_list_ptr, int numdpis)
/*! Free memory used by the services list /*! Free memory used by the services list
*/ */
void free_services_list(Dlist *s_list) void free_services_list(std::vector< service * > *s_list)
{ {
int i = 0; int i = 0;
struct service *s; struct service *s;
for (i=0; i < dList_length(s_list) ; i++) { for (i=0; i < s_list->size() ; i++) {
s = reinterpret_cast< service * >( dList_nth_data(s_list, i) ); s = s_list->at( i );
dFree(s->name); dFree(s->name);
delete s;
} }
dList_free(s_list); delete s_list;
} }
/*! Signal handler for SIGINT, SIGQUIT, and SIGTERM. Calls cleanup /*! Signal handler for SIGINT, SIGQUIT, and SIGTERM. Calls cleanup
@@ -449,7 +455,7 @@ static int services_alpha_comp(const struct service *s1,
* \li Returns number of available services on success * \li Returns number of available services on success
* \li -1 on failure * \li -1 on failure
*/ */
int fill_services_list(struct dp *attlist, int numdpis, Dlist **services_list) int fill_services_list(struct dp *attlist, int numdpis, std::vector< service * > **services_list)
{ {
FILE *dpidrc_stream; FILE *dpidrc_stream;
char *p, *line = NULL, *service, *path; char *p, *line = NULL, *service, *path;
@@ -494,7 +500,7 @@ int fill_services_list(struct dp *attlist, int numdpis, Dlist **services_list)
fclose(dpidrc_stream); fclose(dpidrc_stream);
return -1; return -1;
} }
*services_list = dList_new(8); *services_list = std::make_unique< std::vector< struct service * > >().release();
/* dpidrc parser loop */ /* dpidrc parser loop */
for (;(line = dGetline_unsafe(dpidrc_stream)) != NULL; dFree(line)) { for (;(line = dGetline_unsafe(dpidrc_stream)) != NULL; dFree(line)) {
@@ -513,12 +519,12 @@ int fill_services_list(struct dp *attlist, int numdpis, Dlist **services_list)
if (strcmp(service, "dpi_dir") == 0) if (strcmp(service, "dpi_dir") == 0)
continue; continue;
s = dNew(struct service, 1); s = std::make_unique< struct service >().release();
/* init services list entry */ /* init services list entry */
s->name = dStrdup(service); s->name = dStrdup(service);
s->dp_index = -1; s->dp_index = -1;
dList_append(*services_list, s); (*services_list)->push_back( s );
/* search the dpi for a service by its path */ /* search the dpi for a service by its path */
for (i = 0; i < numdpis; i++) for (i = 0; i < numdpis; i++)
if ((p = strstr(attlist[i].path, path)) && *(p - 1) == '/' && if ((p = strstr(attlist[i].path, path)) && *(p - 1) == '/' &&
@@ -530,13 +536,13 @@ int fill_services_list(struct dp *attlist, int numdpis, Dlist **services_list)
} }
fclose(dpidrc_stream); fclose(dpidrc_stream);
dList_sort(*services_list, (dCompareFunc)services_alpha_comp); std::sort( begin( **services_list ), end( **services_list ), services_alpha_comp );
dFree(dpidrc); dFree(dpidrc);
dFree(sys_dpidir); dFree(sys_dpidir);
dFree(user_dpidir); dFree(user_dpidir);
return (dList_length(*services_list)); return (*services_list)->size();
} }
/* /*
@@ -888,9 +894,11 @@ void send_sockport(int sock_fd, char *dpi_tag, struct dp *dpi_attr_list)
dReturn_if_fail((dpi_id = get_message(sock_fd, dpi_tag)) != NULL); dReturn_if_fail((dpi_id = get_message(sock_fd, dpi_tag)) != NULL);
serv = reinterpret_cast< service * >( dList_find_custom(services_list,dpi_id,(dCompareFunc)service_match) ); auto found= std::find_if( begin( *services_list ), end( *services_list ),
[dpi_id]( const auto &service ){ return 0 == service_match( service, dpi_id ); } );
serv= found == end( *services_list ) ? nullptr : *found;
if (serv == NULL || (i = serv->dp_index) == -1) if (serv == nullptr || (i = serv->dp_index) == -1)
for (i = 0; i < numdpis; i++) for (i = 0; i < numdpis; i++)
if (!strncmp(dpi_attr_list[i].id, dpi_id, if (!strncmp(dpi_attr_list[i].id, dpi_id,
dpi_attr_list[i].id - strchr(dpi_attr_list[i].id, '.'))) dpi_attr_list[i].id - strchr(dpi_attr_list[i].id, '.')))
+5 -3
View File
@@ -5,6 +5,8 @@
#ifndef DPID_H #ifndef DPID_H
#define DPID_H #define DPID_H
#include <vector>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
{ {
@@ -63,7 +65,7 @@ extern int numsocks;
extern struct dp *dpi_attr_list; extern struct dp *dpi_attr_list;
/*! service served for each plugin */ /*! service served for each plugin */
extern Dlist *services_list; extern std::vector< service * > *services_list;
/*! Set of sockets watched for connections */ /*! Set of sockets watched for connections */
extern fd_set sock_set; extern fd_set sock_set;
@@ -79,7 +81,7 @@ void free_dpi_attr(struct dp *dpi_attr);
void free_plugin_list(struct dp **dpi_attr_list_ptr, int numdpis); void free_plugin_list(struct dp **dpi_attr_list_ptr, int numdpis);
void free_services_list(Dlist *s_list); void free_services_list(std::vector< service * > *s_list);
enum file_type get_file_type(char *file_name); enum file_type get_file_type(char *file_name);
@@ -89,7 +91,7 @@ int register_service(struct dp *dpi_attr, char *service);
int register_all(struct dp **attlist); int register_all(struct dp **attlist);
int fill_services_list(struct dp *attlist, int numdpis, Dlist **services_list); int fill_services_list(struct dp *attlist, int numdpis, std::vector< service * > **services_list);
int init_ids_srs_socket(void); int init_ids_srs_socket(void);
+1 -1
View File
@@ -46,7 +46,7 @@ char *srs_name;
int numdpis; int numdpis;
fd_set sock_set; fd_set sock_set;
struct dp *dpi_attr_list; struct dp *dpi_attr_list;
Dlist *services_list; std::vector< service * > *services_list;
int numsocks; int numsocks;
int srs_fd; int srs_fd;