Changeset - 8bd3dfd3a28d
[Not reviewed]
0 2 3
Sarang Bharadwaj - 13 years ago 2012-04-05 11:06:24
sarang.bh@gmail.com
NetworkPlugin python version
5 files changed with 1565 insertions and 9 deletions:
0 comments (0 inline, 0 general)
backends/template/template_backend.py
Show inline comments
 
new file 100755
 
#!/usr/bin/python
 

	
 
import asyncore, argparse, protocol_pb2, socket, logging
 
from NetworkPlugin import NetworkPlugin
 

	
 
np = None
 

	
 

	
 
logger = logging.getLogger('Template Backend')
 
logger.setLevel(logging.DEBUG)
 
ch = logging.StreamHandler()
 
ch.setLevel(logging.DEBUG)
 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
 
ch.setFormatter(formatter)
 
logger.addHandler(ch)
 

	
 

	
 
def handleTransportData(data):
 
	"""
 
	This function is called when data is received from the NetworkPlugin server
 
	"""
 
	np.handleDataRead(data)
 
	
 
    
 
class SpectrumPlugin(NetworkPlugin):
 
	global logger
 
	def __init__(self, iochannel):
 
		NetworkPlugin.__init__(self)
 
		self.iochannel = iochannel
 
		logger.info("Starting plugin.")
 

	
 
	def sendData(self, string):
 
		"""
 
		NetworkPlugin uses this method to send the data to networkplugin server
 
		"""
 
		self.iochannel.sendData(string)
 
		logger.info("Starting plugin.")
 

	
 
	def handleLoginRequest(self, user, legacyName, password):
 
		self.handleConnected(user)
 
		logger.info("Added Echo Buddy")
 
		self.handleBuddyChanged(user, "echo", "Echo", [], protocol_pb2.STATUS_ONLINE)
 

	
 
	def handleLogoutRequest(self, user, legacyName):
 
		pass
 

	
 
	def handleMessageSendRequest(self, user, legacyName, message, xhtml = ""):
 
		logger.info("Message sent from "  + user + ' to ' + legacyName)
 
		if(legacyName == "echo"):
 
			logger.info("Message Echoed: " + message)
 
			self.handleMessage(user, legacyName, message)
 

	
 
	def handleBuddyUpdatedRequest(self, user, buddyName, alias, groups):
 
		logger.info("Added Buddy " + buddyName)
 
		self.handleBuddyChanged(user, buddyName, alias, groups, protocol_pb2.STATUS_ONLINE)
 
		
 
	def handleBuddyRemovedRequest(self, user, buddyName, groups):
 
		pass
 

	
 

	
 

	
 
class IOChannel(asyncore.dispatcher):
 
	def __init__(self, host, port, readCallBack):
 
		asyncore.dispatcher.__init__(self)
 
		self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
 
		self.connect((host, port))
 
		self.handleReceivedData = readCallBack
 
		self.send_buffer = ""
 

	
 
	def sendData(self, data):
 
		self.send_buffer += data
 

	
 
	def handle_connect(self):
 
		pass
 

	
 
	def handle_close(self):
 
		self.close()
 

	
 
	def handle_read(self):
 
		data = self.recv(65536)
 
		self.handleReceivedData(data)
 

	
 
	def handle_write(self):
 
		sent = self.send(self.send_buffer)
 
		self.send_buffer = self.send_buffer[sent:]
 

	
 
	def writable(self):
 
		return (len(self.send_buffer) > 0)
 

	
 
	def readable(self):
 
		return True
 

	
 

	
 
if __name__ == "__main__":
 
	parser = argparse.ArgumentParser()
 
	parser.add_argument('--host', type=str, required=True)
 
	parser.add_argument('--port', type=int, required=True)
 
	parser.add_argument('config_file', type=str)
 

	
 
	args = parser.parse_args()
 
	io = IOChannel(args.host, args.port, handleTransportData)
 
	np = SpectrumPlugin(io)
 
	asyncore.loop()
docs/Doxyfile
Show inline comments
 
@@ -38,7 +38,7 @@ PROJECT_NUMBER         = "2.0"
 
# If a relative path is entered, it will be relative to the location 
 
# where doxygen was started. If left blank the current directory will be used.
 

	
 
OUTPUT_DIRECTORY       = /home/hanzz/code/libtransport/docs/../docs/html
 
OUTPUT_DIRECTORY       = /home/sarang/dev/libtransport/docs/../docs/html
 

	
 
# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
 
# 4096 sub-directories (in 2 levels) under the output directory of each output 
 
@@ -564,7 +564,7 @@ WARN_LOGFILE           =
 
# directories like "/usr/src/myproject". Separate the files or directories 
 
# with spaces.
 

	
 
INPUT                  = /home/hanzz/code/libtransport/docs/../include/transport/
 
INPUT                  = /home/sarang/dev/libtransport/docs/../include/transport/
 

	
 
# This tag can be used to specify the character encoding of the source files 
 
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
 
@@ -621,7 +621,7 @@ EXCLUDE_SYMBOLS        =
 
# directories that contain example code fragments that are included (see 
 
# the \include command).
 

	
 
