diff options
author | lofi <lofi@FreeBSD.org> | 2005-05-23 19:06:42 +0800 |
---|---|---|
committer | lofi <lofi@FreeBSD.org> | 2005-05-23 19:06:42 +0800 |
commit | bf2ff73b4b377baa19ef1776f7aa649959d10542 (patch) | |
tree | d60db5a7241bc3875be0a5154dc7868efb850110 /net | |
parent | 884bcb83405eb9c8324fdca12dc75714347df471 (diff) | |
download | freebsd-ports-gnome-bf2ff73b4b377baa19ef1776f7aa649959d10542.tar.gz freebsd-ports-gnome-bf2ff73b4b377baa19ef1776f7aa649959d10542.tar.zst freebsd-ports-gnome-bf2ff73b4b377baa19ef1776f7aa649959d10542.zip |
Fix Kopete's MSN support to work with MSN's most recent protocol changes.
PR: ports/81368
Submitted by: Nicolas Blais <nb_root@videotron.ca>
Diffstat (limited to 'net')
16 files changed, 2000 insertions, 2 deletions
diff --git a/net/kdenetwork3/Makefile b/net/kdenetwork3/Makefile index 0910c9ae4395..e2dfe0c39ee5 100644 --- a/net/kdenetwork3/Makefile +++ b/net/kdenetwork3/Makefile @@ -8,7 +8,7 @@ PORTNAME= kdenetwork PORTVERSION= ${KDE_VERSION} -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES?= net kde MASTER_SITES= ${MASTER_SITE_KDE} MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src @@ -35,6 +35,7 @@ GNU_CONFIGURE= yes INSTALLS_SHLIB= yes LDCONFIG_DIRS+= %%PREFIX%%/lib %%PREFIX%%/lib/kde3 DO_NOT_COMPILE+=lanbrowsing +_NO_KDE_FINAL= yes .if defined(DO_NOT_COMPILE) CONFIGURE_ENV+=DO_NOT_COMPILE="${DO_NOT_COMPILE}" diff --git a/net/kdenetwork3/files/patch-kopete_protocols_msn_Makefile.in b/net/kdenetwork3/files/patch-kopete_protocols_msn_Makefile.in new file mode 100644 index 000000000000..bc34d0a8848e --- /dev/null +++ b/net/kdenetwork3/files/patch-kopete_protocols_msn_Makefile.in @@ -0,0 +1,96 @@ +--- kopete/protocols/msn/Makefile.in.orig Fri Mar 4 07:37:18 2005 ++++ kopete/protocols/msn/Makefile.in Sun May 22 18:06:23 2005 +@@ -75,7 +75,7 @@ + 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 +85,7 @@ + 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 +469,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 +620,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 $@ $<; \ +@@ -1054,6 +1055,13 @@ + mocs: msnnotifysocket.moc + + #>+ 3 ++sslloginhandler.moc: $(srcdir)/sslloginhandler.h ++ $(MOC) $(srcdir)/sslloginhandler.h -o sslloginhandler.moc ++ ++#>+ 2 ++mocs: sslloginhandler.moc ++ ++#>+ 3 + msnp2poutgoing.moc: $(srcdir)/msnp2poutgoing.h + $(MOC) $(srcdir)/msnp2poutgoing.h -o msnp2poutgoing.moc + +@@ -1092,10 +1100,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 sslloginhandler.moc msnp2poutgoing.moc msnp2p.moc msnp2pincoming.moc msnaddcontactpage.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 +1151,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 sslloginhandler.moc msnp2p.moc msnp2poutgoing.moc msnaddcontactpage.moc msnp2pincoming.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; \ +@@ -1195,7 +1203,8 @@ + msnmessagemanager.o: msnmessagemanager.moc + msnswitchboardsocket.o: msnswitchboardsocket.moc + msnp2pincoming.lo: msnp2pincoming.moc +-msnnotifysocket.lo: msnnotifysocket.moc ++msnnotifysocket.lo: msnnotifysocket.moc ++sslloginhandler.lo: sslloginhandler.moc + msncontact.o: msncontact.moc + msnp2p.lo: msnp2p.moc + msnfiletransfersocket.o: msnfiletransfersocket.moc +@@ -1206,6 +1215,7 @@ + msndebugrawcmddlg.lo: msndebugrawcmddlg.moc + msnsocket.o: msnsocket.moc + msnnotifysocket.o: msnnotifysocket.moc ++sslloginhandler.o: sslloginhandler.moc + msnaddcontactpage.o: msnaddcontactpage.moc + nmcheck: + msnp2poutgoing.o: msnp2poutgoing.moc diff --git a/net/kdenetwork3/files/patch-kopete_protocols_msn_msnnotifysocket.cpp b/net/kdenetwork3/files/patch-kopete_protocols_msn_msnnotifysocket.cpp new file mode 100644 index 000000000000..6b7ef416641f --- /dev/null +++ b/net/kdenetwork3/files/patch-kopete_protocols_msn_msnnotifysocket.cpp @@ -0,0 +1,240 @@ +--- kopete/protocols/msn/msnnotifysocket.cpp Wed Feb 23 05:30:54 2005 ++++ kopete/protocols/msn/msnnotifysocket.cpp Sun May 22 13:33:31 2005 +@@ -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; + +@@ -59,12 +61,11 @@ + + m_keepaliveTimer = new QTimer( this, "m_keepaliveTimer" ); + QObject::connect( m_keepaliveTimer, SIGNAL( timeout() ), SLOT( slotSendKeepAlive() ) ); +- +- QObject::connect( this, SIGNAL( commandSent() ), SLOT( slotResetKeepAlive() ) ); + } + + MSNNotifySocket::~MSNNotifySocket() + { ++ delete m_sslLoginHandler; + kdDebug(14140) << k_funcinfo << endl; + } + +@@ -203,11 +204,13 @@ + } + case 715: + { ++ /* + //if(handlev==m_account->accountId()) + QString msg = i18n( "Your email address has not been verified with the MSN server.\n" + "You should have received a mail with a link to confirm your email address.\n" + "Some functions will be restricted if you do not confirm your email address." ); + KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, msg, i18n( "MSN Plugin" ) );//TODO don't show again ++ */ + break; + } + case 800: +@@ -245,10 +248,10 @@ + { + //kdDebug(14140) << "MSNNotifySocket::parseCommand: Command: " << cmd << endl; + +- ++ + 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; +- +- 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; ++ 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) ) ); + +- 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 + { +@@ -301,6 +293,9 @@ + // do some nice things with it :-) + QString publicName = unescape( data.section( ' ', 2, 2 ) ); + emit publicNameChanged( publicName ); ++ ++ // We are connected start to ping ++ slotSendKeepAlive(); + } + } + else if( cmd == "LST" ) +@@ -355,9 +350,9 @@ + } + else if( cmd == "XFR" ) + { +- QString stype=data.section( ' ', 0, 0 ); ++ QString stype=data.section( ' ', 0, 0 ); + if( stype=="SB" ) //switchboard connection (chat) +- { ++ { + // Address, AuthInfo + emit startChat( data.section( ' ', 1, 1 ), data.section( ' ', 3, 3 ) ); + } +@@ -370,7 +365,7 @@ + emit receivedNotificationServer( server, port ); + disconnect(); + } +- ++ + } + else if( cmd == "RNG" ) + { +@@ -526,6 +521,10 @@ + { + //this is a reply from a ping + m_ping=false; ++ ++ // id is the timeout in fact, and we remove 5% of it ++ m_keepaliveTimer->start( id * 950, true ); ++ kdDebug( 14140 ) << k_funcinfo << "timerTimeout=" << id << "sec"<< endl; + } + else if( cmd == "URL" ) + { +@@ -582,76 +581,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; + } + + +@@ -893,13 +836,6 @@ + //at least 90 second has been ellapsed since the last messages + // we shouldn't receive error from theses command anymore + m_tmpHandles.clear(); +-} +- +-void MSNNotifySocket::slotResetKeepAlive() +-{ +- // Fire the timer every 90 seconds. QTimer will reset a running timer +- // on a subsequent call if there has been activity again. +- m_keepaliveTimer->start( 90000 ); + } + + Kopete::OnlineStatus MSNNotifySocket::convertOnlineStatus( const QString &status ) diff --git a/net/kdenetwork3/files/patch-kopete_protocols_msn_msnnotifysocket.h b/net/kdenetwork3/files/patch-kopete_protocols_msn_msnnotifysocket.h new file mode 100644 index 000000000000..a19d68354a5a --- /dev/null +++ b/net/kdenetwork3/files/patch-kopete_protocols_msn_msnnotifysocket.h @@ -0,0 +1,73 @@ +--- kopete/protocols/msn/msnnotifysocket.h Wed Feb 23 05:30:54 2005 ++++ kopete/protocols/msn/msnnotifysocket.h Sun May 22 13:33:31 2005 +@@ -29,6 +29,7 @@ + class MSNDispatchSocket; + class MSNAccount; + class KTempFile; ++class SslLoginHandler; + + #include <kio/job.h> + +@@ -62,7 +63,7 @@ + void createChatSession(); + + void sendMail(const QString &email); +- ++ + bool badPassword() { return m_badPassword; } + + public slots: +@@ -88,8 +89,8 @@ + void statusChanged( const Kopete::OnlineStatus &newStatus ); + + void hotmailSeted(bool) ; +- +- ++ ++ + /** + * When the dispatch server sends us the notification server to use, this + * signal is emitted. After this the socket is automatically closed. +@@ -109,7 +110,7 @@ + * This reimplementation handles most of the other MSN error codes. + */ + virtual void handleError( uint code, uint id ); +- ++ + /** + * This reimplementation sets up the negotiating with the server and + * suppresses the change of the status to online until the handshake +@@ -131,15 +132,9 @@ + */ + void slotSendKeepAlive(); + +- /** +- * Reset the keepalive time after the socket has sent a command. +- */ +- void slotResetKeepAlive(); +- +- +- +- void slotAuthJobDataReceived ( KIO::Job *, const QByteArray &data); +- void slotAuthJobDone ( KIO::Job *); ++ void sslLoginFailed(); ++ void sslLoginIncorrect(); ++ void sslLoginSucceeded(QString); + + + private: +@@ -170,12 +165,12 @@ + QString m_kv; + QString m_sid; + QString m_loginTime; +- QString m_authData; ++ SslLoginHandler *m_sslLoginHandler; + + QTimer *m_keepaliveTimer; + + bool m_ping; +- ++ + bool m_badPassword; + }; + diff --git a/net/kdenetwork3/files/patch-kopete_protocols_msn_msnsocket.cpp b/net/kdenetwork3/files/patch-kopete_protocols_msn_msnsocket.cpp new file mode 100644 index 000000000000..8d48bb73f34f --- /dev/null +++ b/net/kdenetwork3/files/patch-kopete_protocols_msn_msnsocket.cpp @@ -0,0 +1,19 @@ +--- kopete/protocols/msn/msnsocket.cpp Wed Feb 23 05:30:54 2005 ++++ kopete/protocols/msn/msnsocket.cpp Sun May 22 13:33:31 2005 +@@ -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; +@@ -467,7 +467,6 @@ + kdDebug( 14141 ) << k_funcinfo << "Sending command: " << QString( *it ).stripWhiteSpace() << endl; + m_socket->writeBlock( *it, ( *it ).length() ); + m_sendQueue.remove( it ); +- emit commandSent(); + + // If the queue is empty again stop waiting for readyWrite signals + // because of the CPU usage diff --git a/net/kdenetwork3/files/patch-kopete_protocols_msn_msnsocket.h b/net/kdenetwork3/files/patch-kopete_protocols_msn_msnsocket.h new file mode 100644 index 000000000000..097eb37bf1a9 --- /dev/null +++ b/net/kdenetwork3/files/patch-kopete_protocols_msn_msnsocket.h @@ -0,0 +1,15 @@ +--- kopete/protocols/msn/msnsocket.h Sun Nov 21 22:58:55 2004 ++++ kopete/protocols/msn/msnsocket.h Sun May 22 13:33:31 2005 +@@ -124,12 +124,6 @@ + */ + void socketClosed(); + +- /** +- * The socket just sent a command from the queue. This signal is used in +- * the notify socket to reset the keepalive timer. +- */ +- void commandSent(); +- + protected: + /** + * Convenience method: escape spaces with '%20' for use in the protocol. diff --git a/net/kdenetwork3/files/patch-kopete_protocols_msn_sslloginhandler.cpp b/net/kdenetwork3/files/patch-kopete_protocols_msn_sslloginhandler.cpp new file mode 100644 index 000000000000..8a54759f8caf --- /dev/null +++ b/net/kdenetwork3/files/patch-kopete_protocols_msn_sslloginhandler.cpp @@ -0,0 +1,456 @@ +--- kopete/protocols/msn/sslloginhandler.cpp Sun May 22 14:01:55 2005 ++++ kopete/protocols/msn/sslloginhandler.cpp Sun May 22 13:33:31 2005 +@@ -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 --git a/net/kdenetwork3/files/patch-kopete_protocols_msn_sslloginhandler.h b/net/kdenetwork3/files/patch-kopete_protocols_msn_sslloginhandler.h new file mode 100644 index 000000000000..6db049033933 --- /dev/null +++ b/net/kdenetwork3/files/patch-kopete_protocols_msn_sslloginhandler.h @@ -0,0 +1,99 @@ +--- kopete/protocols/msn/sslloginhandler.h Sun May 22 14:01:56 2005 ++++ kopete/protocols/msn/sslloginhandler.h Sun May 22 13:33:31 2005 +@@ -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 diff --git a/net/kdenetwork4/Makefile b/net/kdenetwork4/Makefile index 0910c9ae4395..e2dfe0c39ee5 100644 --- a/net/kdenetwork4/Makefile +++ b/net/kdenetwork4/Makefile @@ -8,7 +8,7 @@ PORTNAME= kdenetwork PORTVERSION= ${KDE_VERSION} -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES?= net kde MASTER_SITES= ${MASTER_SITE_KDE} MASTER_SITE_SUBDIR= stable/${PORTVERSION:S/.0//}/src @@ -35,6 +35,7 @@ GNU_CONFIGURE= yes INSTALLS_SHLIB= yes LDCONFIG_DIRS+= %%PREFIX%%/lib %%PREFIX%%/lib/kde3 DO_NOT_COMPILE+=lanbrowsing +_NO_KDE_FINAL= yes .if defined(DO_NOT_COMPILE) CONFIGURE_ENV+=DO_NOT_COMPILE="${DO_NOT_COMPILE}" diff --git a/net/kdenetwork4/files/patch-kopete_protocols_msn_Makefile.in b/net/kdenetwork4/files/patch-kopete_protocols_msn_Makefile.in new file mode 100644 index 000000000000..bc34d0a8848e --- /dev/null +++ b/net/kdenetwork4/files/patch-kopete_protocols_msn_Makefile.in @@ -0,0 +1,96 @@ +--- kopete/protocols/msn/Makefile.in.orig Fri Mar 4 07:37:18 2005 ++++ kopete/protocols/msn/Makefile.in Sun May 22 18:06:23 2005 +@@ -75,7 +75,7 @@ + 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 +85,7 @@ + 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 +469,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 +620,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 $@ $<; \ +@@ -1054,6 +1055,13 @@ + mocs: msnnotifysocket.moc + + #>+ 3 ++sslloginhandler.moc: $(srcdir)/sslloginhandler.h ++ $(MOC) $(srcdir)/sslloginhandler.h -o sslloginhandler.moc ++ ++#>+ 2 ++mocs: sslloginhandler.moc ++ ++#>+ 3 + msnp2poutgoing.moc: $(srcdir)/msnp2poutgoing.h + $(MOC) $(srcdir)/msnp2poutgoing.h -o msnp2poutgoing.moc + +@@ -1092,10 +1100,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 sslloginhandler.moc msnp2poutgoing.moc msnp2p.moc msnp2pincoming.moc msnaddcontactpage.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 +1151,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 sslloginhandler.moc msnp2p.moc msnp2poutgoing.moc msnaddcontactpage.moc msnp2pincoming.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; \ +@@ -1195,7 +1203,8 @@ + msnmessagemanager.o: msnmessagemanager.moc + msnswitchboardsocket.o: msnswitchboardsocket.moc + msnp2pincoming.lo: msnp2pincoming.moc +-msnnotifysocket.lo: msnnotifysocket.moc ++msnnotifysocket.lo: msnnotifysocket.moc ++sslloginhandler.lo: sslloginhandler.moc + msncontact.o: msncontact.moc + msnp2p.lo: msnp2p.moc + msnfiletransfersocket.o: msnfiletransfersocket.moc +@@ -1206,6 +1215,7 @@ + msndebugrawcmddlg.lo: msndebugrawcmddlg.moc + msnsocket.o: msnsocket.moc + msnnotifysocket.o: msnnotifysocket.moc ++sslloginhandler.o: sslloginhandler.moc + msnaddcontactpage.o: msnaddcontactpage.moc + nmcheck: + msnp2poutgoing.o: msnp2poutgoing.moc diff --git a/net/kdenetwork4/files/patch-kopete_protocols_msn_msnnotifysocket.cpp b/net/kdenetwork4/files/patch-kopete_protocols_msn_msnnotifysocket.cpp new file mode 100644 index 000000000000..6b7ef416641f --- /dev/null +++ b/net/kdenetwork4/files/patch-kopete_protocols_msn_msnnotifysocket.cpp @@ -0,0 +1,240 @@ +--- kopete/protocols/msn/msnnotifysocket.cpp Wed Feb 23 05:30:54 2005 ++++ kopete/protocols/msn/msnnotifysocket.cpp Sun May 22 13:33:31 2005 +@@ -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; + +@@ -59,12 +61,11 @@ + + m_keepaliveTimer = new QTimer( this, "m_keepaliveTimer" ); + QObject::connect( m_keepaliveTimer, SIGNAL( timeout() ), SLOT( slotSendKeepAlive() ) ); +- +- QObject::connect( this, SIGNAL( commandSent() ), SLOT( slotResetKeepAlive() ) ); + } + + MSNNotifySocket::~MSNNotifySocket() + { ++ delete m_sslLoginHandler; + kdDebug(14140) << k_funcinfo << endl; + } + +@@ -203,11 +204,13 @@ + } + case 715: + { ++ /* + //if(handlev==m_account->accountId()) + QString msg = i18n( "Your email address has not been verified with the MSN server.\n" + "You should have received a mail with a link to confirm your email address.\n" + "Some functions will be restricted if you do not confirm your email address." ); + KMessageBox::queuedMessageBox( Kopete::UI::Global::mainWidget(), KMessageBox::Sorry, msg, i18n( "MSN Plugin" ) );//TODO don't show again ++ */ + break; + } + case 800: +@@ -245,10 +248,10 @@ + { + //kdDebug(14140) << "MSNNotifySocket::parseCommand: Command: " << cmd << endl; + +- ++ + 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; +- +- 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; ++ 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) ) ); + +- 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 + { +@@ -301,6 +293,9 @@ + // do some nice things with it :-) + QString publicName = unescape( data.section( ' ', 2, 2 ) ); + emit publicNameChanged( publicName ); ++ ++ // We are connected start to ping ++ slotSendKeepAlive(); + } + } + else if( cmd == "LST" ) +@@ -355,9 +350,9 @@ + } + else if( cmd == "XFR" ) + { +- QString stype=data.section( ' ', 0, 0 ); ++ QString stype=data.section( ' ', 0, 0 ); + if( stype=="SB" ) //switchboard connection (chat) +- { ++ { + // Address, AuthInfo + emit startChat( data.section( ' ', 1, 1 ), data.section( ' ', 3, 3 ) ); + } +@@ -370,7 +365,7 @@ + emit receivedNotificationServer( server, port ); + disconnect(); + } +- ++ + } + else if( cmd == "RNG" ) + { +@@ -526,6 +521,10 @@ + { + //this is a reply from a ping + m_ping=false; ++ ++ // id is the timeout in fact, and we remove 5% of it ++ m_keepaliveTimer->start( id * 950, true ); ++ kdDebug( 14140 ) << k_funcinfo << "timerTimeout=" << id << "sec"<< endl; + } + else if( cmd == "URL" ) + { +@@ -582,76 +581,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; + } + + +@@ -893,13 +836,6 @@ + //at least 90 second has been ellapsed since the last messages + // we shouldn't receive error from theses command anymore + m_tmpHandles.clear(); +-} +- +-void MSNNotifySocket::slotResetKeepAlive() +-{ +- // Fire the timer every 90 seconds. QTimer will reset a running timer +- // on a subsequent call if there has been activity again. +- m_keepaliveTimer->start( 90000 ); + } + + Kopete::OnlineStatus MSNNotifySocket::convertOnlineStatus( const QString &status ) diff --git a/net/kdenetwork4/files/patch-kopete_protocols_msn_msnnotifysocket.h b/net/kdenetwork4/files/patch-kopete_protocols_msn_msnnotifysocket.h new file mode 100644 index 000000000000..a19d68354a5a --- /dev/null +++ b/net/kdenetwork4/files/patch-kopete_protocols_msn_msnnotifysocket.h @@ -0,0 +1,73 @@ +--- kopete/protocols/msn/msnnotifysocket.h Wed Feb 23 05:30:54 2005 ++++ kopete/protocols/msn/msnnotifysocket.h Sun May 22 13:33:31 2005 +@@ -29,6 +29,7 @@ + class MSNDispatchSocket; + class MSNAccount; + class KTempFile; ++class SslLoginHandler; + + #include <kio/job.h> + +@@ -62,7 +63,7 @@ + void createChatSession(); + + void sendMail(const QString &email); +- ++ + bool badPassword() { return m_badPassword; } + + public slots: +@@ -88,8 +89,8 @@ + void statusChanged( const Kopete::OnlineStatus &newStatus ); + + void hotmailSeted(bool) ; +- +- ++ ++ + /** + * When the dispatch server sends us the notification server to use, this + * signal is emitted. After this the socket is automatically closed. +@@ -109,7 +110,7 @@ + * This reimplementation handles most of the other MSN error codes. + */ + virtual void handleError( uint code, uint id ); +- ++ + /** + * This reimplementation sets up the negotiating with the server and + * suppresses the change of the status to online until the handshake +@@ -131,15 +132,9 @@ + */ + void slotSendKeepAlive(); + +- /** +- * Reset the keepalive time after the socket has sent a command. +- */ +- void slotResetKeepAlive(); +- +- +- +- void slotAuthJobDataReceived ( KIO::Job *, const QByteArray &data); +- void slotAuthJobDone ( KIO::Job *); ++ void sslLoginFailed(); ++ void sslLoginIncorrect(); ++ void sslLoginSucceeded(QString); + + + private: +@@ -170,12 +165,12 @@ + QString m_kv; + QString m_sid; + QString m_loginTime; +- QString m_authData; ++ SslLoginHandler *m_sslLoginHandler; + + QTimer *m_keepaliveTimer; + + bool m_ping; +- ++ + bool m_badPassword; + }; + diff --git a/net/kdenetwork4/files/patch-kopete_protocols_msn_msnsocket.cpp b/net/kdenetwork4/files/patch-kopete_protocols_msn_msnsocket.cpp new file mode 100644 index 000000000000..8d48bb73f34f --- /dev/null +++ b/net/kdenetwork4/files/patch-kopete_protocols_msn_msnsocket.cpp @@ -0,0 +1,19 @@ +--- kopete/protocols/msn/msnsocket.cpp Wed Feb 23 05:30:54 2005 ++++ kopete/protocols/msn/msnsocket.cpp Sun May 22 13:33:31 2005 +@@ -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; +@@ -467,7 +467,6 @@ + kdDebug( 14141 ) << k_funcinfo << "Sending command: " << QString( *it ).stripWhiteSpace() << endl; + m_socket->writeBlock( *it, ( *it ).length() ); + m_sendQueue.remove( it ); +- emit commandSent(); + + // If the queue is empty again stop waiting for readyWrite signals + // because of the CPU usage diff --git a/net/kdenetwork4/files/patch-kopete_protocols_msn_msnsocket.h b/net/kdenetwork4/files/patch-kopete_protocols_msn_msnsocket.h new file mode 100644 index 000000000000..097eb37bf1a9 --- /dev/null +++ b/net/kdenetwork4/files/patch-kopete_protocols_msn_msnsocket.h @@ -0,0 +1,15 @@ +--- kopete/protocols/msn/msnsocket.h Sun Nov 21 22:58:55 2004 ++++ kopete/protocols/msn/msnsocket.h Sun May 22 13:33:31 2005 +@@ -124,12 +124,6 @@ + */ + void socketClosed(); + +- /** +- * The socket just sent a command from the queue. This signal is used in +- * the notify socket to reset the keepalive timer. +- */ +- void commandSent(); +- + protected: + /** + * Convenience method: escape spaces with '%20' for use in the protocol. diff --git a/net/kdenetwork4/files/patch-kopete_protocols_msn_sslloginhandler.cpp b/net/kdenetwork4/files/patch-kopete_protocols_msn_sslloginhandler.cpp new file mode 100644 index 000000000000..8a54759f8caf --- /dev/null +++ b/net/kdenetwork4/files/patch-kopete_protocols_msn_sslloginhandler.cpp @@ -0,0 +1,456 @@ +--- kopete/protocols/msn/sslloginhandler.cpp Sun May 22 14:01:55 2005 ++++ kopete/protocols/msn/sslloginhandler.cpp Sun May 22 13:33:31 2005 +@@ -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 --git a/net/kdenetwork4/files/patch-kopete_protocols_msn_sslloginhandler.h b/net/kdenetwork4/files/patch-kopete_protocols_msn_sslloginhandler.h new file mode 100644 index 000000000000..6db049033933 --- /dev/null +++ b/net/kdenetwork4/files/patch-kopete_protocols_msn_sslloginhandler.h @@ -0,0 +1,99 @@ +--- kopete/protocols/msn/sslloginhandler.h Sun May 22 14:01:56 2005 ++++ kopete/protocols/msn/sslloginhandler.h Sun May 22 13:33:31 2005 +@@ -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 |