Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 59348 Details for
Bug 93213
kopete msn protocol won't connect to msn with new protocol change
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
kdenetwork-3.4.0-kopete-msn-2.patch
kdenetwork-3.4.0-kopete-msn-2.patch (text/plain), 32.48 KB, created by
Raul Metsma
on 2005-05-20 01:04:42 UTC
(
hide
)
Description:
kdenetwork-3.4.0-kopete-msn-2.patch
Filename:
MIME Type:
Creator:
Raul Metsma
Created:
2005-05-20 01:04:42 UTC
Size:
32.48 KB
patch
obsolete
>diff -U3 -r --new-file kdenetwork-3.4.0/kopete/protocols/msn/Makefile.am kdenetwork-3.4.0-new/kopete/protocols/msn/Makefile.am >--- kdenetwork-3.4.0/kopete/protocols/msn/Makefile.am 2005-02-23 12:30:54.000000000 +0200 >+++ kdenetwork-3.4.0-new/kopete/protocols/msn/Makefile.am 2005-05-19 17:54:08.000000000 +0300 >@@ -13,7 +13,8 @@ > libkopete_msn_shared_la_SOURCES = msnprotocol.cpp msnaccount.cpp msnaddcontactpage.cpp msncontact.cpp \ > msnsocket.cpp msnmessagemanager.cpp msndebugrawcmddlg.cpp \ > msnnotifysocket.cpp msnswitchboardsocket.cpp msnfiletransfersocket.cpp msninvitation.cpp \ >- msnp2p.cpp msnp2pdisplatcher.cpp msnp2pincoming.cpp msnp2poutgoing.cpp sha1.cpp >+ msnp2p.cpp msnp2pdisplatcher.cpp msnp2pincoming.cpp msnp2poutgoing.cpp sha1.cpp \ >+ sslloginhandler.cpp > > libkopete_msn_shared_la_LIBADD = ./ui/libkopetemsnui.la ../../libkopete/libkopete.la $(LIB_KIO) > libkopete_msn_shared_la_LDFLAGS = -version-info 0:0:0 -no-undefined $(all_libraries) >diff -U3 -r --new-file kdenetwork-3.4.0/kopete/protocols/msn/Makefile.in kdenetwork-3.4.0-new/kopete/protocols/msn/Makefile.in >--- kdenetwork-3.4.0/kopete/protocols/msn/Makefile.in 2005-03-04 14:37:18.000000000 +0200 >+++ kdenetwork-3.4.0-new/kopete/protocols/msn/Makefile.in 2005-05-19 23:15:26.000000000 +0300 >@@ -75,7 +75,8 @@ > msnmessagemanager.lo msndebugrawcmddlg.lo msnnotifysocket.lo \ > msnswitchboardsocket.lo msnfiletransfersocket.lo \ > msninvitation.lo msnp2p.lo msnp2pdisplatcher.lo \ >- msnp2pincoming.lo msnp2poutgoing.lo sha1.lo >+ msnp2pincoming.lo msnp2poutgoing.lo sha1.lo \ >+ sslloginhandler.lo > #>- libkopete_msn_shared_la_OBJECTS = \ > #>- $(am_libkopete_msn_shared_la_OBJECTS) > #>+ 9 >@@ -85,7 +86,8 @@ > msnmessagemanager.lo msndebugrawcmddlg.lo msnnotifysocket.lo \ > msnswitchboardsocket.lo msnfiletransfersocket.lo \ > msninvitation.lo msnp2p.lo msnp2pdisplatcher.lo \ >- msnp2pincoming.lo msnp2poutgoing.lo sha1.lo >+ msnp2pincoming.lo msnp2poutgoing.lo sha1.lo \ >+ sslloginhandler.lo > @KDE_USE_FINAL_FALSE@libkopete_msn_shared_la_OBJECTS = $(libkopete_msn_shared_la_nofinal_OBJECTS) > @KDE_USE_FINAL_TRUE@libkopete_msn_shared_la_OBJECTS = $(libkopete_msn_shared_la_final_OBJECTS) > DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) >@@ -469,7 +471,7 @@ > libkopete_msn_shared_la_SOURCES = msnprotocol.cpp msnaccount.cpp msnaddcontactpage.cpp msncontact.cpp \ > msnsocket.cpp msnmessagemanager.cpp msndebugrawcmddlg.cpp \ > msnnotifysocket.cpp msnswitchboardsocket.cpp msnfiletransfersocket.cpp msninvitation.cpp \ >- msnp2p.cpp msnp2pdisplatcher.cpp msnp2pincoming.cpp msnp2poutgoing.cpp sha1.cpp >+ msnp2p.cpp msnp2pdisplatcher.cpp msnp2pincoming.cpp msnp2poutgoing.cpp sha1.cpp sslloginhandler.cpp > > libkopete_msn_shared_la_LIBADD = ./ui/libkopetemsnui.la ../../libkopete/libkopete.la $(LIB_KIO) > #>- libkopete_msn_shared_la_LDFLAGS = -version-info 0:0:0 -no-undefined $(all_libraries) >@@ -620,6 +622,7 @@ > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msnsocket.Plo@am__quote@ > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msnswitchboardsocket.Plo@am__quote@ > @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Plo@am__quote@ >+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sslloginhandler.Plo@am__quote@ > > .cpp.o: > @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ >@@ -1081,6 +1084,13 @@ > #>+ 2 > mocs: msnaddcontactpage.moc > >+#>+ 3 >+sslloginhandler.moc: $(srcdir)/sslloginhandler.h >+ $(MOC) $(srcdir)/sslloginhandler.h -o sslloginhandler.moc >+ >+#>+ 2 >+mocs: sslloginhandler.moc >+ > #>+ 8 > libkopete_msn_shared.la.closure: $(libkopete_msn_shared_la_OBJECTS) $(libkopete_msn_shared_la_DEPENDENCIES) > @echo "int main() {return 0;}" > libkopete_msn_shared_la_closure.cpp >@@ -1092,10 +1102,10 @@ > > #>+ 3 > clean-metasources: >- -rm -f msndebugrawcmddlg.moc msnp2pdisplatcher.moc msnmessagemanager.moc msnfiletransfersocket.moc msncontact.moc msnprotocol.moc msnaccount.moc msnsocket.moc msnswitchboardsocket.moc msnnotifysocket.moc msnp2poutgoing.moc msnp2p.moc msnp2pincoming.moc msnaddcontactpage.moc >+ -rm -f msndebugrawcmddlg.moc msnp2pdisplatcher.moc msnmessagemanager.moc msnfiletransfersocket.moc msncontact.moc msnprotocol.moc msnaccount.moc msnsocket.moc msnswitchboardsocket.moc msnnotifysocket.moc msnp2poutgoing.moc msnp2p.moc msnp2pincoming.moc msnaddcontactpage.moc sslloginhandler.moc > > #>+ 2 >-KDE_DIST=msnp2poutgoing.h kopete_msn.desktop msncontact.h msnp2p.h msnmessagemanager.h msnchatui.rc Changelog msnsocket.h msnp2pincoming.h ReleaseNotes msndebugrawcmddlg.h msnaccount.h msnfiletransfersocket.h sha1.h msnp2pdisplatcher.h msninvitation.h Makefile.in msnswitchboardsocket.h msnprotocol.h msnnotifysocket.h msnaddcontactpage.h Makefile.am >+KDE_DIST=msnp2poutgoing.h kopete_msn.desktop msncontact.h msnp2p.h msnmessagemanager.h msnchatui.rc Changelog msnsocket.h msnp2pincoming.h ReleaseNotes msndebugrawcmddlg.h msnaccount.h msnfiletransfersocket.h sha1.h sslloginhandler.h msnp2pdisplatcher.h msninvitation.h Makefile.in msnswitchboardsocket.h msnprotocol.h msnnotifysocket.h msnaddcontactpage.h Makefile.am > > #>+ 3 > clean-closures: >@@ -1143,11 +1153,11 @@ > > > #>+ 11 >-libkopete_msn_shared_la.all_cpp.cpp: $(srcdir)/Makefile.in $(srcdir)/msnprotocol.cpp $(srcdir)/msnaccount.cpp $(srcdir)/msnaddcontactpage.cpp $(srcdir)/msncontact.cpp $(srcdir)/msnsocket.cpp $(srcdir)/msnmessagemanager.cpp $(srcdir)/msndebugrawcmddlg.cpp $(srcdir)/msnnotifysocket.cpp $(srcdir)/msnswitchboardsocket.cpp $(srcdir)/msnfiletransfersocket.cpp $(srcdir)/msninvitation.cpp $(srcdir)/msnp2p.cpp $(srcdir)/msnp2pdisplatcher.cpp $(srcdir)/msnp2pincoming.cpp $(srcdir)/msnp2poutgoing.cpp $(srcdir)/sha1.cpp msndebugrawcmddlg.moc msncontact.moc msnfiletransfersocket.moc msnmessagemanager.moc msnp2pdisplatcher.moc msnprotocol.moc msnaccount.moc msnsocket.moc msnswitchboardsocket.moc msnnotifysocket.moc msnp2p.moc msnp2poutgoing.moc msnaddcontactpage.moc msnp2pincoming.moc >+libkopete_msn_shared_la.all_cpp.cpp: $(srcdir)/Makefile.in $(srcdir)/msnprotocol.cpp $(srcdir)/msnaccount.cpp $(srcdir)/msnaddcontactpage.cpp $(srcdir)/msncontact.cpp $(srcdir)/msnsocket.cpp $(srcdir)/msnmessagemanager.cpp $(srcdir)/msndebugrawcmddlg.cpp $(srcdir)/msnnotifysocket.cpp $(srcdir)/msnswitchboardsocket.cpp $(srcdir)/msnfiletransfersocket.cpp $(srcdir)/msninvitation.cpp $(srcdir)/msnp2p.cpp $(srcdir)/msnp2pdisplatcher.cpp $(srcdir)/msnp2pincoming.cpp $(srcdir)/msnp2poutgoing.cpp $(srcdir)/sha1.cpp $(srcdir)/sslloginhandler.cpp msndebugrawcmddlg.moc msncontact.moc msnfiletransfersocket.moc msnmessagemanager.moc msnp2pdisplatcher.moc msnprotocol.moc msnaccount.moc msnsocket.moc msnswitchboardsocket.moc msnnotifysocket.moc msnp2p.moc msnp2poutgoing.moc msnaddcontactpage.moc msnp2pincoming.moc sslloginhandler.moc > @echo 'creating libkopete_msn_shared_la.all_cpp.cpp ...'; \ > rm -f libkopete_msn_shared_la.all_cpp.files libkopete_msn_shared_la.all_cpp.final; \ > echo "#define KDE_USE_FINAL 1" >> libkopete_msn_shared_la.all_cpp.final; \ >- for file in msnprotocol.cpp msnaccount.cpp msnaddcontactpage.cpp msncontact.cpp msnsocket.cpp msnmessagemanager.cpp msndebugrawcmddlg.cpp msnnotifysocket.cpp msnswitchboardsocket.cpp msnfiletransfersocket.cpp msninvitation.cpp msnp2p.cpp msnp2pdisplatcher.cpp msnp2pincoming.cpp msnp2poutgoing.cpp sha1.cpp ; do \ >+ for file in msnprotocol.cpp msnaccount.cpp msnaddcontactpage.cpp msncontact.cpp msnsocket.cpp msnmessagemanager.cpp msndebugrawcmddlg.cpp msnnotifysocket.cpp msnswitchboardsocket.cpp msnfiletransfersocket.cpp msninvitation.cpp msnp2p.cpp msnp2pdisplatcher.cpp msnp2pincoming.cpp msnp2poutgoing.cpp sha1.cpp sslloginhandler.cpp ; do \ > echo "#include \"$$file\"" >> libkopete_msn_shared_la.all_cpp.files; \ > test ! -f $(srcdir)/$$file || egrep '^#pragma +implementation' $(srcdir)/$$file >> libkopete_msn_shared_la.all_cpp.final; \ > done; \ >@@ -1189,12 +1199,14 @@ > msnaccount.o: msnaccount.moc > msncontact.lo: msncontact.moc > msnp2pincoming.o: msnp2pincoming.moc >+sslloginhandler.o: sslloginhandler.moc > nmcheck-am: nmcheck > msnswitchboardsocket.lo: msnswitchboardsocket.moc > msnprotocol.o: msnprotocol.moc > msnmessagemanager.o: msnmessagemanager.moc > msnswitchboardsocket.o: msnswitchboardsocket.moc > msnp2pincoming.lo: msnp2pincoming.moc >+sslloginhandler.lo: sslloginhandler.moc > msnnotifysocket.lo: msnnotifysocket.moc > msncontact.o: msncontact.moc > msnp2p.lo: msnp2p.moc >diff -U3 -r --new-file kdenetwork-3.4.0/kopete/protocols/msn/msnnotifysocket.cpp kdenetwork-3.4.0-new/kopete/protocols/msn/msnnotifysocket.cpp >--- kdenetwork-3.4.0/kopete/protocols/msn/msnnotifysocket.cpp 2005-02-23 12:30:54.000000000 +0200 >+++ kdenetwork-3.4.0-new/kopete/protocols/msn/msnnotifysocket.cpp 2005-05-19 22:33:29.000000000 +0300 >@@ -23,6 +23,7 @@ > #include "msnnotifysocket.h" > #include "msncontact.h" > #include "msnaccount.h" >+#include "sslloginhandler.h" > > #include <qregexp.h> > >@@ -48,7 +49,8 @@ > : MSNSocket( account ) > { > m_newstatus = MSNProtocol::protocol()->NLN; >- >+ m_sslLoginHandler=0l; >+ > m_isHotmailAccount=false; > m_ping=false; > >@@ -65,6 +67,7 @@ > > MSNNotifySocket::~MSNNotifySocket() > { >+ delete m_sslLoginHandler; > kdDebug(14140) << k_funcinfo << endl; > } > >@@ -248,7 +251,7 @@ > > if ( cmd == "VER" ) > { >- sendCommand( "CVR", "0x0409 winnt 5.1 i386 MSNMSGR 6.0.0602 MSMSGS " + m_account->accountId() ); >+ sendCommand( "CVR", "0x0409 winnt 5.1 i386 MSNMSGR 6.2.0205 MSMSGS " + m_account->accountId() ); > /* > struct utsname utsBuf; > uname ( &utsBuf ); >@@ -266,26 +269,15 @@ > { > if( data.section( ' ', 1, 1 ) == "S" ) > { >- m_authData=data.section( ' ' , 2 , 2 ); >- m_kv=QString::null; >+ m_sslLoginHandler = new SslLoginHandler(); >+ QObject::connect( m_sslLoginHandler, SIGNAL( loginFailed() ), >+ this, SLOT ( sslLoginFailed() ) ); >+ QObject::connect( m_sslLoginHandler, SIGNAL( loginIncorrect() ), >+ this, SLOT ( sslLoginIncorrect() ) ); >+ QObject::connect( m_sslLoginHandler, SIGNAL( loginSucceeded(QString) ), >+ this, SLOT ( sslLoginSucceeded(QString) ) ); > >- if( m_account->accountId().contains("@hotmail.") ) >- m_sid="loginnet.passport.com"; >- else if( m_account->accountId().contains("@msn.") || m_account->accountId().contains("@compaq.net") || m_account->accountId().contains("@webtv.net") ) >- m_sid="msnialogin.passport.com"; >- else >- m_sid="login.passport.com"; >- >- QString authURL="https://"+m_sid+"/login.srf?" + m_authData; >- authURL.replace("," , "&" ) ; >- >- kdDebug(14140) << k_funcinfo << "downlaod URL: " << authURL << endl; >- >- KIO::Job *job = KIO::get( KURL( authURL ), true, false ); >- job->addMetaData("cookies", "manual"); >- // This should force kio to download the page even is we are in the konqueror offline mode. [see bug #68483] >- job->addMetaData("cache", "reload"); >- QObject::connect( job, SIGNAL(result( KIO::Job *)), this, SLOT(slotAuthJobDone( KIO::Job *)) ); >+ m_sslLoginHandler->login( data.section( ' ' , 2 , 2 ), m_account->accountId() , m_password ); > } > else > { >@@ -582,76 +574,20 @@ > } > > >-void MSNNotifySocket::slotAuthJobDataReceived ( KIO::Job */*job*/,const QByteArray &data) >+void MSNNotifySocket::sslLoginFailed() > { >- m_authData += QCString( data, data.size()+1 ); >-// kdDebug(14140) << "MSNNotifySocket::slotAuthJobDataReceived: " << data << endl; >+ disconnect(); > } >- >-void MSNNotifySocket::slotAuthJobDone ( KIO::Job *job) >+void MSNNotifySocket::sslLoginIncorrect() > { >-// kdDebug(14140) << "MSNNotifySocket::slotAuthJobDone: "<< m_authData << endl; >- >- if(job->error()) >- { >- //FIXME: Shouldn't we say that we are the MSN plugin? >- job->showErrorDialog(); >- disconnect(); >- return; >- } >- >- if(m_kv.isNull()) >- { >- QStringList cookielist=QStringList::split("\n", job->queryMetaData("setcookies") ); >- QString cookies="Cookie: "; >- for ( QStringList::Iterator it = cookielist.begin(); it != cookielist.end(); ++it ) >- { >- QRegExp rx("Set-Cookie: ([^;]*)"); >- rx.search(*it); >- cookies+=rx.cap(1)+";"; >- } >- >- //QRegExp rx("lc=([1-9]*),id=([1-9]*),tw=([1-9]*),fs=[1-9]*,ru=[1-9a-zA-Z%]*,ct=[1-9]*,kpp=[1-9]*,kv=([1-9]*),"); >- QRegExp rx("lc=([0-9]*),id=([0-9]*),tw=([0-9]*),.*kv=([0-9]*),"); >- rx.search(m_authData); >- >- QString authURL = "https://" + m_sid + "/ppsecure/post.srf?lc=" + rx.cap( 1 ) + "&id=" + >- rx.cap( 2 ) + "&tw=" + rx.cap( 3 ) + "&cbid=" + rx.cap( 2 ) + "&da=passport.com&login=" + >- KURL::encode_string( m_account->accountId()) + "&domain=passport.com&passwd="; >- >- kdDebug( 14140 ) << k_funcinfo << "Download URL: " << authURL << "(*******)" << endl; >- >- m_authData = QString::null; >- m_kv=rx.cap(4); >- if(m_kv.isNull()) m_kv=""; >- >- authURL += KURL::encode_string( m_password ) ; >- job = KIO::get( KURL( authURL ), false, false ); >- job->addMetaData("cookies", "manual"); >- job->addMetaData("setcookies", cookies); >- job->addMetaData("cache", "reload"); >- >- QObject::connect( job, SIGNAL(data( KIO::Job *,const QByteArray&)), this, SLOT(slotAuthJobDataReceived( KIO::Job *,const QByteArray&)) ); >- QObject::connect( job, SIGNAL(result( KIO::Job *)), this, SLOT(slotAuthJobDone( KIO::Job *)) ); >- } >- else >- { >- if(m_authData.contains("CookiesDisabled")) >- { >- // FIXME: is this still possible now we add our meta data? - Martijn >- disconnect(); >- KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Error, >- i18n( "Unable to connect to the MSN Network.\nYour Web browser options are currently set to disable cookies.\n" >- "To use .NET Passport, you must enable cookies at least for the passport.com domain" ), i18n( "MSN Plugin" ) ); >- return; >- } >- >- QRegExp rx(/*URL=http://memberservices.passport.net/memberservice.srf*/"\\?did=[0-9]*&(t=[0-9A-Za-z!$*]*&p=[0-9A-Za-z!$*]*)\""); >- rx.search(m_authData); >- >- m_badPassword=true; //if this disconnect, that mean the password was bad >- sendCommand("USR" , "TWN S " + rx.cap(1)); >- } >+ m_badPassword = true; >+ disconnect(); >+} >+void MSNNotifySocket::sslLoginSucceeded(QString a) >+{ >+ sendCommand("USR" , "TWN S " + a); >+ m_sslLoginHandler->deleteLater(); >+ m_sslLoginHandler=0; > } > > >diff -U3 -r --new-file kdenetwork-3.4.0/kopete/protocols/msn/msnnotifysocket.h kdenetwork-3.4.0-new/kopete/protocols/msn/msnnotifysocket.h >--- kdenetwork-3.4.0/kopete/protocols/msn/msnnotifysocket.h 2005-02-23 12:30:54.000000000 +0200 >+++ kdenetwork-3.4.0-new/kopete/protocols/msn/msnnotifysocket.h 2005-05-19 18:08:01.000000000 +0300 >@@ -29,6 +29,7 @@ > class MSNDispatchSocket; > class MSNAccount; > class KTempFile; >+class SslLoginHandler; > > #include <kio/job.h> > >@@ -138,8 +139,9 @@ > > > >- void slotAuthJobDataReceived ( KIO::Job *, const QByteArray &data); >- void slotAuthJobDone ( KIO::Job *); >+ void sslLoginFailed(); >+ void sslLoginIncorrect(); >+ void sslLoginSucceeded(QString); > > > private: >@@ -170,7 +172,7 @@ > QString m_kv; > QString m_sid; > QString m_loginTime; >- QString m_authData; >+ SslLoginHandler *m_sslLoginHandler; > > QTimer *m_keepaliveTimer; > >diff -U3 -r --new-file kdenetwork-3.4.0/kopete/protocols/msn/msnsocket.cpp kdenetwork-3.4.0-new/kopete/protocols/msn/msnsocket.cpp >--- kdenetwork-3.4.0/kopete/protocols/msn/msnsocket.cpp 2005-02-23 12:30:54.000000000 +0200 >+++ kdenetwork-3.4.0-new/kopete/protocols/msn/msnsocket.cpp 2005-05-19 17:54:08.000000000 +0300 >@@ -133,7 +133,7 @@ > > void MSNSocket::slotSocketError( int error ) > { >- kdWarning( 14140 ) << k_funcinfo << "Error: " << error << endl; >+ kdWarning( 14140 ) << k_funcinfo << "Error: " << error << " (" << m_socket->errorString() << ")" << endl; > > if(!KSocketBase::isFatalError(error)) > return; >diff -U3 -r --new-file kdenetwork-3.4.0/kopete/protocols/msn/sslloginhandler.cpp kdenetwork-3.4.0-new/kopete/protocols/msn/sslloginhandler.cpp >--- kdenetwork-3.4.0/kopete/protocols/msn/sslloginhandler.cpp 1970-01-01 03:00:00.000000000 +0300 >+++ kdenetwork-3.4.0-new/kopete/protocols/msn/sslloginhandler.cpp 2005-05-19 18:10:06.000000000 +0300 >@@ -0,0 +1,453 @@ >+//Imported from KMess (2005-05-19) >+ >+/*************************************************************************** >+ sslloginhandler.cpp - description >+ ------------------- >+ begin : Sat Jun 28 2003 >+ copyright : (C) 2003 by Mike K. Bennett >+ email : mkb137b@hotmail.com >+ ***************************************************************************/ >+ >+/*************************************************************************** >+ * * >+ * This program is free software; you can redistribute it and/or modify * >+ * it under the terms of the GNU General Public License as published by * >+ * the Free Software Foundation; either version 2 of the License, or * >+ * (at your option) any later version. * >+ * * >+ ***************************************************************************/ >+ >+#include "sslloginhandler.h" >+ >+#include <qstringlist.h> >+#include <qregexp.h> >+#include <qsocket.h> >+#include <qurl.h> >+ >+#include <kdebug.h> >+#include <kextsock.h> >+#include <kssl.h> >+#include <kurl.h> >+ >+#if 0 >+#include "../kmessdebug.h" >+#include "mimemessage.h" >+#else >+//i didn't want to import the whole MimeMessage from Kmess for Kopete so i >+// reimplemented the base here -Olivier >+ >+class MimeMessage >+{ >+ public: >+ MimeMessage(const QString &msg) : message(msg) {} >+ >+ QString getValue(const QString &key) >+ { >+ QRegExp rx(key+": (.*)\n"); >+ rx.search(message); >+ return rx.cap(1); >+ } >+ private: >+ QString message; >+}; >+ >+#include "sslloginhandler.moc" >+#endif >+//there is nothing modified from here. this is exactly the kmerlin code >+ >+ >+ >+/* >+ * Great documentation about this can be found at >+ * http://siebe.bot2k3.net/docs/ >+ */ >+ >+ >+// The constructor >+SslLoginHandler::SslLoginHandler() >+ : mode_(NONE) >+{ >+ // Create the SSL handler >+ ssl_ = new KSSL( true ); >+ >+ // Create and set up the socket. >+ socket_ = new KExtendedSocket( ); >+ >+ //socket_->setSocketFlags( 0x00 | 0x600000 ); // 0x00 = anySocket | 0x600000 = bufferedSocket >+ socket_->setSocketFlags( 0x00 ); // 0x00 = anySocket | 0x600000 = bufferedSocket >+ socket_->setTimeout( 30 ); >+ socket_->enableRead( true ); >+ connect( socket_, SIGNAL( readyRead() ), >+ this, SLOT ( dataReceived() ) ); >+ connect( socket_, SIGNAL( connectionFailed(int) ), >+ this, SLOT ( socketError(int) ) ); >+} >+ >+ >+ >+// The destructor >+SslLoginHandler::~SslLoginHandler() >+{ >+ delete ssl_; >+ delete socket_; >+} >+ >+ >+ >+// Data was received over the socket >+void SslLoginHandler::dataReceived() >+{ >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - ******************** Data received ********************" << endl; >+ kdDebug() << "SslLoginHandler - " << socket_->bytesAvailable() << " bytes available." << endl; >+ kdDebug() << "SslLoginHandler - SSL says " << ssl_->pending() << " bytes available." << endl; >+#endif >+ >+ QString data; >+ int breakOut = 0; >+ const int maxIterations = 1000; >+ while ( ( !data.contains( QRegExp("\r\n") ) ) && ( breakOut < maxIterations ) ) >+ { >+ // Read data via SSL >+ data = readSslData(); >+ breakOut ++; >+ } >+ >+ // Output the data for debugging >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - ******************** Contents ********************" << endl; >+ kdDebug() << data << endl; >+ kdDebug() << "SslLoginHandler - ******************** End of data ********************" << endl; >+#endif >+ >+ // Warn if timed out >+ if ( breakOut >= maxIterations ) >+ { >+ kdDebug() << "WARNING - SSL read timed out." << endl; >+ emit loginFailed(); >+ return; >+ } >+ >+ if ( data.length() > 0 ) >+ { >+ parseHttpResponse(data); >+ } >+ else >+ { >+ kdDebug() << "WARNING - Available data wasn't read from the SSL socket." << endl; >+ emit loginFailed(); >+ } >+} >+ >+ >+ >+// Start the login process >+void SslLoginHandler::login( QString parameters, QString handle, QString password ) >+{ >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - Starting login with parameters " << parameters << "." << endl; >+#endif >+ >+ // Store the given data >+ authenticationParameters_ = parameters; >+ handle_ = handle; >+ password_ = password; >+ >+ // Get the login server >+ sendLoginServerRequest("nexus.passport.com"); >+ dataReceived(); >+} >+ >+ >+ >+// Get the authentication data from a string >+void SslLoginHandler::parseAuthenticationData( QString data ) >+{ >+ QString twnData; >+ >+ // Pull TWN data out of the message >+ twnData = data.right( data.length() - data.find(QRegExp("from-PP='")) - 9 ); >+ twnData = twnData.left( twnData.find(QRegExp("',")) ); >+ >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - data for TWN is " << twnData << "." << endl; >+#endif >+ >+ // Notify the MsnNotificationConnection >+ emit loginSucceeded(twnData); >+} >+ >+ >+ >+// Parse the HTTP response from the server >+void SslLoginHandler::parseHttpResponse(QString data) >+{ >+ KURL location; >+ int headerEnd; >+ QString header; >+ int headerCode; >+ QString headerText; >+ >+ // Parse the HTTP status header >+ QRegExp re("HTTP/\\d+\\.\\d+ (\\d+) ([^\r\n]+)"); >+ headerEnd = data.find("\r\n"); >+ header = data.left( (headerEnd == -1) ? 20 : headerEnd ); >+ >+ re.search(header); >+ headerCode = re.cap(1).toUInt(); >+ headerText = re.cap(2); >+ >+ // Create a MimeMessage, removing the HTTP status header >+ MimeMessage message( data.section( ",", 1 ) ); >+ >+ >+ switch(mode_) >+ { >+ case GETLOGINSERVER: >+ { >+ // Step 1. This data describes the login server to use. >+ if(headerCode == 302) >+ { >+ // HTTP Redirect >+ location = KURL( message.getValue( "Location" ) ); >+ sendLoginServerRequest(location.host()); >+ } >+ else >+ { >+ // Parse the data >+ QString loginServer; >+ QString page; >+ parseLoginServerData( loginServer, page, message.getValue("PassportURLs") ); >+ >+ // Send the authentication request >+ sendAuthenticationRequest( loginServer, page ); >+ } >+ break; >+ } >+ case GETAUTHENTICATIONDATA: >+ { >+ // Step 2. Get the authentication data >+ if(headerCode == 200) >+ { >+ // Login success >+ parseAuthenticationData(message.getValue("Authentication-Info")); >+ } >+ else if(headerCode == 302) >+ { >+ // HTTP Redirect >+ location = KURL( message.getValue( "Location" ) ); >+ sendAuthenticationRequest(location.host(), location.path()); >+ } >+ else if(headerCode == 401) >+ { >+ // Got a HTTP "401 Unauthorized"; Login failed >+ emit loginIncorrect(); >+ } >+ else >+ { >+ kdDebug() << "SslLoginHandler::parseHttpResponse: WARNING " >+ << "- Unhandled response code " << headerCode << " " << headerText << endl; >+ emit loginFailed(); >+ } >+ break; >+ } >+ default: >+ { >+ kdDebug() << "SslLoginHandler::parseHttpResponse: WARNING - Entered illegal state" << endl; >+ emit loginFailed(); >+ } >+ } >+} >+ >+ >+// Get login server data from a string >+void SslLoginHandler::parseLoginServerData( QString &host, QString &page, QString serverData ) >+{ >+ int slashIndex; >+ >+ // Get everything between "DLLogin=" and to the comma. >+ serverData = serverData.right( serverData.length() - serverData.find( "DALogin=" ) - 8 ); >+ serverData = serverData.left( serverData.find( "," ) ); >+ >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - host/page=" << serverData << endl; >+#endif >+ >+ // Separate the "host/page" string. >+ slashIndex = serverData.find( "/" ); >+ host = serverData.left( slashIndex ); >+ page = serverData.right( serverData.length() - slashIndex ); >+ >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - host=" << host << " page=" << page << endl; >+#endif >+} >+ >+ >+ >+// Read data from the socket via SSL >+QString SslLoginHandler::readSslData() >+{ >+ char rawblock[1024]; >+ QCString block; >+ QString data = ""; >+ int noBytesRead = 1; >+ >+ // Read data from the SSL socket. >+ if ( ssl_ != 0 ) >+ { >+// while( ( ssl_->pending() > 0 ) && ( noBytesRead > 0 ) ) >+// while( ( socket_->bytesAvailable() > 0 ) && ( noBytesRead > 0 ) ) >+ while(noBytesRead > 0) >+ { >+ noBytesRead = ssl_->read( rawblock, 1024 ); >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - " << noBytesRead << " bytes read." << endl; >+#endif >+ block = rawblock; >+ block = block.left( noBytesRead ); >+ data += QString::fromUtf8( block ); >+ } >+ } >+ >+ return data; >+} >+ >+ >+ >+// Send the authenticationn request >+void SslLoginHandler::sendAuthenticationRequest( QString loginServer, QString page ) >+{ >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - Step 2. Requesting authentication data." << endl; >+#endif >+ >+ QString request; >+ QString encodedHandle = handle_; >+ QString encodedPassword = password_; >+ >+ QUrl::encode(encodedHandle); >+ QUrl::encode(encodedPassword); >+ >+ request = "GET " + page + " HTTP/1.1\r\n" >+ "Authorization: Passport1.4" >+ " OrgVerb=GET" >+ ",OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom" >+ ",sign-in=" + encodedHandle + >+ ",pwd=" + encodedPassword + >+ "," + authenticationParameters_ + "\r\n" >+ "User-Agent: MSMSGS\r\n" // Make sure the server won't discriminate >+ "Host: " + loginServer + "\r\n" >+ "Connection: Keep-Alive\r\n" >+ "Cache-Control: no-cache\r\n\r\n"; >+ >+ // Step 2. Send the authorisation request >+ mode_ = GETAUTHENTICATIONDATA; >+ sendHttpRequest( request, loginServer, 443 ); >+} >+ >+ >+ >+// Send a HTTP request to the server >+void SslLoginHandler::sendHttpRequest( QString request, QString host, int port ) >+{ >+ QString response; >+ QString responseBody; >+ >+ if ( socket_ == 0 ) >+ { >+ kdDebug() << "SslLoginHandler::sendHttpRequest - WARNING " >+ << "- Trying to login using a null socket." << endl; >+ return; >+ } >+ >+ // Configure the socket >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - Close and reset the socket." << endl; >+#endif >+ ssl_->setAutoReconfig( true ); >+ ssl_->reInitialize(); >+ socket_->closeNow(); >+ socket_->reset(); >+ >+ // Try to connect >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - Connecting to " << host << ":" << port << "." << endl; >+#endif >+ socket_->setAddress( host, port ); >+ socket_->lookup(); >+ int connectionSuccess = socket_->connect(); >+ if ( connectionSuccess != 0 ) >+ { >+ kdDebug() << "SslLoginHandler::sendHttpRequest - WARNING " >+ << "- Connection failed, giving " << connectionSuccess << endl; >+ return; >+ } >+ >+ // Try to wrap the SSL handler >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - Connection success, binding SSL to socket fd " << socket_->fd() << endl; >+#endif >+ int sslConnectionSuccess = ssl_->connect( socket_->fd() ); >+ if ( sslConnectionSuccess != 1 ) >+ { >+ kdDebug() << "SslLoginHandler::sendHttpRequest - WARNING " >+ << "- SSL Connection failed, giving " << sslConnectionSuccess << endl; >+ return; >+ } >+ >+ // Send the request >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - SSL connected OK, sending the request." << endl; >+ kdDebug() << request; >+#endif >+ writeSslData( request ); >+} >+ >+ >+ >+// Request the name of the login server >+void SslLoginHandler::sendLoginServerRequest(QString hostname) >+{ >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ kdDebug() << "SslLoginHandler - Step 1. Requesting the login server." << endl; >+#endif >+ >+ // Step 1. Send the login server request >+ // The server will respond with the location of the main SSL server. >+ mode_ = GETLOGINSERVER; >+ sendHttpRequest( "GET /rdr/pprdr.asp\r\n\r\n", hostname, 443 ); >+} >+ >+ >+ >+// Detect a socket error >+void SslLoginHandler::socketError(int error) >+{ >+ kdDebug() << "SslLoginHandler : WARNING - Received error " << error << " from the socket." << endl; >+} >+ >+ >+ >+// Write data to the socket via SSL >+void SslLoginHandler::writeSslData( QString data ) >+{ >+ int noBytesWritten; >+ >+ if(socket_ != 0 && ssl_ != 0) >+ { >+ noBytesWritten = ssl_->write( data.latin1(), data.length() ); >+ if(noBytesWritten != (int)data.length()) >+ { >+ kdDebug() << "WARNING - Wanted to write " << data.length() << " to the socket, " >+ << " wrote " << noBytesWritten << "." << endl; >+ } >+#ifdef KMESSDEBUG_SSLLOGINHANDLER >+ else >+ { >+ kdDebug() << "SslLoginHandler - Sent " << noBytesWritten << " bytes via SSL." << endl; >+ } >+#endif >+ } >+} >+ >diff -U3 -r --new-file kdenetwork-3.4.0/kopete/protocols/msn/sslloginhandler.h kdenetwork-3.4.0-new/kopete/protocols/msn/sslloginhandler.h >--- kdenetwork-3.4.0/kopete/protocols/msn/sslloginhandler.h 1970-01-01 03:00:00.000000000 +0300 >+++ kdenetwork-3.4.0-new/kopete/protocols/msn/sslloginhandler.h 2005-05-19 18:10:06.000000000 +0300 >@@ -0,0 +1,96 @@ >+//Imported from KMess - 2005-05-19 >+ >+/*************************************************************************** >+ sslloginhandler.h - description >+ ------------------- >+ begin : Sat Jun 28 2003 >+ copyright : (C) 2003 by Mike K. Bennett >+ email : mkb137b@hotmail.com >+ ***************************************************************************/ >+ >+/*************************************************************************** >+ * * >+ * This program is free software; you can redistribute it and/or modify * >+ * it under the terms of the GNU General Public License as published by * >+ * the Free Software Foundation; either version 2 of the License, or * >+ * (at your option) any later version. * >+ * * >+ ***************************************************************************/ >+ >+#ifndef SSLLOGINHANDLER_H >+#define SSLLOGINHANDLER_H >+ >+#include <qobject.h> >+#include <qstringlist.h> >+ >+// Forward declarations >+class KExtendedSocket; >+class KSSL; >+class MimeMessage; >+ >+/**This class handles the SSL portion of the login. >+ *@author Mike K. Bennett >+ */ >+ >+class SslLoginHandler : public QObject >+{ >+ Q_OBJECT >+ >+ public: >+ // The constructor >+ SslLoginHandler(); >+ // The destructor >+ ~SslLoginHandler(); >+ // Start the login process >+ void login( QString parameters, QString handle, QString password ); >+ >+ private : // Private methods >+ // Get the authentication data from a string >+ void parseAuthenticationData( QString data ); >+ // Parse the HTTP response from the server >+ void parseHttpResponse(QString data); >+ // Get login server data from a string >+ void parseLoginServerData( QString &host, QString &page, QString serverData ); >+ // Read data from the socket via SSL >+ QString readSslData(); >+ // Send the authenticationn request >+ void sendAuthenticationRequest( QString loginServer, QString page ); >+ // Send a HTTP request to the server >+ void sendHttpRequest( QString request, QString host, int port ); >+ // Request the name of the login server >+ void sendLoginServerRequest(QString hostname); >+ // Write data to the socket via SSL >+ void writeSslData( QString data ); >+ >+ private slots : // Private slots >+ // Data was received over the socket >+ void dataReceived(); >+ // Detect a socket error >+ void socketError(int error); >+ >+ private : // Private attributes >+ // The mode of the transfer. >+ enum Mode { NONE = 0, GETLOGINSERVER = 1, GETAUTHENTICATIONDATA = 2 } mode_; >+ // The list of parameters sent by the notification server >+ QString authenticationParameters_; >+ // The cookies we received from the server >+ QStringList cookies_; >+ // The user's handle >+ QString handle_; >+ // The user's password >+ QString password_; >+ // The socket over which the SSL data is written and read >+ KExtendedSocket *socket_; >+ // The SSL handler >+ KSSL *ssl_; >+ >+ signals : // Public signals >+ // Signal that the login was aborted because an internal error occured >+ void loginFailed(); >+ // Signal that the login failed, username/password was incorrect >+ void loginIncorrect(); >+ // Signal that the login succeeded >+ void loginSucceeded( QString authentication ); >+}; >+ >+#endif
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 93213
:
59321
|
59324
|
59329
|
59330
|
59348
|
59387
|
59447
|
59448
|
59476
|
59589
|
59678