jitterbug/server.h

71 lines
1.8 KiB
C
Raw Normal View History

#ifndef _JITTERBUG__SERVER_H
#define _JITTERBUG__SERVER_H
2023-01-10 14:57:16 +02:00
#include "wire.h"
#include <poll.h>
#include <stdint.h>
#define MATCH_RULE_MAX 1024
#define MATCH_RULE_MAX_ARG 12
typedef struct match_rule {
uint8_t type;
bool eavesdrop;
char *sender, *interface, *member, *path, *path_namespace, *destination, *arg0namespace, *rule_string;
char *arg[MATCH_RULE_MAX_ARG]; /* TODO: spec states that indexes 0 to 63 should be supported */
char *arg_path[MATCH_RULE_MAX_ARG]; /* TODO: spec states that indexes 0 to 63 should be supported */
} match_rule_t;
// TODO: dynamically size the arrays
2023-01-10 13:08:49 +02:00
#define BUS_MAX_CLIENTS 256
#define BUS_MAX_NAMES 512
#define BUS_MAX_MATCH 12
#define BUS_NAMES_PER_CLIENT 4
2023-01-10 13:08:49 +02:00
#define BUS_BACKLOG 12
enum {
2023-01-10 13:08:49 +02:00
BUS_CLIENT_STATE_NONE,
BUS_CLIENT_STATE_WAIT_AUTH,
BUS_CLIENT_STATE_WAIT_BEGIN,
BUS_CLIENT_STATE_READY
};
2023-01-10 13:08:49 +02:00
typedef struct bus_client {
int fd;
int16_t unique_name_index;
uint8_t state;
2022-12-31 17:55:32 +02:00
int8_t match_count;
2023-01-10 13:08:49 +02:00
match_rule_t *matches[BUS_MAX_MATCH];
int16_t owned_names[BUS_NAMES_PER_CLIENT];
2023-01-10 13:08:49 +02:00
} bus_client_t;
2023-01-10 13:08:49 +02:00
typedef struct bus_name {
char *name;
2022-12-29 20:10:36 +02:00
int32_t client_index;
2023-01-10 13:08:49 +02:00
} bus_name_t;
2022-12-29 20:10:36 +02:00
2023-01-10 13:08:49 +02:00
typedef struct bus {
int sock_fd;
int fd_num;
2022-12-26 18:05:12 +02:00
int names_count;
2022-12-31 17:55:32 +02:00
int clients_count;
2023-01-17 23:04:48 +02:00
int urandom_fd;
2023-01-10 13:08:49 +02:00
bus_client_t clients[BUS_MAX_CLIENTS];
bus_name_t names[BUS_MAX_NAMES];
struct pollfd fds[BUS_MAX_CLIENTS + 1];
} bus_t;
2023-01-10 14:57:16 +02:00
typedef struct bus_method_handler {
const char *name;
int (*handler)(bus_t *bus, int client_index, wire_message_t *msg, wire_context_t *ctx, wire_context_t *reply_ctx);
} bus_method_handler_t;
2023-01-10 13:08:49 +02:00
int bus_client_add(bus_t *s, int fd);
void bus_client_remove(bus_t *s, int i);
void bus_free(bus_t *s);
bus_t *bus_create(const char *socket_path);
int bus_turn(bus_t *s);
#endif // _JITTERBUG__SERVER_H