iro/iro.py
changeset 7 07dd2663ac90
parent 6 c5672760138b
child 8 cec27aeb7e69
equal deleted inserted replaced
6:c5672760138b 7:07dd2663ac90
    12 #along with this program; if not, see <http://www.gnu.org/licenses/>.
    12 #along with this program; if not, see <http://www.gnu.org/licenses/>.
    13 
    13 
    14 # Server code
    14 # Server code
    15 
    15 
    16 from xmlrpc import SecureUserDBXMLRPCServer,UserDB
    16 from xmlrpc import SecureUserDBXMLRPCServer,UserDB
    17 import time, os, md5
    17 
    18 from user import User, Admin, NotSupportedFeature
    18 from user import User, Admin, NotSupportedFeature
    19 import content
       
    20 import anbieter
    19 import anbieter
    21 import ConfigParser
    20 import ConfigParser
    22 
    21 
    23 class MyUserDB(UserDB):
    22 class MyUserDB(UserDB):
    24     def __init__(self, userlist,jobqueue):
    23     def __init__(self, userlist,jobqueue):
    25         UserDB.__init__(self, None,userlist,jobqueue)
    24         UserDB.__init__(self, None,userlist,jobqueue)
    26         
    25         
    27     def createUser(self, user):
    26     def createUser(self, user):
    28         self.userlist[self.createHash(user)]=user["class"](self.jobqueue)
    27         self.userlist[self.createHash(user)]=user["class"](self.jobqueue)
    29 
    28 
    30 class Job(object):
       
    31     '''
       
    32     Basic class for all jobs
       
    33     '''   
       
    34     def __init__(self,provider,name):
       
    35         self.provider=provider
       
    36         self.name=name
       
    37         self.status = "init"
       
    38         self.dStatus={"good":[], "failed":[]}
       
    39 
    29 
    40     def start(self):
       
    41         self.status = "started"
       
    42         
       
    43     def stop(self):
       
    44         self.status = "stopped"
       
    45         
       
    46     def getStatus(self,detailed):
       
    47         if detailed and self.status == "started" or self.status == "sended":
       
    48             return self.status, self.dStatus
       
    49         return self.status, {}
       
    50     
       
    51     def getName(self):
       
    52         return self.name
       
    53         
       
    54     def getProvider(self):
       
    55         return self.provider
       
    56         
       
    57     def addGood(self, good):
       
    58         if type(good) == list:
       
    59             self.dStatus['good']=self.dStatus['good']+good
       
    60         else:
       
    61             self.dStatus['good'].append(good)
       
    62     
       
    63     def addFailed(self, failed):
       
    64         if type(failed) == list:
       
    65             self.dStatus['failed']=self.dStatus['failed']+failed
       
    66         else:
       
    67             self.dStatus['failed'].append(failed)
       
    68 
       
    69 class MessageJob(Job):
       
    70     '''
       
    71     A specialized class for smsjobs
       
    72     '''
       
    73     def __init__(self,provider,name, message,recipients):
       
    74         self.message=message
       
    75         self.recipients=recipients
       
    76         Job.__init__(self,provider, name)
       
    77         
       
    78     def stop(self):
       
    79         pass
       
    80         
       
    81     def start(self):
       
    82         Job.start(self)
       
    83         self.provider.setJob(self)
       
    84         self.message.sendto(self.provider, self.recipients)
       
    85         self.status="sended"
       
    86 
       
    87     def getMessage(self):
       
    88         return self.message
       
    89         
       
    90     def getRecipients(self):
       
    91         return self.recipients
       
    92  
    30  
    93 
    31 
    94 class MySipgate(anbieter.sipgate):
    32 class MySipgate(anbieter.sipgate):
    95     
    33     
    96     def __init__(self,user="",password="" ):
    34     def __init__(self,user="",password="" ):
   133         if arranged:
    71         if arranged:
   134             self.job.addGood(arranged)
    72             self.job.addGood(arranged)
   135         
    73         
   136         if failed:
    74         if failed:
   137             self.job.addFailed(failed)
    75             self.job.addFailed(failed)
   138 						
       
   139 class Jobs:
       
   140     '''
       
   141     Providing an list of jobs; each new job gets a hash id
       
   142     '''
       
   143     def __init__(self,manager, queue,provider):
       
   144         self.jobs={}
       
   145         self.manager=manager
       
   146         self.queue=queue
       
   147         self.provider=provider
       
   148         
       
   149 
    76 
   150     def __getitem__(self,key):
       
   151         return self.jobs[key]
       
   152 
    77 
   153     def __registerJob__(self, job):
       
   154         id = self._createID()
       
   155         self.jobs[id]=job
       
   156         self.queue.put(job)
       
   157         return id
       
   158 
       
   159     def newSMS(self,message,recipients):
       
   160         '''
       
   161         creates a new SMS
       
   162         '''
       
   163         job=self.manager.MessageJob(self.provider["sms"],message, content.SMS(message),recipients)
       
   164         return self.__registerJob__(job)
       
   165 
       
   166     def newFAX(self,subject, fax,recipients):
       
   167         '''
       
   168         creates a new Fax
       
   169         '''
       
   170         job=self.manager.MessageJob(self.provider["fax"],subject, content.FAX(subject, fax),recipients)
       
   171         return self.__registerJob__(job)
       
   172 
       
   173     def newMail(self,subject, body,recipients):
       
   174         '''
       
   175         creates a new Mail
       
   176         '''
       
   177         job=self.manager.MessageJob(self.provider["mail"],subject, content.Mail(subject, body),recipients)
       
   178         return self.__registerJob__(job) 
       
   179 
       
   180     def _createID(self):
       
   181         '''
       
   182         creats a random hash id
       
   183         '''
       
   184         while True:
       
   185             m = md5.new()
       
   186             m.update(str(time.time()))
       
   187             m.update(os.urandom(10))
       
   188             if not self.jobs.has_key(m.hexdigest):
       
   189                 self.jobs[m.hexdigest()]=None
       
   190                 break
       
   191         return m.hexdigest()
       
   192 
    78 
   193 def start(userlist):
    79 def start(userlist):
   194     from multiprocessing import Queue
    80     from multiprocessing import Queue
   195     from multiprocessing.managers import BaseManager
    81     from multiprocessing.managers import BaseManager
   196     
    82     
   213     smstrade=MySmstrade()
    99     smstrade=MySmstrade()
   214     smstrade.read_basic_config("iro.conf")
   100     smstrade.read_basic_config("iro.conf")
   215     
   101     
   216     #Benutzerdatenbank erstellen
   102     #Benutzerdatenbank erstellen
   217     queue = Queue()
   103     queue = Queue()
   218     provider={"sms":sip, "fax":sip, "mail":localhost}
   104     provider={"sms":{"sipgate":sip, "smstrade":smstrade, "default":sip, }, 
       
   105                     "fax":{"sipgate":sip, "default":sip, }, 
       
   106                     "mail":{"localhost":localhost, "default":localhost, }, }
       
   107     
   219     jobqueue=Jobs(manager,  queue, provider)
   108     jobqueue=Jobs(manager,  queue, provider)
   220     userdb=MyUserDB(userlist,jobqueue)
   109     userdb=MyUserDB(userlist,jobqueue)
   221 
   110 
   222     #working thread erstellen
   111     #working thread erstellen
   223     from worker import Worker
   112     from worker import Worker