static int http_da_copy(struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src) { dst->data = (void*)SOAP_MALLOC(soap, sizeof(struct http_da_data)); soap_memcpy((void*)dst->data, sizeof(struct http_da_data), (const void*)src->data, sizeof(struct http_da_data)); ((struct http_da_data*)dst->data)->smd_data.ctx = NULL; memset((void*)((struct http_da_data*)dst->data)->digest, 0, sizeof(((struct http_da_data*)dst->data)->digest)); ((struct http_da_data*)dst->data)->nonce = NULL; ((struct http_da_data*)dst->data)->opaque = NULL; ((struct http_da_data*)dst->data)->qop = NULL; ((struct http_da_data*)dst->data)->alg = NULL; ((struct http_da_data*)dst->data)->nc = 0; ((struct http_da_data*)dst->data)->ncount = NULL; ((struct http_da_data*)dst->data)->cnonce = NULL; memset((void*)((struct http_da_data*)dst->data)->response, 0, sizeof(((struct http_da_data*)dst->data)->response)); return SOAP_OK; }
int md5_handler(struct soap *soap, void **context, enum md5_action action, char *buf, size_t len) { EVP_MD_CTX *ctx; unsigned char hash[EVP_MAX_MD_SIZE]; unsigned int size; switch (action) { case MD5_INIT: soap_ssl_init(); if (!*context) { *context = (void*)SOAP_MALLOC(soap, sizeof(EVP_MD_CTX)); EVP_MD_CTX_init((EVP_MD_CTX*)*context); } ctx = (EVP_MD_CTX*)*context; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "-- MD5 Init %p\n", ctx)); EVP_DigestInit_ex(ctx, EVP_md5(), NULL); break; case MD5_UPDATE: ctx = (EVP_MD_CTX*)*context; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "-- MD5 Update %p (%lu) --\n", ctx, (unsigned long)len)); DBGMSG(TEST, buf, len); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n--")); EVP_DigestUpdate(ctx, (const void*)buf, (unsigned int)len); break; case MD5_FINAL: ctx = (EVP_MD_CTX*)*context; EVP_DigestFinal_ex(ctx, (unsigned char*)hash, &size); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "-- MD5 Final %p --\n", ctx)); DBGHEX(TEST, hash, size); DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n--")); soap_memcpy((void*)buf, 16, (const void*)hash, 16); break; case MD5_DELETE: ctx = (EVP_MD_CTX*)*context; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "-- MD5 Delete %p --\n", ctx)); if (ctx) { EVP_MD_CTX_cleanup(ctx); SOAP_FREE(soap, ctx); } *context = NULL; } return SOAP_OK; }