diff --git a/src/cryptotech.h b/src/cryptotech.h index 24b69794..c9ef8152 100644 --- a/src/cryptotech.h +++ b/src/cryptotech.h @@ -13,38 +13,38 @@ typedef enum _PEP_cryptotech { } PEP_cryptotech; typedef PEP_STATUS (*decrypt_and_verify_t)( - PEP_SESSION session, const char *ctext, size_t csize, - char **ptext, size_t *psize, stringlist_t **keylist + PEP_SESSION session, const char *ctext, size_t csize, + char **ptext, size_t *psize, stringlist_t **keylist ); typedef PEP_STATUS (*verify_text_t)( - PEP_SESSION session, const char *text, size_t size, - const char *signature, size_t sig_size, stringlist_t **keylist + PEP_SESSION session, const char *text, size_t size, + const char *signature, size_t sig_size, stringlist_t **keylist ); typedef PEP_STATUS (*encrypt_and_sign_t)( - PEP_SESSION session, const stringlist_t *keylist, const char *ptext, - size_t psize, char **ctext, size_t *csize + PEP_SESSION session, const stringlist_t *keylist, const char *ptext, + size_t psize, char **ctext, size_t *csize ); typedef PEP_STATUS (*delete_keypair_t)(PEP_SESSION session, const char *fpr); typedef PEP_STATUS (*export_key_t)( - PEP_SESSION session, const char *fpr, char **key_data, size_t *size + PEP_SESSION session, const char *fpr, char **key_data, size_t *size ); typedef PEP_STATUS (*find_keys_t)( - PEP_SESSION session, const char *pattern, stringlist_t **keylist + PEP_SESSION session, const char *pattern, stringlist_t **keylist ); typedef PEP_STATUS (*generate_keypair_t)( - PEP_SESSION session, pEp_identity *identity + PEP_SESSION session, pEp_identity *identity ); typedef PEP_STATUS (*get_key_rating_t)( - PEP_SESSION session, - const char *fpr, - PEP_comm_type *comm_type + PEP_SESSION session, + const char *fpr, + PEP_comm_type *comm_type ); typedef PEP_STATUS (*import_key_t)(PEP_SESSION session, const char *key_data, size_t size); diff --git a/src/etpan_mime.c b/src/etpan_mime.c new file mode 100644 index 00000000..3fc49174 --- /dev/null +++ b/src/etpan_mime.c @@ -0,0 +1,204 @@ +#include +#include +#include + +#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; +} + diff --git a/src/etpan_mime.h b/src/etpan_mime.h new file mode 100644 index 00000000..8ee5c472 --- /dev/null +++ b/src/etpan_mime.h @@ -0,0 +1,24 @@ +#pragma once + +#include + + +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 + ); + diff --git a/src/message_api.c b/src/message_api.c index 97efa722..ba355984 100644 --- a/src/message_api.c +++ b/src/message_api.c @@ -11,149 +11,8 @@ #define NOT_IMPLEMENTED assert(0); -PEP_STATUS mime_encode_parts(const message *src, message **dst) -{ - struct mailmime * mime_body; - - assert(src); - assert(src->enc_format == PEP_enc_none); - assert(dst); - - if (src->enc_format != PEP_enc_none) - return PEP_ILLEGAL_VALUE; - - *dst = NULL; - - if (src->longmsg && src->longmsg_formatted) { - struct mailmime * mime_text; - struct mailmime * mime_html; - NOT_IMPLEMENTED - } - else if (src->longmsg) { - struct mailmime_fields * mime_fields - = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); - assert(mime_fields); - if (mime_fields == NULL) - return PEP_OUT_OF_MEMORY; - - struct mailmime_content * content - = mailmime_content_new_with_str("text/plain"); - assert(content); - if (content == NULL) { - mailmime_fields_free(mime_fields); - return PEP_OUT_OF_MEMORY; - } - - struct mailmime_parameter * param - = mailmime_param_new_with_data("charset", "utf-8"); - assert(param); - if (param == NULL) { - mailmime_fields_free(mime_fields); - mailmime_content_free(content); - return PEP_OUT_OF_MEMORY; - } - - int r = clist_append(content->ct_parameters, param); - if (r < 0) { - mailmime_fields_free(mime_fields); - mailmime_content_free(content); - mailmime_parameter_free(param); - return PEP_OUT_OF_MEMORY; - } - mime_body = mailmime_new_empty(content, mime_fields); - if (mime_body == NULL) { - mailmime_fields_free(mime_fields); - mailmime_content_free(content); - return PEP_OUT_OF_MEMORY; - } - - r = mailmime_set_body_text(mime_body, src->longmsg, strlen(src->longmsg)); - if (r != MAILIMF_NO_ERROR) { - mailmime_free(mime_body); - return PEP_OUT_OF_MEMORY; - } - } - else if (src->longmsg_formatted) { - NOT_IMPLEMENTED - } - - char *fn = strdup("/tmp/pEp.XXXXXXXXXX"); - assert(fn); - if (fn == NULL) { - mailmime_free(mime_body); - return PEP_OUT_OF_MEMORY; - } - - int f = mkstemp(fn); - assert(f != -1); - free(fn); - if (f == -1) { - mailmime_free(mime_body); - return PEP_CANNOT_CREATE_TEMP_FILE; - } - - FILE *fp = fdopen(f, "w+"); - assert(fp); - if (fp == NULL) { - return PEP_CANNOT_CREATE_TEMP_FILE; - } - // unlink(fn); - - int col = 0; - int r = mailmime_write_file(fp, &col, mime_body); - assert(r == MAILIMF_NO_ERROR); - mailmime_free(mime_body); - if (r != MAILIMF_NO_ERROR) { - fclose(fp); - return PEP_CANNOT_CREATE_TEMP_FILE; - } - - rewind(fp); - - char *buf = (char *) calloc(1, col + 1); - assert(buf); - if (buf == NULL) { - fclose(fp); - return PEP_OUT_OF_MEMORY; - } - - size_t size = fread(buf, col, 1, fp); - assert(size); - fclose(fp); - if (size == 0L) { - free(buf); - return PEP_CANNOT_CREATE_TEMP_FILE; - } - - message *msg = new_message(src->dir, src->from, src->to, src->shortmsg); - if (msg == NULL) { - free(buf); - return PEP_OUT_OF_MEMORY; - } - msg->longmsg = buf; - - *dst = msg; - return PEP_STATUS_OK; -} - -PEP_STATUS mime_decode_parts(const message *src, message **dst) -{ - PEP_STATUS status = PEP_STATUS_OK; - - assert(src); - assert(src->enc_format == PEP_enc_none_MIME); - assert(dst); - - if (src->enc_format != PEP_enc_none_MIME) - return PEP_ILLEGAL_VALUE; - - *dst = NULL; - - return status; -} - -PEP_STATUS encrypt_message( +DYNAMIC_API PEP_STATUS encrypt_message( PEP_SESSION session, const message *src, stringlist_t * extra, @@ -182,6 +41,7 @@ PEP_STATUS encrypt_message( message *msg = new_message(src->dir, from, to, NULL); if (msg == NULL) return PEP_OUT_OF_MEMORY; + msg->enc_format = PEP_enc_pieces; from->me = true; @@ -234,15 +94,20 @@ PEP_STATUS encrypt_message( char *ptext; char *ctext = NULL; size_t csize = 0; + msg->enc_format = PEP_enc_pieces; switch (format) { case PEP_enc_MIME_multipart: { - *dst = msg; - break; + message *interim; +// status = mime_encode_parts(src, &interim); +// assert(status == PEP_STATUS_OK); +// if (status != PEP_STATUS_OK) +// break; + msg->enc_format = PEP_enc_MIME_multipart; } case PEP_enc_pieces: - if (src->shortmsg && src->longmsg) { + if (src->shortmsg && src->longmsg && strcmp(src->shortmsg, "pEp") != 0) { ptext = calloc(1, strlen(src->shortmsg) + strlen(src->longmsg) + 12); if (ptext == NULL) { @@ -270,7 +135,7 @@ PEP_STATUS encrypt_message( msg = NULL; } } - else if (src->shortmsg) { + else if (src->shortmsg && strcmp(src->shortmsg, "pEp") != 0) { ptext = calloc(1, strlen(src->shortmsg) + 12); if (ptext == NULL) { free_message(msg); @@ -366,7 +231,6 @@ PEP_STATUS encrypt_message( } } } - msg->enc_format = PEP_enc_pieces; *dst = msg; } break; @@ -382,7 +246,7 @@ PEP_STATUS encrypt_message( return status; } -PEP_STATUS decrypt_message( +DYNAMIC_API PEP_STATUS decrypt_message( PEP_SESSION session, const message *src, message **dst diff --git a/src/message_api.h b/src/message_api.h index 4315b837..72fd017c 100644 --- a/src/message_api.h +++ b/src/message_api.h @@ -7,47 +7,22 @@ extern "C" { #include "transport.h" -// mime_encode_parts() - encode message with MIME -// parameters: -// src message to encode -// dst encoded message or NULL on error -// -// return value: -// error status or PEP_STATUS_OK on success -// -// caveat: -// message must be unencrypted - -DYNAMIC_API PEP_STATUS mime_encode_parts(const message *src, message **dst); - - -// mime_decode_parts() - decode MIME message -// parameters: -// src message to decode -// dst decoded message or NULL on error -// -// return value: -// error status or PEP_STATUS_OK on success -// -// caveat: -// message must be unencrypted - -DYNAMIC_API PEP_STATUS mime_decode_parts(const message *src, message **dst); - - // encrypt_message() - encrypt message in memory // // parameters: -// session session handle -// src message to encrypt -// extra extra keys for encryption -// dst pointer to encrypted message or NULL on failure -// format encryption format +// session (in) session handle +// src (in) message to encrypt +// extra (in) extra keys for encryption +// dst (out) pointer to encrypted message or NULL on failure +// format (in) encryption format // // return value: -// error status or PEP_STATUS_OK on success; PEP_KEY_NOT_FOUND if one -// or more keys couldn't be found, but the message could be encrypted -// with other keys +// PEP_STATUS_OK on success +// PEP_KEY_NOT_FOUND at least one of the receipient keys +// could not be found +// PEP_KEY_HAS_AMBIG_NAME at least one of the receipient keys has +// an ambiguous name +// PEP_GET_KEY_FAILED cannot retrieve key DYNAMIC_API PEP_STATUS encrypt_message( PEP_SESSION session, @@ -61,9 +36,9 @@ DYNAMIC_API PEP_STATUS encrypt_message( // decrypt_message() - decrypt message in memory // // parameters: -// session session handle -// src message to decrypt -// dst pointer to decrypted message or NULL on failure +// session (in) session handle +// src (in) message to decrypt +// dst (out) pointer to decrypted message or NULL on failure // // return value: // error status or PEP_STATUS_OK on success diff --git a/src/mime.c b/src/mime.c new file mode 100644 index 00000000..f950c454 --- /dev/null +++ b/src/mime.c @@ -0,0 +1,180 @@ +#include "mime.h" + +#include +#include +#include +#include +#include +#include + +#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; +} diff --git a/src/mime.h b/src/mime.h new file mode 100644 index 00000000..d10ae475 --- /dev/null +++ b/src/mime.h @@ -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 + diff --git a/src/pEp_internal.h b/src/pEp_internal.h index 99b55efb..4aaac239 100644 --- a/src/pEp_internal.h +++ b/src/pEp_internal.h @@ -84,3 +84,7 @@ typedef struct _pEpSession { sqlite3_stmt *set_trust; sqlite3_stmt *get_trust; } pEpSession; + +PEP_STATUS init_transport_system(PEP_SESSION session); +void release_transport_system(PEP_SESSION session); + diff --git a/src/transport.c b/src/transport.c index b7c302ec..7e097e40 100644 --- a/src/transport.c +++ b/src/transport.c @@ -27,7 +27,7 @@ void release_transport_system(PEP_SESSION session) // nothing yet } -identity_list *new_identity_list(pEp_identity *ident) +DYNAMIC_API identity_list *new_identity_list(pEp_identity *ident) { identity_list *id_list = calloc(1, sizeof(identity_list)); assert(id_list); @@ -41,7 +41,7 @@ identity_list *new_identity_list(pEp_identity *ident) return id_list; } -identity_list *identity_list_dup(const identity_list *src) +DYNAMIC_API identity_list *identity_list_dup(const identity_list *src) { assert(src); @@ -61,7 +61,7 @@ identity_list *identity_list_dup(const identity_list *src) return id_list; } -void free_identity_list(identity_list *id_list) +DYNAMIC_API void free_identity_list(identity_list *id_list) { if (id_list) { free_identity_list(id_list->next); @@ -70,7 +70,7 @@ void free_identity_list(identity_list *id_list) } } -identity_list *identity_list_add(identity_list *id_list, pEp_identity *ident) +DYNAMIC_API identity_list *identity_list_add(identity_list *id_list, pEp_identity *ident) { assert(ident); @@ -90,7 +90,7 @@ identity_list *identity_list_add(identity_list *id_list, pEp_identity *ident) } } -bloblist_t *new_bloblist(char *blob, size_t size, const char *mime_type, +DYNAMIC_API bloblist_t *new_bloblist(char *blob, size_t size, const char *mime_type, const char *file_name) { bloblist_t * bloblist = calloc(1, sizeof(bloblist_t)); @@ -116,7 +116,7 @@ bloblist_t *new_bloblist(char *blob, size_t size, const char *mime_type, return bloblist; } -void free_bloblist(bloblist_t *bloblist) +DYNAMIC_API void free_bloblist(bloblist_t *bloblist) { if (bloblist) { if (bloblist->next) @@ -128,7 +128,7 @@ void free_bloblist(bloblist_t *bloblist) } } -bloblist_t *bloblist_add(bloblist_t *bloblist, char *blob, size_t size, +DYNAMIC_API bloblist_t *bloblist_add(bloblist_t *bloblist, char *blob, size_t size, const char *mime_type, const char *file_name) { assert(blob); @@ -165,7 +165,7 @@ bloblist_t *bloblist_add(bloblist_t *bloblist, char *blob, size_t size, return bloblist_add(bloblist->next, blob, size, mime_type, file_name); } -message *new_message( +DYNAMIC_API message *new_message( PEP_msg_direction dir, pEp_identity *from, identity_list *to, @@ -193,7 +193,7 @@ message *new_message( return msg; } -void free_message(message *msg) +DYNAMIC_API void free_message(message *msg) { free(msg->id); free(msg->shortmsg); @@ -210,7 +210,7 @@ void free_message(message *msg) free(msg); } -message_ref_list *new_message_ref_list(message *msg) +DYNAMIC_API message_ref_list *new_message_ref_list(message *msg) { message_ref_list *msg_list = calloc(1, sizeof(message_ref_list)); assert(msg_list); @@ -222,7 +222,7 @@ message_ref_list *new_message_ref_list(message *msg) return msg_list; } -void free_message_ref_list(message_ref_list *msg_list) +DYNAMIC_API void free_message_ref_list(message_ref_list *msg_list) { if (msg_list) { free_message_ref_list(msg_list->next); @@ -230,7 +230,7 @@ void free_message_ref_list(message_ref_list *msg_list) } } -message_ref_list *message_ref_list_add(message_ref_list *msg_list, message *msg) +DYNAMIC_API message_ref_list *message_ref_list_add(message_ref_list *msg_list, message *msg) { assert(msg); diff --git a/src/transport.h b/src/transport.h index 3b49e110..d664871f 100644 --- a/src/transport.h +++ b/src/transport.h @@ -1,9 +1,13 @@ #pragma once -#include "pEpEngine.h" #include +#include "pEpEngine.h" + +#ifdef __cplusplus +extern "C" { +#endif -// all functions are using POSIX struct tm +// for time values all functions are using POSIX struct tm typedef struct tm timestamp; @@ -27,7 +31,7 @@ typedef struct _identity_list { // new_identity_list() - allocate a new identity list // // parameters: -// ident identity to move for first element +// ident (in) identity to move for first element // // return value: // new identity_list or NULL if out of memory @@ -41,7 +45,7 @@ DYNAMIC_API identity_list *new_identity_list(pEp_identity *ident); // identity_list_dup() - duplicate identity_list (deep copy) // // parameters: -// id_list identity_list to copy +// id_list (in) identity_list to copy // // return value: // new identity_list or NULL if out of memory @@ -52,7 +56,7 @@ DYNAMIC_API identity_list *identity_list_dup(const identity_list *src); // free_identity_list() - free memory allocated by identity_list // // parameters: -// id_list identity_list to free +// id_list (in) identity_list to free // // caveat: // this function frees all identities in the list additional to the @@ -64,8 +68,8 @@ DYNAMIC_API void free_identity_list(identity_list *id_list); // identity_list_add - add identity to an identity_list // // parameters: -// id_list identity_list to add to -// ident identity being added +// id_list (in) identity_list to add to +// ident (in) identity being added // // return value: // pointer to the last element in identity_list or NULL if out of memory @@ -99,10 +103,10 @@ typedef struct _bloblist_t { // new_bloblist() - allocate a new bloblist // // parameters: -// blob blob to add to the list -// size size of the blob -// mime_type MIME type of the blob data or NULL if unknown -// file_name file name of origin of blob data or NULL if unknown +// blob (in) blob to add to the list +// size (in) size of the blob +// mime_type (in) MIME type of the blob data or NULL if unknown +// file_name (in) file name of origin of blob data or NULL if unknown // // return value: // pointer to new bloblist_t or NULL if out of memory @@ -118,7 +122,7 @@ DYNAMIC_API bloblist_t *new_bloblist(char *blob, size_t size, const char *mime_t // free_bloblist() - free bloblist // // parameters: -// bloblist bloblist to free +// bloblist (in) bloblist to free DYNAMIC_API void free_bloblist(bloblist_t *bloblist); @@ -126,11 +130,11 @@ DYNAMIC_API void free_bloblist(bloblist_t *bloblist); // bloblist_add() - add reference to a blob to bloblist // // parameters: -// bloblist bloblist to add to -// blob blob -// size size of the blob -// mime_type MIME type of the blob or NULL if unknown -// file_name file name of the blob or NULL if unknown +// bloblist (in) bloblist to add to +// blob (in) blob +// size (in) size of the blob +// mime_type (in) MIME type of the blob or NULL if unknown +// file_name (in) file name of the blob or NULL if unknown // // return value: // pointer to the last element of bloblist or NULL if out of memory @@ -176,6 +180,7 @@ typedef struct _message { // is received identity_list *cc; // whom a CC is being sent identity_list *bcc; // whom a BCC is being sent + pEp_identity *reply_to; // where a reply should go to char * refering_id; // UTF-8 string of refering message ID struct _message *refering_msg_ref; // reference to refering message struct _message_ref_list *refered_by; // list of references to messages being @@ -192,10 +197,10 @@ typedef struct _message_ref_list { // new_message() - allocate new message // // parameters: -// dir PEP_dir_incoming or PEP_dir_outgoing -// from identity whom the message is from -// to identity list whom the message is sent to -// shortmsg UTF-8 string of short message +// dir (in) PEP_dir_incoming or PEP_dir_outgoing +// from (in) identity whom the message is from +// to (in) identity list whom the message is sent to +// shortmsg (in) UTF-8 string of short message // // return value: // pointer to new message or NULL if out of memory @@ -216,7 +221,7 @@ DYNAMIC_API message *new_message( // free_message() - free message struct // // parameters: -// msg message struct to free +// msg (in) message struct to free // // caveat: // raw data as well as referenced other messages aren't freed and remain @@ -228,7 +233,7 @@ DYNAMIC_API void free_message(message *msg); // new_message_ref_list() - allocate new message reference list // // parameters: -// msg message to add a reference to or NULL +// msg (in) message to add a reference to or NULL // // return value: // pointer to new message_ref_list or NULL if out of memory @@ -239,7 +244,7 @@ DYNAMIC_API message_ref_list *new_message_ref_list(message *msg); // free_message_ref_list() - free message reference list // // parameters: -// msg_list message_ref_list to free +// msg_list (in) message_ref_list to free DYNAMIC_API void free_message_ref_list(message_ref_list *msg_list); @@ -248,8 +253,8 @@ DYNAMIC_API void free_message_ref_list(message_ref_list *msg_list); // list // // parameters: -// msg_list message_ref_list to add to -// msg message to add a reference to +// msg_list (in) message_ref_list to add to +// msg (in) message to add a reference to // // return value: // pointer to the last element of message_ref_list or NULL if out of @@ -276,6 +281,7 @@ struct _PEP_transport_t { typedef uint64_t transports_mask; -PEP_STATUS init_transport_system(PEP_SESSION session); -void release_transport_system(PEP_SESSION session); +#ifdef __cplusplus +} +#endif diff --git a/test/DF9B1541-sec.key b/test/DF9B1541-sec.key index a3be3049..b201cfb2 100644 --- a/test/DF9B1541-sec.key +++ b/test/DF9B1541-sec.key @@ -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 -p1lskMQoKO9cswCeBGUbWmuhC6MXPwUpN3s1r7GSwQGB8O1xQbSghTqozgIwlu/H -JRfC8yvQJpxK9UtFJ1t41vq/urxxlL2BC67ms9u1W+/yY/bgrKPAlP7QcYJqXFQa -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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 +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 ++N3C7yIoyB94aBWuQF/F53IQVNIo +=Onin +-----END PGP PRIVATE KEY BLOCK----- diff --git a/test/DF9B1541.key b/test/DF9B1541.key index 044f7bc2..d2f173be 100644 --- a/test/DF9B1541.key +++ b/test/DF9B1541.key @@ -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----- diff --git a/test/Makefile b/test/Makefile index 0d468bf5..e38144d4 100644 --- a/test/Makefile +++ b/test/Makefile @@ -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 diff --git a/test/message_api_test.cc b/test/message_api_test.cc index fc138b98..3aa5b8f9 100644 --- a/test/message_api_test.cc +++ b/test/message_api_test.cc @@ -21,27 +21,26 @@ int main() { assert(msg); cout << "message created.\n"; - cout << "encrypting message…\n"; - message *enc_msg; +// cout << "encrypting message in pieces…\n"; +// message *enc_msg; +// cout << "calling encrypt_message()\n"; +// PEP_STATUS status2 = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_pieces); +// assert(status2 == PEP_STATUS_OK); +// assert(enc_msg); +// cout << "message encrypted.\n"; + + cout << "encrypting message as MIME multipart…\n"; + message *enc_msg2; cout << "calling encrypt_message()\n"; - PEP_STATUS status2 = encrypt_message(session, msg, NULL, &enc_msg, PEP_enc_pieces); - assert(status2 == PEP_STATUS_OK); - assert(enc_msg); + PEP_STATUS status3 = encrypt_message(session, msg, NULL, &enc_msg2, PEP_enc_MIME_multipart); + assert(status3 == PEP_STATUS_OK); + assert(enc_msg2); cout << "message encrypted.\n"; - -// cout << "MIME encoding message…\n"; -// message *mmsg; -// PEP_STATUS status3 = mime_encode_parts(msg, &mmsg); -// assert(mmsg); -// assert(status3 == PEP_STATUS_OK); -// cout << "message:\n"; -// cout << mmsg->longmsg; -// cout << "\n"; - + cout << "freeing messages…\n"; free_message(msg); - free_message(enc_msg); -// free_message(mmsg); +// free_message(enc_msg); + free_message(enc_msg2); cout << "done.\n"; cout << "calling release()\n";