Integer type name change.
[silc.git] / lib / silccore / silcprivate.c
index 789bde0e4ec39917f9d86537c562e351eeae9833..26a064297028477ee2dba73f94da60fce0220509 100644 (file)
 
 ******************************************************************************/
 
+#define SILC_PRIVATE_MESSAGE_PAD(__payloadlen) (16 - (__payloadlen) % 16)
+
 /* Private Message Payload structure. Contents of this structure is parsed
    from SILC packets. */
 struct SilcPrivateMessagePayloadStruct {
-  uint16 flags;
-  uint16 nickname_len;
-  unsigned char *nickname;
-  uint16 message_len;
+  SilcUInt16 flags;
+  SilcUInt16 message_len;
   unsigned char *message;
 };
 
@@ -43,34 +43,38 @@ struct SilcPrivateMessagePayloadStruct {
    structure. This also decrypts the message if the `cipher' is provided. */
 
 SilcPrivateMessagePayload 
-silc_private_message_payload_parse(SilcBuffer buffer, SilcCipher cipher)
+silc_private_message_payload_parse(unsigned char *payload,
+                                  SilcUInt32 payload_len,
+                                  SilcCipher cipher)
 {
+  SilcBufferStruct buffer;
   SilcPrivateMessagePayload new;
   int ret;
 
   SILC_LOG_DEBUG(("Parsing private message payload"));
 
+  silc_buffer_set(&buffer, payload, payload_len);
+
   /* Decrypt the payload */
   if (cipher)
-    silc_cipher_decrypt(cipher, buffer->data, buffer->data, 
-                       buffer->len, cipher->iv);
+    silc_cipher_decrypt(cipher, buffer.data, buffer.data, 
+                       buffer.len, cipher->iv);
 
   new = silc_calloc(1, sizeof(*new));
 
   /* Parse the Private Message Payload. Ignore the padding. */
-  ret = silc_buffer_unformat(buffer,
+  ret = silc_buffer_unformat(&buffer,
                             SILC_STR_UI_SHORT(&new->flags),
-                            SILC_STR_UI16_NSTRING_ALLOC(&new->nickname, 
-                                                        &new->nickname_len),
                             SILC_STR_UI16_NSTRING_ALLOC(&new->message, 
                                                         &new->message_len),
                             SILC_STR_END);
-  if (ret == -1)
+  if (ret == -1) {
+    SILC_LOG_DEBUG(("Incorrect private message payload"));
     goto err;
+  }
 
-  if ((new->message_len < 1 || new->message_len > buffer->len) ||
-      (new->nickname_len < 1 || new->nickname_len > buffer->len)) {
-    SILC_LOG_ERROR(("Incorrect private message payload in packet, "
+  if ((new->message_len < 1 || new->message_len > buffer.len)) {
+    SILC_LOG_DEBUG(("Incorrect private message payload in packet, "
                    "packet dropped"));
     goto err;
   }
@@ -86,25 +90,23 @@ silc_private_message_payload_parse(SilcBuffer buffer, SilcCipher cipher)
    the cipher is provided the packet is also encrypted here.  It is provided
    if the private message private keys are used. */
 
-SilcBuffer silc_private_message_payload_encode(uint16 flags,
-                                              uint32 nickname_len,
-                                              unsigned char *nickname,
-                                              uint16 data_len,
-                                              unsigned char *data,
+SilcBuffer silc_private_message_payload_encode(SilcUInt16 flags,
+                                              SilcUInt16 data_len,
+                                              const unsigned char *data,
                                               SilcCipher cipher)
 {
   int i;
   SilcBuffer buffer;
-  uint32 len, pad_len = 0;
-  unsigned char pad[SILC_PACKET_MAX_PADLEN];
+  SilcUInt32 len, pad_len = 0;
+  unsigned char pad[16];
 
   SILC_LOG_DEBUG(("Encoding private message payload"));
 
-  len = 4 + nickname_len + 2 + data_len;
+  len = 4 + data_len;
 
   if (cipher) {
     /* Calculate length of padding. */
-    pad_len = SILC_PACKET_PADLEN((len + 2));
+    pad_len = SILC_PRIVATE_MESSAGE_PAD(len);
     len += pad_len;
 
     /* Generate padding */
@@ -118,8 +120,6 @@ SilcBuffer silc_private_message_payload_encode(uint16 flags,
   silc_buffer_pull_tail(buffer, SILC_BUFFER_END(buffer));
   silc_buffer_format(buffer, 
                     SILC_STR_UI_SHORT(flags),
-                    SILC_STR_UI_SHORT(nickname_len),
-                    SILC_STR_UI_XNSTRING(nickname, nickname_len),
                     SILC_STR_UI_SHORT(data_len),
                     SILC_STR_UI_XNSTRING(data, data_len),
                     SILC_STR_UI_XNSTRING(pad, pad_len),
@@ -135,11 +135,10 @@ SilcBuffer silc_private_message_payload_encode(uint16 flags,
   return buffer;
 }
 
-/* Free's Private Message Payload */
+/* Frees Private Message Payload */
 
 void silc_private_message_payload_free(SilcPrivateMessagePayload payload)
 {
-  silc_free(payload->nickname);
   if (payload->message) {
     memset(payload->message, 0, payload->message_len);
     silc_free(payload->message);
@@ -149,29 +148,17 @@ void silc_private_message_payload_free(SilcPrivateMessagePayload payload)
 
 /* Return flags */
 
-uint16 
+SilcUInt16 
 silc_private_message_get_flags(SilcPrivateMessagePayload payload)
 {
   return payload->flags;
 }
 
-/* Return nickname */
-
-unsigned char *
-silc_private_message_get_nickname(SilcPrivateMessagePayload payload,
-                                 uint32 *nickname_len)
-{
-  if (nickname_len)
-    *nickname_len = payload->nickname_len;
-
-  return payload->nickname;
-}
-
 /* Return message */
 
 unsigned char *
 silc_private_message_get_message(SilcPrivateMessagePayload payload,
-                                uint32 *message_len)
+                                SilcUInt32 *message_len)
 {
   if (message_len)
     *message_len = payload->message_len;