summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--plugins/checksum/checksum.c147
-rw-r--r--plugins/checksum/makefile.mak18
-rw-r--r--src/common/checksum.c74
-rw-r--r--src/common/checksum.h6
4 files changed, 165 insertions, 80 deletions
diff --git a/plugins/checksum/checksum.c b/plugins/checksum/checksum.c
new file mode 100644
index 00000000..0293a874
--- /dev/null
+++ b/plugins/checksum/checksum.c
@@ -0,0 +1,147 @@
+/* XChat-WDK
+ * Copyright (c) 2010 Berke Viktor.
+ *
+ * Use of OpenSSL SHA256 interface: http://adamlamers.com/?p=5
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <malloc.h>
+#include <errno.h>
+#include <openssl/sha.h>
+
+#include "xchat-plugin.h"
+
+#define BUFSIZE 32768
+
+static xchat_plugin *ph;   /* plugin handle */
+
+void
+sha256_hash_string (unsigned char hash[SHA256_DIGEST_LENGTH], char outputBuffer[65])
+{
+	int i = 0;
+	for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
+	{
+		sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
+	}
+	outputBuffer[64] = 0;
+}
+
+void
+sha256 (char *string, char outputBuffer[65])
+{
+	int i;
+	unsigned char hash[SHA256_DIGEST_LENGTH];
+	SHA256_CTX sha256;
+
+	SHA256_Init (&sha256);
+	SHA256_Update (&sha256, string, strlen(string));
+	SHA256_Final (hash, &sha256);
+
+	for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
+	{
+		sprintf (outputBuffer + (i * 2), "%02x", hash[i]);
+	}
+	outputBuffer[64] = 0;
+}
+
+int
+sha256_file (char *path, char outputBuffer[65])
+{
+	int bytesRead;
+	unsigned char *buffer;
+	unsigned char hash[SHA256_DIGEST_LENGTH];
+	SHA256_CTX sha256;
+
+	FILE *file = fopen (path, "rb");
+	if (!file)
+	{
+		return -534;
+	}
+
+	SHA256_Init (&sha256);
+	buffer = malloc (BUFSIZE);
+	bytesRead = 0;
+
+	if (!buffer)
+	{
+		return ENOMEM;
+	}
+
+	while ((bytesRead = fread (buffer, 1, BUFSIZE, file)))
+	{
+		SHA256_Update (&sha256, buffer, bytesRead);
+    }
+
+    SHA256_Final (hash, &sha256);
+    sha256_hash_string (hash, outputBuffer);
+
+	fclose (file);
+    free (buffer);
+    return 0;
+}
+
+int
+dccrecv_cb(char *word[], void *userdata)
+{
+	unsigned char sum[65];
+	sha256_file (word[2], sum);
+	xchat_printf (ph, "DCC RECV %s from %s complete [%s cps]", word[1], word[3], word[4]);
+	xchat_printf (ph, "SHA256 checksum for %s: %s\n", word[1], sum);
+	return XCHAT_EAT_XCHAT;
+}
+
+int
+dccoffer_cb(char *word[], void *userdata)
+{
+	unsigned char sum[65];
+	sha256_file (word[3], sum);
+	xchat_printf (ph, "Offering %s to %s", word[1], word[2]);
+	xchat_printf (ph, "SHA256 checksum for %s: %s\n", word[1], sum);
+	return XCHAT_EAT_XCHAT;
+}
+
+int
+xchat_plugin_init (xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg)
+{
+	ph = plugin_handle;
+
+	*plugin_name = "Checksum";
+	*plugin_desc = "Calculate checksum for DCC file transfers";
+	*plugin_version = "1.0";
+	
+	xchat_hook_print(ph, "DCC RECV Complete", XCHAT_PRI_NORM, dccrecv_cb, NULL);
+	xchat_hook_print(ph, "DCC Offer", XCHAT_PRI_NORM, dccoffer_cb, NULL);
+
+	xchat_print (ph, "Checksum plugin loaded\n");
+
+	return 1;
+}
+
+int
+xchat_plugin_deinit (void)
+{
+	xchat_print (ph, "Checksum plugin unloaded\n");
+	return 1;
+}
diff --git a/plugins/checksum/makefile.mak b/plugins/checksum/makefile.mak
new file mode 100644
index 00000000..9e2aae88
--- /dev/null
+++ b/plugins/checksum/makefile.mak
@@ -0,0 +1,18 @@
+include "..\..\src\makeinc.mak"

+

+all: checksum.obj checksum.def

+	link $(LDFLAGS) $(LIBS) /dll /out:xcchecksum.dll /libpath:$(LUAPATH)\lib $(LUALIB).lib /def:checksum.def checksum.obj 

+

+checksum.def:

+	echo EXPORTS > checksum.def

+	echo xchat_plugin_init >> checksum.def

+	echo xchat_plugin_deinit >> checksum.def

+

+checksum.obj: checksum.c makefile.mak

+	cl $(CFLAGS) /Dsnprintf=g_snprintf /I$(LUAPATH)\include checksum.c

+

+clean:

+	del *.obj

+	del *.dll

+	del *.exp

+	del *.lib

diff --git a/src/common/checksum.c b/src/common/checksum.c
deleted file mode 100644
index a0f2cdef..00000000
--- a/src/common/checksum.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/* this is a cleaned-up version of
- * http://adamlamers.com/?p=5
- */
-
-#include <stdio.h>
-#include <malloc.h>
-#include <errno.h>
-
-#include "checksum.h"
-
-void
-sha256_hash_string (unsigned char hash[SHA256_DIGEST_LENGTH], char outputBuffer[65])
-{
-	int i = 0;
-	for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
-	{
-		sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
-	}
-	outputBuffer[64] = 0;
-}
-
-void
-sha256 (char *string, char outputBuffer[65])
-{
-	int i;
-	unsigned char hash[SHA256_DIGEST_LENGTH];
-	SHA256_CTX sha256;
-
-	SHA256_Init (&sha256);
-	SHA256_Update (&sha256, string, strlen(string));
-	SHA256_Final (hash, &sha256);
-
-	for (i = 0; i < SHA256_DIGEST_LENGTH; i++)
-	{
-		sprintf (outputBuffer + (i * 2), "%02x", hash[i]);
-	}
-	outputBuffer[64] = 0;
-}
-
-int
-sha256_file (char *path, char outputBuffer[65])
-{
-	int bytesRead;
-	unsigned char *buffer;
-	unsigned char hash[SHA256_DIGEST_LENGTH];
-	SHA256_CTX sha256;
-
-	FILE *file = fopen (path, "rb");
-	if (!file)
-	{
-		return -534;
-	}
-
-	SHA256_Init (&sha256);
-	buffer = malloc (BUFSIZE);
-	bytesRead = 0;
-
-	if (!buffer)
-	{
-		return ENOMEM;
-	}
-
-	while ((bytesRead = fread (buffer, 1, BUFSIZE, file)))
-	{
-		SHA256_Update (&sha256, buffer, bytesRead);
-    }
-
-    SHA256_Final (hash, &sha256);
-    sha256_hash_string (hash, outputBuffer);
-
-	fclose (file);
-    free (buffer);
-    return 0;
-}
diff --git a/src/common/checksum.h b/src/common/checksum.h
deleted file mode 100644
index 1d5d62e3..00000000
--- a/src/common/checksum.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <openssl/sha.h>
-#define BUFSIZE 32768
-
-void sha256_hash_string (unsigned char hash[SHA256_DIGEST_LENGTH], char outputBuffer[65]);
-void sha256 (char *string, char outputBuffer[65]);
-int sha256_file (char *path, char outputBuffer[65]);