Browse Source

almost done

dmuratshin 8 years ago
parent
commit
96dbe2ace0

+ 6 - 1
oxygine/src/HttpRequestTask.cpp

@@ -39,6 +39,7 @@ namespace oxygine
         _expectedContentSize(0),
         _expectedContentSize(0),
         _receivedContentSize(0),
         _receivedContentSize(0),
         _fhandle(0),
         _fhandle(0),
+		_suitableResponse(false),
         _responseCodeChecker(_defaultChecker200)
         _responseCodeChecker(_defaultChecker200)
     {
     {
 
 
@@ -117,6 +118,7 @@ namespace oxygine
 
 
     void HttpRequestTask::_prerun()
     void HttpRequestTask::_prerun()
     {
     {
+		_suitableResponse = false;
         _receivedContentSize = 0;
         _receivedContentSize = 0;
         _expectedContentSize = 0;
         _expectedContentSize = 0;
         _responseCode = 0;
         _responseCode = 0;
@@ -192,11 +194,14 @@ namespace oxygine
 
 
 	void HttpRequestTask::gotHeaders()
 	void HttpRequestTask::gotHeaders()
 	{
 	{
-
+		_suitableResponse = _responseCodeChecker(_responseCode);
 	}
 	}
 
 
 	void HttpRequestTask::write(const void *data, unsigned int size)
 	void HttpRequestTask::write(const void *data, unsigned int size)
 	{
 	{
+		if (!_suitableResponse)
+			return;
+
 		if (_fhandle)
 		if (_fhandle)
 			file::write(_fhandle, data, size);
 			file::write(_fhandle, data, size);
 		else
 		else

+ 2 - 0
oxygine/src/HttpRequestTask.h

@@ -90,6 +90,8 @@ namespace oxygine
         
         
         responseCodeChecker _responseCodeChecker;
         responseCodeChecker _responseCodeChecker;
 
 
+		bool _suitableResponse;
+
         int _responseCode;
         int _responseCode;
         size_t _expectedContentSize;
         size_t _expectedContentSize;
         size_t _receivedContentSize;
         size_t _receivedContentSize;

+ 13 - 12
oxygine/src/core/curl/HttpRequestCurlTask.cpp

@@ -160,9 +160,9 @@ namespace oxygine
     }
     }
 
 
 
 
-    size_t HttpRequestTaskCURL::cbWriteFunction(char* d, size_t n, size_t l, void* userData)
+    size_t HttpRequestTaskCURL::cbWriteFunction(char* d, size_t n, size_t l, HttpRequestTaskCURL* userData)
     {
     {
-        return ((HttpRequestTaskCURL*)userData)->_cbWriteFunction(d, n, l);
+        return userData->_cbWriteFunction(d, n, l);
     }
     }
 
 
 
 
@@ -170,15 +170,14 @@ namespace oxygine
     {
     {
 		size_t size = n * l;
 		size_t size = n * l;
 
 
-		if (_ok)
-			write(d, size);
+		write(d, size);
 
 
         return size;
         return size;
     }
     }
 
 
-	size_t HttpRequestTaskCURL::cbHeaderFunction(char* d, size_t n, size_t l, void* userData)
+	size_t HttpRequestTaskCURL::cbHeaderFunction(char* d, size_t n, size_t l, HttpRequestTaskCURL* userData)
 	{
 	{
-		return ((HttpRequestTaskCURL*)userData)->_cbHeaderFunction(d, n, l);
+		return userData->_cbHeaderFunction(d, n, l);
 	}
 	}
 
 
 
 
@@ -193,22 +192,24 @@ namespace oxygine
 		if (sscanf(d, "Content-Length: %d", &contentLength) == 1)
 		if (sscanf(d, "Content-Length: %d", &contentLength) == 1)
 		{
 		{
 			_expectedContentSize = contentLength;
 			_expectedContentSize = contentLength;
-
-			gotHeaders();
 		}
 		}
 
 
 		int responseCode = 0;
 		int responseCode = 0;
-		if (sscanf(d, "HTTP/1.1 %d ", &responseCode) == 1 || 
-			sscanf(d, "HTTP/1.0 %d ", &responseCode) == 1)
+		char ver[32];
+		if (sscanf(d, "HTTP/%s %d ", ver, &responseCode) == 2)
 		{
 		{
 			_responseCode = responseCode;
 			_responseCode = responseCode;
-			_ok = _responseCodeChecker(_responseCode);
+		}
+
+		if (d[0] == '\r' && d[1] == '\n')
+		{
+			gotHeaders();
 		}
 		}
 
 
 		return s;
 		return s;
 	}
 	}
 
 
-    HttpRequestTaskCURL::HttpRequestTaskCURL() : _easy(0), _httpHeaders(0), _ok(false)
+    HttpRequestTaskCURL::HttpRequestTaskCURL() : _easy(0), _httpHeaders(0)
     {
     {
         _easy = curl_easy_init();
         _easy = curl_easy_init();
     }
     }

+ 2 - 4
oxygine/src/core/curl/HttpRequestCurlTask.h

@@ -23,17 +23,15 @@ namespace oxygine
         friend void* thread(void*);
         friend void* thread(void*);
         friend void mainThreadFunc(const ThreadDispatcher::message& msg);
         friend void mainThreadFunc(const ThreadDispatcher::message& msg);
 
 
-		static size_t cbWriteFunction(char* d, size_t n, size_t l, void* p);
+		static size_t cbWriteFunction(char* d, size_t n, size_t l, HttpRequestTaskCURL* p);
 		size_t _cbWriteFunction(char* d, size_t n, size_t l);
 		size_t _cbWriteFunction(char* d, size_t n, size_t l);
 
 
-		static size_t cbHeaderFunction(char* d, size_t n, size_t l, void* p);
+		static size_t cbHeaderFunction(char* d, size_t n, size_t l, HttpRequestTaskCURL* p);
 		size_t _cbHeaderFunction(char* d, size_t n, size_t l);
 		size_t _cbHeaderFunction(char* d, size_t n, size_t l);
 
 
 
 
         void _run();
         void _run();
 
 
-		bool _ok;
-
         void* _easy;
         void* _easy;
         curl_slist* _httpHeaders;
         curl_slist* _httpHeaders;
     };
     };