#define SILC_SERVER 0
#define SILC_ROUTER 1
+/* Macros */
+
+/* This macro is used to send notify messages with formatted string. The
+ string is formatted with arguments and the formatted string is sent as
+ argument. */
+#define SILC_SERVER_SEND_NOTIFY(server, sock, type, fmt) \
+do { \
+ char *__fmt__ = silc_format fmt; \
+ silc_server_send_notify(server, sock, type, 1, __fmt__, strlen(__fmt__)); \
+ silc_free(__fmt__); \
+} while(0);
+
/* Prototypes */
int silc_server_alloc(SilcServer *new_server);
void silc_server_free(SilcServer server);
int silc_server_init(SilcServer server);
void silc_server_run(SilcServer server);
void silc_server_stop(SilcServer server);
+void silc_server_packet_parse(SilcPacketParserContext *parser_context);
+void silc_server_packet_parse_type(SilcServer server,
+ SilcSocketConnection sock,
+ SilcPacketContext *packet);
void silc_server_packet_send(SilcServer server,
SilcSocketConnection sock,
SilcPacketType type,
unsigned char *data, unsigned int data_len,
int force_send);
void silc_server_packet_send_to_channel(SilcServer server,
- SilcChannelList *channel,
+ SilcChannelEntry channel,
+ SilcPacketType type,
unsigned char *data,
unsigned int data_len,
int force_send);
void silc_server_packet_relay_to_channel(SilcServer server,
SilcSocketConnection sender_sock,
- SilcChannelList *channel,
+ SilcChannelEntry channel,
void *sender,
SilcIdType sender_type,
unsigned char *data,
unsigned int data_len,
int force_send);
void silc_server_packet_send_local_channel(SilcServer server,
- SilcChannelList *channel,
+ SilcChannelEntry channel,
SilcPacketType type,
SilcPacketFlags flags,
unsigned char *data,
SilcSocketConnection sock);
void silc_server_remove_from_channels(SilcServer server,
SilcSocketConnection sock,
- SilcClientList *client);
+ SilcClientEntry client);
int silc_server_remove_from_one_channel(SilcServer server,
SilcSocketConnection sock,
- SilcChannelList *channel,
- SilcClientList *client);
-int silc_server_client_on_channel(SilcClientList *client,
- SilcChannelList *channel);
+ SilcChannelEntry channel,
+ SilcClientEntry client,
+ int notify);
+int silc_server_client_on_channel(SilcClientEntry client,
+ SilcChannelEntry channel);
void silc_server_disconnect_remote(SilcServer server,
SilcSocketConnection sock,
const char *fmt, ...);
void silc_server_channel_key(SilcServer server,
SilcSocketConnection sock,
SilcPacketContext *packet);
+void silc_server_send_motd(SilcServer server,
+ SilcSocketConnection sock);
void silc_server_send_error(SilcServer server,
SilcSocketConnection sock,
const char *fmt, ...);
void silc_server_send_notify(SilcServer server,
SilcSocketConnection sock,
- const char *fmt, ...);
+ SilcNotifyType type,
+ unsigned int argc, ...);
void silc_server_send_notify_dest(SilcServer server,
SilcSocketConnection sock,
void *dest_id,
SilcIdType dest_id_type,
- const char *fmt, ...);
+ SilcNotifyType type,
+ unsigned int argc, ...);
void silc_server_send_notify_to_channel(SilcServer server,
- SilcChannelList *channel,
- const char *fmt, ...);
+ SilcChannelEntry channel,
+ SilcNotifyType type,
+ unsigned int argc, ...);
+void silc_server_send_notify_on_channels(SilcServer server,
+ SilcClientEntry client,
+ SilcNotifyType type,
+ unsigned int argc, ...);
void silc_server_send_new_id(SilcServer server,
SilcSocketConnection sock,
int broadcast,
unsigned int old_id_len,
void *new_id, SilcIdType new_id_type,
unsigned int new_id_len);
-SilcChannelList *silc_server_new_channel(SilcServer server,
+void silc_server_send_remove_channel_user(SilcServer server,
+ SilcSocketConnection sock,
+ int broadcast,
+ void *client_id, void *channel_id);
+void silc_server_replace_id(SilcServer server,
+ SilcSocketConnection sock,
+ SilcPacketContext *packet);
+SilcChannelEntry silc_server_new_channel(SilcServer server,
SilcServerID *router_id,
char *cipher, char *channel_name);
-SilcClientList *silc_server_new_client(SilcServer server,
+SilcClientEntry silc_server_new_client(SilcServer server,
SilcSocketConnection sock,
SilcPacketContext *packet);
-SilcServerList *silc_server_new_server(SilcServer server,
+SilcServerEntry silc_server_new_server(SilcServer server,
SilcSocketConnection sock,
SilcPacketContext *packet);
void silc_server_new_id(SilcServer server, SilcSocketConnection sock,
SilcPacketContext *packet);
+void silc_server_remove_channel_user(SilcServer server,
+ SilcSocketConnection sock,
+ SilcPacketContext *packet);
#endif