diff options
Diffstat (limited to 'skype')
| -rw-r--r-- | skype/skyped.py | 73 | 
1 files changed, 36 insertions, 37 deletions
| diff --git a/skype/skyped.py b/skype/skyped.py index 12a54742..7c9afdb8 100644 --- a/skype/skyped.py +++ b/skype/skyped.py @@ -34,39 +34,54 @@ def utf8_encode(local_str):  		return local_str  def sig_handler(signum, frame): -	print 'Caught signal %d, exiting.' % signum  	mainloop.quit()  def input_handler(fd, io_condition):  	input = fd.recv(1024)  	for i in input.split("\n"): -	if i: -		fd.send(skype.send(i.strip()) + "\n") +		if i: +			fd.send(skype.send(i.strip()) + "\n")  	return True +def server(host, port): +	sock = socket.socket() +	sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) +	sock.bind((host, port)) +	sock.listen(1) +	gobject.io_add_watch(sock, gobject.IO_IN, listener) + +def listener(sock, *args): +	global conn +	conn, addr = sock.accept() +	fileno = conn.fileno() +	gobject.io_add_watch(conn, gobject.IO_IN, input_handler) +	return True + +def dprint(msg): +	if len(sys.argv) > 1 and sys.argv[1] == "-d": +		print msg +  class SkypeApi(dbus.service.Object):  	def __init__(self):  		bus = dbus.SessionBus() +		try: +			self.skype_api = bus.get_object(SKYPE_SERVICE, '/com/Skype') +		except dbus.exceptions.DBusException: +			sys.exit("Can't find any Skype instance. Are you sure you have started Skype?") -	try: -		self.skype_api = bus.get_object(SKYPE_SERVICE, '/com/Skype') -	except dbus.exceptions.DBusException: -		sys.exit("Can't find any Skype instance. Are you sure you have started Skype?") - -	reply = self.send('NAME ' + CLIENT_NAME) -	if reply != 'OK': -		sys.exit('Could not bind to Skype client') - -	reply = self.send('PROTOCOL 5') -	dbus.service.Object.__init__(self, bus, "/com/Skype/Client", bus_name='com.Skype.API') +		reply = self.send('NAME ' + CLIENT_NAME) +		if reply != 'OK': +			sys.exit('Could not bind to Skype client') +		reply = self.send('PROTOCOL 5') +		dbus.service.Object.__init__(self, bus, "/com/Skype/Client", bus_name='com.Skype.API')  	# skype -> client (async)  	@dbus.service.method(dbus_interface='com.Skype.API')  	def Notify(self, msg_text):  		global conn  		text = utf8_decode(msg_text) -		print '<<', text +		dprint('<< ' + text)  		if conn:  			conn.send(msg_text + "\n") @@ -74,34 +89,18 @@ class SkypeApi(dbus.service.Object):  	def send(self, msg_text):  		if not len(msg_text):  			return -		print '>> ', msg_text +		dprint('>> ' + msg_text)  		try:  			reply = utf8_decode(self.skype_api.Invoke(utf8_encode(msg_text)))  		except dbus.exceptions.DBusException, s:  			reply = str(s) -		print '<< ', reply +		dprint('<< ' + reply)  		return reply -dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) -skype = SkypeApi() -signal.signal(signal.SIGINT, sig_handler) - -mainloop = gobject.MainLoop() - -def server(host, port): -	'''Initialize server and start listening.''' -	sock = socket.socket() -	sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) -	sock.bind((host, port)) -	sock.listen(1) -	gobject.io_add_watch(sock, gobject.IO_IN, listener) -def listener(sock, *args): -	'''Asynchronous connection listener. Starts a handler for each connection.''' -	global conn -	conn, addr = sock.accept() -	fileno = conn.fileno() -	gobject.io_add_watch(conn, gobject.IO_IN, input_handler) -	return True  if __name__=='__main__': +	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) +	skype = SkypeApi() +	signal.signal(signal.SIGINT, sig_handler) +	mainloop = gobject.MainLoop()  	server('localhost', 2727)  	mainloop.run() | 
