miniupnpc-libevent: prevent several SOAP request at the same time.

This commit is contained in:
Thomas Bernard 2014-12-08 17:23:29 +01:00
parent 8868eb7299
commit 215b357e55
2 changed files with 7 additions and 1 deletions

View File

@ -427,6 +427,7 @@ static void upnpc_soap_response(struct evhttp_request * req, void * pvoid)
ClearNameValueList(&d->soap_response_data); ClearNameValueList(&d->soap_response_data);
ParseNameValue((char *)data, (int)len, ParseNameValue((char *)data, (int)len,
&d->soap_response_data); &d->soap_response_data);
d->state &= ~UPNPC_DEVICE_SOAP_REQ;
if(d->state & UPNPC_DEVICE_READY) { if(d->state & UPNPC_DEVICE_READY) {
d->parent->soap_cb(code, d->parent, d, d->parent->cb_data); d->parent->soap_cb(code, d->parent, d, d->parent->cb_data);
} else if(d->state & UPNPC_DEVICE_GETSTATUS) { } else if(d->state & UPNPC_DEVICE_GETSTATUS) {
@ -442,7 +443,6 @@ static void upnpc_soap_response(struct evhttp_request * req, void * pvoid)
d->parent->ready_cb(UPNPC_ERR_NOT_CONNECTED, d->parent, d, d->parent->cb_data); d->parent->ready_cb(UPNPC_ERR_NOT_CONNECTED, d->parent, d, d->parent->cb_data);
} }
} }
d->state &= ~UPNPC_DEVICE_SOAP_REQ;
} }
static int upnpc_get_desc(upnpc_device_t * d, const char * url) static int upnpc_get_desc(upnpc_device_t * d, const char * url)
@ -538,6 +538,11 @@ static int upnpc_send_soap_request(upnpc_device_t * p, const char * url,
struct evkeyvalq * headers; struct evkeyvalq * headers;
struct evbuffer * buffer; struct evbuffer * buffer;
if(p->state & UPNPC_DEVICE_SOAP_REQ) {
debug_printf("%s: another SOAP request in progress\n", __func__);
return UPNPC_ERR_REQ_IN_PROGRESS;
}
if(arg_count > 0) { if(arg_count > 0) {
int i; int i;
size_t l, n; size_t l, n;

View File

@ -32,6 +32,7 @@ extern "C" {
#define UPNPC_ERR_INVALID_ARGS (-1) #define UPNPC_ERR_INVALID_ARGS (-1)
#define UPNPC_ERR_SOCKET_FAILED (-2) #define UPNPC_ERR_SOCKET_FAILED (-2)
#define UPNPC_ERR_BIND_FAILED (-3) #define UPNPC_ERR_BIND_FAILED (-3)
#define UPNPC_ERR_REQ_IN_PROGRESS (-4)
#define UPNPC_ERR_NO_DEVICE_FOUND (-100) #define UPNPC_ERR_NO_DEVICE_FOUND (-100)
#define UPNPC_ERR_ROOT_DESC_ERROR (-101) #define UPNPC_ERR_ROOT_DESC_ERROR (-101)