EXAMPLE_PATH           = "/home/hanzz/code/libtransport/docs/examples"
 
EXAMPLE_PATH           = "/home/sarang/dev/libtransport/docs/examples"
 

	
 
# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
 
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
 
@@ -641,7 +641,7 @@ EXAMPLE_RECURSIVE      = NO
 
# directories that contain image that are included in the documentation (see 
 
# the \image command).
 

	
 
IMAGE_PATH             = "/home/hanzz/code/libtransport/docs"
 
IMAGE_PATH             = "/home/sarang/dev/libtransport/docs"
 

	
 
# The INPUT_FILTER tag can be used to specify a program that doxygen should 
 
# invoke to filter for each input file. Doxygen will invoke the filter program 
 
@@ -763,7 +763,7 @@ GENERATE_HTML          = YES
 
# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
 
# put in front of it. If left blank `html' will be used as the default path.
 

	
 
HTML_OUTPUT            = /home/hanzz/code/libtransport/docs/../docs/html
 
HTML_OUTPUT            = /home/sarang/dev/libtransport/docs/../docs/html
 

	
 
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
 
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
 
@@ -1445,7 +1445,7 @@ DOT_IMAGE_FORMAT       = png
 
# The tag DOT_PATH can be used to specify the path where the dot tool can be 
 
# found. If left blank, it is assumed the dot tool can be found in the path.
 

	
 
DOT_PATH               = "/usr/bin"
 
DOT_PATH               = ""
 

	
 
# The DOTFILE_DIRS tag can be used to specify one or more directories that 
 
# contain dot files that are included in the documentation (see the 
plugin/python/NetworkPlugin.py
Show inline comments
 
new file 100644
 
import protocol_pb2, socket, struct, sys, os
 

	
 
def WRAP(MESSAGE, TYPE):
 
 	wrap = protocol_pb2.WrapperMessage()
 
	wrap.type = TYPE
 
	wrap.payload = MESSAGE
 
	return wrap.SerializeToString()
 
	
 
