Files @ 34207065ceb5
Branch filter:

Location: libtransport.git/include/transport/networkplugin.h - annotation

HanzZ
Better AdminInterface
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
8e03fbec4701
0a33a3100eb9
1105d3f1e37a
1105d3f1e37a
62fcb141926d
62fcb141926d
8720eb96789d
bc585576a9ab
a1eba9bedbbd
a1eba9bedbbd
6699a898fbec
6699a898fbec
a7f77b72a8e1
a7f77b72a8e1
bf5cc016f827
bf5cc016f827
bf5cc016f827
bf5cc016f827
bf5cc016f827
bf5cc016f827
b0bcade44c94
b0bcade44c94
67c1817031d3
67c1817031d3
1105d3f1e37a
1105d3f1e37a
a9ccbdc50107
a7f77b72a8e1
7f72be8fd302
1ebe5535c4f3
2c526db0f32e
bdc94b104270
a6781df77f76
ed6b548f485d
d699f6614f22
d699f6614f22
d699f6614f22
d699f6614f22
fb420ef1254e
b62274f1ddda
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
bdc94b104270
b62274f1ddda
1ebe5535c4f3
2c526db0f32e
a7f77b72a8e1
a6781df77f76
ed6b548f485d
d699f6614f22
fb420ef1254e
877d783276c0
62fcb141926d
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
e8b61aa9b6fd
98687145b02a
1105d3f1e37a
877d783276c0
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
98687145b02a
98687145b02a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
1105d3f1e37a
/**
 * libtransport -- C++ library for easy XMPP Transports development
 *
 * Copyright (C) 2011, Jan Kaluza <hanzz.k@gmail.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.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
 */

#pragma once

#include <time.h>
#include "Swiften/Swiften.h"
#include "Swiften/Presence/PresenceOracle.h"
#include "Swiften/Disco/EntityCapsManager.h"
#include "Swiften/Network/ConnectionServer.h"
#include "Swiften/Network/Connection.h"
#include "Swiften/Network/BoostTimerFactory.h"
#include "Swiften/Network/BoostNetworkFactories.h"
#include "Swiften/Network/BoostIOServiceThread.h"
#include "Swiften/Network/Connection.h"
#include "storagebackend.h"

namespace Transport {

class NetworkPlugin {
	public:
		NetworkPlugin(Swift::EventLoop *loop, const std::string &host, int port);

		virtual ~NetworkPlugin();

		void handleBuddyChanged(const std::string &user, const std::string &buddyName, const std::string &alias,
			const std::string &groups, int status, const std::string &statusMessage = "", const std::string &iconHash = ""
		);

		void handleParticipantChanged(const std::string &user, const std::string &nickname, const std::string &room, int flags, int status = Swift::StatusShow::None, const std::string &statusMessage = "", const std::string &newname = "");

		void handleDisconnected(const std::string &user, const std::string &legacyName, int error, const std::string &message);

		void handleConnected(const std::string &user);

		void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "", const std::string &xhtml = "");

		void handleSubject(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "");

		void handleRoomChanged(const std::string &user, const std::string &room, const std::string &nickname);

		void handleVCard(const std::string &user, unsigned int id, const std::string &legacyName, const std::string &fullName, const std::string &nickname, const std::string &photo);

		void handleBuddyTyping(const std::string &user, const std::string &buddyName);
		
		void handleBuddyTyped(const std::string &user, const std::string &buddyName);

		void handleBuddyStoppedTyping(const std::string &user, const std::string &buddyName);

		void handleAuthorization(const std::string &user, const std::string &buddyName);

		void handleAttention(const std::string &user, const std::string &buddyName, const std::string &message);

		virtual void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) = 0;
		virtual void handleLogoutRequest(const std::string &user, const std::string &legacyName) = 0;
		virtual void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &xhtml = "") = 0;
		virtual void handleVCardRequest(const std::string &/*user*/, const std::string &/*legacyName*/, unsigned int /*id*/) {}
		virtual void handleVCardUpdatedRequest(const std::string &/*user*/, const std::string &/*photo*/) {}
		virtual void handleJoinRoomRequest(const std::string &/*user*/, const std::string &/*room*/, const std::string &/*nickname*/, const std::string &/*pasword*/) {}
		virtual void handleLeaveRoomRequest(const std::string &/*user*/, const std::string &/*room*/) {}
		virtual void handleStatusChangeRequest(const std::string &/*user*/, int status, const std::string &statusMessage) {}
		virtual void handleBuddyUpdatedRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*alias*/, const std::string &/*groups*/) {}
		virtual void handleBuddyRemovedRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*groups*/) {}

		virtual void handleTypingRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
		virtual void handleTypedRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
		virtual void handleStoppedTypingRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
		virtual void handleAttentionRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*message*/) {}
		

	private:
		void connect();
		void handleLoginPayload(const std::string &payload);
		void handleLogoutPayload(const std::string &payload);
		void handleStatusChangedPayload(const std::string &payload);
		void handleConvMessagePayload(const std::string &payload);
		void handleJoinRoomPayload(const std::string &payload);
		void handleLeaveRoomPayload(const std::string &payload);
		void handleVCardPayload(const std::string &payload);
		void handleBuddyChangedPayload(const std::string &payload);
		void handleBuddyRemovedPayload(const std::string &payload);
		void handleChatStatePayload(const std::string &payload, Swift::ChatState::ChatStateType type);
		void handleAttentionPayload(const std::string &payload);
		void handleDataRead(const Swift::SafeByteArray&);
		void _handleConnected(bool error);
		void handleDisconnected();

		void send(const std::string &data);
		void sendPong();
		void pingTimeout();

		Swift::SafeByteArray m_data;
		std::string m_host;
		int m_port;
		Swift::BoostNetworkFactories *m_factories;
		Swift::BoostIOServiceThread m_boostIOServiceThread;
		boost::shared_ptr<Swift::Connection> m_conn;
		Swift::Timer::ref m_pingTimer;
		bool m_pingReceived;

};

}