1 |
#include <stdio.h> |
2 |
#include <stdint.h> |
3 |
#include <stdbool.h> |
4 |
#include <unistd.h> |
5 |
#include <dirent.h> |
6 |
|
7 |
#include "quickmail.h" |
8 |
#include "mailFromGui.h" |
9 |
|
10 |
#define TO "ae-support@oni2.net" |
11 |
#define SMTPSERVER "mail.illy.bz" |
12 |
#define SUBJECT "AE support request" |
13 |
#define SMTPPORT 25 |
14 |
#define SMTPUSER NULL |
15 |
#define SMTPPASS NULL |
16 |
|
17 |
static void appendString(char** buffer, unsigned int* bufsize, char* append) { |
18 |
if ((strlen(*buffer) + strlen(append) + 2) >= *bufsize) { |
19 |
unsigned int addon = (strlen(append) > 500 ? strlen(append)+500 : 500); |
20 |
*bufsize += addon; |
21 |
|
22 |
char* temp = malloc(*bufsize); |
23 |
|
24 |
strcpy(temp, *buffer); |
25 |
|
26 |
free(*buffer); |
27 |
*buffer = temp; |
28 |
} |
29 |
strcat(*buffer, append); |
30 |
} |
31 |
|
32 |
static char* buildDirectoryListing(char* path, int level) { |
33 |
unsigned int bufsize = 500; |
34 |
char* strbuf = malloc(bufsize); |
35 |
strbuf[0] = 0; |
36 |
|
37 |
if (level >= 4) |
38 |
return strbuf; |
39 |
|
40 |
struct dirent *dp; |
41 |
DIR *dfd = opendir(path); |
42 |
if(dfd != NULL) { |
43 |
while((dp = readdir(dfd)) != NULL) { |
44 |
if (strcmp(".", dp->d_name) != 0 && strcmp("..", dp->d_name) != 0) { |
45 |
char* name = malloc(strlen(path) + strlen(dp->d_name) + 2); |
46 |
sprintf(name, "%s/%s", path, dp->d_name); |
47 |
|
48 |
appendString(&strbuf, &bufsize, name); |
49 |
strcat(strbuf, "\n"); |
50 |
|
51 |
//printf("%2d: %s\n", level, name); |
52 |
|
53 |
char* sub = buildDirectoryListing(name, level+1); |
54 |
appendString(&strbuf, &bufsize, sub); |
55 |
} |
56 |
} |
57 |
closedir(dfd); |
58 |
} |
59 |
return strbuf; |
60 |
} |
61 |
|
62 |
static void sendMail() { |
63 |
char message[500] = ""; |
64 |
|
65 |
quickmail_initialize(); |
66 |
quickmail mailobj = quickmail_create(emailFrom, SUBJECT); |
67 |
quickmail_add_to(mailobj, TO); |
68 |
if (isCCSelected) { |
69 |
quickmail_add_cc(mailobj, emailFrom); |
70 |
} |
71 |
|
72 |
if (access("AEInstaller/updater_output.log", F_OK) != 0) { |
73 |
strcat(message, "updater_output.log does not exist!\n"); |
74 |
} |
75 |
if (access("AEInstaller/AEI-ProxySettings.xml", F_OK) != 0) { |
76 |
strcat(message, "AEI-ProxySettings.xml does not exist!\n"); |
77 |
} |
78 |
|
79 |
|
80 |
quickmail_set_body(mailobj, message); |
81 |
|
82 |
quickmail_add_attachment_file(mailobj, "AEInstaller/updater_output.log", "text/plain"); |
83 |
quickmail_add_attachment_file(mailobj, "AEInstaller/AEI-ProxySettings.xml", "text/xml"); |
84 |
|
85 |
char* dirList = buildDirectoryListing(".", 0); |
86 |
quickmail_add_attachment_memory(mailobj, "DirListing.txt", "text/plain", dirList, strlen(dirList)+1, 1); |
87 |
|
88 |
const char* errmsg; |
89 |
quickmail_set_debug_log(mailobj, stderr); |
90 |
if ((errmsg = quickmail_send(mailobj, SMTPSERVER, SMTPPORT, SMTPUSER, SMTPPASS)) != NULL) |
91 |
fprintf(stderr, "Error sending e-mail: %s\n", errmsg); |
92 |
quickmail_destroy(mailobj); |
93 |
} |
94 |
|
95 |
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) |
96 |
{ |
97 |
if (access("AEInstaller/", F_OK) != 0 || access("AEInstaller/AEInstaller2Updater.jar", F_OK) != 0) { |
98 |
MessageBox(NULL, |
99 |
"Please put this program in your Oni/AE folder!", |
100 |
"Invalid location", |
101 |
MB_OK | MB_ICONERROR); |
102 |
} else { |
103 |
mailFromGui(hInstance, nShowCmd); |
104 |
|
105 |
if (isSendSelected) |
106 |
sendMail(); |
107 |
} |
108 |
|
109 |
return EXIT_SUCCESS; |
110 |
} |
111 |
|