import jabberpy-0.5-0.38.el8

This commit is contained in:
CentOS Sources 2019-05-07 06:02:58 -04:00 committed by Andrew Lukoshko
commit c7a2e0b61e
9 changed files with 902 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/jabberpy-0.5-0.tar.gz

1
.jabberpy.metadata Normal file
View File

@ -0,0 +1 @@
10bbc72c280e6c21a1101ccf3a227331b19bc3b6 SOURCES/jabberpy-0.5-0.tar.gz

View File

@ -0,0 +1,10 @@
--- jabberpy-0.5-0-orig/jabber/xmlstream.py 2004-02-03 11:33:37.000000000 -0500
+++ jabberpy-0.5-0/jabber/xmlstream.py 2007-10-03 14:35:29.000000000 -0400
@@ -385,7 +385,6 @@
def disconnect(self):
"""Close the stream and socket"""
self.write ( u"</stream:stream>" )
- while self.process(): pass
self._sock.close()
self._sock = None

View File

@ -0,0 +1,45 @@
--- jabber/xmlstream.py 2011-04-07 11:13:18.000000000 +0200
+++ jabber/xmlstream.py 2011-06-22 14:37:49.369669567 +0200
@@ -458,13 +458,34 @@
self._setupComms()
return
- self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- if self._proxy: self._sock.connect((self._proxy['host'], self._proxy['port']))
- else: self._sock.connect((self._hostIP, self._port))
- except socket.error, e:
- self.DEBUG("socket error: "+str(e),DBG_CONN_ERROR)
- raise
+ if self._proxy:
+ results = socket.getaddrinfo(self._proxy['host'],
+ self._proxy['port'], socket.AF_UNSPEC, socket.SOCK_STREAM)
+ else:
+ results = socket.getaddrinfo(self._hostIP, self._port,
+ socket.AF_UNSPEC, socket.SOCK_STREAM)
+
+ for r in results:
+ af, socktype, proto, canonname, sa = r
+ try:
+ self._sock = socket.socket(af, socktype, proto)
+ except socket.error, msg:
+ self._sock = None
+ continue
+ try:
+ if self._proxy:
+ self._sock.connect((self._proxy['host'], self._proxy['port']))
+ else:
+ self._sock.connect((self._hostIP, self._port))
+ except socket.error, e:
+ self._sock.close()
+ self._sock = None
+ self.DEBUG("socket error: "+str(e),DBG_CONN_ERROR)
+ continue
+ break
+
+ if self._sock is None:
+ raise socket.error("Unable to connect to the host and port specified")
if self._connection == TCP_SSL:
try:

View File

@ -0,0 +1,15 @@
diff -urN jabberpy-0.5-0-orig/jabber/__init__.py jabberpy-0.5-0/jabber/__init__.py
--- jabberpy-0.5-0-orig/jabber/__init__.py 1969-12-31 19:00:00.000000000 -0500
+++ jabberpy-0.5-0/jabber/__init__.py 2004-06-14 18:53:10.000000000 -0400
@@ -0,0 +1,10 @@
+__all__ = []
+
+import jabber
+
+for __s in dir(jabber):
+ __val = getattr(jabber, __s)
+ globals()[__s] = __val
+ __all__.append(__val)
+
+del __s, __val
Binary files jabberpy-0.5-0-orig/jabber/.__init__.py.swp and jabberpy-0.5-0/jabber/.__init__.py.swp differ

View File

@ -0,0 +1,11 @@
--- jabberpy-0.5-0/jabber/xmlstream.py
+++ jabberpy-0.5-0/jabber/xmlstream.py
@@ -522,7 +522,7 @@ class Client(Stream):
connector.append('\r\n')
bak = self._read , self._write
self.write('\r\n'.join(connector))
- reply = self.read().replace('\r','')
+ reply = self._read(BLOCK_SIZE).replace('\r','')
self._read , self._write = bak
try: proto,code,desc=reply.split('\n')[0].split(' ',2)
except: raise error('Invalid proxy reply')

View File