class NetworkPlugin:
 
	"""
 
	Creates new NetworkPlugin and connects the Spectrum2 NetworkPluginServer.
 
	@param loop: Event loop.
 
	@param host: Host where Spectrum2 NetworkPluginServer runs.
 
	@param port: Port. 
 
	"""
 
	
 
	def __init__(self):
 
		self.m_pingReceived = False
 
		self.m_data = ""
 
		self.m_init_res = 0
 

	
 
	def handleMessage(self, user, legacyName, msg, nickname = "", xhtml = ""):
 
		m = protocol_pb2.ConversationMessage()
 
		m.userName = user
 
		m.buddyName = legacyName
 
		m.message = msg
 
		m.nickname = nickname
 
		m.xhtml = xhtml
 

	
 
		message = WRAP(m.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_CONV_MESSAGE)
 
		self.send(message)
 

	
 
	def handleAttention(self, user, buddyName, msg):
 
		m = protocol_pb2.ConversationMessage()
 
		m.userName = user
 
		m.buddyName = buddyName
 
		m.message = msg
 

	
 
		message = WRAP(m.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_ATTENTION)
 
		self.send(message)
 

	
 
	def handleVCard(self, user, ID, legacyName, fullName, nickname, photo):
 
		vcard = protocol_pb2.VCard()
 
		vcard.userName = user
 
		vcard.buddyName = legacyName
 
		vcard.id = ID
 
		vcard.fullname = fullName
 
		vcard.nickname = nickname
 
		vcard.photo = photo 
 

	
 
		message = WRAP(vcard.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_VCARD)
 
		self.send(message)
 

	
 

	
 
	def handleSubject(self, user, legacyName, msg, nickname = ""):
 
		m = protocol_pb2.ConversationMessage()
 
		m.userName = user
 
		m.buddyName = legacyName
 
		m.message = msg 
 
		m.nickname = nickname
 

	
 
		message = WRAP(m.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_ROOM_SUBJECT_CHANGED)
 
		#print "SENDING MESSAGE"
 
		self.send(message)
 

	
 

	
 
	def handleBuddyChanged(self, user, buddyName, alias, groups, status, statusMessage = "", iconHash = "", blocked = False):
 
		buddy = protocol_pb2.Buddy()
 
		buddy.userName = user
 
		buddy.buddyName = buddyName
 
		buddy.alias = alias
 
		buddy.group.extend(groups)
 
		buddy.status = status
 
		buddy.statusMessage = statusMessage
 
		buddy.iconHash = iconHash
 
		buddy.blocked = blocked
 

	
 
		message = WRAP(buddy.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_BUDDY_CHANGED)
 
		self.send(message)
 

	
 

	
 
	def handleBuddyTyping(self, user, buddyName):
 
		buddy = protocol_pb2.Buddy()
 
		buddy.userName = user
 
		buddy.buddyName = buddyName
 

	
 
		message = WRAP(buddy.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPING)
 
		self.send(message);
 

	
 
	def handleBuddyTyped(self, user, buddyName):
 
		buddy = protocol_pb2.Buddy()
 
		buddy.userName  = user
 
		buddy.buddyName = buddyName
 

	
 
		message = WRAP(buddy.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPED)
 
		self.send(message);
 

	
 
	def handleBuddyStoppedTyping(self, user, buddyName):
 
		buddy = protocol_pb2.Buddy()
 
		buddy.userName = user
 
		buddy.buddyName = buddyName
 

	
 
		message = WRAP(buddy.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_BUDDY_STOPPED_TYPING)
 
		self.send(message)
 

	
 
	def handleAuthorization(self, user, buddyName):
 
		buddy = protocol_pb2.Buddy()
 
		buddy.userName = user
 
		buddy.buddyName = buddyName
 

	
 
		message = WRAP(buddy.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_AUTH_REQUEST)
 
		self.send(message)
 

	
 

	
 
	def handleConnected(self, user):
 
		d = protocol_pb2.Connected()
 
		d.user = user
 

	
 
		message = WRAP(d.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_CONNECTED)
 
		self.send(message);	
 

	
 

	
 
	def handleDisconnected(self, user, error = 0, msg = ""):
 
		d = protocol_pb2.Disconnected()
 
		d.user = user
 
		d.error = error
 
		d.message = msg
 

	
 
		message = WRAP(d.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_DISCONNECTED)
 
		self.send(message);
 

	
 

	
 
	def handleParticipantChanged(self, user, nickname, room, flags, status, statusMessage = "", newname = ""):
 
		d = protocol_pb2.Participant()
 
		d.userName = user
 
		d.nickname = nickname
 
		d.room = room
 
		d.flag = flags
 
		d.newname = newname
 
		d.status = status
 
		d.statusMessage = statusMessage
 

	
 
		message = WRAP(d.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_PARTICIPANT_CHANGED)
 
		self.send(message);
 

	
 

	
 
	def handleRoomNicknameChanged(self, user, r, nickname):
 
		room = protocol_pb2.Room()
 
		room.userName = user
 
		room.nickname = nickname
 
		room.room = r
 
		room.password = ""
 

	
 
		message = WRAP(room.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_ROOM_NICKNAME_CHANGED)
 
		self.send(message);
 

	
 

	
 
	def handleFTStart(self, user, buddyName, fileName, size):
 
		room = protocol_pb2.File()
 
		room.userName = user
 
		room.buddyName = buddyName
 
		room.fileName = fileName
 
		room.size = size
 

	
 
		message = WRAP(room.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_FT_START)
 
		self.send(message);
 

	
 
	def handleFTFinish(self, user, buddyName, fileName, size, ftid):
 
		room = protocol_pb2.File()
 
		room.userName = user
 
		room.buddyName = buddyName
 
		room.fileName = fileName
 
		room.size = size
 

	
 
		# Check later
 
		if ftid != 0:
 
			room.ftID = ftid 
 
			
 
		message = WRAP(room.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_FT_FINISH)
 
		self.send(message)
 

	
 

	
 
	def handleFTData(self, ftID, data):
 
		d = protocol_pb2.FileTransferData()
 
		d.ftid = ftID
 
		d.data = data
 

	
 
		message = WRAP(d.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_FT_DATA);
 
		self.send(message)
 

	
 
	def handleLoginPayload(self, data):
 
		payload = protocol_pb2.Login()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleLoginRequest(payload.user, payload.legacyName, payload.password)
 

	
 
	def handleLogoutPayload(self, data):
 
		payload = protocol_pb2.Logout()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleLogoutRequest(self, payload.user, payload.legacyName)
 
	
 
	def handleStatusChangedPayload(data):
 
		payload = protocol_pb2.Status()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleStatusChangeRequest(payload.userName, payload.status, payload.statusMessage)
 

	
 
	def handleConvMessagePayload(self, data):
 
		payload = protocol_pb2.ConversationMessage()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleMessageSendRequest(payload.userName, payload.buddyName, payload.message, payload.xhtml)
 

	
 
	def handleAttentionPayload(self, data):
 
		payload = protocol_pb2.ConversationMessage()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleAttentionRequest(payload.userName, payload.buddyName, payload.message)
 
	
 
	def handleFTStartPayload(self, data):
 
		payload = protocol_pb2.File()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleFTStartRequest(payload.userName, payload.buddyName, payload.fileName, payload.size, payload.ftID);
 

	
 
	def handleFTFinishPayload(self, data):
 
		payload = protocol_pb2.File()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleFTFinishRequest(payload.userName, payload.buddyName, payload.fileName, payload.size, payload.ftID)
 

	
 
	def handleFTPausePayload(self, data):
 
		payload = protocol_pb2.FileTransferData()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleFTPauseRequest(payload.ftID)
 

	
 
	def handleFTContinuePayload(self, data):
 
		payload = protocol_pb2.FileTransferData()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleFTContinueRequest(payload.ftID)
 

	
 
	def handleJoinRoomPayload(self, data):
 
		payload = protocol_pb2.Room()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleJoinRoomRequest(payload.userName, payload.room, payload.nickname, payload.password)
 

	
 
	def handleLeaveRoomPayload(self, data):
 
		payload = protocol_pb2.Room()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		self.handleLeaveRoomRequest(payload.userName, payload.room)
 

	
 
	def handleVCardPayload(self, data):
 
		payload = protocol_pb2.VCard()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		if payload.HasField('photo'):
 
			self.handleVCardUpdatedRequest(payload.userName, payload.photo, payload.nickname)
 
		elif len(payload.buddyName)  > 0:
 
			self.handleVCardRequest(payload.userName, payload.buddyName, payload.id)
 

	
 
	def handleBuddyChangedPayload(self, data):
 
		payload = protocol_pb2.Buddy()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		if payload.HasField('blocked'):
 
			self.handleBuddyBlockToggled(payload.userName, payload.buddyName, payload.blocked)
 
		else:
 
			groups = [g for g in payload.group]
 
			self.handleBuddyUpdatedRequest(payload.userName, payload.buddyName, payload.alias, groups);
 

	
 
	def handleBuddyRemovedPayload(self, data):
 
		payload = protocol_pb2.Buddy()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		groups = [g for g in payload.group]
 
		self.handleBuddyRemovedRequest(payload.userName, payload.buddyName, groups);
 

	
 
	def handleChatStatePayload(self, data, msgType):
 
		payload = protocol_pb2.Buddy()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		if msgType == protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPING:
 
				self.handleTypingRequest(payload.userName, payload.buddyName)
 
		elif  msgType == protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPED:
 
				self.handleTypedRequest(payload.userName, payload.buddyName)
 
		elif msgType == protocol_pb2.WrapperMessage.TYPE_BUDDY_STOPPED_TYPING:
 
				self.handleStoppedTypingRequest(payload.userName, payload.buddyName)
 

	
 

	
 
	def handleDataRead(self, data):
 
		self.m_data += data
 
		while len(self.m_data) != 0:
 
			expected_size = 0
 
			if (len(self.m_data) >= 4):
 
				expected_size = struct.unpack('!I', self.m_data[0:4])[0]
 
				if (len(self.m_data) - 4 < expected_size):
 
					return
 
			else:
 
				return
 

	
 
			wrapper = protocol_pb2.WrapperMessage()
 
			if (wrapper.ParseFromString(self.m_data[4:]) == False):
 
				self.m_data = self.m_data[expected_size+4:]
 
				return
 

	
 
			self.m_data = self.m_data[4+expected_size:]
 

	
 
			if wrapper.type == protocol_pb2.WrapperMessage.TYPE_LOGIN:
 
					self.handleLoginPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_LOGOUT:
 
					self.handleLogoutPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_PING:
 
					self.sendPong()
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_CONV_MESSAGE:
 
					self.handleConvMessagePayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_JOIN_ROOM:
 
					self.handleJoinRoomPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_LEAVE_ROOM:
 
					self.handleLeaveRoomPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_VCARD:
 
					self.handleVCardPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_BUDDY_CHANGED:
 
					self.handleBuddyChangedPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_BUDDY_REMOVED:
 
					self.handleBuddyRemovedPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_STATUS_CHANGED:
 
					self.handleStatusChangedPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPING:
 
					self.handleChatStatePayload(wrapper.payload, protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPING)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPED:
 
					self.handleChatStatePayload(wrapper.payload, protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPED)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_BUDDY_STOPPED_TYPING:
 
					self.handleChatStatePayload(wrapper.payload, protocol_pb2.WrapperMessage.TYPE_BUDDY_STOPPED_TYPING)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_ATTENTION:
 
					self.handleAttentionPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_FT_START:
 
					self.handleFTStartPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_FT_FINISH:
 
					self.handleFTFinishPayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_FT_PAUSE:
 
					self.handleFTPausePayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_FT_CONTINUE:
 
					self.handleFTContinuePayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_EXIT:
 
					self.handleExitRequest()
 

	
 

	
 
	def send(self, data):
 
		header = struct.pack('!I',len(data))
 
		self.sendData(header + data)
 

	
 
	def checkPing(self):
 
		if (self.m_pingReceived == False):
 
			self.handleExitRequest()
 
		self.m_pingReceived = False
 

	
 

	
 
	def sendPong(self):
 
		self.m_pingReceived = True
 
		wrap = protocol_pb2.WrapperMessage()
 
		wrap.type = protocol_pb2.WrapperMessage.TYPE_PONG
 
		message = wrap.SerializeToString()
 
		self.send(message)
 
		self.sendMemoryUsage()
 
	
 

	
 
	def sendMemoryUsage(self):
 
		stats = protocol_pb2.Stats()
 

	
 
		stats.init_res = self.m_init_res
 
		res = 0
 
		shared = 0
 

	
 
		e_res, e_shared = self.handleMemoryUsage()
 

	
 
		stats.res = res + e_res
 
		stats.shared = shared + e_shared
 
		stats.id = str(os.getpid())
 

	
 
		message = WRAP(stats.SerializeToString(), protocol_pb2.WrapperMessage.TYPE_STATS)
 
		self.send(message)
 

	
 

	
 
	def handleLoginRequest(self, user, legacyName, password):
 
		""" 
 
		Called when XMPP user wants to connect legacy network.
 
		You should connect him to legacy network and call handleConnected or handleDisconnected function later.
 
		@param user: XMPP JID of user for which this event occurs.
 
		@param legacyName: Legacy network name of this user used for login.
 
		@param password: Legacy network password of this user.
 
		"""
 

	
 
		#\msc
 
		#NetworkPlugin,YourNetworkPlugin,LegacyNetwork;
 
		#NetworkPlugin->YourNetworkPlugin [label="handleLoginRequest(...)", URL="\ref NetworkPlugin::handleLoginRequest()"];
 
		#YourNetworkPlugin->LegacyNetwork [label="connect the legacy network"];
 
		#--- [label="If password was valid and user is connected and logged in"];
 
		#YourNetworkPlugin<-LegacyNetwork [label="connected"];
 
		#YourNetworkPlugin->NetworkPlugin [label="handleConnected()", URL="\ref NetworkPlugin::handleConnected()"];
 
		#--- [label="else"];
 
		#YourNetworkPlugin<-LegacyNetwork [label="disconnected"];
 
		#YourNetworkPlugin->NetworkPlugin [label="handleDisconnected()", URL="\ref NetworkPlugin::handleDisconnected()"];
 
		#\endmsc
 

	
 
		raise NotImplementedError, "Implement me"
 

	
 
	def handleLogoutRequest(self, user, legacyName):
 
		"""
 
		Called when XMPP user wants to disconnect legacy network.
 
		You should disconnect him from legacy network.
 
		@param user: XMPP JID of user for which this event occurs.
 
		@param legacyName: Legacy network name of this user used for login.
 
		"""
 

	
 
		raise NotImplementedError, "Implement me"
 

	
 
	def handleMessageSendRequest(self, user, legacyName, message, xhtml = ""):
 
		"""
 
		Called when XMPP user sends message to legacy network.
 
		@param user: XMPP JID of user for which this event occurs.
 
		@param legacyName: Legacy network name of buddy or room.
 
		@param message: Plain text message.
 
		@param xhtml: XHTML message.
 
		"""
 

	
 
		raise NotImplementedError, "Implement me"
 

	
 
	def handleVCardRequest(self, user, legacyName, ID):
 
		""" Called when XMPP user requests VCard of buddy.
 
		@param user: XMPP JID of user for which this event occurs.
 
		@param legacyName: Legacy network name of buddy whose VCard is requested.
 
		@param ID: ID which is associated with this request. You have to pass it to handleVCard function when you receive VCard."""
 
			
 
		#\msc
 
		#NetworkPlugin,YourNetworkPlugin,LegacyNetwork;
 
		#NetworkPlugin->YourNetworkPlugin [label="handleVCardRequest(...)", URL="\ref NetworkPlugin::handleVCardRequest()"];
 
		#YourNetworkPlugin->LegacyNetwork [label="start VCard fetching"];
 
		#YourNetworkPlugin<-LegacyNetwork [label="VCard fetched"];
 
		#YourNetworkPlugin->NetworkPlugin [label="handleVCard()", URL="\ref NetworkPlugin::handleVCard()"];
 
		#\endmsc
 
	
 
		pass
 
			
 

	
 
	def handleVCardUpdatedRequest(self, user, photo, nickname):
 
		"""
 
		Called when XMPP user updates his own VCard.
 
		You should update the VCard in legacy network too.
 
		@param user: XMPP JID of user for which this event occurs.
 
		@param photo: Raw photo data.
 
		"""
 
		pass
 

	
 
	def handleJoinRoomRequest(self, user, room, nickname, pasword):
 
		pass
 
		
 
	def handleLeaveRoomRequest(self, user, room):
 
		pass
 
		
 
	def handleStatusChangeRequest(self, user, status, statusMessage):
 
		pass
 

	
 
	def handleBuddyUpdatedRequest(self, user,  buddyName, alias, groups):
 
		pass
 
		
 
	def handleBuddyRemovedRequest(self, user, buddyName, groups):
 
		pass
 
		
 
	def handleBuddyBlockToggled(self, user, buddyName, blocked):
 
		pass
 

	
 
	def handleTypingRequest(self, user, buddyName):
 
		pass
 
		
 
	def handleTypedRequest(self, user, buddyName):
 
		pass
 
		
 
	def handleStoppedTypingRequest(self, user, buddyName):
 
		pass
 
		
 
	def handleAttentionRequest(self, user, buddyName, message):
 
		pass
 

	
 
	def handleFTStartRequest(self, user, buddyName, fileName, size, ftID):
 
		pass
 
		
 
	def handleFTFinishRequest(self, user, buddyName, fileName, size, ftID):
 
		pass
 
		
 
	def handleFTPauseRequest(self, ftID):
 
		pass
 

	
 
	def handleFTContinueRequest(self, ftID):
 
		pass
 

	
 
	def handleMemoryUsage(self):
 
		return (0,0)
 

	
 
	def handleExitRequest(self):
 
		sys.exit(1)
 

	
 
	def sendData(self, data):
 
		pass
 

	
