#pragma once

// URI handles
const int URI_GET_DISCARD             = 0;
const int URI_GET_IPBAN               = 1;
const int URI_GET_IPBAN_END           = 16;
const int URI_GET_CURL                = 17;
const int URI_GET_CURL_END            = 32;
const int URI_GET_UPDATENOTIFICATION  = 33;
const int URI_GET_TOS                 = 34;
const int URI_GET_URLLIB              = 128;
const int URI_GET_URLLIB_END          = 191;

const float URL_READY_ERROR    = -1;
const float URL_READY_CLOSED   =  0;
const float URL_READY_CANWRITE =  1;
const float URL_READY_CANREAD  =  2;
// errors: -1, or negative HTTP status code
USING(url_ready_func, void (entity handle, entity pass, float status));

ERASEABLE
void url_single_fopen(string url, float mode, url_ready_func rdy, entity pass);
ERASEABLE
void url_fclose(entity e);
ERASEABLE
string url_fgets(entity e);
ERASEABLE
void url_fputs(entity e, string s);

// returns true if handled
ERASEABLE
float url_URI_Get_Callback(int id, float status, string data);
#define MIN_URL_ID URI_GET_URLLIB
#define NUM_URL_ID (URI_GET_URLLIB_END - URI_GET_URLLIB + 1)

ERASEABLE
void url_multi_fopen(string url, float mode, url_ready_func rdy, entity pass);