@ -0,0 +1,634 @@
diff --git jabberpy-0.5-0/jabber/__init__.py jabberpy-0.5-0/jabber/__init__.py
index ba26086..8d134bd 100644
--- jabberpy-0.5-0/jabber/__init__.py
+++ jabberpy-0.5-0/jabber/__init__.py
@@ -1,6 +1,10 @@
-__all__ = []
+import sys
+if sys.version_info[0] == 3:
+ from . import jabber
+else:
+ import jabber
-import jabber
+__all__ = []
for __s in dir(jabber):
__val = getattr(jabber, __s)
diff --git jabberpy-0.5-0/jabber/debug.py jabberpy-0.5-0/jabber/debug.py
index 4615697..b9ee00d 100644
--- jabberpy-0.5-0/jabber/debug.py
+++ jabberpy-0.5-0/jabber/debug.py
@@ -41,9 +41,13 @@ in this code
import sys
import time
-from string import join
-import types
+if sys.version_info[0] == 3:
+ StringType = (str, bytes)
+ UnicodeType = str
+else:
+ StringType = basestring
+ UnicodeType = unicode
debug_flags = []
@@ -164,10 +168,10 @@ class Debug:
):
if type(active_flags) not in [type([]), type(())]:
- print '***'
- print '*** Invalid or oldformat debug param given: %s' % active_flags
- print '*** please correct your param, should be of [] type!'
- print '*** Due to this, full debuging is enabled'
+ print('***')
+ print('*** Invalid or oldformat debug param given: %s' % active_flags)
+ print('*** please correct your param, should be of [] type!')
+ print('*** Due to this, full debuging is enabled')
active_flags=[DBG_ALWAYS]
if welcome == -1:
@@ -182,7 +186,7 @@ class Debug:
try:
self._fh = open(log_file,'w')
except:
- print 'ERROR: can open %s for writing'
+ print('ERROR: can open %s for writing')
sys.exit(0)
else: ## assume its a stream type object
self._fh = log_file
@@ -190,8 +194,7 @@ class Debug:
self._fh = sys.stdout
if time_stamp not in (0,1,2):
- msg2 = '%s' % time_stamp
- raise 'Invalid time_stamp param', msg2
+ raise Exception('Invalid time_stamp param: %s' % time_stamp)
self.prefix = prefix
self.sufix = sufix
self.time_stamp = time_stamp
@@ -214,8 +217,7 @@ class Debug:
if type(flag_show) in (type(''), type(None)):
self.flag_show = flag_show
else:
- msg2 = '%s' % type(flag_show )
- raise 'Invalid type for flag_show!', msg2
+ raise Exception('Invalid type for flag_show: %s' % type(flag_show))
@@ -271,7 +273,7 @@ class Debug:
# dont print "None", just show the separator
output = '%s %s' % ( output, self.flag_show )
- if type(msg)==type(u'') and self.encoding:
+ if isinstance(msg, UnicodeType) and self.encoding:
msg=msg.encode(self.encoding, 'replace')
output = '%s%s%s' % ( output, msg, suf )
@@ -321,11 +323,11 @@ class Debug:
if not active_flags:
#no debuging at all
self.active = []
- elif type( active_flags ) in ( types.TupleType, types.ListType ):
+ elif isinstance(active_flags, (tuple, list)):
flags = self._as_one_list( active_flags )
for t in flags:
if t not in debug_flags:
- print 'Invalid debugflag given', t
+ print('Invalid debugflag given', t)
else:
ok_flags.append( t )
@@ -360,7 +362,7 @@ class Debug:
This code organises lst and remves dupes
"""
- if type( items ) <> type( [] ) and type( items ) <> type( () ):
+ if not isinstance(items, (tuple, list)):
return [ items ]
r = []
for l in items:
@@ -377,9 +379,8 @@ class Debug:
def _append_unique_str( self, lst, item ):
"""filter out any dupes."""
- if type(item) <> type(''):
- msg2 = '%s' % item
- raise 'Invalid item type (should be string)',msg2
+ if not isinstance(item, StringType):
+ raise Exception('Invalid item type (should be string): %s' % type(item))
if item not in lst:
lst.append( item )
return lst
@@ -389,9 +390,8 @@ class Debug:
'verify that flag is defined.'
if flags:
for f in self._as_one_list( flags ):
- if not f in debug_flags:
- msg2 = '%s' % f
- raise 'Invalid debugflag given', msg2
+ if f not in debug_flags:
+ raise Exception('Invalid debugflag given: %s' % f)
def _remove_dupe_flags( self ):
"""
diff --git jabberpy-0.5-0/jabber/jabber.py jabberpy-0.5-0/jabber/jabber.py
index ab9d9b3..c6c97c7 100644
--- jabberpy-0.5-0/jabber/jabber.py
+++ jabberpy-0.5-0/jabber/jabber.py
@@ -64,17 +64,23 @@ An example of usage for a simple client would be ( only psuedo code !)
# $Id: jabber.py,v 1.58 2004/01/18 05:27:10 snakeru Exp $
-import xmlstream
import time
import hashlib
+import sys
+
+if sys.version_info[0] == 3:
+ from . import xmlstream
+ StringType = (str, bytes)
+ UnicodeType = str
+else:
+ import xmlstream
+ StringType = basestring
+ UnicodeType = unicode
debug=xmlstream.debug
VERSION = xmlstream.VERSION
-False = 0;
-True = 1;
-
timeout = 300
DBG_INIT, DBG_ALWAYS = debug.DBG_INIT, debug.DBG_ALWAYS
@@ -179,14 +185,14 @@ RS_EXT_PENDING = 0
def ustr(what):
"""If sending object is already a unicode str, just
return it, otherwise convert it using xmlstream.ENCODING"""
- if type(what) == type(u''):
+ if isinstance(what, UnicodeType):
r = what
else:
try: r = what.__str__()
except AttributeError: r = str(what)
# make sure __str__() didnt return a unicode
- if type(r) <> type(u''):
- r = unicode(r,xmlstream.ENCODING,'replace')
+ if not isinstance(r, UnicodeType):
+ r = UnicodeType(r,xmlstream.ENCODING,'replace')
return r
xmlstream.ustr = ustr
@@ -218,17 +224,17 @@ class Connection(xmlstream.Client):
def setMessageHandler(self, func, type='', chainOutput=False):
"""Back compartibility method"""
- print "WARNING! setMessageHandler(...) method is obsolette, use registerHandler('message',...) instead."
+ print("WARNING! setMessageHandler(...) method is obsolette, use registerHandler('message',...) instead.")
return self.registerHandler('message', func, type, chained=chainOutput)
def setPresenceHandler(self, func, type='', chainOutput=False):
"""Back compartibility method"""
- print "WARNING! setPresenceHandler(...) method is obsolette, use registerHandler('presence',...) instead."
+ print("WARNING! setPresenceHandler(...) method is obsolette, use registerHandler('presence',...) instead.")
return self.registerHandler('presence', func, type, chained=chainOutput)
def setIqHandler(self, func, type='', ns=''):
"""Back compartibility method"""
- print "WARNING! setIqHandler(...) method is obsolette, use registerHandler('iq',...) instead."
+ print("WARNING! setIqHandler(...) method is obsolette, use registerHandler('iq',...) instead.")
return self.registerHandler('iq', func, type, ns)
def header(self):
@@ -248,7 +254,7 @@ class Connection(xmlstream.Client):
def _expectedIqHandler(self, conn, iq_obj):
if iq_obj.getAttr('id') and \
- self._expected.has_key(iq_obj.getAttr('id')):
+ iq_obj.getAttr('id') in self._expected:
self._expected[iq_obj.getAttr('id')] = iq_obj
raise NodeProcessed('No need for further Iq processing.')
@@ -257,7 +263,7 @@ class Connection(xmlstream.Client):
Builds the relevant jabber.py object and dispatches it
to a relevant function or callback."""
name=stanza.getName()
- if not self.handlers.has_key(name):
+ if name not in self.handlers:
self.DEBUG("whats a tag -> " + name,DBG_NODE_UNKNOWN)
name='unknown'
else:
@@ -274,9 +280,9 @@ class Connection(xmlstream.Client):
self.DEBUG("dispatch called for: name->%s ns->%s"%(name,ns),DBG_DISPATCH)
typns=typ+ns
- if not self.handlers[name].has_key(ns): ns=''
- if not self.handlers[name].has_key(typ): typ=''
- if not self.handlers[name].has_key(typns): typns=''
+ if ns not in self.handlers[name]: ns=''
+ if typ not in self.handlers[name]: typ=''
+ if typns not in self.handlers[name]: typns=''
chain=[]
for key in ['default',typ,ns,typns]: # we will use all handlers: from very common to very particular
@@ -337,7 +343,7 @@ class Connection(xmlstream.Client):
have lower priority that common handlers.
"""
if not type and not ns: type='default'
- if not self.handlers[name].has_key(type+ns): self.handlers[name][type+ns]=[]
+ if type+ns not in self.handlers[name]: self.handlers[name][type+ns]=[]
if makefirst: self.handlers[name][type+ns].insert({'chain':chained,'func':handler,'system':system})
else: self.handlers[name][type+ns].append({'chain':chained,'func':handler,'system':system})
@@ -525,16 +531,23 @@ class Client(Connection):
token = auth_ret_query.getTag('token').getData()
seq = auth_ret_query.getTag('sequence').getData()
self.DEBUG("zero-k authentication supported",(DBG_INIT,DBG_NODE_IQ))
- hash = hashlib.new('sha1', hashlib.new('sha1', passwd).hexdigest()+token).hexdigest()
- for foo in xrange(int(seq)): hash = hashlib.new('sha1', hash).hexdigest()
+ # Unicode-objects must be encoded before hashing
+ if isinstance(passwd, UnicodeType):
+ pass_enc = passwd.encode('utf-8')
+ else:
+ pass_enc = passwd
+ hash = hashlib.new('sha1', hashlib.new('sha1', pass_enc).hexdigest()+token).hexdigest()
+ for foo in range(int(seq)): hash = hashlib.new('sha1', hash).hexdigest()
q.insertTag('hash').insertData(hash)
elif auth_ret_query.getTag('digest'):
self.DEBUG("digest authentication supported",(DBG_INIT,DBG_NODE_IQ))
digest = q.insertTag('digest')
- digest.insertData(hashlib.new('sha1',
- self.getIncomingID() + passwd).hexdigest() )
+ idp = self.getIncomingID() + passwd
+ if isinstance(idp, UnicodeType):
+ idp = idp.encode('uft-8')
+ digest.insertData(hashlib.new('sha1', idp).hexdigest() )
else:
self.DEBUG("plain text authentication supported",(DBG_INIT,DBG_NODE_IQ))
q.insertTag('password').insertData(passwd)
@@ -729,7 +742,7 @@ class Protocol(xmlstream.Node):
def asNode(self):
"""Back compartibility method"""
- print 'WARNING! "asNode()" method is obsolette, use Protocol object as Node object instead.'
+ print('WARNING! "asNode()" method is obsolette, use Protocol object as Node object instead.')
return self
def getError(self):
@@ -822,7 +835,7 @@ class Protocol(xmlstream.Node):
XML document"""
x = self.setX(namespace)
- if type(payload) == type('') or type(payload) == type(u''):
+ if isinstance(payload, StringType):
payload = xmlstream.NodeBuilder(payload).getDom()
x.kids = [] # should be a method for this realy
@@ -961,7 +974,7 @@ class Message(Protocol):
return m
def build_reply(self, reply_txt=''):
- print "WARNING: build_reply method is obsolette. Use buildReply instead."
+ print("WARNING: build_reply method is obsolette. Use buildReply instead.")
return self.buildReply(reply_txt)
#############################################################################
@@ -1059,7 +1072,7 @@ class Iq(Protocol):
if q is None:
q = self.insertTag('query')
- if type(payload) == type('') or type(payload) == type(u''):
+ if isinstance(payload, StringType):
payload = xmlstream.NodeBuilder(payload).getDom()
if not add: q.kids = []
@@ -1138,7 +1151,7 @@ class Roster:
def getStatus(self, jid): ## extended
"""Returns the 'status' value for a Roster item with the given jid."""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
return self._data[jid]['status']
return None
@@ -1146,7 +1159,7 @@ class Roster:
def getShow(self, jid): ## extended
"""Returns the 'show' value for a Roster item with the given jid."""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
return self._data[jid]['show']
return None
@@ -1155,7 +1168,7 @@ class Roster:
"""Returns the 'online' status for a Roster item with the given jid.
"""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
return self._data[jid]['online']
return None
@@ -1164,7 +1177,7 @@ class Roster:
"""Returns the 'subscription' status for a Roster item with the given
jid."""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
return self._data[jid]['sub']
return None
@@ -1172,7 +1185,7 @@ class Roster:
def getName(self,jid):
"""Returns the 'name' for a Roster item with the given jid."""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
return self._data[jid]['name']
return None
@@ -1181,7 +1194,7 @@ class Roster:
""" Returns the lsit of groups associated with the given roster item.
"""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
return self._data[jid]['groups']
return None
@@ -1189,7 +1202,7 @@ class Roster:
def getAsk(self,jid):
"""Returns the 'ask' status for a Roster item with the given jid."""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
return self._data[jid]['ask']
return None
@@ -1233,7 +1246,7 @@ class Roster:
jid = ustr(jid) # just in case
online = 'offline'
if ask: online = 'pending'
- if self._data.has_key(jid): # update it
+ if jid in self._data: # update it
self._data[jid]['name'] = name
self._data[jid]['groups'] = groups
self._data[jid]['ask'] = ask
@@ -1255,13 +1268,13 @@ class Roster:
def _setOnline(self,jid,val):
"""Used internally - private"""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
self._data[jid]['online'] = val
if self._listener != None:
self._listener("update", jid, {'online' : val})
else: ## fall back
jid_basic = JID(jid).getStripped()
- if self._data.has_key(jid_basic):
+ if jid_basic in self._data:
self._data[jid_basic]['online'] = val
if self._listener != None:
self._listener("update", jid_basic, {'online' : val})
@@ -1270,13 +1283,13 @@ class Roster:
def _setShow(self,jid,val):
"""Used internally - private"""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
self._data[jid]['show'] = val
if self._listener != None:
self._listener("update", jid, {'show' : val})
else: ## fall back
jid_basic = JID(jid).getStripped()
- if self._data.has_key(jid_basic):
+ if jid_basic in self._data:
self._data[jid_basic]['show'] = val
if self._listener != None:
self._listener("update", jid_basic, {'show' : val})
@@ -1285,13 +1298,13 @@ class Roster:
def _setStatus(self,jid,val):
"""Used internally - private"""
jid = ustr(jid)
- if self._data.has_key(jid):
+ if jid in self._data:
self._data[jid]['status'] = val
if self._listener != None:
self._listener("update", jid, {'status' : val})
else: ## fall back
jid_basic = JID(jid).getStripped()
- if self._data.has_key(jid_basic):
+ if jid_basic in self._data:
self._data[jid_basic]['status'] = val
if self._listener != None:
self._listener("update", jid_basic, {'status' : val})
@@ -1299,7 +1312,7 @@ class Roster:
def _remove(self,jid):
"""Used internally - private"""
- if self._data.has_key(jid):
+ if jid in self._data:
del self._data[jid]
if self._listener != None:
self._listener("remove", jid, {})
@@ -1397,8 +1410,11 @@ class Component(Connection):
def auth(self,secret):
"""will disconnect on failure"""
+ idp = self.getIncomingID() + secret
+ if isinstance(idp, UnicodeType):
+ idp = idp.encode('uft-8')
self.send( u"<handshake id='1'>%s</handshake>"
- % hashlib.new('sha1', self.getIncomingID() + secret ).hexdigest()
+ % hashlib.new('sha1', idp).hexdigest()
)
while not self._auth_OK:
self.DEBUG("waiting on handshake")
diff --git jabberpy-0.5-0/jabber/xmlstream.py jabberpy-0.5-0/jabber/xmlstream.py
index e8fdcab..7e72708 100644
--- jabberpy-0.5-0/jabber/xmlstream.py
+++ jabberpy-0.5-0/jabber/xmlstream.py
@@ -34,14 +34,21 @@ import time, sys, re, socket
from select import select
from base64 import encodestring
import xml.parsers.expat
-import debug
+
+if sys.version_info[0] == 3:
+ from . import debug
+ UnicodeType = str
+ BytesType = bytes
+else:
+ BytesType = str
+ UnicodeType = unicode
+ import debug
+
+
_debug=debug
VERSION = "0.5"
-False = 0
-True = 1
-
TCP = 1
STDIO = 0
TCP_SSL = 2
@@ -83,7 +90,7 @@ class Node:
"""A simple XML DOM like class"""
def __init__(self, tag=None, parent=None, attrs={}, payload=[], node=None):
if node:
- if type(node)<>type(self): node=NodeBuilder(node).getDom()
+ if type(node) != type(self): node=NodeBuilder(node).getDom()
self.name,self.namespace,self.attrs,self.data,self.kids,self.parent = \
node.name,node.namespace,node.attrs,node.data,node.kids,node.parent
else:
@@ -244,7 +251,8 @@ class NodeBuilder:
self.__depth = 0
self._dispatch_depth = 1
- if data: self._parser.Parse(data,1)
+ if data:
+ self._parser.Parse(data.__str__(), 1)
def unknown_starttag(self, tag, attrs):
"""XML Parser callback"""
@@ -258,7 +266,7 @@ class NodeBuilder:
self._ptr.kids.append(Node(tag=tag,parent=self._ptr,attrs=attrs))
self._ptr = self._ptr.kids[-1]
else: ## it the stream tag:
- if attrs.has_key('id'):
+ if 'id' in attrs:
self._incomingID = attrs['id']
self.last_is_data = False
@@ -322,7 +330,7 @@ class Stream(NodeBuilder):
try:
self._logFH = open(log,'w')
except:
- print "ERROR: can open %s for writing" % log
+ print("ERROR: can open %s for writing" % log)
sys.exit(0)
else: ## assume its a stream type object
self._logFH = log
@@ -361,9 +369,9 @@ class Stream(NodeBuilder):
If supplied data is not unicode string, ENCODING
is used for convertion. Avoid this!
Always send your data as a unicode string."""
- if type(raw_data) == type(''):
+ if isinstance(raw_data, BytesType):
self.DEBUG('Non-utf-8 string "%s" passed to Stream.write! Treating it as %s encoded.'%(raw_data,ENCODING))
- raw_data = unicode(raw_data,ENCODING)
+ raw_data = UnicodeType(raw_data,ENCODING)
data_out = raw_data.encode('utf-8')
try:
self._write(data_out)
@@ -469,7 +477,7 @@ class Client(Stream):
af, socktype, proto, canonname, sa = r
try:
self._sock = socket.socket(af, socktype, proto)
- except socket.error, msg:
+ except socket.error:
self._sock = None
continue
try:
@@ -477,7 +485,8 @@ class Client(Stream):
self._sock.connect((self._proxy['host'], self._proxy['port']))
else:
self._sock.connect((self._hostIP, self._port))
- except socket.error, e:
+ except socket.error:
+ e = sys.exc_info()[1]
self._sock.close()
self._sock = None
self.DEBUG("socket error: "+str(e),DBG_CONN_ERROR)
@@ -501,7 +510,7 @@ class Client(Stream):
if self._proxy:
self.DEBUG("Proxy connected",DBG_INIT)
- if self._proxy.has_key('type'): type = self._proxy['type'].upper()
+ if 'type' in self._proxy: type = self._proxy['type'].upper()
else: type = 'CONNECT'
connector = []
if type == 'CONNECT':
@@ -515,7 +524,7 @@ class Client(Stream):
connector.append('Pragma: no-cache')
connector.append('Host: %s:%s'%(self._hostIP,self._port))
connector.append('User-Agent: Jabberpy/'+VERSION)
- if self._proxy.has_key('user') and self._proxy.has_key('password'):
+ if 'user' in self._proxy and 'password' in self._proxy:
credentials = '%s:%s'%(self._proxy['user'],self._proxy['password'])
credentials = encodestring(credentials).strip()
connector.append('Proxy-Authorization: Basic '+credentials)
@@ -526,7 +535,7 @@ class Client(Stream):
self._read , self._write = bak
try: proto,code,desc=reply.split('\n')[0].split(' ',2)
except: raise error('Invalid proxy reply')
- if code<>'200': raise error('Invalid proxy reply: %s %s %s'%(proto,code,desc))
+ if code != '200': raise error('Invalid proxy reply: %s %s %s'%(proto,code,desc))
while reply.find('\n\n') == -1: reply += self.read().replace('\r','')
self.DEBUG("Jabber server connected",DBG_INIT)
@@ -574,16 +583,16 @@ class Server:
def serve(self):
- print 'select-server loop starting'
+ print('select-server loop starting')
while 1:
- print "LOOPING"
+ print("LOOPING")
readables, writeables, exceptions = select(self.readsocks,
self.writesocks, [])
for sockobj in readables:
if sockobj in self. mainsocks: # for ready input sockets
newsock, address = sockobj.accept() # accept not block
- print 'Connect:', address, id(newsock)
+ print('Connect:', address, id(newsock))
self.readsocks.append(newsock)
self._makeNewStream(newsock)
# add to select list, wait
@@ -591,7 +600,7 @@ class Server:
# client socket: read next line
data = sockobj.recv(1024)
# recv should not block
- print '\tgot', data, 'on', id(sockobj)
+ print('\tgot', data, 'on', id(sockobj))
if not data: # if closed by the clients
sockobj.close() # close here and remv from
self.readsocks.remove(sockobj)
diff --git jabberpy-0.5-0/setup.py jabberpy-0.5-0/setup.py
index 11f6f81..84c5369 100644
--- jabberpy-0.5-0/setup.py
+++ jabberpy-0.5-0/setup.py
@@ -5,14 +5,14 @@ try:
from distutils.core import setup
except:
if sys.version[0] < 2:
- print "jabber.py requires at least python 2.0"
- print "Setup cannot continue."
+ print("jabber.py requires at least python 2.0")
+ print("Setup cannot continue.")
sys.exit(1)
- print "You appear not to have the Python distutils modules"
- print "installed. Setup cannot continue."
- print "You can manually install jabberpy by coping the jabber"
- print "directory to your /python-libdir/site-packages"
- print "directory."
+ print("You appear not to have the Python distutils modules")
+ print("installed. Setup cannot continue.")
+ print("You can manually install jabberpy by coping the jabber")
+ print("directory to your /python-libdir/site-packages")
+ print("directory.")
sys.exit(1)
setup(name="jabber.py",

View File

@ -0,0 +1,42 @@
diff --git jabberpy-0.5-0/jabber/jabber.py jabberpy-0.5-0/jabber/jabber.py
index 3074aa5..ab9d9b3 100644
--- jabber/jabber.py
+++ jabber/jabber.py
@@ -65,7 +65,8 @@ An example of usage for a simple client would be ( only psuedo code !)
# $Id: jabber.py,v 1.58 2004/01/18 05:27:10 snakeru Exp $
import xmlstream
-import sha, time
+import time
+import hashlib
debug=xmlstream.debug
@@ -524,15 +525,15 @@ class Client(Connection):
token = auth_ret_query.getTag('token').getData()
seq = auth_ret_query.getTag('sequence').getData()
self.DEBUG("zero-k authentication supported",(DBG_INIT,DBG_NODE_IQ))
- hash = sha.new(sha.new(passwd).hexdigest()+token).hexdigest()
- for foo in xrange(int(seq)): hash = sha.new(hash).hexdigest()
+ hash = hashlib.new('sha1', hashlib.new('sha1', passwd).hexdigest()+token).hexdigest()
+ for foo in xrange(int(seq)): hash = hashlib.new('sha1', hash).hexdigest()
q.insertTag('hash').insertData(hash)
elif auth_ret_query.getTag('digest'):
self.DEBUG("digest authentication supported",(DBG_INIT,DBG_NODE_IQ))
digest = q.insertTag('digest')
- digest.insertData(sha.new(
+ digest.insertData(hashlib.new('sha1',
self.getIncomingID() + passwd).hexdigest() )
else:
self.DEBUG("plain text authentication supported",(DBG_INIT,DBG_NODE_IQ))
@@ -1397,7 +1398,7 @@ class Component(Connection):
def auth(self,secret):
"""will disconnect on failure"""
self.send( u"<handshake id='1'>%s</handshake>"
- % sha.new( self.getIncomingID() + secret ).hexdigest()
+ % hashlib.new('sha1', self.getIncomingID() + secret ).hexdigest()
)
while not self._auth_OK:
self.DEBUG("waiting on handshake")

143
SPECS/jabberpy.spec Normal file
View File

@ -0,0 +1,143 @@
%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%global srcname jabberpy
Name: %{srcname}
Version: 0.5
# Used like this because upstream releases like 0.5-0
Release: 0.38%{?dist}
Summary: Python xmlstream and jabber IM protocol libs
License: LGPLv2+
URL: http://sourceforge.net/projects/jabberpy/
Source0: http://downloads.sf.net/sourceforge/%{srcname}/%{srcname}-%{version}-0.tar.gz
Patch0: jabberpy-no-init.patch
Patch1: jabberpy-clean-sockets.patch
Patch2: jabberpy-ipv6.patch
Patch3: jabberpy-sha-deprecation.patch
Patch4: jabberpy-proxy-read.patch
Patch5: jabberpy-python3.patch
BuildArch: noarch
%description
jabber.py is a Python module for the jabber instant messaging
protocol. jabber.py deals with the xml parsing and socket code,
leaving the programmer to concentrate on developing quality jabber
based applications with Python.
%package -n python3-%{srcname}
Summary: Python xmlstream and jabber IM protocol libs
BuildRequires: python3-devel
Requires: %{__python3}
%description -n python3-%{srcname}
jabber.py is a Python module for the jabber instant messaging
protocol. jabber.py deals with the xml parsing and socket code,
leaving the programmer to concentrate on developing quality jabber
based applications with Python.
This module contains python3 bindings.
%prep
%setup -q -n %{srcname}-%{version}-0
chmod -x examples/*.py
%patch0 -p1 -b .no-init
%patch1 -p1 -b .clean-sockets
%patch2 -p0 -b .ipv6
%patch3 -p0 -b .sha-deprecation
%patch4 -p1 -b .proxy
%patch5 -p1 -b .python3
%build
%py3_build
%install
%py3_install
%files -n python3-%{srcname}
%doc examples README
%{python3_sitelib}/*
%changelog
* Thu Sep 20 2018 Tomas Orsava <torsava@redhat.com> - 0.5-0.38
- Require the Python interpreter directly instead of using the package name
- Related: rhbz#1619153
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-0.37
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-0.36
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-0.35
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Mon Dec 19 2016 Miro Hrončok <mhroncok@redhat.com> - 0.5-0.34
- Rebuild for Python 3.6
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.33
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
* Wed May 4 2016 Miroslav Suchy <msuchy@redhat.com> 0.5-0.32
- improve python3 support
* Thu Apr 28 2016 Miroslav Suchy <msuchy@redhat.com> 0.5-0.31
- add support for python3
- more of removal of old sha crypto
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.5-0.30
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.29
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Tue Jul 8 2014 Milan Zazrivec <mzazrivec@redhat.com> 0.5-0.29
- fix sha module deprecation warning
- use blocking read in initial communication with http proxy
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.28
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.27
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.26
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.25
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.24
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Fri Sep 23 2011 Milan Zazrivec <mzazrivec@redhat.com> 0.5-0.23
- 670881 - IPv6 support for jabberpy
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.22
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Wed Jul 21 2010 David Malcolm <dmalcolm@redhat.com> - 0.5-0.21
- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.20
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-0.19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 0.5-0.18
- Rebuild for Python 2.6
* Fri Oct 24 2008 Michael Stahnke <stahnma@fedoraproject.org> 0.5.0.17
- Minor Spec tweaks for review
* Fri Oct 10 2008 Michael Stahnke <stahnma@fedoraproject.org> 0.5-0.16
- Clean up for Fedora Review and submission
* Wed Sep 3 2008 Jesus Rodriguez <jesusr@redhat.com> 0.5-0.15
- remove reliance on external version file
* Tue Oct 09 2007 Pradeep Kilambi <pkilambi@redhat.com>
- clean dangling ports left out by jabberpy
* Mon Jun 14 2004 Mihai Ibanescu <misa@redhat.com>
- Initial build
- Patched to add a __init__ file