Merged from silc_1_0_branch.
[silc.git] / lib / silccore / silcpacket.h
index ea7dbbfb9d792b0dd42a91aa73c8ef17450a7c6c..b2c9dd2790dc0b121ffc10c5f3919e452aa3dd01 100644 (file)
@@ -61,7 +61,7 @@
  *
  * NAME
  * 
- *    typedef unsigned char SilcPacketType;
+ *    typedef SilcUInt8 SilcPacketType;
  *
  * DESCRIPTION
  *
@@ -69,7 +69,7 @@
  *
  * SOURCE
  */
-typedef unsigned char SilcPacketType;
+typedef SilcUInt8 SilcPacketType;
 
 /* SILC Packet types. */
 #define SILC_PACKET_NONE                0       /* NULL, never sent */
@@ -100,6 +100,7 @@ typedef unsigned char SilcPacketType;
 #define SILC_PACKET_KEY_AGREEMENT        25      /* Key Agreement request */
 #define SILC_PACKET_RESUME_ROUTER        26      /* Backup router resume */
 #define SILC_PACKET_FTP                  27      /* File Transfer */
+#define SILC_PACKET_RESUME_CLIENT        28      /* Client resume */
 
 #define SILC_PACKET_PRIVATE              200     /* Private range start  */
 #define SILC_PACKET_MAX                  255     /* RESERVED */
@@ -109,20 +110,20 @@ typedef unsigned char SilcPacketType;
  *
  * NAME
  * 
- *    typedef unsigned char SilcPacketVersion;
+ *    typedef SilcUInt8 SilcPacketVersion;
  *
  * DESCRIPTION
  *
  *    SILC packet version type definition.
  *
  ***/
-typedef unsigned char SilcPacketVersion;
+typedef SilcUInt8 SilcPacketVersion;
 
 /****d* silccore/SilcPacketAPI/SilcPacketFlags
  *
  * NAME
  * 
- *    typedef unsigned char SilcPacketFlags;
+ *    typedef SilcUInt8 SilcPacketFlags;
  *
  * DESCRIPTION
  *
@@ -130,17 +131,17 @@ typedef unsigned char SilcPacketVersion;
  *
  * SOURCE
  */
-typedef unsigned char SilcPacketFlags;
+typedef SilcUInt8 SilcPacketFlags;
 
 /* All defined packet flags */
 #define SILC_PACKET_FLAG_NONE             0x00    /* No flags */
 #define SILC_PACKET_FLAG_PRIVMSG_KEY      0x01   /* Private message key */
 #define SILC_PACKET_FLAG_LIST             0x02   /* Packet is a list */
 #define SILC_PACKET_FLAG_BROADCAST        0x04   /* Packet is a broadcast */
+#define SILC_PACKET_FLAG_COMPRESSED       0x08    /* Payload is compressed */
 /***/
 
 /* Rest of flags still available
-#define SILC_PACKET_FLAG_XXX              0x08
 #define SILC_PACKET_FLAG_XXX              0x10
 #define SILC_PACKET_FLAG_XXX              0x20
 #define SILC_PACKET_FLAG_XXX              0x40
@@ -331,10 +332,10 @@ typedef bool (*SilcPacketParserCallback)(SilcPacketParserContext
  *
  * SOURCE
  */
-#define SILC_PACKET_LENGTH(__packet, __ret_truelen, __ret_paddedlen)   \
-do {                                                                   \
-  SILC_GET16_MSB((__ret_truelen), (__packet)->data);                   \
-  (__ret_paddedlen) = (__ret_truelen) + (__packet)->data[4];           \
+#define SILC_PACKET_LENGTH(__packetdata, __ret_truelen, __ret_paddedlen) \
+do {                                                                    \
+  SILC_GET16_MSB((__ret_truelen), (__packetdata));                      \
+  (__ret_paddedlen) = (__ret_truelen) + (SilcUInt8)(__packetdata)[4];   \
 } while(0)
 /***/
 
@@ -369,14 +370,18 @@ do {                                                                      \
  *
  * DESCRIPTION
  *
- *    Returns the length of the padding in the packet. This is used
+ *    Calculates the length of the padding in the packet. This is used
  *    by various library routines to determine needed padding length.
  *
  * SOURCE
  */
-#define SILC_PACKET_PADLEN(__packetlen, __blocklen)            \
-  SILC_PACKET_DEFAULT_PADLEN - (__packetlen) %                 \
-    ((__blocklen) ? (__blocklen) : SILC_PACKET_DEFAULT_PADLEN)
+#define SILC_PACKET_PADLEN(__packetlen, __blocklen, __padlen)              \
+do {                                                                       \
+  __padlen = (SILC_PACKET_DEFAULT_PADLEN - (__packetlen) %                 \
+             ((__blocklen) ? (__blocklen) : SILC_PACKET_DEFAULT_PADLEN));  \
+  if (__padlen < 8)                                                        \
+    __padlen += ((__blocklen) ? (__blocklen) : SILC_PACKET_DEFAULT_PADLEN); \
+} while(0)
 /***/
 
 /****d* silccore/SilcPacketAPI/SILC_PACKET_PADLEN_MAX
@@ -388,13 +393,16 @@ do {                                                                      \
  * DESCRIPTION
  *
  *    Returns the length of the padding up to the maximum length, which
- *    is 128 butes. This is used by various library routines to determine
+ *    is 128 bytes. This is used by various library routines to determine
  *    needed padding length.
  *
  * SOURCE
  */
-#define SILC_PACKET_PADLEN_MAX(__packetlen)                            \
-  SILC_PACKET_MAX_PADLEN - (__packetlen) % SILC_PACKET_MAX_PADLEN
+#define SILC_PACKET_PADLEN_MAX(__packetlen, __blocklen, __padlen)         \
+do {                                                                      \
+  __padlen = (SILC_PACKET_MAX_PADLEN - (__packetlen) %                            \
+             ((__blocklen) ? (__blocklen) : SILC_PACKET_DEFAULT_PADLEN)); \
+} while(0)
 /***/
 
 /* Prototypes */