diff options
author | Robert Pösel <robyer@seznam.cz> | 2015-05-19 18:51:14 +0000 |
---|---|---|
committer | Robert Pösel <robyer@seznam.cz> | 2015-05-19 18:51:14 +0000 |
commit | 331cea6299be141243e89e10755ec4adf5ef5d90 (patch) | |
tree | 6b95ffa477d89c6188d022b2d32704441557e6b7 | |
parent | 12e166b13c3b60836c19cd4625ba8a02e423fc53 (diff) |
Omegle: Fix receiving data without first letter; various cleanup; version bump
git-svn-id: http://svn.miranda-ng.org/main/trunk@13700 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r-- | protocols/Omegle/src/chat.cpp | 2 | ||||
-rw-r--r-- | protocols/Omegle/src/client.h | 41 | ||||
-rw-r--r-- | protocols/Omegle/src/communication.cpp | 175 | ||||
-rw-r--r-- | protocols/Omegle/src/messages.cpp | 16 | ||||
-rw-r--r-- | protocols/Omegle/src/proto.h | 2 | ||||
-rw-r--r-- | protocols/Omegle/src/version.h | 2 |
6 files changed, 95 insertions, 143 deletions
diff --git a/protocols/Omegle/src/chat.cpp b/protocols/Omegle/src/chat.cpp index 269c6d1731..f51104b1d9 100644 --- a/protocols/Omegle/src/chat.cpp +++ b/protocols/Omegle/src/chat.cpp @@ -47,7 +47,7 @@ void OmegleProto::UpdateChat(const TCHAR *name, const TCHAR *message, bool addto CallServiceSync(MS_GC_EVENT,0,reinterpret_cast<LPARAM>(&gce));
}
-int OmegleProto::OnChatEvent(WPARAM wParam,LPARAM lParam)
+int OmegleProto::OnChatEvent(WPARAM, LPARAM lParam)
{
GCHOOK *hook = reinterpret_cast<GCHOOK*>(lParam);
diff --git a/protocols/Omegle/src/client.h b/protocols/Omegle/src/client.h index 1cf3f9b25b..d3a6bf6856 100644 --- a/protocols/Omegle/src/client.h +++ b/protocols/Omegle/src/client.h @@ -35,7 +35,7 @@ class Omegle_client public:
// Client definition
- Omegle_client( )
+ Omegle_client()
{
nick_ = NULL;
//msgid_ = 0;
@@ -78,9 +78,9 @@ public: bool spy_mode_;
// Data storage
- void store_headers( http::response* resp, NETLIBHTTPHEADER* headers, int headers_count );
+ void store_headers(http::response *resp, NETLIBHTTPHEADER *headers, int headers_count);
- std::string get_server( bool not_last = false );
+ std::string get_server(bool not_last = false);
std::string get_language();
// Connection handling
@@ -88,34 +88,31 @@ public: bool handle_entry(const std::string &method);
bool handle_success(const std::string &method);
- bool handle_error(const std::string &method, bool force_disconnect = false );
+ bool handle_error(const std::string &method, bool force_disconnect = false);
- void __inline increment_error( ) { error_count_++; }
- void __inline decrement_error( ) { if ( error_count_ > 0 ) error_count_--; }
- void __inline reset_error( ) { error_count_ = 0; }
+ void __inline increment_error() { error_count_++; }
+ void __inline decrement_error() { if ( error_count_ > 0 ) error_count_--; }
+ void __inline reset_error() { error_count_ = 0; }
- bool start( );
- bool stop( );
- bool events( );
+ bool start();
+ bool stop();
+ bool events();
- bool typing_start( );
- bool typing_stop( );
- bool recaptcha( );
+ bool typing_start();
+ bool typing_stop();
+ bool recaptcha();
- std::string get_page( int );
+ std::string get_page(int);
- bool send_message(const std::string &message_text );
+ bool send_message(const std::string &message_text);
// HTTP communication
- http::response flap( const int request_type, std::string* request_data = NULL, std::string* get_data = NULL );
+ http::response flap(const int request_type, std::string *post_data = NULL, std::string *get_data = NULL);
- int choose_method( int );
- std::string choose_proto( int );
- std::string choose_server( int, std::string* data = NULL, std::string* get_data = NULL );
- std::string choose_action( int, std::string* data = NULL, std::string* get_data = NULL );
- std::string choose_request_url( int, std::string* data = NULL, std::string* get_data = NULL );
+ std::string choose_server(int);
+ std::string choose_action(int, std::string *get_data = NULL);
- NETLIBHTTPHEADER* get_request_headers( int request_type, int* headers_count );
+ NETLIBHTTPHEADER *get_request_headers(int request_type, int *headers_count);
// Netlib handle
diff --git a/protocols/Omegle/src/communication.cpp b/protocols/Omegle/src/communication.cpp index f6a027c5a4..a0e1d19c0c 100644 --- a/protocols/Omegle/src/communication.cpp +++ b/protocols/Omegle/src/communication.cpp @@ -21,25 +21,44 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "stdafx.h"
-http::response Omegle_client::flap( const int request_type, std::string* request_data, std::string* get_data )
+http::response Omegle_client::flap(const int request_type, std::string *post_data, std::string *get_data)
{
- NETLIBHTTPREQUEST nlhr = {sizeof( NETLIBHTTPREQUEST )};
- nlhr.requestType = choose_method( request_type );
- std::string url = choose_request_url( request_type, request_data, get_data );
- nlhr.szUrl = (char*)url.c_str( );
- nlhr.flags = NLHRF_HTTP11 | NLHRF_NODUMP;
- nlhr.headers = get_request_headers( request_type, &nlhr.headersCount );
- nlhr.timeout = 1000 * (( request_type == OMEGLE_REQUEST_EVENTS ) ? 60 : 15);
-
- if ( request_data != NULL )
- {
- nlhr.pData = (char*)(*request_data).c_str();
- nlhr.dataLength = (int)request_data->length( );
+ http::response resp;
+
+ // Prepare the request
+ NETLIBHTTPREQUEST nlhr = { sizeof(NETLIBHTTPREQUEST) };
+
+ // Set request URL
+ std::string url = choose_server(request_type) + choose_action(request_type, get_data);
+ nlhr.szUrl = (char*)url.c_str();
+
+ // Set timeout (bigger for channel request)
+ nlhr.timeout = 1000 * ((request_type == OMEGLE_REQUEST_EVENTS) ? 65 : 20);
+
+ // Set request type (GET/POST) and eventually also POST data
+ if (post_data != NULL) {
+ nlhr.requestType = REQUEST_POST;
+ nlhr.pData = (char*)(*post_data).c_str();
+ nlhr.dataLength = (int)post_data->length();
+ }
+ else {
+ nlhr.requestType = REQUEST_GET;
}
- parent->debugLogA("@@@@@ Sending request to '%s'", nlhr.szUrl);
+ // Set headers - it depends on requestType so it must be after setting that
+ nlhr.headers = get_request_headers(nlhr.requestType, &nlhr.headersCount);
- switch ( request_type )
+ // Set flags
+ nlhr.flags = NLHRF_HTTP11;
+
+#ifdef _DEBUG
+ nlhr.flags |= NLHRF_DUMPASTEXT;
+#else
+ nlhr.flags |= NLHRF_NODUMP;
+#endif
+
+ // Set persistent connection (or not)
+ switch (request_type)
{
case OMEGLE_REQUEST_HOME:
nlhr.nlc = NULL;
@@ -57,10 +76,14 @@ http::response Omegle_client::flap( const int request_type, std::string* request break;
}
- NETLIBHTTPREQUEST* pnlhr = ( NETLIBHTTPREQUEST* )CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)handle_, (LPARAM)&nlhr );
+ parent->debugLogA("@@@@@ Sending request to '%s'", nlhr.szUrl);
- http::response resp;
+ // Send the request
+ NETLIBHTTPREQUEST *pnlhr = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)handle_, (LPARAM)&nlhr);
+ mir_free(nlhr.headers);
+
+ // Remember the persistent connection handle (or not)
switch ( request_type )
{
case OMEGLE_REQUEST_HOME:
@@ -76,10 +99,11 @@ http::response Omegle_client::flap( const int request_type, std::string* request break;
}
- if ( pnlhr != NULL )
+ // Check and copy response data
+ if (pnlhr != NULL)
{
parent->debugLogA("@@@@@ Got response with code %d", pnlhr->resultCode);
- store_headers( &resp, pnlhr->headers, pnlhr->headersCount );
+ store_headers(&resp, pnlhr->headers, pnlhr->headersCount);
resp.code = pnlhr->resultCode;
resp.data = pnlhr->pData ? pnlhr->pData : "";
@@ -89,8 +113,7 @@ http::response Omegle_client::flap( const int request_type, std::string* request } else {
parent->debugLogA("!!!!! No response from server (time-out)");
resp.code = HTTP_CODE_FAKE_DISCONNECTED;
- // Better to have something set explicitely as this value
- // is compaired in all communication requests
+ // Better to have something set explicitely as this value is compaired in all communication requests
}
return resp;
@@ -159,27 +182,7 @@ std::string Omegle_client::get_language() return language > 0 ? languages[language].id : "en";
}
-int Omegle_client::choose_method( int request_type )
-{
- switch ( request_type )
- {
- case OMEGLE_REQUEST_HOME:
- case OMEGLE_REQUEST_COUNT:
- return REQUEST_GET;
-
-/* case OMEGLE_REQUEST_START:
- case OMEGLE_REQUEST_STOP:
- case OMEGLE_REQUEST_SEND:
- case OMEGLE_REQUEST_EVENTS:
- case OMEGLE_REQUEST_TYPING_START:
- case OMEGLE_REQUEST_TYPING_STOP:
- case OMEGLE_REQUEST_RECAPTCHA:
-*/ default:
- return REQUEST_POST;
- }
-}
-
-std::string Omegle_client::choose_server( int request_type, std::string* data, std::string* get_data )
+std::string Omegle_client::choose_server(int request_type)
{
switch ( request_type )
{
@@ -201,7 +204,7 @@ std::string Omegle_client::choose_server( int request_type, std::string* data, s }
}
-std::string Omegle_client::choose_action( int request_type, std::string* data, std::string* get_data )
+std::string Omegle_client::choose_action(int request_type, std::string* get_data)
{
switch ( request_type )
{
@@ -244,62 +247,28 @@ std::string Omegle_client::choose_action( int request_type, std::string* data, s }
}
-std::string Omegle_client::choose_request_url( int request_type, std::string* data, std::string* get_data )
-{
- std::string url = "";
- url.append( choose_server( request_type, data, get_data ));
- url.append( choose_action( request_type, data, get_data ));
- return url;
-}
NETLIBHTTPHEADER* Omegle_client::get_request_headers( int request_type, int* headers_count )
{
- switch ( request_type )
- {
- case OMEGLE_REQUEST_START:
- case OMEGLE_REQUEST_STOP:
- case OMEGLE_REQUEST_SEND:
- case OMEGLE_REQUEST_EVENTS:
- case OMEGLE_REQUEST_TYPING_START:
- case OMEGLE_REQUEST_TYPING_STOP:
- case OMEGLE_REQUEST_RECAPTCHA:
+ if (request_type == REQUEST_POST)
*headers_count = 4;
- break;
-
- case OMEGLE_REQUEST_HOME:
- case OMEGLE_REQUEST_COUNT:
- default:
+ else
*headers_count = 3;
- break;
- }
- NETLIBHTTPHEADER* headers = ( NETLIBHTTPHEADER* )utils::mem::allocate( sizeof( NETLIBHTTPHEADER )*( *headers_count ));
+ NETLIBHTTPHEADER *headers = (NETLIBHTTPHEADER*)mir_calloc(sizeof(NETLIBHTTPHEADER)*(*headers_count));
- switch ( request_type )
- {
- case OMEGLE_REQUEST_START:
- case OMEGLE_REQUEST_STOP:
- case OMEGLE_REQUEST_SEND:
- case OMEGLE_REQUEST_EVENTS:
- case OMEGLE_REQUEST_TYPING_START:
- case OMEGLE_REQUEST_TYPING_STOP:
- case OMEGLE_REQUEST_RECAPTCHA:
+ if (request_type == REQUEST_POST) {
headers[3].szName = "Content-Type";
headers[3].szValue = "application/x-www-form-urlencoded; charset=utf-8";
- // intentionally no break;
-
- case OMEGLE_REQUEST_HOME:
- case OMEGLE_REQUEST_COUNT:
- default:
- headers[2].szName = "User-Agent";
- headers[2].szValue = (char *)g_strUserAgent.c_str( );
- headers[1].szName = "Accept";
- headers[1].szValue = "*/*";
- headers[0].szName = "Accept-Language";
- headers[0].szValue = "en,en-US;q=0.9";
- break;
}
+ headers[2].szName = "User-Agent";
+ headers[2].szValue = (char *)g_strUserAgent.c_str();
+ headers[1].szName = "Accept";
+ headers[1].szValue = "*/*";
+ headers[0].szName = "Accept-Language";
+ headers[0].szValue = "en,en-US;q=0.9";
+
return headers;
}
@@ -438,7 +407,7 @@ bool Omegle_client::start() }
}
-bool Omegle_client::stop( )
+bool Omegle_client::stop()
{
if ( parent->isOffline())
return true;
@@ -473,7 +442,7 @@ bool Omegle_client::stop( ) }*/
}
-bool Omegle_client::events( )
+bool Omegle_client::events()
{
handle_entry( "events" );
@@ -519,9 +488,9 @@ bool Omegle_client::events( ) mir_free(msg);
}*/
- if ( (pos = resp.data.find( "[\"serverMessage\", \"" )) != std::string::npos ) {
+ if ( (pos = resp.data.find( "[\"serverMessage\"," )) != std::string::npos ) {
// We got server message
- pos += 19;
+ pos += 18;
std::string message = utils::text::trim( resp.data.substr(pos, resp.data.find("\"]", pos) - pos));
TCHAR *tstr = Langpack_PcharToTchar(message.c_str());
@@ -545,7 +514,7 @@ bool Omegle_client::events( ) }
if ( (pos = resp.data.find( "[\"commonLikes\"," )) != std::string::npos ) {
- pos += 18;
+ pos += 17;
std::string like = resp.data.substr(pos, resp.data.find("\"]", pos) - pos);
utils::text::replace_all(&like, "\", \"", ", ");
@@ -559,7 +528,7 @@ bool Omegle_client::events( ) }
if ( (pos = resp.data.find( "[\"question\"," )) != std::string::npos ) {
- pos += 14;
+ pos += 13;
std::string question = utils::text::trim(
utils::text::special_expressions_decode(
@@ -604,7 +573,7 @@ bool Omegle_client::events( ) pos = 0;
while ( (pos = resp.data.find( "[\"gotMessage\",", pos )) != std::string::npos ) {
- pos += 16;
+ pos += 15;
std::string message = utils::text::trim(
utils::text::special_expressions_decode(
@@ -622,7 +591,7 @@ bool Omegle_client::events( ) pos = 0;
while ( (pos = resp.data.find( "[\"spyMessage\",", pos )) != std::string::npos ) {
- pos += 16;
+ pos += 15;
std::string message = resp.data.substr(pos, resp.data.find("\"]", pos) - pos);
@@ -658,7 +627,7 @@ bool Omegle_client::events( ) }
if ( (pos = resp.data.find( "[\"spyDisconnected\"," )) != std::string::npos ) {
- pos += 21;
+ pos += 20;
std::string stranger = utils::text::trim(
utils::text::special_expressions_decode(
@@ -694,7 +663,7 @@ bool Omegle_client::events( ) }
if ( (pos = resp.data.find( "[\"error\"," )) != std::string::npos ) {
- pos += 11;
+ pos += 10;
std::string error = utils::text::trim(
utils::text::special_expressions_decode(
@@ -833,22 +802,22 @@ bool Omegle_client::recaptcha() }
}
-std::string Omegle_client::get_page( const int request_type )
+std::string Omegle_client::get_page(const int request_type)
{
- handle_entry( "get_page" );
+ handle_entry("get_page");
- http::response resp = flap( OMEGLE_REQUEST_COUNT );
+ http::response resp = flap(request_type);
switch ( resp.code )
{
case HTTP_CODE_OK:
- handle_success( "get_page" );
+ handle_success("get_page");
break;
case HTTP_CODE_FAKE_ERROR:
case HTTP_CODE_FAKE_DISCONNECTED:
default:
- handle_error( "get_page" );
+ handle_error("get_page");
}
return resp.data;
diff --git a/protocols/Omegle/src/messages.cpp b/protocols/Omegle/src/messages.cpp index 893674de5b..5eea9b5893 100644 --- a/protocols/Omegle/src/messages.cpp +++ b/protocols/Omegle/src/messages.cpp @@ -68,24 +68,12 @@ void OmegleProto::SendTypingWorker(void *p) facy.typing_stop();
}
-void OmegleProto::NewChatWorker(void*p)
+void OmegleProto::NewChatWorker(void*)
{
NewChat();
}
-void OmegleProto::StopChatWorker(void*p)
+void OmegleProto::StopChatWorker(void*)
{
StopChat();
}
-
-int OmegleProto::SendMsg(MCONTACT hContact, int flags, const char *msg)
-{
- // TODO: msg comes as Unicode (retyped wchar_t*), why should we convert it as ANSI to UTF-8? o_O
-/* if ( flags & PREF_UNICODE )
- msg = mir_utf8encode(msg);
-
- facy.msgid_ = (facy.msgid_ % 1024)+1;
- ForkThread( &OmegleProto::SendMsgWorker, this,new send_direct(hContact,msg,(HANDLE)facy.msgid_));
- return facy.msgid_;*/
- return 0;
-}
diff --git a/protocols/Omegle/src/proto.h b/protocols/Omegle/src/proto.h index 697bb4cd52..6af68ff566 100644 --- a/protocols/Omegle/src/proto.h +++ b/protocols/Omegle/src/proto.h @@ -47,8 +47,6 @@ public: virtual DWORD_PTR __cdecl GetCaps( int type, MCONTACT hContact = NULL );
- virtual int __cdecl SendMsg( MCONTACT hContact, int flags, const char* msg );
-
virtual int __cdecl SetStatus( int iNewStatus );
virtual int __cdecl UserIsTyping( MCONTACT hContact, int type );
diff --git a/protocols/Omegle/src/version.h b/protocols/Omegle/src/version.h index 65f5ae1608..24b7c2d86c 100644 --- a/protocols/Omegle/src/version.h +++ b/protocols/Omegle/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0
#define __MINOR_VERSION 1
#define __RELEASE_NUM 2
-#define __BUILD_NUM 2
+#define __BUILD_NUM 3
#include <stdver.h>
|