summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlofi <lofi@FreeBSD.org>2005-05-23 11:06:42 +0000
committerlofi <lofi@FreeBSD.org>2005-05-23 11:06:42 +0000
commitbf2ff73b4b377baa19ef1776f7aa649959d10542 (patch)
treed60db5a7241bc3875be0a5154dc7868efb850110
parent884bcb83405eb9c8324fdca12dc75714347df471 (diff)
downloadFreeBSD-ports-bf2ff73b4b377baa19ef1776f7aa649959d10542.zip
FreeBSD-ports-bf2ff73b4b377baa19ef1776f7aa649959d10542.tar.gz
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>
-rw-r--r--net/kdenetwork3/Makefile3
-rw-r--r--net/kdenetwork3/files/patch-kopete_protocols_msn_Makefile.in96
-rw-r--r--net/kdenetwork3/files/patch-kopete_protocols_msn_msnnotifysocket.cpp240
-rw-r--r--net/kdenetwork3/files/patch-kopete_protocols_msn_msnnotifysocket.h73
-rw-r--r--net/kdenetwork3/files/patch-kopete_protocols_msn_msnsocket.cpp19
-rw-r--r--net/kdenetwork3/files/patch-kopete_protocols_msn_msnsocket.h15
-rw-r--r--net/kdenetwork3/files/patch-kopete_protocols_msn_sslloginhandler.cpp456
-rw-r--r--net/kdenetwork3/files/patch-kopete_protocols_msn_sslloginhandler.h99
-rw-r--r--net/kdenetwork4/Makefile3
-rw-r--r--net/kdenetwork4/files/patch-kopete_protocols_msn_Makefile.in96
-rw-r--r--net/kdenetwork4/files/patch-kopete_protocols_msn_msnnotifysocket.cpp240
-rw-r--r--net/kdenetwork4/files/patch-kopete_protocols_msn_msnnotifysocket.h73
-rw-r--r--net/kdenetwork4/files/patch-kopete_protocols_msn_msnsocket.cpp19
-rw-r--r--net/kdenetwork4/files/patch-kopete_protocols_msn_msnsocket.h15
-rw-r--r--net/kdenetwork4/files/patch-kopete_protocols_msn_sslloginhandler.cpp456
-rw-r--r--net/kdenetwork4/files/patch-kopete_protocols_msn_sslloginhandler.h99
16 files changed, 2000 insertions, 2 deletions
diff --git a/net/kdenetwork3/Makefile b/net/kdenetwork3/Makefile
index 0910c9a..e2dfe0c 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 0000000..bc34d0a
--- /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 0000000..6b7ef41
--- /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 0000000..a19d683
--- /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 0000000..8d48bb7
--- /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 0000000..097eb37
--- /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 0000000..8a54759
--- /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 0000000..6db0490
--- /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 0910c9a..e2dfe0c 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 0000000..bc34d0a
--- /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 0000000..6b7ef41
--- /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 0000000..a19d683
--- /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 0000000..8d48bb7
--- /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 0000000..097eb37
--- /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 0000000..8a54759
--- /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 0000000..6db0490
--- /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
OpenPOWER on IntegriCloud