plugin/python/protocol_pb2.py
Show inline comments
 
new file 100644
 
# Generated by the protocol buffer compiler.  DO NOT EDIT!
 

	
 
from google.protobuf import descriptor
 
from google.protobuf import message
 
from google.protobuf import reflection
 
from google.protobuf import service
 
from google.protobuf import service_reflection
 
from google.protobuf import descriptor_pb2
 
_CONNECTIONERROR = descriptor.EnumDescriptor(
 
  name='ConnectionError',
 
  full_name='pbnetwork.ConnectionError',
 
  filename='ConnectionError',
 
  values=[
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_NETWORK_ERROR', index=0, number=0,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_INVALID_USERNAME', index=1, number=1,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_AUTHENTICATION_FAILED', index=2, number=2,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE', index=3, number=3,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_NO_SSL_SUPPORT', index=4, number=4,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_ENCRYPTION_ERROR', index=5, number=5,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_NAME_IN_USE', index=6, number=6,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_INVALID_SETTINGS', index=7, number=7,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_CERT_NOT_PROVIDED', index=8, number=8,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_CERT_UNTRUSTED', index=9, number=9,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_CERT_EXPIRED', index=10, number=10,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_CERT_NOT_ACTIVATED', index=11, number=11,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH', index=12, number=12,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH', index=13, number=13,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_CERT_SELF_SIGNED', index=14, number=14,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_CERT_OTHER_ERROR', index=15, number=15,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='CONNECTION_ERROR_OTHER_ERROR', index=16, number=16,
 
      options=None,
 
      type=None),
 
  ],
 
  options=None,
 
)
 

	
 

	
 
