зеркало из https://github.com/mozilla/pjs.git
Moved the nucacheprotoimpl stuff here.
This commit is contained in:
Родитель
d5380127f5
Коммит
1223e246c9
|
@ -2049,4 +2049,164 @@ NET_InitMemCacProtocol(void)
|
|||
NET_RegisterProtocolImplementation(&mem_cac_proto_impl, MEMORY_CACHE_TYPE_URL);
|
||||
}
|
||||
|
||||
typedef struct _NuCacheConData {
|
||||
void* cache_object;
|
||||
NET_StreamClass *stream;
|
||||
} NuCacheConData;
|
||||
|
||||
#define FIRST_BUFF_SIZE 1024
|
||||
|
||||
PRIVATE int32
|
||||
net_NuCacheLoad (ActiveEntry * cur_entry)
|
||||
{
|
||||
if (cur_entry && cur_entry->URL_s)
|
||||
{
|
||||
NuCacheConData* con_data = PR_NEW(NuCacheConData);
|
||||
void* pObject = cur_entry->URL_s->cache_object;
|
||||
|
||||
if (!con_data || !pObject)
|
||||
{
|
||||
cur_entry->URL_s->error_msg = NET_ExplainErrorDetails(MK_OUT_OF_MEMORY);
|
||||
cur_entry->status = MK_OUT_OF_MEMORY;
|
||||
return (cur_entry->status);
|
||||
}
|
||||
|
||||
cur_entry->protocol = NU_CACHE_TYPE_URL;
|
||||
cur_entry->memory_file = TRUE; /* TODO */
|
||||
|
||||
/* CacheObject->SetReadLock(pObject); */
|
||||
cur_entry->local_file = TRUE; /* Check about this one- TODO */
|
||||
cur_entry->con_data = con_data;
|
||||
cur_entry->socket = NULL;
|
||||
|
||||
NET_SetCallNetlibAllTheTime(cur_entry->window_id, "nucache");
|
||||
cur_entry->format_out = CLEAR_CACHE_BIT(cur_entry->format_out);
|
||||
FE_EnableClicking(cur_entry->window_id);
|
||||
/* Build the stream to read data from */
|
||||
con_data->stream = NET_StreamBuilder(cur_entry->format_out, cur_entry->URL_s, cur_entry->window_id);
|
||||
if(!con_data->stream)
|
||||
{
|
||||
NET_ClearCallNetlibAllTheTime(cur_entry->window_id, "nucache");
|
||||
PR_DELETE(con_data);
|
||||
cur_entry->URL_s->error_msg = NET_ExplainErrorDetails(MK_UNABLE_TO_CONVERT);
|
||||
cur_entry->status = MK_UNABLE_TO_CONVERT;
|
||||
return (cur_entry->status);
|
||||
}
|
||||
|
||||
if (!cur_entry->URL_s->load_background)
|
||||
FE_GraphProgressInit(cur_entry->window_id, cur_entry->URL_s, cur_entry->URL_s->content_length);
|
||||
|
||||
/* Process the first chunk so that images can start loading */
|
||||
if (!CacheObject_IsPartial(pObject)) /*todo- change this to is Completed */
|
||||
{
|
||||
char* firstBuffer = (char*) PR_Malloc(FIRST_BUFF_SIZE);
|
||||
PRInt32 amountRead = 0;
|
||||
if (!firstBuffer)
|
||||
{
|
||||
PR_DELETE(con_data);
|
||||
cur_entry->URL_s->error_msg = NET_ExplainErrorDetails(MK_OUT_OF_MEMORY);
|
||||
return(MK_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
amountRead = CacheObject_Read(pObject, firstBuffer, FIRST_BUFF_SIZE);
|
||||
if (amountRead > 0)
|
||||
{
|
||||
cur_entry->status = (*con_data->stream->put_block)(con_data->stream, firstBuffer, amountRead);
|
||||
if(cur_entry->status < 0)
|
||||
{
|
||||
NET_ClearCallNetlibAllTheTime(cur_entry->window_id, "nucache");
|
||||
|
||||
if (!cur_entry->URL_s->load_background)
|
||||
{
|
||||
FE_GraphProgressDestroy(cur_entry->window_id,
|
||||
cur_entry->URL_s,
|
||||
cur_entry->URL_s->content_length,
|
||||
cur_entry->bytes_received);
|
||||
}
|
||||
PR_DELETE(con_data);
|
||||
return (cur_entry->status);
|
||||
}
|
||||
|
||||
cur_entry->bytes_received += amountRead;
|
||||
PR_DELETE(firstBuffer);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cur_entry->status = 0;
|
||||
}
|
||||
NET_ClearCallNetlibAllTheTime(cur_entry->window_id, "nucache");
|
||||
}
|
||||
return cur_entry->status;
|
||||
}
|
||||
|
||||
/* called repeatedly from NET_ProcessNet to push all the
|
||||
* data up the stream
|
||||
*/
|
||||
PRIVATE int32
|
||||
net_ProcessNuCache (ActiveEntry * cur_entry)
|
||||
{
|
||||
if (cur_entry && cur_entry->URL_s)
|
||||
{
|
||||
NuCacheConData* con_data = PR_NEW(NuCacheConData);
|
||||
void* pObject = cur_entry->URL_s->cache_object;
|
||||
|
||||
if (!pObject)
|
||||
{
|
||||
cur_entry->status = MK_OBJECT_NOT_IN_CACHE;
|
||||
return cur_entry->status;
|
||||
}
|
||||
|
||||
/* Wait for the object to complete */
|
||||
if (!CacheObject_GetIsCompleted(pObject))
|
||||
return 0;
|
||||
|
||||
(*con_data->stream->complete)(con_data->stream);
|
||||
PR_Free(con_data->stream);
|
||||
|
||||
cur_entry->status = MK_DATA_LOADED;
|
||||
NET_ClearCallNetlibAllTheTime(cur_entry->window_id, "nucache");
|
||||
if (!cur_entry->URL_s->load_background)
|
||||
FE_GraphProgressDestroy(CE_WINDOW_ID,
|
||||
cur_entry->URL_s,
|
||||
cur_entry->URL_s->content_length,
|
||||
CE_BYTES_RECEIVED);
|
||||
return cur_entry->status;
|
||||
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* called by functions in mkgeturl to interrupt the loading of
|
||||
* an object. (Usually a user interrupt)
|
||||
*/
|
||||
PRIVATE int32
|
||||
net_InterruptNuCache (ActiveEntry * cur_entry)
|
||||
{
|
||||
PR_ASSERT(0); /* Not complete as yet */
|
||||
NET_SetCallNetlibAllTheTime(cur_entry->window_id, "nucache");
|
||||
|
||||
NET_ClearCallNetlibAllTheTime(cur_entry->window_id, "nucache");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
PRIVATE void
|
||||
net_CleanupNuCacheProtocol(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
NET_InitNuCacheProtocol(void)
|
||||
{
|
||||
static NET_ProtoImpl nu_cache_proto_impl;
|
||||
|
||||
nu_cache_proto_impl.init = net_NuCacheLoad;
|
||||
nu_cache_proto_impl.process = net_ProcessNuCache;
|
||||
nu_cache_proto_impl.interrupt = net_InterruptNuCache;
|
||||
nu_cache_proto_impl.cleanup = net_CleanupNuCacheProtocol;
|
||||
|
||||
NET_RegisterProtocolImplementation(&nu_cache_proto_impl, NU_CACHE_TYPE_URL);
|
||||
}
|
||||
|
||||
#endif /* MOZILLA_CLIENT */
|
||||
|
|
Загрузка…
Ссылка в новой задаче