def faxIncoming(call,call_from,call_to,curr_user,config,already_connected): try: udir=cs_helpers.getOption(config,"","fax_user_dir") if (udir==None): capisuite.error("global option fax_user_dir not found! -> rejecting call") capisuite.reject(call,0x34A9) return udir=os.path.join(udir,curr_user)+"/" if (not os.access(udir,os.F_OK)): userdata=pwd.getpwnam(curr_user) os.mkdir(udir,0700) os.chown(udir,userdata[2],userdata[3]) if (not os.access(udir+"received/",os.F_OK)): userdata=pwd.getpwnam(curr_user) os.mkdir(udir+"received/",0700) os.chown(udir+"received/",userdata[2],userdata[3]) except KeyError: capisuite.error("user "+curr_user+" is not a valid system user. Disconnecting",call) capisuite.reject(call,0x34A9) return filename="" # assure the variable is defined... try: stationID=cs_helpers.getOption(config,curr_user,"fax_stationID") if (stationID==None): capisuite.error("Warning: fax_stationID not found for user "+curr_user+" -> using empty string") stationID="" headline=cs_helpers.getOption(config,curr_user,"fax_headline","") # empty string is no problem here capisuite.log("call from "+call_from+" to "+call_to+" for "+curr_user+" connecting with fax",1,call) if (already_connected): faxInfo=capisuite.switch_to_faxG3(call,stationID,headline) else: faxInfo=capisuite.connect_faxG3(call,stationID,headline,0) if (faxInfo!=None and faxInfo[3]==1): faxFormat="cff" # color fax else: faxFormat="sff" # normal b&w fax filename=cs_helpers.uniqueName(udir+"received/","fax",faxFormat) capisuite.fax_receive(call,filename) (cause,causeB3)=capisuite.disconnect(call) capisuite.log("connection finished with cause 0x%x,0x%x" % (cause,causeB3),1,call) except capisuite.CallGoneError: # catch this here to get the cause info in the mail (cause,causeB3)=capisuite.disconnect(call) capisuite.log("connection lost with cause 0x%x,0x%x" % (cause,causeB3),1,call) if (os.access(filename,os.R_OK)): cs_helpers.writeDescription(filename, "call_from=\""+call_from+"\"\ncall_to=\""+call_to+"\"\ntime=\"" +time.ctime()+"\"\ncause=\"0x%x/0x%x\"\n" % (cause,causeB3)) userdata=pwd.getpwnam(curr_user) os.chmod(filename,0600) os.chown(filename,userdata[2],userdata[3]) os.chmod(filename[:-3]+"txt",0600) os.chown(filename[:-3]+"txt",userdata[2],userdata[3]) fromaddress=cs_helpers.getOption(config,curr_user,"fax_email_from","") if (fromaddress==""): fromaddress=curr_user mailaddress=cs_helpers.getOption(config,curr_user,"fax_email","") if (mailaddress==""): mailaddress=curr_user action=cs_helpers.getOption(config,curr_user,"fax_action","").lower() if (action not in ("mailandsave","saveonly")): capisuite.error("Warning: No valid fax_action definition found for user "+curr_user+" -> assuming SaveOnly") action="saveonly" if (action=="mailandsave"): cs_helpers.sendMIMEMail(fromaddress, mailaddress, "Fax received from "+call_from+" to "+call_to, faxFormat, "You got a fax from "+call_from+" to "+call_to+"\nDate: "+time.ctime()+"\n\n" +"See attached file.\nThe original file was saved to file://"+filename+"\n\n", filename)
if not os.path.exists(savedir): os.makedirs(savedir) if not os.path.exists(savedir): raise archiveError # create filenames fax_tempsff = os.path.join(cfg.get('tempdir'), cfg.get('temppref') + time.strftime('%Y%m%d%H%M%S_', timenow) + fax_caller + '.sff') fax_temptif = os.path.join(cfg.get('tempdir'), cfg.get('temppref') + time.strftime('%Y%m%d%H%M%S_', timenow) + fax_caller + '.tif') fax_pdffile = os.path.join(savedir, time.strftime('%Y%m%d%H%M%S_', timenow) + fax_caller + '.pdf') # receive fax try: (fax_stationid, fax_bitrate, fax_resolution, fax_color) = capisuite.connect_faxG3( call, cfg.get('stationid'), cfg.get('headline'), cfg.getint('delay')) capisuite.fax_receive(call, fax_tempsff) except: fax_error = capisuite.disconnect(call) capisuite.log('Connection finished with cause 0x%X, 0x%X' % fax_error, 1, call) # check if the received fax really exists if not os.path.exists(fax_tempsff): raise receiveError('No sff file found. (ISDN=0x%X, Protocol=0x%X)' % fax_error) elif not os.path.getsize(fax_tempsff) > 0: raise receiveError('Received sff file is empty') # Faxe von ZF kommen mit einem Fehler, aber werden scheinbar komplett uebertragen. # Pruefung ab das Fax tatsaechlich angekommen ist, geschiet jediglich ueber das bestehen der .sff-Datei #if not fax_error in ((0x3400, 0x0), (0x3480, 0x0), (0x3490, 0x0), (0x3490, 0x3314)): # raise receiveError, 'Transmission error (ISDN=0x%X, Protocol=0x%X)' % fax_error
def faxIncoming(call,call_from,call_to,curr_user,config,already_connected): try: udir=cs_helpers.getOption(config,"","fax_user_dir") if (udir==None): capisuite.error("global option fax_user_dir not found! -> rejecting call") capisuite.reject(call,0x34A9) return udir=os.path.join(udir,curr_user) if (not os.path.exists(udir)): userdata=pwd.getpwnam(curr_user) os.mkdir(udir,0700) os.chown(udir,userdata[2],userdata[3]) if (not os.path.exists(os.path.join(udir,"received"))): userdata=pwd.getpwnam(curr_user) os.mkdir(os.path.join(udir,"received"),0700) os.chown(os.path.join(udir,"received"),userdata[2],userdata[3]) except KeyError: capisuite.error("user %s is not a valid system user. Disconnecting" % curr_user,call) capisuite.reject(call,0x34A9) return filename="" # assure the variable is defined... faxInfo=None try: stationID=cs_helpers.getOption(config,curr_user,"fax_stationID") if (stationID==None): capisuite.error("Warning: fax_stationID not found for user %s -> using empty string" % curr_user) stationID="" headline=cs_helpers.getOption(config,curr_user,"fax_headline","") # empty string is no problem here capisuite.log("call from %s to %s for %s connecting with fax" % (call_from,call_to,curr_user),1,call) if (already_connected): faxInfo=capisuite.switch_to_faxG3(call,stationID,headline) else: faxInfo=capisuite.connect_faxG3(call,stationID,headline,0) if (faxInfo!=None and faxInfo[3]==1): faxFormat="cff" # color fax else: faxFormat="sff" # normal b&w fax filename=cs_helpers.uniqueName(os.path.join(udir,"received"),"fax",faxFormat) faxInfo=capisuite.fax_receive(call,filename) (cause,causeB3)=capisuite.disconnect(call) capisuite.log("connection finished with cause 0x%x,0x%x" % (cause,causeB3),1,call) except capisuite.CallGoneError: # catch this here to get the cause info in the mail (cause,causeB3)=capisuite.disconnect(call) capisuite.log("connection lost with cause 0x%x,0x%x" % (cause,causeB3),1,call) if (os.access(filename,os.R_OK)): cs_helpers.writeDescription(filename, "call_from=\"%s\"\ncall_to=\"%s\"\ntime=\"%s\"\n" \ "cause=\"0x%x/0x%x\"\n" % (call_from,call_to,time.ctime(),cause,causeB3)) userdata=pwd.getpwnam(curr_user) os.chmod(filename,0600) os.chown(filename,userdata[2],userdata[3]) os.chmod("%stxt" % filename[:-3],0600) os.chown("%stxt" % filename[:-3],userdata[2],userdata[3]) fromaddress=cs_helpers.getOption(config,curr_user,"fax_email_from","") if (fromaddress==""): fromaddress=curr_user mailaddress=cs_helpers.getOption(config,curr_user,"fax_email","") if (mailaddress==""): mailaddress=curr_user action=cs_helpers.getOption(config,curr_user,"fax_action","").lower() if (action not in ("mailandsave","saveonly")): capisuite.error("Warning: No valid fax_action definition found for user %s -> assuming SaveOnly" % curr_user) action="saveonly" if (action=="mailandsave"): mailText="You got a fax from %s to %s\nDate: %s" % (call_from,call_to,time.ctime()) if (faxInfo!=None and len(faxInfo)>=5): mailText="%sStation ID: %s\nTransmission Details: bit rate %i " \ "%s %s\nPages: %i\n\nSee attached file.\n" \ "The original file was saved to file://%s " \ "on host \"%s\"." % (mailText,faxInfo[0], \ faxInfo[1],(faxInfo[2] and "hiRes" or "loRes"), \ (faxInfo[3] and "color" or ""),faxInfo[4], \ fileName,os.uname()[1]) cs_helpers.sendMIMEMail(fromaddress, mailaddress, "Fax received from %s to %s" % (call_from,call_to), faxFormat, mailText, filename)