aboutsummaryrefslogtreecommitdiff
path: root/extension/opensslthread.cpp
diff options
context:
space:
mode:
authorsappho <sappho@sappho.io>2023-07-14 07:19:14 -0400
committerGitHub <noreply@github.com>2023-07-14 07:19:14 -0400
commit7b92e4acf6dea29348efeb4c0cc89e3071aee56e (patch)
tree069032a9c6eb3ccc8f0089d8bbbb9ffe8ccacdd3 /extension/opensslthread.cpp
parent581d1e994692f9ce4e5d8071e8edba1e71412bac (diff)
ci fixes and repo cleanup + small tweaks and first release (#2)v2.0.0-beta
* Update docker_build.yml * Update docker_build.yml * Update docker_build.yml * attempt to lint * use tags * Update docker_build.yml * reorganize repo * correct typo with build dir * hacky chmod/chown for docker builds * more hacks for chmod * try to hack docker to work again * fix invalid syntax * remove extension in repo, remove spaces, fixup gitignore * twiddle around with making releases with commits * more ci testing to use non deprecated actions * Update docker_build.yml * more ci twiddling (ugh) * more lint and run the actual job now * lint more and use deb slim * autogen rel notes (?) * fixup bad quotes * sigh. fix quotes again * save beta autotagging for a later date * gitignore * fix so users don't use removed hash funcs * add max dbg info to ext * update versionings
Diffstat (limited to 'extension/opensslthread.cpp')
-rw-r--r--extension/opensslthread.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/extension/opensslthread.cpp b/extension/opensslthread.cpp
new file mode 100644
index 0000000..84e2286
--- /dev/null
+++ b/extension/opensslthread.cpp
@@ -0,0 +1,100 @@
+#include "opensslthread.h"
+
+
+OpensslThread::OpensslThread(void *_data, OpensslThread_Type _type):
+type(_type),data(_data)
+{
+ assert((type > OpensslThread_Type_NOTHING && type < OpensslThread_Type_LAST));
+ assert((data != NULL));
+}
+
+
+OpensslThread::~OpensslThread()
+{
+
+}
+
+static void openssl_hash_FramAction(void *data)
+{
+ if(data == NULL)
+ return;
+
+ Openssl_Hash_pack *handle = (Openssl_Hash_pack *)data;
+
+ IPluginFunction *pFunc = handle->hash_callback;
+ assert((pFunc != NULL));
+ if(pFunc != NULL)
+ {
+ pFunc->PushCell(handle->success);
+ if(handle->output == NULL)
+ pFunc->PushString("");
+ else
+ pFunc->PushString(handle->output);
+ pFunc->PushCell(handle->UserData);
+ pFunc->Execute(NULL);
+ }
+
+ if(handle->output != NULL)
+ delete handle->output;
+ if(handle->path != NULL)
+ delete handle->path;
+ delete handle;
+}
+
+void OpensslThread::RunFileHash()
+{
+ Openssl_Hash_pack *handle = (Openssl_Hash_pack *)data;
+ handle->success = false;
+
+ assert((handle->path != NULL));
+
+ char realpath[PLATFORM_MAX_PATH];
+ g_pSM->BuildPath(Path_Game, realpath, sizeof(realpath), "%s", handle->path);
+ FILE *pFile = fopen(realpath, "rb");
+ if(!pFile)
+ return;
+
+ unsigned char *output = NULL;
+ int outlength;
+
+ if(!g_OpensslManager.HashFile(handle->algorithm, pFile, &output, &outlength))
+ goto clean;
+
+ assert((output != NULL));
+ if(output != NULL)
+ {
+ handle->output = new char[outlength*2+1];
+ int pos = 0;
+ for(int i=0; i<outlength; i++)
+ {
+ sprintf(&handle->output[pos],"%02x",(unsigned char)output[i]);
+ pos+=2;
+ }
+ handle->success = true;
+ }
+
+clean:
+ if(output != NULL)
+ delete output;
+
+ fclose(pFile);
+}
+
+void OpensslThread::RunThread(IThreadHandle *pHandle)
+{
+ if(type == OpensslThread_Type_HASH_FILE)
+ {
+ RunFileHash();
+ }
+}
+
+void OpensslThread::OnTerminate(IThreadHandle *pHandle, bool cancel)
+{
+ if(type == OpensslThread_Type_HASH_FILE)
+ {
+ smutils->AddFrameAction(openssl_hash_FramAction, data);
+ }
+
+ delete this;
+}
+