sipgate:
authorSandro Knauß <knauss@netzguerilla.net>
Thu, 18 Nov 2010 03:02:23 +0100
changeset 64 7d4ddab659ad
parent 63 3df3da063cff
child 65 56fa0d1a921c
sipgate: - fax wird nun als string erwartet - fax wird nun als xmlrpclib.Binary übertragen - mehr debug messages
iro/anbieter/sipgate.py
--- a/iro/anbieter/sipgate.py	Thu Nov 18 03:00:47 2010 +0100
+++ b/iro/anbieter/sipgate.py	Thu Nov 18 03:02:23 2010 +0100
@@ -16,12 +16,15 @@
 from telnumber import telnumber, NotATelNumber
 import ConfigParser
 import xmlrpclib
-import base64
 import logging
 logger=logging.getLogger("sipgate")
 
 class NoValidStatusCode(Exception):
-    pass
+     def __init__(self, value):
+         self.value = value
+     
+     def __str__(self):
+         return repr(self.value)
 
 class sipgate(anbieter):
     """
@@ -53,30 +56,30 @@
     def sendFAX(self,fax,recipients):
         """send the PDF file $fax  to $recipients"""
         logger.debug('sipgate.sendFAX(%s,%s)'%(fax,  str(recipients)))
-        logger.debug(fax.getAttachment(0));
-        pdf=open(fax.getAttachment(0),"rb")
         args={
                 "TOS" : "fax",
-                "Content" : base64.encodestring(pdf.read())
+                "Content" : xmlrpclib.Binary(fax.getAttachment(0)),
                 }
-        pdf.close()
         self.__send(args,recipients)
 
     def __connect(self):
         """connect to sipgate XMLRPC Server"""
         logger.debug("sipgate.__connect()-"+self.url%(self.user,"XXXXXXXX"))
-   
-        self.samurai=xmlrpclib.Server(self.url%(self.user,self.password)).samurai
+        
+        self.serv=xmlrpclib.ServerProxy(self.url%(self.user,self.password)) 
+        self.samurai=self.serv.samurai
+
         args_identify = {
                 "ClientName"    : "anbieter.py",
                 "ClientVersion" : "V1.0",
                 "ClientVendor"  : "Sandro Knauss"
                 }
-                
         self.__send_method(self.samurai.ClientIdentify, args_identify)
+        return self.serv
 
     def __send_method(self, func, args=None):
         """execute $func and test weather if the func  ran successfully or not"""
+        logger.debug("sipgate.__send_method(func,%s)"%( args))
 
         if args==None:
             xmlrpc_result = func()
@@ -84,16 +87,15 @@
             xmlrpc_result = func(args)
         if xmlrpc_result['StatusCode'] != 200:
             raise NoValidStatusCode("There was an error during identification to the server! %d %s"% (xmlrpc_result['StatusCode'], xmlrpc_result['StatusString']))
-        
-  
+        logger.debug("sipgate.__send_method(..):ok"); 
         return xmlrpc_result
 
     def __send(self,args,recipients):
         """main sending method - sending the args to $recipients"""
         sended=[]
 
-        self.__connect()
-        logger.debug('sipgate.__send(%s,%s)'%(str(args),  str(recipients)))
+        serv=self.__connect()
+        logger.debug('sipgate.__send(%s,%s)'%(args,  recipients))
         for recipient in recipients:
             try:
                 tel = telnumber(recipient)
@@ -103,10 +105,10 @@
                 sended.append(tel)
 				
                 args["RemoteUri"]="sip:%s%s@sipgate.net"%(tel.land,tel.number)
-                self.__send_method(self.samurai.SessionInitiate, args)
+                self.__send_method(serv.samurai.SessionInitiate, args)
                 self.updateStatus(arranged=recipient)
             
-            except NotATelNumber, NoValidStatusCode:
+            except (NotATelNumber, NoValidStatusCode):
                 self.updateStatus(failed=recipient)
 
         self.__disconnect()
@@ -149,4 +151,7 @@
 
     def __disconnect(self):
         """disconnect xmlrpc client"""
+        logger.debug('sipgate.__disconnect()')
+        self.samurai=None
+        self.serv=None
         self.xmlrpc=None