You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ma...@apache.org on 2008/05/26 15:33:40 UTC
svn commit: r660188 -
/webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c
Author: manjula
Date: Mon May 26 06:33:38 2008
New Revision: 660188
URL: http://svn.apache.org/viewvc?rev=660188&view=rev
Log:
Altering caching threasholds.
Modified:
webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c
Modified: webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c?rev=660188&r1=660187&r2=660188&view=diff
==============================================================================
--- webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c (original)
+++ webservices/axis2/branches/c/post_1_4_mtom/c/axiom/src/attachments/mime_parser.c Mon May 26 06:33:38 2008
@@ -243,7 +243,7 @@
return NULL;
}
- /*Keeps the corresponding lenghts of buffers in buf_array*/
+ /*Keeps the corresponding lengths of buffers in buf_array*/
len_array = AXIS2_MALLOC(env->allocator,
sizeof(int) * (mime_parser->max_buffers));
@@ -299,19 +299,25 @@
buffers*/
malloc_len = buf_array[buf_num] + len_array[buf_num] - pos - 4;
- if(malloc_len > 0)
+ if(malloc_len < 0)
+ {
+ return NULL;
+ }
+ else
{
buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
size + 1));
- memcpy(buffer, pos + 4, malloc_len);
+ if(malloc_len > 0)
+ {
+ memcpy(buffer, pos + 4, malloc_len);
+ }
+ len = callback(buffer + malloc_len, size - malloc_len, (void *) callback_ctx);
axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
- buf_array[buf_num] = buffer;
- len_array[buf_num] = malloc_len;
- }
- else
- {
- buf_array[buf_num] = NULL;
- len_array[buf_num] = 0;
+ if(len > 0)
+ {
+ buf_array[buf_num] = buffer;
+ len_array[buf_num] = malloc_len + len;
+ }
}
}
@@ -319,20 +325,26 @@
else if(search_info->match_len2 > 0)
{
- malloc_len = len_array[buf_num] - search_info->match_len2;
- if(malloc_len > 0)
+ malloc_len = len_array[buf_num] - search_info->match_len2;
+ if(malloc_len < 0)
+ {
+ return NULL;
+ }
+ else
{
buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
size + 1));
- memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+ if(malloc_len > 0)
+ {
+ memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+ }
+ len = callback(buffer + malloc_len, size - malloc_len, (void *) callback_ctx);
axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
- buf_array[buf_num] = buffer;
- len_array[buf_num] = malloc_len;
- }
- else
- {
- buf_array[buf_num] = NULL;
- len_array[buf_num] = 0;
+ if(len > 0)
+ {
+ buf_array[buf_num] = buffer;
+ len_array[buf_num] = malloc_len + len;
+ }
}
}
else
@@ -343,14 +355,7 @@
/*Resetting the previous search data and getting ready
for the next search */
- if(!buf_array[buf_num])
- {
- part_start = buf_num + 1;
- }
- else
- {
- part_start = buf_num;
- }
+ part_start = buf_num;
pos = NULL;
malloc_len = 0;
@@ -384,22 +389,28 @@
}
malloc_len = len_array[buf_num] - search_info->match_len1 - temp_mime_boundary_size;
- if(malloc_len > 0)
+ if(malloc_len < 0)
+ {
+ return NULL;
+ }
+ else
{
buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
size + 1));
memset(buffer, 0, size + 1);
- memcpy(buffer, pos + temp_mime_boundary_size, malloc_len);
+ if(malloc_len > 0)
+ {
+ memcpy(buffer, pos + temp_mime_boundary_size, malloc_len);
+ }
+ len = callback(buffer + malloc_len, size - malloc_len, (void *) callback_ctx);
axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
- buf_array[buf_num] = buffer;
- len_array[buf_num] = malloc_len;
+ if(len > 0)
+ {
+ buf_array[buf_num] = buffer;
+ len_array[buf_num] = malloc_len + len;
+ }
printf("Malloc_len after soap : %d \n", malloc_len);
}
- else
- {
- buf_array[buf_num] = NULL;
- len_array[buf_num] = 0;
- }
}
else
{
@@ -421,20 +432,25 @@
}
malloc_len = len_array[buf_num] - search_info->match_len2;
-
- if(malloc_len > 0)
+ if(malloc_len < 0)
+ {
+ return NULL;
+ }
+ else
{
buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
size + 1));
- memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+ if(malloc_len > 0)
+ {
+ memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+ }
+ len = callback(buffer + malloc_len, size - malloc_len, (void *) callback_ctx);
axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
- buf_array[buf_num] = buffer;
- len_array[buf_num] = malloc_len;
- }
- else
- {
- buf_array[buf_num] = NULL;
- len_array[buf_num] = 0;
+ if(len > 0)
+ {
+ buf_array[buf_num] = buffer;
+ len_array[buf_num] = malloc_len + len;
+ }
}
}
else
@@ -464,15 +480,7 @@
search_info->match_len1 = 0;
search_info->match_len2 = 0;
pos = NULL;
-
- if(!buf_array[buf_num])
- {
- part_start = buf_num + 1;
- }
- else
- {
- part_start = buf_num;
- }
+ part_start = buf_num;
malloc_len = 0;
@@ -507,19 +515,30 @@
}
printf("after calculate len method %d\n", len_array[buf_num]);
malloc_len = buf_array[buf_num] + len_array[buf_num] - pos - 4;
- if(malloc_len > 0)
+
+ /*This should be > 0 , > 0 means there is some part to copy = 0 means
+ there is nothing to copy*/
+ if(malloc_len < 0)
{
- buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
- size + 1));
- memcpy(buffer, pos + 4, malloc_len);
- axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
- buf_array[buf_num] = buffer;
- len_array[buf_num] = malloc_len;
+ return NULL;
}
+
else
{
- buf_array[buf_num] = NULL;
- len_array[buf_num] = 0;
+ buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+ size + 1));
+ if(malloc_len > 0)
+ {
+ memcpy(buffer, pos + 4, malloc_len);
+ }
+ len = callback(buffer + malloc_len, size - malloc_len, (void *) callback_ctx);
+
+ axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+ if(len > 0)
+ {
+ buf_array[buf_num] = buffer;
+ len_array[buf_num] = malloc_len + len;
+ }
}
}
else
@@ -528,10 +547,10 @@
}
}
- /*pattern is divided among the two buffers*/
-
else if(search_info->match_len2 > 0)
{
+ /*Now we extract the mime headers */
+
mime_headers_len = axiom_mime_parser_calculate_part_len (
env, buf_num - 1, len_array, part_start, pos, buf_array[buf_num - 1]);
@@ -545,19 +564,25 @@
}
malloc_len = len_array[buf_num] - search_info->match_len2;
- if(malloc_len > 0)
+ if(malloc_len < 0)
{
- buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
- size + 1));
- memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
- axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
- buf_array[buf_num] = buffer;
- len_array[buf_num] = malloc_len;
+ return NULL;
}
else
{
- buf_array[buf_num] = NULL;
- len_array[buf_num] = 0;
+ buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
+ size + 1));
+ if(malloc_len > 0)
+ {
+ memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+ }
+ len = callback(buffer + malloc_len, size - malloc_len, (void *) callback_ctx);
+ axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
+ if(len > 0)
+ {
+ buf_array[buf_num] = buffer;
+ len_array[buf_num] = malloc_len + len;
+ }
}
}
else
@@ -575,15 +600,7 @@
search_info->match_len1 = 0;
search_info->match_len2 = 0;
- if(!buf_array[buf_num])
- {
- part_start = buf_num + 1;
- }
- else
- {
- part_start = buf_num;
- }
-
+ part_start = buf_num;
malloc_len = 0;
/*We extract the mime headers. So lets search for the attachment.*/
@@ -640,42 +657,69 @@
if(search_info->match_len2 == 0)
{
-
malloc_len = len_array[buf_num] - search_info->match_len1 - temp_mime_boundary_size;
-
- if(malloc_len > 0)
+ if(malloc_len < 0)
+ {
+ return NULL;
+ }
+ else
{
buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
size + 1));
- memcpy(buffer, pos + temp_mime_boundary_size, malloc_len);
+ if(malloc_len > 0)
+ {
+ memcpy(buffer, pos + temp_mime_boundary_size, malloc_len);
+ }
+
+ /*When the last buffer only containing -- we know this is the end
+ of the attachments. Hence we don't need to read again*/
+
+ if(malloc_len != 2)
+ {
+ len = callback(buffer + malloc_len, size - malloc_len, (void *) callback_ctx);
+ if(len > 0)
+ {
+ len_array[buf_num] = malloc_len + len;
+ }
+ }
+ else
+ {
+ len_array[buf_num] = malloc_len;
+ }
axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
buf_array[buf_num] = buffer;
- len_array[buf_num] = malloc_len;
}
- else
- {
- buf_array[buf_num] = NULL;
- len_array[buf_num] = 0;
- }
-
}
else if(search_info->match_len2 > 0)
{
malloc_len = len_array[buf_num] - search_info->match_len2;
- if(malloc_len > 0)
+ if(malloc_len < 0)
+ {
+ return NULL;
+ }
+ else
{
buffer = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (
size + 1));
- memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+ if(malloc_len > 0)
+ {
+ memcpy(buffer, buf_array[buf_num] + search_info->match_len2, malloc_len);
+ }
+ if(malloc_len != 2)
+ {
+ len = callback(buffer + malloc_len, size - malloc_len, (void *) callback_ctx);
+ if(len > 0)
+ {
+ len_array[buf_num] = malloc_len + len;
+ }
+ }
+ else
+ {
+ len_array[buf_num] = malloc_len;
+ }
axiom_mime_parser_clear_buffers(env, buf_array, part_start, buf_num);
buf_array[buf_num] = buffer;
- len_array[buf_num] = malloc_len;
- }
- else
- {
- buf_array[buf_num] = NULL;
- len_array[buf_num] = 0;
}
}
}
@@ -775,7 +819,7 @@
/*If the incoming buffer is NULL then we need to fill one and
set it as the new buffer*/
- else
+ /*else
{
*buf_num = *buf_num + 1;
buf_array[*buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1));
@@ -790,7 +834,7 @@
search_info->len1 = len_array[*buf_num];
found = axiom_mime_parser_search_string(search_info, env);
}
- }
+ }*/
while(!found)
{
@@ -860,6 +904,7 @@
search_info->len1 = len_array[*buf_num];
found = axiom_mime_parser_search_string(search_info, env);
}
+ /*
else
{
*buf_num = *buf_num + 1;
@@ -876,6 +921,7 @@
found = axiom_mime_parser_search_string(search_info, env);
}
}
+ */
while(!found)
{
@@ -954,7 +1000,7 @@
}
/*If it is NULL then we need to create a new one fill and search*/
- else
+ /*else
{
*buf_num = *buf_num + 1;
buf_array[*buf_num] = AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * (size + 1));
@@ -970,6 +1016,7 @@
found = axiom_mime_parser_search_string(search_info, env);
}
}
+ */
while(!found)
{