mirror of
https://github.com/pissnet/pissircd.git
synced 2025-08-13 13:41:37 +01:00
URL API: work towards callback w/struct -- actually this is an interim step
This commit is contained in:
parent
3548b7e2af
commit
eed9d22e3b
5 changed files with 40 additions and 8 deletions
|
@ -1474,3 +1474,4 @@ extern int valid_operclass_name(const char *str);
|
|||
#define safe_free_outgoingwebrequest(x) do { if (x) { free_outgoingwebrequest(x); x = NULL; } } while(0)
|
||||
extern void free_outgoingwebrequest(OutgoingWebRequest *r);
|
||||
extern OutgoingWebRequest *duplicate_outgoingwebrequest(OutgoingWebRequest *orig);
|
||||
extern void url_callback(OutgoingWebRequest *r, const char *file, const char *memory, int memory_len, const char *errorbuf, int cached, void *ptr);
|
||||
|
|
|
@ -1900,6 +1900,18 @@ struct OutgoingWebRequest
|
|||
// 2) and update url_free_handle_request_portion() there as well
|
||||
};
|
||||
|
||||
typedef struct OutgoingWebResult OutgoingWebResult;
|
||||
struct OutgoingWebResult
|
||||
{
|
||||
const char *file;
|
||||
const char *memory;
|
||||
int memory_len;
|
||||
const char *errorbuf;
|
||||
int cached;
|
||||
void *ptr;
|
||||
// If you add or modify fields, update url_callback() in src/misc.c!
|
||||
};
|
||||
|
||||
typedef struct WebRequest WebRequest;
|
||||
/** An incoming web request */
|
||||
struct WebRequest {
|
||||
|
|
19
src/misc.c
19
src/misc.c
|
@ -3237,3 +3237,22 @@ void download_file_async(const char *url, time_t cachetime, vFP callback, void *
|
|||
request->store_in_file = 1;
|
||||
url_start_async(request);
|
||||
}
|
||||
|
||||
void url_callback(OutgoingWebRequest *r, const char *file, const char *memory, int memory_len, const char *errorbuf, int cached, void *ptr)
|
||||
{
|
||||
OutgoingWebResult *result;
|
||||
|
||||
if (!r->callback)
|
||||
return; /* Nothing to do */
|
||||
|
||||
result = safe_alloc(sizeof(OutgoingWebResult));
|
||||
result->file = file;
|
||||
result->memory = memory;
|
||||
result->memory_len = memory_len;
|
||||
result->errorbuf = errorbuf;
|
||||
result->cached = cached;
|
||||
result->ptr = ptr;
|
||||
//r->callback(r, result);
|
||||
r->callback(r->url, file, memory, memory_len, errorbuf, cached, ptr);
|
||||
safe_free(result);
|
||||
}
|
||||
|
|
|
@ -184,7 +184,7 @@ static void url_check_multi_handles(void)
|
|||
{
|
||||
if (code == 304 || (last_mod != -1 && last_mod <= handle->request->cachetime))
|
||||
{
|
||||
handle->request->callback(handle->request->url, NULL, handle->memory_data, handle->memory_data_len, NULL, 1, handle->request->callback_data);
|
||||
url_callback(handle->request, NULL, handle->memory_data, handle->memory_data_len, NULL, 1, handle->request->callback_data);
|
||||
if (handle->filename)
|
||||
remove(handle->filename);
|
||||
}
|
||||
|
@ -193,14 +193,14 @@ static void url_check_multi_handles(void)
|
|||
if ((last_mod != -1) && handle->filename)
|
||||
unreal_setfilemodtime(handle->filename, last_mod);
|
||||
|
||||
handle->request->callback(handle->request->url, handle->filename, handle->memory_data, handle->memory_data_len, NULL, 0, handle->request->callback_data);
|
||||
url_callback(handle->request, handle->filename, handle->memory_data, handle->memory_data_len, NULL, 0, handle->request->callback_data);
|
||||
if (handle->filename)
|
||||
remove(handle->filename);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
handle->request->callback(handle->request->url, NULL, NULL, 0, handle->errorbuf, 0, handle->request->callback_data);
|
||||
url_callback(handle->request, NULL, NULL, 0, handle->errorbuf, 0, handle->request->callback_data);
|
||||
if (handle->filename)
|
||||
remove(handle->filename);
|
||||
}
|
||||
|
@ -321,7 +321,7 @@ void url_start_async(OutgoingWebRequest *request)
|
|||
if (!handle->file_fd)
|
||||
{
|
||||
snprintf(errorbuf, sizeof(errorbuf), "Cannot create '%s': %s", tmp, strerror(ERRNO));
|
||||
handle->request->callback(handle->request->url, NULL, NULL, 0, errorbuf, 0, handle->request->callback_data);
|
||||
url_callback(handle->request, NULL, NULL, 0, errorbuf, 0, handle->request->callback_data);
|
||||
safe_free(file);
|
||||
safe_free(handle);
|
||||
return;
|
||||
|
|
|
@ -133,7 +133,7 @@ int https_cancel(Download *handle, FORMAT_STRING(const char *pattern), ...)
|
|||
vsnprintf(handle->errorbuf, sizeof(handle->errorbuf), pattern, vl);
|
||||
va_end(vl);
|
||||
if (handle->request->callback)
|
||||
handle->request->callback(handle->request->url, NULL, NULL, 0, handle->errorbuf, 0, handle->request->callback_data);
|
||||
url_callback(handle->request, NULL, NULL, 0, handle->errorbuf, 0, handle->request->callback_data);
|
||||
url_free_handle(handle);
|
||||
return -1;
|
||||
}
|
||||
|
@ -929,12 +929,12 @@ void https_done(Download *handle)
|
|||
if (!handle->request->callback)
|
||||
; /* No special action, request was cancelled */
|
||||
else if (!handle->got_response)
|
||||
handle->request->callback(handle->request->url, NULL, NULL, 0, "HTTPS response not received", 0, handle->request->callback_data);
|
||||
url_callback(handle->request, NULL, NULL, 0, "HTTPS response not received", 0, handle->request->callback_data);
|
||||
else
|
||||
{
|
||||
if ((handle->last_modified > 0) && handle->filename)
|
||||
unreal_setfilemodtime(handle->filename, handle->last_modified);
|
||||
handle->request->callback(handle->request->url, handle->filename, handle->memory_data, handle->memory_data_len, NULL, 0, handle->request->callback_data);
|
||||
url_callback(handle->request, handle->filename, handle->memory_data, handle->memory_data_len, NULL, 0, handle->request->callback_data);
|
||||
}
|
||||
url_free_handle(handle);
|
||||
return;
|
||||
|
@ -948,7 +948,7 @@ void https_done_cached(Download *handle)
|
|||
handle->file_fd = NULL;
|
||||
}
|
||||
if (handle->request->callback)
|
||||
handle->request->callback(handle->request->url, NULL, NULL, 0, NULL, 1, handle->request->callback_data);
|
||||
url_callback(handle->request, NULL, NULL, 0, NULL, 1, handle->request->callback_data);
|
||||
url_free_handle(handle);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue