A LOT updates. Cannot separate. :)
[silc.git] / apps / silcd / server.h
index b2327d4501d1e6b5f0c96da8393b57eac948dc57..41379eab36342905ccee30bce80c8503f9dbf17a 100644 (file)
@@ -33,12 +33,28 @@ typedef struct SilcServerObjectStruct *SilcServer;
 #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, 
@@ -60,20 +76,21 @@ void silc_server_packet_forward(SilcServer server,
                                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,
@@ -88,13 +105,14 @@ void silc_server_free_sock_user_data(SilcServer server,
                                     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, ...);
@@ -107,20 +125,29 @@ void silc_server_channel_message(SilcServer server,
 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,
@@ -133,16 +160,26 @@ void silc_server_send_replace_id(SilcServer server,
                                 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