_STATUSTYPE = descriptor.EnumDescriptor(
 
  name='StatusType',
 
  full_name='pbnetwork.StatusType',
 
  filename='StatusType',
 
  values=[
 
    descriptor.EnumValueDescriptor(
 
      name='STATUS_ONLINE', index=0, number=0,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='STATUS_AWAY', index=1, number=1,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='STATUS_FFC', index=2, number=2,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='STATUS_XA', index=3, number=3,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='STATUS_DND', index=4, number=4,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='STATUS_NONE', index=5, number=5,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='STATUS_INVISIBLE', index=6, number=6,
 
      options=None,
 
      type=None),
 
  ],
 
  options=None,
 
)
 

	
 

	
 
CONNECTION_ERROR_NETWORK_ERROR = 0
 
CONNECTION_ERROR_INVALID_USERNAME = 1
 
CONNECTION_ERROR_AUTHENTICATION_FAILED = 2
 
CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE = 3
 
CONNECTION_ERROR_NO_SSL_SUPPORT = 4
 
CONNECTION_ERROR_ENCRYPTION_ERROR = 5
 
CONNECTION_ERROR_NAME_IN_USE = 6
 
CONNECTION_ERROR_INVALID_SETTINGS = 7
 
CONNECTION_ERROR_CERT_NOT_PROVIDED = 8
 
