@ -0,0 +1,204 @@ | |||
#include <string.h> | |||
#include <stdlib.h> | |||
#include <unistd.h> | |||
#include "etpan_mime.h" | |||
#define MAX_MESSAGE_ID 512 | |||
static char * generate_boundary(const char * boundary_prefix) | |||
{ | |||
char id[MAX_MESSAGE_ID]; | |||
time_t now; | |||
char name[MAX_MESSAGE_ID]; | |||
long value; | |||
now = time(NULL); | |||
#ifndef WIN32 | |||
value = random(); | |||
gethostname(name, MAX_MESSAGE_ID); | |||
#else | |||
value = now; | |||
strcpy(name, "WINDOWS"); | |||
#endif | |||
if (boundary_prefix == NULL) | |||
boundary_prefix = ""; | |||
snprintf(id, MAX_MESSAGE_ID, "%s%lx_%lx_%x", boundary_prefix, now, value, | |||
getpid()); | |||
return strdup(id); | |||
} | |||
struct mailmime * part_new_empty( | |||
struct mailmime_content * content, | |||
struct mailmime_fields * mime_fields, | |||
const char * boundary_prefix, | |||
int force_single | |||
) | |||
{ | |||
struct mailmime * build_info; | |||
clist * list; | |||
int r; | |||
int mime_type; | |||
list = NULL; | |||
if (force_single) { | |||
mime_type = MAILMIME_SINGLE; | |||
} | |||
else { | |||
switch (content->ct_type->tp_type) { | |||
case MAILMIME_TYPE_DISCRETE_TYPE: | |||
mime_type = MAILMIME_SINGLE; | |||
break; | |||
case MAILMIME_TYPE_COMPOSITE_TYPE: | |||
switch (content->ct_type->tp_data.tp_composite_type->ct_type) { | |||
case MAILMIME_COMPOSITE_TYPE_MULTIPART: | |||
mime_type = MAILMIME_MULTIPLE; | |||
break; | |||
case MAILMIME_COMPOSITE_TYPE_MESSAGE: | |||
if (strcasecmp(content->ct_subtype, "rfc822") == 0) | |||
mime_type = MAILMIME_MESSAGE; | |||
else | |||
mime_type = MAILMIME_SINGLE; | |||
break; | |||
default: | |||
goto err; | |||
} | |||
break; | |||
default: | |||
goto err; | |||
} | |||
} | |||
if (mime_type == MAILMIME_MULTIPLE) { | |||
char * attr_name; | |||
char * attr_value; | |||
struct mailmime_parameter * param; | |||
clist * parameters; | |||
char * boundary; | |||
list = clist_new(); | |||
if (list == NULL) | |||
goto err; | |||
attr_name = strdup("boundary"); | |||
boundary = generate_boundary(boundary_prefix); | |||
attr_value = boundary; | |||
if (attr_name == NULL) { | |||
free(attr_name); | |||
goto free_list; | |||
} | |||
param = mailmime_parameter_new(attr_name, attr_value); | |||
if (param == NULL) { | |||
free(attr_value); | |||
free(attr_name); | |||
goto free_list; | |||
} | |||
if (content->ct_parameters == NULL) { | |||
parameters = clist_new(); | |||
if (parameters == NULL) { | |||
mailmime_parameter_free(param); | |||
goto free_list; | |||
} | |||
} | |||
else | |||
parameters = content->ct_parameters; | |||
r = clist_append(parameters, param); | |||
if (r != 0) { | |||
clist_free(parameters); | |||
mailmime_parameter_free(param); | |||
goto free_list; | |||
} | |||
if (content->ct_parameters == NULL) | |||
content->ct_parameters = parameters; | |||
} | |||
build_info = mailmime_new(mime_type, | |||
NULL, 0, mime_fields, content, | |||
NULL, NULL, NULL, list, | |||
NULL, NULL); | |||
if (build_info == NULL) { | |||
clist_free(list); | |||
return NULL; | |||
} | |||
return build_info; | |||
free_list: | |||
clist_free(list); | |||
err: | |||
return NULL; | |||
} | |||
struct mailmime * get_text_part( | |||
const char * mime_type, | |||
const char * text, | |||
size_t length, | |||
int encoding_type | |||
) | |||
{ | |||
struct mailmime_fields * mime_fields; | |||
struct mailmime * mime; | |||
struct mailmime_content * content; | |||
struct mailmime_parameter * param; | |||
struct mailmime_disposition * disposition; | |||
struct mailmime_mechanism * encoding; | |||
encoding = mailmime_mechanism_new(encoding_type, NULL); | |||
disposition = mailmime_disposition_new_with_data(MAILMIME_DISPOSITION_TYPE_INLINE, | |||
NULL, NULL, NULL, NULL, (size_t) -1); | |||
mime_fields = mailmime_fields_new_with_data(encoding, | |||
NULL, NULL, disposition, NULL); | |||
content = mailmime_content_new_with_str(mime_type); | |||
param = mailmime_param_new_with_data("charset", "utf-8"); | |||
clist_append(content->ct_parameters, param); | |||
mime = part_new_empty(content, mime_fields, NULL, 1); | |||
mailmime_set_body_text(mime, (char *) text, length); | |||
return mime; | |||
} | |||
struct mailmime * part_multiple_new( | |||
const char * type, | |||
const char * boundary_prefix | |||
) | |||
{ | |||
struct mailmime_fields * mime_fields; | |||
struct mailmime_content * content; | |||
struct mailmime * mp; | |||
mime_fields = mailmime_fields_new_empty(); | |||
if (mime_fields == NULL) | |||
goto err; | |||
content = mailmime_content_new_with_str(type); | |||
if (content == NULL) | |||
goto free_fields; | |||
mp = part_new_empty(content, mime_fields, boundary_prefix, 0); | |||
if (mp == NULL) | |||
goto free_content; | |||
return mp; | |||
free_content: | |||
mailmime_content_free(content); | |||
free_fields: | |||
mailmime_fields_free(mime_fields); | |||
err: | |||
return NULL; | |||
} | |||
@ -0,0 +1,24 @@ | |||
#pragma once | |||
#include <libetpan/libetpan.h> | |||
struct mailmime * part_new_empty( | |||
struct mailmime_content * content, | |||
struct mailmime_fields * mime_fields, | |||
const char * boundary_prefix, | |||
int force_single | |||
); | |||
struct mailmime * get_text_part( | |||
const char * mime_type, | |||
const char * text, | |||
size_t length, | |||
int encoding_type | |||
); | |||
struct mailmime * part_multiple_new( | |||
const char * type, | |||
const char * boundary_prefix | |||
); | |||
@ -0,0 +1,180 @@ | |||
#include "mime.h" | |||
#include <libetpan/libetpan.h> | |||
#include <string.h> | |||
#include <stdlib.h> | |||
#include <assert.h> | |||
#include <errno.h> | |||
#include <unistd.h> | |||
#include "etpan_mime.h" | |||
DYNAMIC_API PEP_STATUS mime_encode_text( | |||
const char *plaintext, | |||
const char *htmltext, | |||
char **resulttext | |||
) | |||
{ | |||
struct mailmime * msg_mime = NULL; | |||
struct mailimf_fields * fields = NULL; | |||
struct mailmime * mime = NULL; | |||
struct mailmime * submime = NULL; | |||
int col; | |||
int r; | |||
int fd; | |||
FILE *file = NULL; | |||
size_t size; | |||
char *buf = NULL; | |||
PEP_STATUS error = PEP_OUT_OF_MEMORY; | |||
assert(plaintext); | |||
assert(resulttext); | |||
*resulttext = NULL; | |||
msg_mime = mailmime_new_message_data(NULL); | |||
assert(msg_mime); | |||
if (msg_mime == NULL) | |||
goto enomem; | |||
fields = mailimf_fields_new_empty(); | |||
assert(fields); | |||
if (fields == NULL) | |||
goto enomem; | |||
mailmime_set_imf_fields(msg_mime, fields); | |||
mime = part_multiple_new("multipart/mixed", NULL); | |||
assert(mime); | |||
if (mime == NULL) | |||
goto enomem; | |||
submime = get_text_part("text/plain", plaintext, strlen(plaintext), | |||
MAILMIME_MECHANISM_QUOTED_PRINTABLE); | |||
assert(submime); | |||
if (submime == NULL) { | |||
mailmime_free(msg_mime); | |||
goto enomem; | |||
} | |||
r = mailmime_smart_add_part(mime, submime); | |||
assert(r == MAILIMF_NO_ERROR); | |||
if (r == MAILIMF_ERROR_MEMORY) { | |||
mailmime_free(msg_mime); | |||
goto enomem; | |||
} | |||
else { | |||
// mailmime_smart_add_part() takes ownership of submime | |||
submime = NULL; | |||
} | |||
r = mailmime_add_part(msg_mime, mime); | |||
assert(r == MAILIMF_NO_ERROR); | |||
if (r == MAILIMF_ERROR_MEMORY) { | |||
goto enomem; | |||
} | |||
// mailmime_add_part() takes ownership of mime | |||
char *template = strdup("/tmp/temp.XXXXXXXXXXXXXXXXXXXX"); | |||
assert(template); | |||
if (template == NULL) | |||
goto enomem; | |||
do { | |||
fd = mkstemp(template); | |||
} while (fd == -1 && errno == EINTR); | |||
assert(fd != -1); | |||
if (fd == -1) | |||
goto err_file; | |||
r = unlink(template); | |||
assert(r == 0); | |||
if (r == -1) | |||
goto err_file; | |||
free(template); | |||
template = NULL; | |||
do { | |||
file = fdopen(fd, "w+"); | |||
} while (file == NULL && errno == EINTR); | |||
assert(file); | |||
if (file == NULL) { | |||
switch (errno) { | |||
case ENOMEM: | |||
goto enomem; | |||
default: | |||
goto err_file; | |||
} | |||
} | |||
fd = -1; | |||
col = 0; | |||
r = mailmime_write_file(file, &col, mime); | |||
assert(r == MAILIMF_NO_ERROR); | |||
if (r == MAILIMF_ERROR_MEMORY) | |||
goto enomem; | |||
else if (r != MAILIMF_NO_ERROR) | |||
goto err_file; | |||
off_t len = ftello(file); | |||
assert(len != -1); | |||
if (len == -1 && errno == EOVERFLOW) | |||
goto err_file; | |||
if (len + 1 > SIZE_T_MAX) | |||
goto err_buffer; | |||
size = (size_t) len; | |||
rewind(file); | |||
buf = calloc(1, size + 1); | |||
assert(buf); | |||
if (buf == NULL) | |||
goto enomem; | |||
char *_buf = buf; | |||
size_t rest = size; | |||
for (size_t bytes_read = 0; rest > 0; rest -= bytes_read, _buf += rest) { | |||
assert(feof(file) == 0); | |||
if (feof(file)) | |||
goto err_file; | |||
bytes_read = fread(_buf, rest, 1, file); | |||
if (ferror(file)) | |||
goto err_file; | |||
} | |||
fclose(file); | |||
mailmime_free(msg_mime); | |||
*resulttext = buf; | |||
return PEP_STATUS_OK; | |||
err_buffer: | |||
error = PEP_BUFFER_TOO_SMALL; | |||
goto enomem; | |||
err_file: | |||
error = PEP_CANNOT_CREATE_TEMP_FILE; | |||
enomem: | |||
free(buf); | |||
free(template); | |||
if (file) | |||
fclose(file); | |||
else if (fd != -1) | |||
close(fd); | |||
if (msg_mime) | |||
mailmime_free(msg_mime); | |||
if (fields) | |||
mailimf_fields_free(fields); | |||
if (submime) | |||
mailmime_free(submime); | |||
return error; | |||
} |
@ -0,0 +1,40 @@ | |||
#pragma once | |||
#include "pEpEngine.h" | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
// mime_encode_text() - encode a MIME message | |||
// | |||
// parameters: | |||
// plaintext (in) plaintext of message as UTF-8 string | |||
// htmltext (in) optional HTML version of message as UTF-8 | |||
// string or NULL if it does not apply | |||
// resulttext (out) the resulting encoded text | |||
// | |||
// return value: | |||
// PEP_STATUS_OK if everything worked | |||
// PEP_BUFFER_TOO_SMALL if encoded message size is too big to handle | |||
// PEP_CANNOT_CREATE_TEMP_FILE | |||
// if there are issues with temp files; in | |||
// this case errno will contain the underlying | |||
// error | |||
// PEP_OUT_OF_MEMORY if not enough memory could be allocated | |||
// | |||
// caveat: | |||
// the resulttext will go to the ownership of the caller; plaintext | |||
// and htmltext will remain in the ownership of the caller | |||
DYNAMIC_API PEP_STATUS mime_encode_text( | |||
const char *plaintext, | |||
const char *htmltext, | |||
char **resulttext | |||
); | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
@ -1,106 +1,105 @@ | |||
-----BEGIN PGP PRIVATE KEY BLOCK----- | |||
Version: GnuPG v2.0.22 (MingW32) | |||
lQcYBFLefd0BEADB97Pmcz0yfkOWD2978HRUCUa7H4JpuDHZs+hurMlkuE7mLGh5 | |||
PAQ61/nL5gppl0cHFNlO7doG2gcRixWZfeQZywkJia5xNzcdjyAiC5jZ6IQpXk2T | |||
wwzBIDYrU+9DhppY5hnE90yDv0MBS2SVjDergZTPDBbIYPTtPf5h51pVULCAtiyN | |||
2Htv3M3tDwJJ9IrLFpJL+ClocgrmeDANKbico63qlBl9NjiUqdnt5INoE6/SnKSu | |||
zaBE37C+/10bswFpjjVffyhu+hplxp6MlalZZYJEip6rmDe0P+nMbEmNvNuUmZwc | |||
sPwvr1vRwhGGpZao2j4/SnDsKNNmsLrwyVEQboHYcKIgLEuHY4WtHDUt6umu7zdt | |||
I6VDUoiSuNkVB+TM51HeQOoLZJ4Evcrdh6zKB2wWMW1RJQIknlMDwnRhHj+WJD06 | |||
texTzvAfDdsHV6NNs2WeUKesyivCyaKMPU7o95D+ZMi22CQ2qUCSLegivpnk/gKS | |||
pM+JqwyAPnzJBW43qr13zA0tWMO2nzSzcYnRhTNTGeqkxn7t2Uc0ItMk360Xy7n6 | |||
yI2AL79daP0NGM9P0F4wD44FCnrvcDO0gbk3zJJnynnfFSF6Dk4/2sRUPsp2gm9B | |||
hiHFt4w13mySETjd0sbcQYbpHZbJEPm2YY/q7rTCCCA106vg1S2IduY2GwARAQAB | |||
AA//QydAc/UKx2v6dz4B0W2GwL9zav52NqbML3x/aK3Ojd3Xhw3x36M9Lagvdf2/ | |||
Nh5nO1bnA1IKrVuXneXCxSDWM23dQ52UtOKyZLv0GoVcVnkPJIlfH1ykkkpWJrsI | |||
955m2odTfaNGrMgvaQfSm4nvjiOvQt2DF72lnmtbokaoOihU60Lm+vbriWdvLfcH | |||
ylXtJXG7laylnWD6UB9lN3Ft1mE+qZu7lWOLxEBn0FpQelxyf163D0PmjGHLfdzI | |||
PfpD72kKJnVOKNnTANB6fN6lwmsH5jX9yBfLlU6ZYapN7tHnTbO+3hoSPWofRmhD | |||
jBPRLMVeTqg1nzVlN0TRe+Ke+xAMkrlAcC2xJyU4vi9VgGJNeXZk0m0aDpxGaHwS | |||
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 | |||
=NZw5 | |||
-----END PGP PRIVATE KEY BLOCK----- | |||
-----BEGIN PGP PRIVATE KEY BLOCK----- | |||
lQcYBFLefd0BEADB97Pmcz0yfkOWD2978HRUCUa7H4JpuDHZs+hurMlkuE7mLGh5 | |||
PAQ61/nL5gppl0cHFNlO7doG2gcRixWZfeQZywkJia5xNzcdjyAiC5jZ6IQpXk2T | |||
wwzBIDYrU+9DhppY5hnE90yDv0MBS2SVjDergZTPDBbIYPTtPf5h51pVULCAtiyN | |||
2Htv3M3tDwJJ9IrLFpJL+ClocgrmeDANKbico63qlBl9NjiUqdnt5INoE6/SnKSu | |||
zaBE37C+/10bswFpjjVffyhu+hplxp6MlalZZYJEip6rmDe0P+nMbEmNvNuUmZwc | |||
sPwvr1vRwhGGpZao2j4/SnDsKNNmsLrwyVEQboHYcKIgLEuHY4WtHDUt6umu7zdt | |||
I6VDUoiSuNkVB+TM51HeQOoLZJ4Evcrdh6zKB2wWMW1RJQIknlMDwnRhHj+WJD06 | |||
texTzvAfDdsHV6NNs2WeUKesyivCyaKMPU7o95D+ZMi22CQ2qUCSLegivpnk/gKS | |||
pM+JqwyAPnzJBW43qr13zA0tWMO2nzSzcYnRhTNTGeqkxn7t2Uc0ItMk360Xy7n6 | |||
yI2AL79daP0NGM9P0F4wD44FCnrvcDO0gbk3zJJnynnfFSF6Dk4/2sRUPsp2gm9B | |||
hiHFt4w13mySETjd0sbcQYbpHZbJEPm2YY/q7rTCCCA106vg1S2IduY2GwARAQAB | |||
AA//QydAc/UKx2v6dz4B0W2GwL9zav52NqbML3x/aK3Ojd3Xhw3x36M9Lagvdf2/ | |||
Nh5nO1bnA1IKrVuXneXCxSDWM23dQ52UtOKyZLv0GoVcVnkPJIlfH1ykkkpWJrsI | |||
955m2odTfaNGrMgvaQfSm4nvjiOvQt2DF72lnmtbokaoOihU60Lm+vbriWdvLfcH | |||
ylXtJXG7laylnWD6UB9lN3Ft1mE+qZu7lWOLxEBn0FpQelxyf163D0PmjGHLfdzI | |||
PfpD72kKJnVOKNnTANB6fN6lwmsH5jX9yBfLlU6ZYapN7tHnTbO+3hoSPWofRmhD | |||
jBPRLMVeTqg1nzVlN0TRe+Ke+xAMkrlAcC2xJyU4vi9VgGJNeXZk0m0aDpxGaHwS | |||
p1lskMQoKO9cswCeBGUbWmuhC6MXPwUpN3s1r7GSwQGB8O1xQbSghTqozgIwlu/H | |||
JRfC8yvQJpxK9UtFJ1t41vq/urxxlL2BC67ms9u1W+/yY/bgrKPAlP7QcYJqXFQa | |||
b+1xmL2gG0avgGISzu86hN3VLFZ6xKyIfgrAP4N44ZrJ2dvgR6jCpU6qg4Mzkiuf | |||
j7dnLRfRcjRT3K+a62Ma1cd0DqeFdYHyOO6u/68I50doj5X8NDJQLy6zwOtzmbKz | |||
5l7DLZbX9hnhvrk0mMOflLq0+adr5KloGGYcQHtpfF8VKy0IAM0wqLeGWmkSMQeA | |||
jj77lpF3JR1OObw7Od8GewMuGBOZjdc5EC2CvLwM040dT2a93QJb5qF08AHKi8g/ | |||
GKGnSZ3YqfSuHOxqtAycURUWsR/5qVc2aEcueimq9RvKPOH+jihhcJofgYS85xuD | |||
pIZRCpHITiWaWeE2FxlATzOAldReThNm1W6uaQ/A0VFZ4It1jvHeHtiL1v9KHwH+ | |||
7MQCK0hQ0MxrK5RudPFLTky4FAfIXSOTUZBzzrL5kiFxEcLARj1UVZjD7BvwZOQT | |||
gNVYOA7BfsqfH17NEnkaZTFUUVb1+nggzl4/Csv+1ZPkHnfzv3KpTRE1Mh7oXs1B | |||
cvo/Ds0IAPH/obEvqL3sSJtxDWuPd6iKhcJ5EbbrFi4XQNjFy/sJTVmX9HWfwDF3 | |||
WU9qPfKuF5f9EN/VH/ge7amlnJvHMRBfnvk8ViAiitucZAc4HzFIIyLB2SWRE6RX | |||
AUplhRKn/9LAz8Q+VgHDSlvk3KuwE1CYQXg2qNHjw2xeWepDHgshGBFlnmx69Lcv | |||
atiqwKlvFCJND9eu022ViDJ4gYxH2S9DpBuVqhAaZLa4jWssOGn28vUEv9gD7zAA | |||
02ja08cO8Zkf9+aawN+XiYYKuSaPwg4K31SFP/VTkJv0sA9YBaqLOqjnvjjZ0igO | |||
4gmP3zR65gpWLn6liZig4sGRp7XrCIcIAMxGghMsK6NNb7prVTJ7GiOnsgAmIiNf | |||
BqmkcESNJBRSglKPW2fQ5D6TY0IUrNDZyf8lyO/5whnEVdzzapMr/jzcdX2lCByo | |||
tTtxkU6UivAS3AXwSkqH+CG4WdrkkLziCMTH/pGmOH/BiVdkvEyAlSzt1ECpHKP1 | |||
hWIrJfBC6xc9c1c5wySqX6422fBG6G79soLaAxpITl+VQ0VyRG+RG6V0OrafGfnR | |||
glZB58jUjBVW6Cs8AvIW1D3BXL1zb2M+Bwa2pgaoopp4ZX7/aqmfFpUhlYFXud2r | |||
K/z0Ua7wHi1bEHbWxMdPLCfTWGv0AJJItQfY9n+GR+awzoMyVwS0TV542bQ/Vm9s | |||
a2VyIEJpcmsgKFRlc3RrZXkgLSBkb24ndCB1c2UpIDx2b2xrZXIuYmlya0BkaWdp | |||
dGFsZWtoby5jb20+iQI5BBMBCgAjAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgEC | |||
F4AFAlTGNOwACgkQ3VW/Kd+bFUH65A//T0I+c5QpIFj3EWq3qLsQt/kg/6Ae8Ct0 | |||
A10kzXPxUm8a+JKG8KeAjZeW7YK9zFfB7Lt62E5POYP0K4wX8JChfDFlr2eGUW+E | |||
xi0XfT/8viybhogoMlo8rSOtEZKdv8mka6lOVHmDoy8T2W/lZJPw5me4sXJzxzAK | |||
NOCOsiycGhNZFjXxILsUgQrT5qY0gslxzGBY+jza4Lq1UD6wXO0KFdy3Ucsr394Y | |||
i28OIyRexVX/I1GNg3jaP5lmmAag1W1maI4MuMFwephqF2q0brtapoaAS/n71cfo | |||
xgTxqRwzV1LsnRRDxisxc3EtWHD09HpTaxDddvjeoamY3+1Tu/4N3naSkYuqMqKa | |||
1d0dbrvqh+jOHIIO16P+oArHb3SmmDQqpluzVF1j5tquVsyFRSS7dc6LYe2CbYTx | |||
UQSRaGNDyt41eXUTU8Va0WCAAht9n32vWbxHsFOP0QXGZfGZF8V4ukOOvL/PDnFi | |||
9EkEbmvM9BaSkPTuiXgrta+dos7b7JhbrGdN26R5LxhsO2835KrghLIDqjkOiYom | |||
GLNCGoQWUimeu4r0znevmJVq1w6T8MneWJTXhZsVHNvcUB6drVf18i7pRxx92zio | |||
HxylmwrTkp1ntwbg21Pq997YKmfgEap1kwCHHTosjgDftcNcrcqlOHAMYCeeK847 | |||
XQoSJjpTvQydBxgEUt593QEQALwSjvQuRsVyI8p2DS8NdGTOEe+11NJr1pIWy0JR | |||
YVW+zhAhXZwKhdueCTW+zcrB/ygKokCj2/Kh7GgnyJf7SGpBGnoMTGHtM7WjiZr7 | |||
E26FvQIVUMfE+P4h1lVDrHX4Ah3zJRasGQRlVHvJiC5875X0f3wNqPmNLDYf8IG9 | |||
kEaL3n6H0tG8p+VZAELZxgbdt0LMBa/TK/hp8OtaDmO4ME7+Nudg5Uth7zHhmBwh | |||
ij4bSre37+HM9u12RnYf1SCbManmR51OtbjmNWA4H+Tb8sa22zgxNmhzCQ3bggXe | |||
MLIP9lpVNC9rk3uH0Adb7rjpbh0y0lzzUmfKO6yasoC9zznzdiHhsKAhmfn4F+Gl | |||
cMjUhgGtnHKbq81RVfS8cT/XIWdCLT/nogJ3xiv7G/uDNjq1A/X2Vah0T8eMvvBO | |||
mnRdwQtblK3CfpMsFzqDZht9C/c6py/wPuHQZti4G2K4zFwP4nN0vTEv3EkZ3+wC | |||
K7Lw8nWu+d2DzzXl3r3+l6wqQ3DdGv8JyL6tnSlR+D2kgDeLYqpbaMHr+LJsZN8d | |||
5Lf/ilJqxaeiEB0tYg11yi64D9AbjwURV7BnuDbh2eNeIg0wQ63dLjQ8aZF4Y/rx | |||
gWvOAo2/lveUOUMcPcuOBFN+pFchKqosALwQ75JYib5gYo0tgtUkhpJMjnJFMUqu | |||
LOxbABEBAAEAD/4tXma41d8Bq26h3QeCJcNBvApMorcDybrZxADlbx9FYYFxF7Nu | |||
vIUc/QsouW4IbvL/9Ey+viiFZ/VRDOPRce8+npTmA0h7yQ5Tz28XAWFnJID7WywA | |||
/O251GzRZcFZNepA0lJMnVhtnIocUHn3CPF84Z3NTbhI9vrG1b6ddZ6zvfL+4AIF | |||
0XZJF8a92a3xIxQd23y1tQHi65+QDsnw2VJiA+Y3u8KkhCwBAvRAOQERyWClYAxQ | |||
krKwhvspbLVrp7R70U7OTln9EB+pJfDfswVmVV8dt5Vx7eotuxmrE7X4hmw9z1cG | |||
53MM9i7DT7SPS9Rh28wuWw4ydnEdyrWr4930qVLoXnP5zvA9rVfVg9OuEvPRT2B7 | |||
Ht9ygyuc+RnzLKdLgt1/riJQHMDrTlyKV4MZR31Pkwofc1AusVptfnm/B3X6moxV | |||
dhHKc+r/uAVGuUFdyBfyPql5oyLCkqSnW7DCroxbAbGoT2kgzW7DIM+vqSttqdD7 | |||
TCY6Os7nL5dmkHDyfP53xgkcn1gMEsthnMuu1q40DGFHqEOHhOGw+14P3NH0/cA3 | |||
QnU3h/4vWXnich+0BmvsXJyQh04qR9g9yf8vP8k5EiPkL1sKtX8B2zAjYrXEqpWK | |||
u4YXJo3SBFQN+r7l/kZKm7cnRRdGU8p7sUkoqKgnXZM+H522H535u0jZnQgAz02b | |||
JQddSQFdTsARz91JJthExBnphzZnLNTLulRN5rVotsXX7vffsZdTQABljuRfe/S/ | |||
TlurC4NtaEXsZpmkTb3Mzg/Q4tC9bLpfbd00F9B76rpvxbXo8roZpdNMQnNy0CaB | |||
htAH5TjeKtnNcF3hYHf9esaDTQBTrERUDJCX9ERls9VSOyb13SLENgPmqXmuuooR | |||
FRt1/gbmq62JEpqREVgdTxqGqjQWwQwWXLbRYWC7KKTrG87KSGny0LRiUfY5yPyz | |||
wRSe8R6hv+XpeBz4017CHzHn2mWY7ENqbyYI30NaYroK66+1e1uToXzGydOxiJ7b | |||
wBDIGuCrXqH22XcsVwgA6EB/Iv56xO/yKHjz5J254ZxXtk228LY+se4tBUWb20hc | |||
AbuNH6H2a8cyD98WEBVQmmBtbDCE754IU+poZGiVjfwBT6vvk/cuCx8aNAzY0DVm | |||
k/aXI9PiHP2DPZf5kZsgIzW/ESjGZqtIsWrYgIujnI6I/euE8dvbKAHvOnkKlCpP | |||
2AquKtPXhreY0s3iJY0WF5FECM3yoCCEAQOr0P6wnqTSt6BDZCpVaILD4KXnDuYa | |||
QABH6/txyYmWOJFH+vNZdLnPfhdcCEqWU+Y5A4qS6ekBY5ZjPTnjGDtV670I29hA | |||
Xsz4szuHr3xhDYXzrmmVQ93Hs3y/35mnTZv11eo9nQf+K9W58hNpV9mxTOK2LOWN | |||
uFwkEakhP6VxtyHR1swpJV+krabNxLEprMBQLwX0gj2gPKhF2q9joZGhGPwHjshD | |||
Qd2znU05zm7b444RU0f+hdAAy15nAJaZ5VyRt3frrpSOq4/FlNrjXycO2oLsMbcA | |||
bHrWa7bYAkNFTLePgE6LCuIL8fGXT6w/dJwkIHTFKFpKL1zcr/SC/tS8Yt0Sph2G | |||
xFu4/5hOmtuUXf16vX9TrgVP1s9crOKA9V77piXJvzx84/nNl9ykO6Uwp+rm26TZ | |||
ku19/5SQL+EqhmykqZ9an0+1hZH2F3gp3NZ7dEiaQ7lNVWT85/Ki0g/4yio8jnNt | |||
H5sBiQIfBBgBCgAJAhsMBQJUxjT8AAoJEN1VvynfmxVBKUwQAICLBFwL1MJHQCcd | |||
cUWIGcjemnNcXB6gJ7woa/qlcacNJwcIuwmqYflr1wh7YCttxbyUHQm0vHHXbJ5F | |||
q0qGZsjkkRbt+GGi65AUYv9SaW8/7GcdiF8+/zLY8QbTSOS6S0prdpcXQ1tNsd4q | |||
bvJN6oJAcJKMKa5BIeWmM6Tf1SDzpmr9cNSqOH66ZML4QSkd36A6qWExj1TBQC/I | |||
7JBovzUJZJyJqGGn3Z0o9HsOOxBOP/x5r5iocBkgSXG/lrcGOAwPzzKJasmOxtOV | |||
TXTFSory++SkgbexYYz7sd52p3PzVAf2Yueup2krBl/zSOcVfgPke5lDtZENqkBc | |||
BewebdigBRUzPHGeiUV+yh+T5d7opvPcavCPabff5vwRJpc18nYmavtXXKL/Zm5a | |||
XF1HGCUh2EEl9ZM03KJeX6biC+n3uqpI6vZ3eGvv7q/td5Hlr+qJ4gtLQ0vqUaY8 | |||
QCgi17ssHOkh3nWJTM4GoocoX4zQVo28hN5dEi0voU2ShIjEafha3fFzkxniSavw | |||
zh/s4f1rpbQXO+ueWPlsLWVTIOEfsqMO3O1HpdZyHIsAvDeMWkPbEWoYsvPlItnb | |||
n7MzXc4oJ1F+R1tsgGVvgu/Q45MtNxZ8CXftS95a/J61MVY103yI5gpGgNLj+X0U | |||
+N3C7yIoyB94aBWuQF/F53IQVNIo | |||
=Onin | |||
-----END PGP PRIVATE KEY BLOCK----- |
@ -1,52 +1,65 @@ | |||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||
Version: GnuPG v2.0.22 (MingW32) | |||
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 | |||
=c+rW | |||
-----END PGP PUBLIC KEY BLOCK----- | |||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||
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 | |||
=6vQn | |||
-----END PGP PUBLIC KEY BLOCK----- |
@ -1,55 +1,26 @@ | |||
include ../Makefile.conf | |||
ifeq ($(BUILD_FOR),Windoze) | |||
CXX=i686-w64-mingw32-g++ | |||
LD=i686-w64-mingw32-c++ | |||
LDFLAGS=-lstdc++ | |||
else ifeq ($(BUILD_FOR),MINGW32_NT-6.1) | |||
CXX=g++ -std=gnu++11 -DWIN32 -pthread | |||
LD=g++ | |||
LDFLAGS=-L../src -lpEpEngine -lstdc++ | |||
else | |||
CC=g++ -std=gnu++11 -pthread | |||
CXX=g++ -std=gnu++11 -pthread | |||
LD=g++ | |||
LD=$(CXX) | |||
LDFLAGS=-L$(HOME)/lib -lpEpEngine -lstdc++ | |||
endif | |||
CXXFLAGS=-g -O0 -I../src | |||
# CXXFLAGS=-O3 -DNDEBUG | |||
TARGET=pEpEngineTest | |||
ifeq ($(BUILD_FOR),Windoze) | |||
all: $(TARGET).exe | |||
UNIT_TEST_SOURCE=$(wildcard *_test.cc) | |||
UNIT_TESTS=$(subst .cc,,$(UNIT_TEST_SOURCE)) | |||
$(TARGET).exe: $(TARGET).o ../src/libpEpEngine.a | |||
$(CXX) $(LDFLAGS) -o $(TARGET).exe $(TARGET).o ../src/libpEpEngine.a | |||
else ifeq ($(BUILD_FOR),MINGW32_NT-6.1) | |||
all: $(TARGET).exe pEpEngine.dll | |||
$(TARGET).exe: $(TARGET).o ../src/libpEpEngine.a | |||
$(CXX) $(LDFLAGS) -o $(TARGET).exe $(TARGET).o ../src/libpEpEngine.a | |||
else | |||
all: $(TARGET) | |||
$(TARGET): $(TARGET).o | |||
$(CXX) $(LDFLAGS) -o $(TARGET) $(TARGET).o | |||
endif | |||
%.o: %.cc ../pEpEngine.h | |||
$(CXX) $(CXXFLAGS) -c -o $@ $< | |||
pEpEngine.dll: ../src/pEpEngine.dll | |||
cp $< $@ | |||
all: $(TARGET) $(UNIT_TESTS) | |||
.PHONY: clean | |||
clean: | |||
rm -f *.o $(TARGET) *.exe *.a *~ pEpEngine.dll message_api_test | |||
rm -f *.o $(TARGET) *.a *~ $(UNIT_TESTS) | |||
test: all | |||
test: pEpEngineTest | |||
LD_LIBRARY_PATH=~/lib:../src ./pEpEngineTest | |||
message_api_test: message_api_test.o | |||
$(LD) $(LDFLAGS) -o message_api_test message_api_test.o | |||
unit_tests: $(UNIT_TESTS) | |||
LD_LIBRARY_PATH=~/lib:../src ./unit_tests |