diff options
Diffstat (limited to 'protocols')
| -rw-r--r-- | protocols/SkypeWeb/src/http_request.h | 2 | ||||
| -rw-r--r-- | protocols/SkypeWeb/src/request_queue.cpp | 32 | ||||
| -rw-r--r-- | protocols/SkypeWeb/src/request_queue.h | 4 | ||||
| -rw-r--r-- | protocols/SkypeWeb/src/skype_proto.h | 4 | ||||
| -rw-r--r-- | protocols/SkypeWeb/src/skype_request.cpp | 17 | 
5 files changed, 49 insertions, 10 deletions
diff --git a/protocols/SkypeWeb/src/http_request.h b/protocols/SkypeWeb/src/http_request.h index bc58405fb0..ccc4972db1 100644 --- a/protocols/SkypeWeb/src/http_request.h +++ b/protocols/SkypeWeb/src/http_request.h @@ -226,7 +226,7 @@ public:  		requestType = type;
  	}
 -	HttpRequest(int type, HttpRequestUrlFormat format, LPCSTR urlFormat, ...)
 +	HttpRequest(int type, HttpRequestUrlFormat, LPCSTR urlFormat, ...)
  		: Url(*this, urlFormat, (va_start(formatArgs, urlFormat), formatArgs)), Headers(*this)
  	{
  		cbSize = sizeof(NETLIBHTTPREQUEST);
 diff --git a/protocols/SkypeWeb/src/request_queue.cpp b/protocols/SkypeWeb/src/request_queue.cpp index 2a7e384a8f..e932dc363d 100644 --- a/protocols/SkypeWeb/src/request_queue.cpp +++ b/protocols/SkypeWeb/src/request_queue.cpp @@ -64,6 +64,12 @@ void RequestQueue::Push(HttpRequest *request, HttpResponseCallback response, voi  	SetEvent(hRequestQueueEvent);
  }
 +void RequestQueue::Send(HttpRequest *request, HttpResponseCallback response, void *arg)
 +{
 +	RequestQueueItem *item = new RequestQueueItem(request, response, arg);
 +	mir_forkthreadowner((pThreadFuncOwner)&RequestQueue::AsyncSendThread, this, item, 0);
 +}
 +
  void RequestQueue::Execute(RequestQueueItem *item)
  {
  	NETLIBHTTPREQUEST *response = item->request->Send(hConnection);
 @@ -74,27 +80,37 @@ void RequestQueue::Execute(RequestQueueItem *item)  	delete item;
  }
 -unsigned int RequestQueue::WorkerThread(void* owner, void*)
 +unsigned int RequestQueue::AsyncSendThread(void *owner, void *arg)
  {
  	RequestQueue *that = (RequestQueue*)owner;
 +	RequestQueueItem *item = (RequestQueueItem*)arg;
 +
 +	that->Execute(item);
 +
 +	return 0;
 +}
 +
 +unsigned int RequestQueue::WorkerThread(void *arg)
 +{
 +	RequestQueue *queue = (RequestQueue*)arg;
 -	while (!that->isTerminated)
 +	while (!queue->isTerminated)
  	{
 -		WaitForSingleObject(that->hRequestQueueEvent, INFINITE);
 +		WaitForSingleObject(queue->hRequestQueueEvent, INFINITE);
  		while (true)
  		{
  			RequestQueueItem *item = NULL;
  			{
 -				mir_cslock lock(that->requestQueueLock);
 +				mir_cslock lock(queue->requestQueueLock);
 -				if (that->requests.getCount() == 0)
 +				if (queue->requests.getCount() == 0)
  					break;
 -				item = that->requests[0];
 -				that->requests.remove(0);
 +				item = queue->requests[0];
 +				queue->requests.remove(0);
  			}
  			if (item != NULL)
 -				that->Execute(item);
 +				queue->Execute(item);
  		}
  	}
 diff --git a/protocols/SkypeWeb/src/request_queue.h b/protocols/SkypeWeb/src/request_queue.h index ffe4f6fddf..23696f2481 100644 --- a/protocols/SkypeWeb/src/request_queue.h +++ b/protocols/SkypeWeb/src/request_queue.h @@ -51,7 +51,8 @@ private:  	void Execute(RequestQueueItem *item);
 -	static unsigned int __cdecl WorkerThread(void*, void*);
 +	static unsigned int __cdecl AsyncSendThread(void*, void*);
 +	static unsigned int __cdecl WorkerThread(void*);
  public:
  	RequestQueue(HANDLE hConnection);
 @@ -61,6 +62,7 @@ public:  	void Stop();
  	void Push(HttpRequest *request, HttpResponseCallback response = NULL, void *arg = NULL);
 +	void Send(HttpRequest *request, HttpResponseCallback response = NULL, void *arg = NULL);
  };
 diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h index 3956db072b..3d9d2ad4b4 100644 --- a/protocols/SkypeWeb/src/skype_proto.h +++ b/protocols/SkypeWeb/src/skype_proto.h @@ -113,6 +113,10 @@ private:  	void PushRequest(HttpRequest *request, SkypeResponseCallback response);
  	void PushRequest(HttpRequest *request, SkypeResponseWithArgCallback response, void *arg);
 +	void SendRequest(HttpRequest *request);
 +	void SendRequest(HttpRequest *request, SkypeResponseCallback response);
 +	void SendRequest(HttpRequest *request, SkypeResponseWithArgCallback response, void *arg);
 +
  	// icons
  	static IconInfo Icons[];
  	static HANDLE GetIconHandle(const char *name);
 diff --git a/protocols/SkypeWeb/src/skype_request.cpp b/protocols/SkypeWeb/src/skype_request.cpp index 6f911d283e..c688906a5f 100644 --- a/protocols/SkypeWeb/src/skype_request.cpp +++ b/protocols/SkypeWeb/src/skype_request.cpp @@ -63,4 +63,21 @@ void CSkypeProto::PushRequest(HttpRequest *request, SkypeResponseWithArgCallback  {
  	SkypeResponseDelegate *delegate = new SkypeResponseDelegate(this, response, arg);
  	requestQueue->Push(request, SkypeHttpResponse, delegate);
 +}
 +
 +void CSkypeProto::SendRequest(HttpRequest *request)
 +{
 +	requestQueue->Send(request, NULL, NULL);
 +}
 +
 +void CSkypeProto::SendRequest(HttpRequest *request, SkypeResponseCallback response)
 +{
 +	SkypeResponseDelegate *delegate = new SkypeResponseDelegate(this, response);
 +	requestQueue->Send(request, SkypeHttpResponse, delegate);
 +}
 +
 +void CSkypeProto::SendRequest(HttpRequest *request, SkypeResponseWithArgCallback response, void *arg)
 +{
 +	SkypeResponseDelegate *delegate = new SkypeResponseDelegate(this, response, arg);
 +	requestQueue->Send(request, SkypeHttpResponse, delegate);
  }
\ No newline at end of file  | 