CONNECTION_ERROR_CERT_UNTRUSTED = 9
 
CONNECTION_ERROR_CERT_EXPIRED = 10
 
CONNECTION_ERROR_CERT_NOT_ACTIVATED = 11
 
CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH = 12
 
CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH = 13
 
CONNECTION_ERROR_CERT_SELF_SIGNED = 14
 
CONNECTION_ERROR_CERT_OTHER_ERROR = 15
 
CONNECTION_ERROR_OTHER_ERROR = 16
 
STATUS_ONLINE = 0
 
STATUS_AWAY = 1
 
STATUS_FFC = 2
 
STATUS_XA = 3
 
STATUS_DND = 4
 
STATUS_NONE = 5
 
STATUS_INVISIBLE = 6
 

	
 

	
 
_WRAPPERMESSAGE_TYPE = descriptor.EnumDescriptor(
 
  name='Type',
 
  full_name='pbnetwork.WrapperMessage.Type',
 
  filename='Type',
 
  values=[
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_CONNECTED', index=0, number=1,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_DISCONNECTED', index=1, number=2,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_LOGIN', index=2, number=3,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_LOGOUT', index=3, number=4,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_BUDDY_CHANGED', index=4, number=6,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_BUDDY_REMOVED', index=5, number=7,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_CONV_MESSAGE', index=6, number=8,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_PING', index=7, number=9,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_PONG', index=8, number=10,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_JOIN_ROOM', index=9, number=11,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_LEAVE_ROOM', index=10, number=12,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_PARTICIPANT_CHANGED', index=11, number=13,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_ROOM_NICKNAME_CHANGED', index=12, number=14,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_ROOM_SUBJECT_CHANGED', index=13, number=15,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_VCARD', index=14, number=16,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_STATUS_CHANGED', index=15, number=17,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_BUDDY_TYPING', index=16, number=18,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_BUDDY_STOPPED_TYPING', index=17, number=19,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_BUDDY_TYPED', index=18, number=20,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_AUTH_REQUEST', index=19, number=21,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_ATTENTION', index=20, number=22,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_STATS', index=21, number=23,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_FT_START', index=22, number=24,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_FT_FINISH', index=23, number=25,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_FT_DATA', index=24, number=26,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_FT_PAUSE', index=25, number=27,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_FT_CONTINUE', index=26, number=28,
 
      options=None,
 
      type=None),
 
    descriptor.EnumValueDescriptor(
 
      name='TYPE_EXIT', index=27, number=29,
 
      options=None,
 
      type=None),
 
  ],
 
  options=None,
 
)
 

	
 

	
 
