/* oscarclientstream.h - Kopete Oscar Protocol Copyright (c) 2004 Matt Rogers Based on code Copyright (c) 2004 SuSE Linux AG Based on Iris, Copyright (C) 2003 Justin Karneges Kopete (c) 2002-2004 by the Kopete developers ************************************************************************* * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * ************************************************************************* */ #ifndef OSCAR_CLIENTSTREAM_H #define OSCAR_CLIENTSTREAM_H #include "stream.h" // forward defines class ByteStream; class Client; class Connector; class Connection; class Transfer; class TQHostAddress; class ClientStream : public Stream { Q_OBJECT public: enum Error { ErrConnection = ErrCustom, // Connection error, ask Connector-subclass what's up ErrNeg, // Negotiation error, see condition ErrAuth, // Auth error, see condition ErrBind // Resource binding error }; enum Warning { WarnOldVersion, // server uses older XMPP/Jabber "0.9" protocol // can be customised for novell versions WarnNoTLS // there is no chance for TLS at this point }; enum NegCond { HostGone, // host no longer hosted HostUnknown, // unknown host RemoteConnectionFailed, // unable to connect to a required remote resource SeeOtherHost, // a 'redirect', see errorText() for other host UnsupportedVersion // unsupported XMPP version }; enum AuthCond { GenericAuthError, // all-purpose "can't login" error NoMech, // No appropriate auth mech available BadProto, // Bad SASL auth protocol BadServ, // Server failed mutual auth InvalidUserId, // bad user id InvalidMech, // bad mechanism InvalidRealm, // bad realm MechTooWeak, // can't use mech with this authzid NotAuthorized, // bad user, bad password, bad creditials TemporaryAuthFailure // please try again later! }; enum BindCond { BindNotAllowed, // not allowed to bind a resource BindConflict // resource in-use }; ClientStream(Connector *conn, TQObject *parent=0); ~ClientStream(); void connectToServer(const TQString& server, bool auth=true); void accept(); // server bool isActive() const; bool isAuthenticated() const; // login params void setUsername(const TQString &s); void setPassword(const TQString &s); void setLocalAddr(const TQHostAddress &addr, TQ_UINT16 port); void close(); /** Connection related stuff */ void setConnection( Connection* c ); Connection* connection() const; /** * Are there any messages waiting to be read */ bool transfersAvailable() const; /** * Read a message received from the server */ Transfer * read(); /** * Send a message to the server */ void write( Transfer* request ); int errorCondition() const; TQString errorText() const; // extrahttp://bugs.kde.org/show_bug.cgi?id=85158 /*# void writeDirect(const TQString &s); // must be for debug testing*/ void setNoopTime(int mills); signals: void connected(); void securityLayerActivated(int); void authenticated(); // this signal is ordinarily emitted in processNext void warning(int); public slots: void continueAfterWarning(); private slots: void cr_connected(); void cr_error(); /** * collects wire ready outgoing data from the core protocol and sends */ void cp_outgoingData( const TQByteArray& ); /** * collects parsed incoming data as a transfer from the core protocol and queues */ void cp_incomingData(); void bs_connectionClosed(); void bs_delayedCloseFinished(); void bs_error(int); // server only void bs_readyRead(); void bs_bytesWritten(int); void doNoop(); void doReadyRead(); private: class Private; Private *d; void reset(bool all=false); void processNext(); bool handleNeed(); void handleError(); void srvProcessNext(); /** * convert internal method representation to wire */ static char* encode_method(TQ_UINT8 method); }; #endif