imap: Added custom request parsing
Added imap_parse_custom_request() for parsing the CURLOPT_CUSTOMREQUEST parameter which URL decodes the value and separates the request from any parameters - This makes it easier to filter untagged responses by the request command.
This commit is contained in:
parent
1d3ccf27ec
commit
ee7034800d
37
lib/imap.c
37
lib/imap.c
@ -87,6 +87,7 @@
|
|||||||
|
|
||||||
/* Local API functions */
|
/* Local API functions */
|
||||||
static CURLcode imap_parse_url_path(struct connectdata *conn);
|
static CURLcode imap_parse_url_path(struct connectdata *conn);
|
||||||
|
static CURLcode imap_parse_custom_request(struct connectdata *conn);
|
||||||
static CURLcode imap_regular_transfer(struct connectdata *conn, bool *done);
|
static CURLcode imap_regular_transfer(struct connectdata *conn, bool *done);
|
||||||
static CURLcode imap_do(struct connectdata *conn, bool *done);
|
static CURLcode imap_do(struct connectdata *conn, bool *done);
|
||||||
static CURLcode imap_done(struct connectdata *conn, CURLcode status,
|
static CURLcode imap_done(struct connectdata *conn, CURLcode status,
|
||||||
@ -1806,6 +1807,11 @@ static CURLcode imap_do(struct connectdata *conn, bool *done)
|
|||||||
if(result)
|
if(result)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
/* Parse the custom request */
|
||||||
|
result = imap_parse_custom_request(conn);
|
||||||
|
if(result)
|
||||||
|
return result;
|
||||||
|
|
||||||
result = imap_regular_transfer(conn, done);
|
result = imap_regular_transfer(conn, done);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -2017,6 +2023,37 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
|
|||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CURLcode imap_parse_custom_request(struct connectdata *conn)
|
||||||
|
{
|
||||||
|
CURLcode result = CURLE_OK;
|
||||||
|
struct SessionHandle *data = conn->data;
|
||||||
|
struct IMAP *imap = data->state.proto.imap;
|
||||||
|
const char *custom = data->set.str[STRING_CUSTOMREQUEST];
|
||||||
|
|
||||||
|
if(custom) {
|
||||||
|
/* URL decode the custom request */
|
||||||
|
result = Curl_urldecode(data, custom, 0, &imap->custom, NULL, TRUE);
|
||||||
|
|
||||||
|
/* Extract the parameters if specified */
|
||||||
|
if(!result) {
|
||||||
|
const char *params = imap->custom;
|
||||||
|
|
||||||
|
while(*params && *params != ' ')
|
||||||
|
params++;
|
||||||
|
|
||||||
|
if(*params) {
|
||||||
|
imap->custom_params = strdup(params);
|
||||||
|
imap->custom[params - imap->custom] = '\0';
|
||||||
|
|
||||||
|
if(!imap->custom_params)
|
||||||
|
result = CURLE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/* Call this when the DO phase has completed */
|
/* Call this when the DO phase has completed */
|
||||||
static CURLcode imap_dophase_done(struct connectdata *conn, bool connected)
|
static CURLcode imap_dophase_done(struct connectdata *conn, bool connected)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user