_CONNECTED = descriptor.Descriptor(
 
  name='Connected',
 
  full_name='pbnetwork.Connected',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='user', full_name='pbnetwork.Connected.user', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_DISCONNECTED = descriptor.Descriptor(
 
  name='Disconnected',
 
  full_name='pbnetwork.Disconnected',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='user', full_name='pbnetwork.Disconnected.user', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='error', full_name='pbnetwork.Disconnected.error', index=1,
 
      number=2, type=5, cpp_type=1, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='message', full_name='pbnetwork.Disconnected.message', index=2,
 
      number=3, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_LOGIN = descriptor.Descriptor(
 
  name='Login',
 
  full_name='pbnetwork.Login',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='user', full_name='pbnetwork.Login.user', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='legacyName', full_name='pbnetwork.Login.legacyName', index=1,
 
      number=2, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='password', full_name='pbnetwork.Login.password', index=2,
 
      number=3, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_LOGOUT = descriptor.Descriptor(
 
  name='Logout',
 
  full_name='pbnetwork.Logout',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='user', full_name='pbnetwork.Logout.user', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='legacyName', full_name='pbnetwork.Logout.legacyName', index=1,
 
      number=2, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_BUDDY = descriptor.Descriptor(
 
  name='Buddy',
 
  full_name='pbnetwork.Buddy',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='userName', full_name='pbnetwork.Buddy.userName', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='buddyName', full_name='pbnetwork.Buddy.buddyName', index=1,
 
      number=2, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='alias', full_name='pbnetwork.Buddy.alias', index=2,
 
      number=3, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='group', full_name='pbnetwork.Buddy.group', index=3,
 
      number=4, type=9, cpp_type=9, label=3,
 
      default_value=[],
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='status', full_name='pbnetwork.Buddy.status', index=4,
 
      number=5, type=14, cpp_type=8, label=1,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='statusMessage', full_name='pbnetwork.Buddy.statusMessage', index=5,
 
      number=6, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='iconHash', full_name='pbnetwork.Buddy.iconHash', index=6,
 
      number=7, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='blocked', full_name='pbnetwork.Buddy.blocked', index=7,
 
      number=8, type=8, cpp_type=7, label=1,
 
      default_value=False,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_CONVERSATIONMESSAGE = descriptor.Descriptor(
 
  name='ConversationMessage',
 
  full_name='pbnetwork.ConversationMessage',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='userName', full_name='pbnetwork.ConversationMessage.userName', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='buddyName', full_name='pbnetwork.ConversationMessage.buddyName', index=1,
 
      number=2, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='message', full_name='pbnetwork.ConversationMessage.message', index=2,
 
      number=3, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='nickname', full_name='pbnetwork.ConversationMessage.nickname', index=3,
 
      number=4, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='xhtml', full_name='pbnetwork.ConversationMessage.xhtml', index=4,
 
      number=5, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_ROOM = descriptor.Descriptor(
 
  name='Room',
 
  full_name='pbnetwork.Room',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='userName', full_name='pbnetwork.Room.userName', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='nickname', full_name='pbnetwork.Room.nickname', index=1,
 
      number=2, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='room', full_name='pbnetwork.Room.room', index=2,
 
      number=3, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='password', full_name='pbnetwork.Room.password', index=3,
 
      number=4, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_PARTICIPANT = descriptor.Descriptor(
 
  name='Participant',
 
  full_name='pbnetwork.Participant',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='userName', full_name='pbnetwork.Participant.userName', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='room', full_name='pbnetwork.Participant.room', index=1,
 
      number=2, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='nickname', full_name='pbnetwork.Participant.nickname', index=2,
 
      number=3, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='flag', full_name='pbnetwork.Participant.flag', index=3,
 
      number=4, type=5, cpp_type=1, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='status', full_name='pbnetwork.Participant.status', index=4,
 
      number=5, type=14, cpp_type=8, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='statusMessage', full_name='pbnetwork.Participant.statusMessage', index=5,
 
      number=6, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='newname', full_name='pbnetwork.Participant.newname', index=6,
 
      number=7, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_VCARD = descriptor.Descriptor(
 
  name='VCard',
 
  full_name='pbnetwork.VCard',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='userName', full_name='pbnetwork.VCard.userName', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='buddyName', full_name='pbnetwork.VCard.buddyName', index=1,
 
      number=2, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='id', full_name='pbnetwork.VCard.id', index=2,
 
      number=3, type=5, cpp_type=1, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='fullname', full_name='pbnetwork.VCard.fullname', index=3,
 
      number=4, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='nickname', full_name='pbnetwork.VCard.nickname', index=4,
 
      number=5, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='photo', full_name='pbnetwork.VCard.photo', index=5,
 
      number=6, type=12, cpp_type=9, label=1,
 
      default_value="",
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_STATUS = descriptor.Descriptor(
 
  name='Status',
 
  full_name='pbnetwork.Status',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='userName', full_name='pbnetwork.Status.userName', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='status', full_name='pbnetwork.Status.status', index=1,
 
      number=3, type=14, cpp_type=8, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='statusMessage', full_name='pbnetwork.Status.statusMessage', index=2,
 
      number=4, type=9, cpp_type=9, label=1,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_STATS = descriptor.Descriptor(
 
  name='Stats',
 
  full_name='pbnetwork.Stats',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='res', full_name='pbnetwork.Stats.res', index=0,
 
      number=1, type=5, cpp_type=1, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='init_res', full_name='pbnetwork.Stats.init_res', index=1,
 
      number=2, type=5, cpp_type=1, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='shared', full_name='pbnetwork.Stats.shared', index=2,
 
      number=3, type=5, cpp_type=1, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='id', full_name='pbnetwork.Stats.id', index=3,
 
      number=4, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_FILE = descriptor.Descriptor(
 
  name='File',
 
  full_name='pbnetwork.File',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='userName', full_name='pbnetwork.File.userName', index=0,
 
      number=1, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='buddyName', full_name='pbnetwork.File.buddyName', index=1,
 
      number=2, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='fileName', full_name='pbnetwork.File.fileName', index=2,
 
      number=3, type=9, cpp_type=9, label=2,
 
      default_value=unicode("", "utf-8"),
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='size', full_name='pbnetwork.File.size', index=3,
 
      number=4, type=5, cpp_type=1, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='ftID', full_name='pbnetwork.File.ftID', index=4,
 
      number=5, type=5, cpp_type=1, label=1,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_FILETRANSFERDATA = descriptor.Descriptor(
 
  name='FileTransferData',
 
  full_name='pbnetwork.FileTransferData',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='ftID', full_name='pbnetwork.FileTransferData.ftID', index=0,
 
      number=1, type=5, cpp_type=1, label=2,
 
      default_value=0,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='data', full_name='pbnetwork.FileTransferData.data', index=1,
 
      number=2, type=12, cpp_type=9, label=2,
 
      default_value="",
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
  ],
 
  options=None)
 

	
 

	
 
_WRAPPERMESSAGE = descriptor.Descriptor(
 
  name='WrapperMessage',
 
  full_name='pbnetwork.WrapperMessage',
 
  filename='protocol.proto',
 
  containing_type=None,
 
  fields=[
 
    descriptor.FieldDescriptor(
 
      name='type', full_name='pbnetwork.WrapperMessage.type', index=0,
 
      number=1, type=14, cpp_type=8, label=2,
 
      default_value=1,
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
    descriptor.FieldDescriptor(
 
      name='payload', full_name='pbnetwork.WrapperMessage.payload', index=1,
 
      number=2, type=12, cpp_type=9, label=1,
 
      default_value="",
 
      message_type=None, enum_type=None, containing_type=None,
 
      is_extension=False, extension_scope=None,
 
      options=None),
 
  ],
 
  extensions=[
 
  ],
 
  nested_types=[],  # TODO(robinson): Implement.
 
  enum_types=[
 
    _WRAPPERMESSAGE_TYPE,
 
  ],
 
  options=None)
 

	
 

	
 
_BUDDY.fields_by_name['status'].enum_type = _STATUSTYPE
 
_PARTICIPANT.fields_by_name['status'].enum_type = _STATUSTYPE
 
_STATUS.fields_by_name['status'].enum_type = _STATUSTYPE
 
_WRAPPERMESSAGE.fields_by_name['type'].enum_type = _WRAPPERMESSAGE_TYPE
 

	
 
class Connected(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _CONNECTED
 

	
 
class Disconnected(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _DISCONNECTED
 

	
 
class Login(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _LOGIN
 

	
 
class Logout(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _LOGOUT
 

	
 
class Buddy(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _BUDDY
 

	
 
class ConversationMessage(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _CONVERSATIONMESSAGE
 

	
 
class Room(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _ROOM
 

	
 
class Participant(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _PARTICIPANT
 

	
 
class VCard(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _VCARD
 

	
 
class Status(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _STATUS
 

	
 
class Stats(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _STATS
 

	
 
class File(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _FILE
 

	
 
class FileTransferData(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _FILETRANSFERDATA
 

	
 
class WrapperMessage(message.Message):
 
  __metaclass__ = reflection.GeneratedProtocolMessageType
 
  DESCRIPTOR = _WRAPPERMESSAGE
 

	
spectrum/src/sample.cfg
Show inline comments
 
@@ -13,9 +13,9 @@ admin_password=test
 
#cert=server.pfx #patch to PKCS#12 certificate
 
#cert_password=test #password to that certificate if any
 
users_per_backend=10
 
backend=../..//backends/libpurple/spectrum2_libpurple_backend
 
#backend=../../backends/template/spectrum2_template_backend
 
protocol=prpl-gg
 
#backend=../..//backends/libpurple/spectrum2_libpurple_backend
 
backend=../../backends/template/template_backend.py
 
protocol=prpl-jabber
 
#protocol=prpl-msn
 
#protocol=any
 
#protocol=prpl-icq
0 comments (0 inline, 0 general)