void soap_ctx_free(SoapCtx * ctx) { if (!ctx) return; if (ctx->attachments) attachments_free(ctx->attachments); if (ctx->env) soap_env_free(ctx->env); if (ctx->action) free(ctx->action); free(ctx); return; }
void hresponse_free(hresponse_t * res) { if (res == NULL) return; if (res->header) hpairnode_free_deep(res->header); if (res->in) http_input_stream_free(res->in); if (res->content_type) content_type_free(res->content_type); if (res->attachments) attachments_free(res->attachments); free(res); }
herror_t mime_get_attachments(content_type_t * ctype, http_input_stream_t * in, attachments_t ** dest) { /* MIME variables */ attachments_t *mimeMessage; part_t *part, *tmp_part = NULL; char *boundary, *root_id; /* Check for MIME message */ if (!(ctype && !strcmp(ctype->type, "multipart/related"))) return herror_new("mime_get_attachments", MIME_ERROR_NOT_MIME_MESSAGE, "Not a MIME message '%s'", ctype->type); boundary = hpairnode_get(ctype->params, "boundary"); root_id = hpairnode_get(ctype->params, "start"); if (boundary == NULL) { /* TODO (#1#): Handle Error in http form */ log_error1("'boundary' not set for multipart/related"); return herror_new("mime_get_attachments", MIME_ERROR_NO_BOUNDARY_PARAM, "'boundary' not set for multipart/related"); } if (root_id == NULL) { /* TODO (#1#): Handle Error in http form */ log_error1("'start' not set for multipart/related"); return herror_new("mime_get_attachments", MIME_ERROR_NO_START_PARAM, "'start' not set for multipart/related"); } mimeMessage = mime_message_parse(in, root_id, boundary, "."); if (mimeMessage == NULL) { /* TODO (#1#): Handle Error in http form */ log_error1("MIME Parse Error"); return herror_new("mime_get_attachments", MIME_ERROR_PARSE_ERROR, "MIME Parse Error"); } /* Find root */ if (!mimeMessage->root_part) { attachments_free(mimeMessage); return herror_new("mime_get_attachments", MIME_ERROR_NO_ROOT_PART, "No root part found!"); } /* delete root_part from list */ part = mimeMessage->parts; while (part) { if (part == mimeMessage->root_part) { if (tmp_part) tmp_part->next = part->next; else mimeMessage->parts = part->next; break; } tmp_part = part; part = part->next; } *dest = mimeMessage; return H_OK; }