Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
- Copyright (C) 1997 - 2000 Pekka Riikonen
+ Copyright (C) 1997 - 2001 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/* All defined packet flags */
#define SILC_PACKET_FLAG_NONE 0x00
#define SILC_PACKET_FLAG_PRIVMSG_KEY 0x01
-#define SILC_PACKET_FLAG_FORWARDED 0x02
+#define SILC_PACKET_FLAG_LIST 0x02
#define SILC_PACKET_FLAG_BROADCAST 0x04
#define SILC_PACKET_FLAG_TUNNELED 0x08
/* Rest of flags still available
Packet flags. Flags are defined above.
unsigned char *src_id
- unsigned int src_id_len
- SilcIdType src_id_type
+ unsigned short src_id_len
+ unsigned char src_id_type
Source ID, its length and type. On packet reception retuned ID's
are always the hash values of the ID's from the packet.
+ unsigned char *dst_id;
+ unsigned short dst_id_len;
+ unsigned char src_id_type;
+
+ Destination ID, its length and type. On packet reception retuned
+ ID's are always the hash values of the ID's from the packet.
+
SilcHash hash
Pointer to allocated hash object. This must be MD5 hash object.
SilcPacketFlags flags;
unsigned char *src_id;
- unsigned int src_id_len;
- SilcIdType src_id_type;
+ unsigned short src_id_len;
+ unsigned char src_id_type;
unsigned char *dst_id;
- unsigned int dst_id_len;
- SilcIdType dst_id_type;
+ unsigned short dst_id_len;
+ unsigned char dst_id_type;
- unsigned int truelen;
- unsigned int padlen;
-
- /* For padding generation */
- SilcRng rng;
+ unsigned short truelen;
+ unsigned short padlen;
/* Back pointers */
void *context;
SilcSocketConnection sock;
+
+ /* Reference count for this context. The context is free'd only
+ after the reference count is zero. */
+ int users;
} SilcPacketContext;
/*
#define SILC_PACKET_CONNECTION_AUTH_REQUEST 16 /* Request of auth meth */
#define SILC_PACKET_CONNECTION_AUTH 17 /* Connectinon auth */
#define SILC_PACKET_NEW_ID 18 /* Sending new ID */
-#define SILC_PACKET_NEW_ID_LIST 19 /* Sending list of them */
-#define SILC_PACKET_NEW_CLIENT 20 /* Registering client */
-#define SILC_PACKET_NEW_SERVER 21 /* Registering server */
-#define SILC_PACKET_NEW_CHANNEL 22 /* Registering channel */
-#define SILC_PACKET_NEW_CHANNEL_USER 23 /* "" user on channel */
-#define SILC_PACKET_NEW_CHANNEL_LIST 24 /* List of new channels */
-#define SILC_PACKET_NEW_CHANNEL_USER_LIST 25 /* List of users on "" */
-#define SILC_PACKET_REPLACE_ID 26 /* To replace old ID */
-#define SILC_PACKET_REMOVE_ID 27 /* To remove ID */
-#define SILC_PACKET_REMOVE_CHANNEL_USER 28 /* Remove user from channel */
-#define SILC_PACKET_REKEY 29
-#define SILC_PACKET_REKEY_DONE 30
-/* #define SILC_PACKET_MAX 255 */
+#define SILC_PACKET_NEW_CLIENT 19 /* Client registering */
+#define SILC_PACKET_NEW_SERVER 20 /* Server registering */
+#define SILC_PACKET_NEW_CHANNEL 21 /* Channel registering */
+#define SILC_PACKET_REKEY 22 /* Re-key start */
+#define SILC_PACKET_REKEY_DONE 23 /* Re-key done */
+#define SILC_PACKET_HEARTBEAT 24 /* Heartbeat */
+#define SILC_PACKET_KEY_AGREEMENT 25 /* Key Agreement request */
+
+#define SILC_PACKET_PRIVATE 200 /* Private range start */
+#define SILC_PACKET_MAX 255 /* RESERVED */
/* Macros */
void *context);
SilcPacketType silc_packet_parse(SilcPacketContext *ctx);
SilcPacketType silc_packet_parse_special(SilcPacketContext *ctx);
+SilcPacketContext *silc_packet_context_alloc();
SilcPacketContext *silc_packet_context_dup(SilcPacketContext *ctx);
+void silc_packet_context_free(SilcPacketContext *ctx);
#endif