// Caller needs to free *output if non-NULL void condor_base64_decode(const char *input,unsigned char **output, int *output_length) { ASSERT( input ); ASSERT( output ); ASSERT( output_length ); int input_length = strlen(input); // safe to assume output length is <= input_length *output = (unsigned char *)malloc(input_length + 1); ASSERT( *output ); memset(*output, 0, input_length); struct soap soap; soap_init(&soap); soap_base642s(&soap,input,(char*)(*output),input_length,output_length); soap_destroy(&soap); soap_end(&soap); soap_done(&soap); if( *output_length < 0 ) { free( *output ); *output = NULL; } }
static int http_md5_parse_header(struct soap *soap, const char *key, const char *val) { struct http_md5_data *data = (struct http_md5_data*)soap_lookup_plugin(soap, http_md5_id); if (!data) return SOAP_PLUGIN_ERROR; if (!soap_tag_cmp(key, "Content-MD5")) { soap_base642s(soap, val, data->digest, 16, NULL); data->fpreparerecv = soap->fpreparerecv; soap->fpreparerecv = http_md5_preparerecv; data->fdisconnect = soap->fdisconnect; soap->fdisconnect = http_md5_disconnect; return SOAP_OK; } return data->fparsehdr(soap, key, val); }