mirror of
https://github.com/ntop/n2n.git
synced 2024-04-21 16:31:34 +00:00
115 lines
3.4 KiB
C
115 lines
3.4 KiB
C
/*
|
|
* Internal interface definitions for the management interfaces
|
|
*
|
|
* This header is not part of the public library API and is thus not in
|
|
* the public include folder
|
|
*/
|
|
|
|
#ifndef MANAGEMENT_H
|
|
#define MANAGEMENT_H 1
|
|
|
|
#include <n2n_typedefs.h> // For the n2n_edge_t and n2n_sn_t defs
|
|
#include <stdbool.h>
|
|
#include <stddef.h> // for size_t
|
|
#include <stdint.h> // for uint64_t
|
|
#include <sys/types.h> // for ssize_t
|
|
#include "n2n_define.h" // for n2n_event_topic
|
|
#include "strbuf.h"
|
|
|
|
#ifdef _WIN32
|
|
#include <winsock2.h>
|
|
#else
|
|
#include <sys/socket.h> // for sockaddr, sockaddr_storage, socklen_t
|
|
#endif
|
|
|
|
enum n2n_mgmt_type {
|
|
N2N_MGMT_UNKNOWN = 0,
|
|
N2N_MGMT_READ = 1,
|
|
N2N_MGMT_WRITE = 2,
|
|
N2N_MGMT_SUB = 3,
|
|
};
|
|
|
|
/*
|
|
* Everything needed to reply to a request
|
|
*
|
|
* TODO:
|
|
* - one day, we might be able to merge the sss and eee members
|
|
* - once eee and sss are merged, some fields should migrate back into it:
|
|
* - mgmt_sock
|
|
* - keep_running
|
|
* - mgmt_password_hash
|
|
*/
|
|
typedef struct mgmt_req {
|
|
n2n_sn_t *sss;
|
|
n2n_edge_t *eee;
|
|
int mgmt_sock; // socket replies come from
|
|
bool *keep_running;
|
|
uint64_t mgmt_password_hash;
|
|
enum n2n_mgmt_type type;
|
|
char *argv0;
|
|
char *argv;
|
|
char tag[10];
|
|
socklen_t sock_len;
|
|
union {
|
|
struct sockaddr sender_sock;
|
|
struct sockaddr_storage sas; // memory for the socket, actual socket can be longer than sockaddr
|
|
};
|
|
} mgmt_req_t;
|
|
|
|
/*
|
|
* Read/Write handlers are defined in this structure
|
|
* TODO: DRY
|
|
*/
|
|
#define FLAG_WROK 1
|
|
typedef struct mgmt_handler {
|
|
int flags;
|
|
char *cmd;
|
|
char *help;
|
|
void (*func)(mgmt_req_t *req, strbuf_t *buf);
|
|
} mgmt_handler_t;
|
|
|
|
/*
|
|
* Event topic names are defined in this structure
|
|
*/
|
|
typedef struct mgmt_events {
|
|
enum n2n_event_topic topic;
|
|
char *cmd;
|
|
char *help;
|
|
} mgmt_events_t;
|
|
|
|
typedef size_t (mgmt_event_handler_t)(strbuf_t *buf, char *tag, int data0, void *data1);
|
|
|
|
// Lookup the index of matching argv0 in a cmd list
|
|
// store index in "Result", or -1 for not found
|
|
#define lookup_handler(Result, list, argv0) do { \
|
|
int nr_max = sizeof(list) / sizeof(list[0]); \
|
|
for( Result=0; Result < nr_max; Result++ ) { \
|
|
if(0 == strcmp(list[Result].cmd, argv0)) { \
|
|
break; \
|
|
} \
|
|
} \
|
|
if( Result >= nr_max ) { \
|
|
Result = -1; \
|
|
} \
|
|
} while(0)
|
|
|
|
ssize_t send_reply (mgmt_req_t *req, strbuf_t *buf, size_t msg_len);
|
|
size_t gen_json_1str (strbuf_t *buf, char *tag, char *_type, char *key, char *val);
|
|
size_t gen_json_1uint (strbuf_t *buf, char *tag, char *_type, char *key, unsigned int val);
|
|
void send_json_1str (mgmt_req_t *req, strbuf_t *buf, char *_type, char *key, char *val);
|
|
void send_json_1uint (mgmt_req_t *req, strbuf_t *buf, char *_type, char *key, unsigned int val);
|
|
|
|
void mgmt_error (mgmt_req_t *req, strbuf_t *buf, char *msg);
|
|
|
|
void mgmt_stop (mgmt_req_t *req, strbuf_t *buf);
|
|
void mgmt_verbose (mgmt_req_t *req, strbuf_t *buf);
|
|
void mgmt_unimplemented (mgmt_req_t *req, strbuf_t *buf);
|
|
|
|
void mgmt_event_post2 (enum n2n_event_topic topic, int data0, void *data1, mgmt_req_t *debug, mgmt_req_t *sub, mgmt_event_handler_t fn);
|
|
void mgmt_help_row (mgmt_req_t *req, strbuf_t *buf, char *cmd, char *help);
|
|
void mgmt_help_events_row (mgmt_req_t *req, strbuf_t *buf, mgmt_req_t *sub, char *cmd, char *help);
|
|
int mgmt_auth (mgmt_req_t *req, char *auth);
|
|
bool mgmt_req_init2 (mgmt_req_t *req, strbuf_t *buf, char *cmdline);
|
|
|
|
#endif
|