- support reception of color fax documents
git-svn-id: https://svn.ibp.de/svn/capisuite/trunk/capisuite@120 4ebea2bb-67d4-0310-8558-a5799e421b66
This commit is contained in:
parent
6832b7a392
commit
7c4423720a
|
@ -230,13 +230,25 @@
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>aktueller Ghostscript mit cfax-Patch</term>
|
<term>aktueller Ghostscript mit cfax-Patch</term>
|
||||||
<listitem><para>Aktuelle Ghostscript-Versionen enthalten ein Device, um die
|
<listitem><para>Aktuelle Ghostscript-Versionen enthalten ein Device, um die
|
||||||
oben erwähnten SFF-Dateien zu erstellen. Wenn Sie eine ältere Version haben,
|
oben erwähnten SFF-Dateien zu erstellen. Wenn Sie eine ältere Version haben,
|
||||||
brauchen Sie den Patch von
|
brauchen Sie den Patch von
|
||||||
<ulink url="http://sfftools.sourceforge.net/ghostscript.html"/>. Um zu
|
<ulink url="http://sfftools.sourceforge.net/ghostscript.html"/>. Um zu
|
||||||
prüfen, ob Ihre GhostScript-Version diesen Patch bereits hat, rufen Sie bitte
|
prüfen, ob Ihre GhostScript-Version diesen Patch bereits hat, rufen Sie bitte
|
||||||
<command>gs --help</command> auf und sehen nach, ob Sie das Device
|
<command> auf und sehen nach, ob Sie das Device
|
||||||
<literal>cfax</literal> in der langen Liste der unterstützten Devices
|
<literal>cfax</literal> in der langen Liste der unterstützten Devices
|
||||||
finden können.</para>
|
finden können.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>jpeg2ps</term>
|
||||||
|
<listitem><para>Das <command>jpeg2ps</command>-Kommando wird zur Konvertierung von Farbfaxen in
|
||||||
|
das PostScript-Format für die Mailzustellung benötigt. Sie brauchen es nicht, wenn Sie keine
|
||||||
|
Farbfaxe empfangen wollen. Unglücklicherweise gibt es wegen eines Treiberfehlers momentan keine
|
||||||
|
Möglichkeit, den Empfang von Faxdokumenten bei AVM-ISDN-Karten komplett zu deaktivieren. Wenn Ihnen
|
||||||
|
also jemand ein Farbfax schicken sollte (was nach meiner Erfahrung nur sehr selten vorkommt), dann
|
||||||
|
bekommen Sie eine Fehlermeldung per Mail, wenn Sie dieses Programm nicht installiert haben.
|
||||||
|
Wenn Ihre Linux-Distribution dieses Paket nicht enthält, können Sie es von
|
||||||
|
<ulink url="http://www.pdflib.com/jpeg2ps/"/> herunterladen.
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
|
@ -1660,6 +1672,9 @@ is not present, current time as returned by localtime() is used.
|
||||||
einige kleine Tools gefunden, die Peter Schäfer geschrieben hat und die wir hier verwenden
|
einige kleine Tools gefunden, die Peter Schäfer geschrieben hat und die wir hier verwenden
|
||||||
werden.</para>
|
werden.</para>
|
||||||
|
|
||||||
|
<para>CapiSuite kann auch Farbfaxe empfangen, welche in einem speziellen Dateiformat abgelegt
|
||||||
|
werden, das ich CFF genannt habe.</para>
|
||||||
|
|
||||||
<sect3 id="create_sff"><title>Erzeugen eines SFF</title>
|
<sect3 id="create_sff"><title>Erzeugen eines SFF</title>
|
||||||
<para>In aktuellen Ghostscript-Versionen gibt es einen Patch von Peter, um SF-Dateien zu
|
<para>In aktuellen Ghostscript-Versionen gibt es einen Patch von Peter, um SF-Dateien zu
|
||||||
erstellen. Um zu prüfen, ob Ihr Ghostscript das schon unterstützt,
|
erstellen. Um zu prüfen, ob Ihr Ghostscript das schon unterstützt,
|
||||||
|
@ -1697,7 +1712,23 @@ is not present, current time as returned by localtime() is used.
|
||||||
konvertieren können.
|
konvertieren können.
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
|
<sect3 id="cff"><title>Farbfaxe - das CFF-Format</title>
|
||||||
|
<para>Es gibt eine Erweiterung zum Fax-Standard, die die Übertragung von farbigen
|
||||||
|
Dokumenten erlaubt. Sie wird nur selten benutzt, aber da einige User sie trotzdem
|
||||||
|
benötigten, habe ich den Empfang solcher Dokumente mittlerweile in CapiSuite realisiert.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>Das CFF-Format (ich weiß nicht sicher, ob das ein offizieller Name für das Format ist)
|
||||||
|
scheint eine JPEG-Datei mit spezieller Kodierung zu sein. Die meisten Programme, die
|
||||||
|
JPEG-Dateien unterstützen, sollten CFF-Dateien ebenfalls öffnen können. Eventuell müssen
|
||||||
|
Sie die Datei von <filename>.cff</filename> in <filename>.jpg</filename> umbenennen, bevor
|
||||||
|
Sie sie öffnen können.
|
||||||
|
|
||||||
|
<para>Leider kenne ich momentan keinen Weg, dieses Format manuell zu erzeugen.
|
||||||
|
Daher unterstützt CapiSuite bis jetzt nur den Empfang solcher Dokumente. Wenn Sie
|
||||||
|
mehr darüber wissen sollten oder den JPEG-Standard gut kennen, dann kontaktieren
|
||||||
|
Sie mich bitte!
|
||||||
|
</sect3>
|
||||||
</sect2>
|
</sect2>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
|
|
|
@ -214,6 +214,17 @@
|
||||||
find the device <literal>cfax</literal> in the long list of supported devices.</para>
|
find the device <literal>cfax</literal> in the long list of supported devices.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>jpeg2ps</term>
|
||||||
|
<listitem><para>The <command>jpeg2ps</command> command is used to convert color fax files to the
|
||||||
|
PostScript format for mail delivery. It's not so important, unless you want to be able to receive
|
||||||
|
color faxes. Unfortunately, there's currently no way to disable the reception of color faxes with
|
||||||
|
AVM cards due to a bug in the AVM CAPI driver. So if someone sends you a color fax (which seems to
|
||||||
|
be a very rare case), you'll need this package - unless you'll get a mail stating this error.
|
||||||
|
If your distribution doesn't have this packages, you can download it from
|
||||||
|
<ulink url="http://www.pdflib.com/jpeg2ps/"/>.
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
</variablelist>
|
</variablelist>
|
||||||
</sect3>
|
</sect3>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
@ -1491,6 +1502,9 @@ is not present, current time as returned by localtime() is used.
|
||||||
Finally I found some small tools written by Peter Schäfer, which we can
|
Finally I found some small tools written by Peter Schäfer, which we can
|
||||||
use here.</para>
|
use here.</para>
|
||||||
|
|
||||||
|
<para>CapiSuite is also able to receive color fax files which will be stored in
|
||||||
|
a special file format I called CFF.</para>
|
||||||
|
|
||||||
<sect3 id="create_sff"><title>Creating a SFF</title>
|
<sect3 id="create_sff"><title>Creating a SFF</title>
|
||||||
<para>In current Ghostscript releases, a patch from Peter has been
|
<para>In current Ghostscript releases, a patch from Peter has been
|
||||||
included to produce SF files. To see if your Ghostscript already
|
included to produce SF files. To see if your Ghostscript already
|
||||||
|
@ -1526,7 +1540,20 @@ is not present, current time as returned by localtime() is used.
|
||||||
any other useful format with the TIFF tools, for example <command>tiff2ps</command>.
|
any other useful format with the TIFF tools, for example <command>tiff2ps</command>.
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
|
<sect3 id="cff"><title>Color faxes - the CFF format</title>
|
||||||
|
<para>There exists an enhancement to the fax standard which allows to transfer
|
||||||
|
documents in color. It's not very widely used, but as some people wanted it for CapiSuite,
|
||||||
|
I added support for receiving this faxes with CapiSuite.</para>
|
||||||
|
|
||||||
|
<para>The CFF format (I don't know if this is an official name for the format) seems
|
||||||
|
to be some sort of JPEG file with a special encoding. Most programs who can handle
|
||||||
|
JPEG files should be able to open it. Perhaps you must rename it from
|
||||||
|
<filename>.cff</filename> to <filename>.jpg</filename> first, before it will be recognized.</para>
|
||||||
|
|
||||||
|
<para>Currently, I don't know a nice way to create this format manually. Therefore,
|
||||||
|
CapiSuite currently only supports the reception of these files. If someone knows
|
||||||
|
more about it or knows the JPEG standards well, please contace me!</para>
|
||||||
|
</sect3>
|
||||||
</sect2>
|
</sect2>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# -----------------------------------------------------------
|
# -----------------------------------------------------------
|
||||||
# copyright : (C) 2002 by Gernot Hillier
|
# copyright : (C) 2002 by Gernot Hillier
|
||||||
# email : gernot@hillier.de
|
# email : gernot@hillier.de
|
||||||
# version : $Revision: 1.9 $
|
# version : $Revision: 1.10 $
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -161,7 +161,7 @@ def sendMIMEMail(mail_from,mail_to,mail_subject,mail_type,text,attachment):
|
||||||
|
|
||||||
basename=attachment[:attachment.rindex('.')+1]
|
basename=attachment[:attachment.rindex('.')+1]
|
||||||
try:
|
try:
|
||||||
if (mail_type=="sff"):
|
if (mail_type=="sff"): # normal fax file
|
||||||
# sff -> tif
|
# sff -> tif
|
||||||
ret=os.spawnlp(os.P_WAIT,"sfftobmp","sfftobmp","-tif",attachment,basename+"tif")
|
ret=os.spawnlp(os.P_WAIT,"sfftobmp","sfftobmp","-tif",attachment,basename+"tif")
|
||||||
if (ret or not os.access(basename+"tif",os.F_OK)):
|
if (ret or not os.access(basename+"tif",os.F_OK)):
|
||||||
|
@ -173,7 +173,7 @@ def sendMIMEMail(mail_from,mail_to,mail_subject,mail_type,text,attachment):
|
||||||
command="tiff2ps -a "+escape(basename+"tif")+" | ps2pdf - -"
|
command="tiff2ps -a "+escape(basename+"tif")+" | ps2pdf - -"
|
||||||
tiff2pdf=popen2.Popen3(command)
|
tiff2pdf=popen2.Popen3(command)
|
||||||
if (tiff2pdf.poll()!=-1):
|
if (tiff2pdf.poll()!=-1):
|
||||||
raise "conv-error","Error while calling tiff2pdf or ps2pdf. Not installed?"
|
raise "conv-error","Error while calling tiff2ps or ps2pdf. Not installed?"
|
||||||
tiff2pdf.tochild.close() # we don't need the input pipe
|
tiff2pdf.tochild.close() # we don't need the input pipe
|
||||||
# create attachment with pdf stream
|
# create attachment with pdf stream
|
||||||
filepart = email.MIMEBase.MIMEBase("application","pdf",name=os.path.basename(basename)+"pdf")
|
filepart = email.MIMEBase.MIMEBase("application","pdf",name=os.path.basename(basename)+"pdf")
|
||||||
|
@ -185,7 +185,31 @@ def sendMIMEMail(mail_from,mail_to,mail_subject,mail_type,text,attachment):
|
||||||
raise "conv-error","Error "+str(ret)+" occured during tiff2ps or ps2pdf"
|
raise "conv-error","Error "+str(ret)+" occured during tiff2ps or ps2pdf"
|
||||||
os.unlink(basename+"tif")
|
os.unlink(basename+"tif")
|
||||||
email.Encoders.encode_base64(filepart)
|
email.Encoders.encode_base64(filepart)
|
||||||
elif (mail_type=="la"):
|
elif (mail_type=="cff"): # color fax file
|
||||||
|
# cff -> ps
|
||||||
|
ret=os.spawnlp(os.P_WAIT,"jpeg2ps","jpeg2ps",attachment,"-o",basename+"ps")
|
||||||
|
if (ret or not os.access(basename+"ps",os.F_OK)):
|
||||||
|
raise "conv-error","Can't convert cff to ps. jpeg2ps not installed?"
|
||||||
|
# tif -> ps -> pdf
|
||||||
|
# the first pipe must be handled by the shell so that the output of
|
||||||
|
# of ps2pdf can be read immediately. Handling this shell in Python
|
||||||
|
# leads to an overflow of the ps2pdf output pipe...
|
||||||
|
command="ps2pdf "+escape(basename+"ps")+" -"
|
||||||
|
ps2pdf=popen2.Popen3(command)
|
||||||
|
if (ps2pdf.poll()!=-1):
|
||||||
|
raise "conv-error","Error while calling ps2pdf. Not installed?"
|
||||||
|
ps2pdf.tochild.close() # we don't need the input pipe
|
||||||
|
# create attachment with pdf stream
|
||||||
|
filepart = email.MIMEBase.MIMEBase("application","pdf",name=os.path.basename(basename)+"pdf")
|
||||||
|
filepart.add_header('Content-Disposition','attachment',filename=os.path.basename(basename)+"pdf")
|
||||||
|
filepart.set_payload(ps2pdf.fromchild.read())
|
||||||
|
ps2pdf.fromchild.close()
|
||||||
|
ret=ps2pdf.wait()
|
||||||
|
if (ret!=0):
|
||||||
|
raise "conv-error","Error "+str(ret)+" occured during ps2pdf"
|
||||||
|
os.unlink(basename+"ps")
|
||||||
|
email.Encoders.encode_base64(filepart)
|
||||||
|
elif (mail_type=="la"): # voice file
|
||||||
# la -> wav
|
# la -> wav
|
||||||
# don't use stdout as sox needs a file to be able to seek in it otherwise the header will be incomplete
|
# don't use stdout as sox needs a file to be able to seek in it otherwise the header will be incomplete
|
||||||
ret = os.spawnlp(os.P_WAIT,"sox","sox",attachment,basename+"wav")
|
ret = os.spawnlp(os.P_WAIT,"sox","sox",attachment,basename+"wav")
|
||||||
|
@ -317,6 +341,9 @@ def sayNumber(call,number,curr_user,config):
|
||||||
capisuite.audio_send(call,getAudio(config,curr_user,i+".la"),1)
|
capisuite.audio_send(call,getAudio(config,curr_user,i+".la"),1)
|
||||||
|
|
||||||
# $Log: cs_helpers.pyin,v $
|
# $Log: cs_helpers.pyin,v $
|
||||||
|
# Revision 1.10 2003/05/25 13:38:30 gernot
|
||||||
|
# - support reception of color fax documents
|
||||||
|
#
|
||||||
# Revision 1.9 2003/04/24 21:04:20 gernot
|
# Revision 1.9 2003/04/24 21:04:20 gernot
|
||||||
# - replace functions deprecated in Python 2.2.2 (mainly related to the email
|
# - replace functions deprecated in Python 2.2.2 (mainly related to the email
|
||||||
# module)
|
# module)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
# copyright : (C) 2002 by Gernot Hillier
|
# copyright : (C) 2002 by Gernot Hillier
|
||||||
# email : gernot@hillier.de
|
# email : gernot@hillier.de
|
||||||
# version : $Revision: 1.6 $
|
# version : $Revision: 1.7 $
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -73,13 +73,6 @@ def callIncoming(call,service,call_from,call_to):
|
||||||
capisuite.connect_voice(call,int(delay))
|
capisuite.connect_voice(call,int(delay))
|
||||||
voiceIncoming(call,call_from,call_to,curr_user,config)
|
voiceIncoming(call,call_from,call_to,curr_user,config)
|
||||||
elif (curr_service==capisuite.SERVICE_FAXG3):
|
elif (curr_service==capisuite.SERVICE_FAXG3):
|
||||||
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)
|
|
||||||
capisuite.connect_faxG3(call,stationID,headline,0)
|
|
||||||
faxIncoming(call,call_from,call_to,curr_user,config)
|
faxIncoming(call,call_from,call_to,curr_user,config)
|
||||||
except capisuite.CallGoneError: # catch exceptions from connect_*
|
except capisuite.CallGoneError: # catch exceptions from connect_*
|
||||||
(cause,causeB3)=capisuite.disconnect(call)
|
(cause,causeB3)=capisuite.disconnect(call)
|
||||||
|
@ -112,8 +105,19 @@ def faxIncoming(call,call_from,call_to,curr_user,config):
|
||||||
capisuite.error("user "+curr_user+" is not a valid system user. Disconnecting",call)
|
capisuite.error("user "+curr_user+" is not a valid system user. Disconnecting",call)
|
||||||
capisuite.reject(call,0x34A9)
|
capisuite.reject(call,0x34A9)
|
||||||
return
|
return
|
||||||
filename=cs_helpers.uniqueName(udir+"received/","fax","sff")
|
|
||||||
try:
|
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)
|
||||||
|
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)
|
capisuite.fax_receive(call,filename)
|
||||||
(cause,causeB3)=capisuite.disconnect(call)
|
(cause,causeB3)=capisuite.disconnect(call)
|
||||||
capisuite.log("connection finished with cause 0x%x,0x%x" % (cause,causeB3),1,call)
|
capisuite.log("connection finished with cause 0x%x,0x%x" % (cause,causeB3),1,call)
|
||||||
|
@ -140,7 +144,7 @@ def faxIncoming(call,call_from,call_to,curr_user,config):
|
||||||
capisuite.error("Warning: No valid fax_action definition found for user "+curr_user+" -> assuming SaveOnly")
|
capisuite.error("Warning: No valid fax_action definition found for user "+curr_user+" -> assuming SaveOnly")
|
||||||
action="saveonly"
|
action="saveonly"
|
||||||
if (action=="mailandsave"):
|
if (action=="mailandsave"):
|
||||||
cs_helpers.sendMIMEMail(curr_user, mailaddress, "Fax received from "+call_from+" to "+call_to, "sff",
|
cs_helpers.sendMIMEMail(curr_user, 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"
|
"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)
|
+"See attached file.\nThe original file was saved to file://"+filename+"\n\n", filename)
|
||||||
|
|
||||||
|
@ -402,6 +406,9 @@ def newAnnouncement(call,userdir,curr_user,config):
|
||||||
# History:
|
# History:
|
||||||
#
|
#
|
||||||
# $Log: incoming.py,v $
|
# $Log: incoming.py,v $
|
||||||
|
# Revision 1.7 2003/05/25 13:38:30 gernot
|
||||||
|
# - support reception of color fax documents
|
||||||
|
#
|
||||||
# Revision 1.6 2003/04/10 21:29:51 gernot
|
# Revision 1.6 2003/04/10 21:29:51 gernot
|
||||||
# - support empty destination number for incoming calls correctly (austrian
|
# - support empty destination number for incoming calls correctly (austrian
|
||||||
# telecom does this (sic))
|
# telecom does this (sic))
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
@brief Contains the Python module and integration routines
|
@brief Contains the Python module and integration routines
|
||||||
|
|
||||||
@author Gernot Hillier <gernot@hillier.de>
|
@author Gernot Hillier <gernot@hillier.de>
|
||||||
$Revision: 1.3 $
|
$Revision: 1.4 $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
@ -496,8 +496,9 @@ capisuite_reject(PyObject *, PyObject *args)
|
||||||
@param service with which service we should connect
|
@param service with which service we should connect
|
||||||
@param faxStationID only used for fax connections
|
@param faxStationID only used for fax connections
|
||||||
@param faxHeadline only used for fax connections
|
@param faxHeadline only used for fax connections
|
||||||
|
@return false if exception was rased -> calling function must return NULL then
|
||||||
*/
|
*/
|
||||||
static PyObject*
|
bool
|
||||||
capisuite_connect(Connection *conn, int delay, Connection::service_t service, string faxStationID, string faxHeadline)
|
capisuite_connect(Connection *conn, int delay, Connection::service_t service, string faxStationID, string faxHeadline)
|
||||||
{
|
{
|
||||||
PyThreadState *_save;
|
PyThreadState *_save;
|
||||||
|
@ -514,20 +515,19 @@ capisuite_connect(Connection *conn, int delay, Connection::service_t service, st
|
||||||
catch (CapiMsgError e) {
|
catch (CapiMsgError e) {
|
||||||
Py_BLOCK_THREADS
|
Py_BLOCK_THREADS
|
||||||
PyErr_SetString(BackendError,(e.message()).c_str());
|
PyErr_SetString(BackendError,(e.message()).c_str());
|
||||||
return NULL;
|
return false;
|
||||||
}
|
}
|
||||||
catch (CapiWrongState e) {
|
catch (CapiWrongState e) {
|
||||||
Py_BLOCK_THREADS
|
Py_BLOCK_THREADS
|
||||||
PyErr_SetString(CallGoneError,"Call was finished from partner.");
|
PyErr_SetString(CallGoneError,"Call was finished from partner.");
|
||||||
return NULL;
|
return false;
|
||||||
}
|
}
|
||||||
catch (CapiExternalError e) {
|
catch (CapiExternalError e) {
|
||||||
Py_BLOCK_THREADS
|
Py_BLOCK_THREADS
|
||||||
PyErr_SetString(BackendError,(e.message()).c_str());
|
PyErr_SetString(BackendError,(e.message()).c_str());
|
||||||
return NULL;
|
return false;
|
||||||
}
|
}
|
||||||
Py_XINCREF(Py_None);
|
return true;
|
||||||
return (Py_None);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief Accept an incoming call and connect with voice service.
|
/** @brief Accept an incoming call and connect with voice service.
|
||||||
|
@ -554,7 +554,11 @@ capisuite_connect_voice(PyObject *, PyObject *args)
|
||||||
if (!PyArg_ParseTuple(args,"O&|i:connect_voice",convertConnRef,&conn,&delay))
|
if (!PyArg_ParseTuple(args,"O&|i:connect_voice",convertConnRef,&conn,&delay))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return capisuite_connect(conn,delay,Connection::VOICE,"","");
|
if (capisuite_connect(conn,delay,Connection::VOICE,"","")) {
|
||||||
|
Py_XINCREF(Py_None);
|
||||||
|
return (Py_None);
|
||||||
|
} else
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief Accept an incoming call and connect with fax (analog, group 3) service.
|
/** @brief Accept an incoming call and connect with fax (analog, group 3) service.
|
||||||
|
@ -571,7 +575,11 @@ capisuite_connect_voice(PyObject *, PyObject *args)
|
||||||
- <b>faxStationID (string)</b> the station ID to use
|
- <b>faxStationID (string)</b> the station ID to use
|
||||||
- <b>faxHeadline (string)</b> the fax headline to use
|
- <b>faxHeadline (string)</b> the fax headline to use
|
||||||
- <b>delay (integer, optional)</b> delay in seconds _before_ connection will be established (default: 0=immediate connect)
|
- <b>delay (integer, optional)</b> delay in seconds _before_ connection will be established (default: 0=immediate connect)
|
||||||
@return None
|
@return None or a tuple (stationID,rate,hiRes,format) containing the values:
|
||||||
|
- fax station ID from the calling party (String)
|
||||||
|
- bit rate which was used for connecting
|
||||||
|
- high (1) or low (0) resolution
|
||||||
|
- transmit format: 0=SFF,black&white, 1=ColorJPEG
|
||||||
*/
|
*/
|
||||||
static PyObject*
|
static PyObject*
|
||||||
capisuite_connect_faxG3(PyObject *, PyObject *args)
|
capisuite_connect_faxG3(PyObject *, PyObject *args)
|
||||||
|
@ -583,7 +591,17 @@ capisuite_connect_faxG3(PyObject *, PyObject *args)
|
||||||
if (!PyArg_ParseTuple(args,"O&ss|i:connect_faxG3",convertConnRef,&conn,&faxStationID,&faxHeadline,&delay))
|
if (!PyArg_ParseTuple(args,"O&ss|i:connect_faxG3",convertConnRef,&conn,&faxStationID,&faxHeadline,&delay))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return capisuite_connect(conn,delay,Connection::FAXG3,faxStationID,faxHeadline);
|
if (capisuite_connect(conn,delay,Connection::FAXG3,faxStationID,faxHeadline)) {
|
||||||
|
Connection::fax_info_t* fax_info = conn->getFaxInfo();
|
||||||
|
if (fax_info) {
|
||||||
|
PyObject *r=Py_BuildValue("siii",fax_info->stationID.c_str(),fax_info->rate,fax_info->hiRes,fax_info->format);
|
||||||
|
return (r);
|
||||||
|
} else {
|
||||||
|
Py_XINCREF(Py_None);
|
||||||
|
return (Py_None);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief helper function for capisuite_call_voice() and capisuite_call_faxG3()
|
/** @brief helper function for capisuite_call_voice() and capisuite_call_faxG3()
|
||||||
|
@ -937,6 +955,9 @@ capisuitemodule_init () throw (ApplicationError)
|
||||||
/* History
|
/* History
|
||||||
|
|
||||||
$Log: capisuitemodule.cpp,v $
|
$Log: capisuitemodule.cpp,v $
|
||||||
|
Revision 1.4 2003/05/25 13:38:30 gernot
|
||||||
|
- support reception of color fax documents
|
||||||
|
|
||||||
Revision 1.3 2003/04/17 10:53:54 gernot
|
Revision 1.3 2003/04/17 10:53:54 gernot
|
||||||
- update documentation of capisuite_call_* to the new behaviour (timeout for
|
- update documentation of capisuite_call_* to the new behaviour (timeout for
|
||||||
outgoing calls starts when other party gets signalled), moved error code
|
outgoing calls starts when other party gets signalled), moved error code
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
@brief Contains Connection - Encapsulates a CAPI connection with all its states and methods.
|
@brief Contains Connection - Encapsulates a CAPI connection with all its states and methods.
|
||||||
|
|
||||||
@author Gernot Hillier <gernot@hillier.de>
|
@author Gernot Hillier <gernot@hillier.de>
|
||||||
$Revision: 1.8 $
|
$Revision: 1.9 $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
@ -415,12 +415,12 @@ Connection::connect_b3_active_ind(_cmsg& message) throw (CapiWrongState, CapiExt
|
||||||
fax_info=new fax_info_t;
|
fax_info=new fax_info_t;
|
||||||
fax_info->rate=ncpi[1]+(ncpi[2]<<8);
|
fax_info->rate=ncpi[1]+(ncpi[2]<<8);
|
||||||
fax_info->hiRes=((ncpi[3] & 0x01) == 0x01);
|
fax_info->hiRes=((ncpi[3] & 0x01) == 0x01);
|
||||||
fax_info->colorJPEG=((ncpi[4] & 0x04) == 0x04);
|
fax_info->format=((ncpi[4] & 0x04) == 0x04);
|
||||||
fax_info->pages=ncpi[7]+(ncpi[8]<<8);
|
fax_info->pages=ncpi[7]+(ncpi[8]<<8);
|
||||||
fax_info->stationID.assign(reinterpret_cast<char*>(&ncpi[10]),static_cast<int>(ncpi[9])); // indx 9 helds the length, string starts at 10
|
fax_info->stationID.assign(reinterpret_cast<char*>(&ncpi[10]),static_cast<int>(ncpi[9])); // indx 9 helds the length, string starts at 10
|
||||||
if (debug_level >= 2) {
|
if (debug_level >= 2) {
|
||||||
debug << prefix() << "fax connected with rate " << dec << fax_info->rate
|
debug << prefix() << "fax connected with rate " << dec << fax_info->rate
|
||||||
<< (fax_info->hiRes ? ", hiRes" : ", lowRes") << (fax_info->colorJPEG ? ", JPEG" : "")
|
<< (fax_info->hiRes ? ", hiRes" : ", lowRes") << (fax_info->format ? ", JPEG" : "")
|
||||||
<< ", ID: " << fax_info->stationID << endl;
|
<< ", ID: " << fax_info->stationID << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -449,12 +449,12 @@ Connection::disconnect_b3_ind(_cmsg& message) throw (CapiWrongState)
|
||||||
fax_info=new fax_info_t;
|
fax_info=new fax_info_t;
|
||||||
fax_info->rate=ncpi[1]+(ncpi[2]<<8);
|
fax_info->rate=ncpi[1]+(ncpi[2]<<8);
|
||||||
fax_info->hiRes=((ncpi[3] & 0x01) == 0x01);
|
fax_info->hiRes=((ncpi[3] & 0x01) == 0x01);
|
||||||
fax_info->colorJPEG=((ncpi[4] & 0x04) == 0x04);
|
fax_info->format=((ncpi[4] & 0x04) == 0x04);
|
||||||
fax_info->pages=ncpi[7]+(ncpi[8]<<8);
|
fax_info->pages=ncpi[7]+(ncpi[8]<<8);
|
||||||
fax_info->stationID.assign(reinterpret_cast<char*>(&ncpi[10]),static_cast<int>(ncpi[9])); // indx 9 helds the length, string starts at 10
|
fax_info->stationID.assign(reinterpret_cast<char*>(&ncpi[10]),static_cast<int>(ncpi[9])); // indx 9 helds the length, string starts at 10
|
||||||
if (debug_level >= 2) {
|
if (debug_level >= 2) {
|
||||||
debug << prefix() << "fax finished with rate " << dec << fax_info->rate
|
debug << prefix() << "fax finished with rate " << dec << fax_info->rate
|
||||||
<< (fax_info->hiRes ? ", hiRes" : ", lowRes") << (fax_info->colorJPEG ? ", JPEG" : "")
|
<< (fax_info->hiRes ? ", hiRes" : ", lowRes") << (fax_info->format ? ", JPEG" : "")
|
||||||
<< ", ID: " << fax_info->stationID << ", " << fax_info->pages << " pages" << endl;
|
<< ", ID: " << fax_info->stationID << ", " << fax_info->pages << " pages" << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1040,6 +1040,9 @@ Connection::buildBconfiguration(_cdword controller, service_t service, string fa
|
||||||
/* History
|
/* History
|
||||||
|
|
||||||
$Log: connection.cpp,v $
|
$Log: connection.cpp,v $
|
||||||
|
Revision 1.9 2003/05/25 13:38:30 gernot
|
||||||
|
- support reception of color fax documents
|
||||||
|
|
||||||
Revision 1.8 2003/05/24 13:48:54 gernot
|
Revision 1.8 2003/05/24 13:48:54 gernot
|
||||||
- get fax details (calling station ID, transfer format, ...), handle PLCI
|
- get fax details (calling station ID, transfer format, ...), handle PLCI
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
@brief Contains Connection - Encapsulates a CAPI connection with all its states and methods.
|
@brief Contains Connection - Encapsulates a CAPI connection with all its states and methods.
|
||||||
|
|
||||||
@author Gernot Hillier <gernot@hillier.de>
|
@author Gernot Hillier <gernot@hillier.de>
|
||||||
$Revision: 1.4 $
|
$Revision: 1.5 $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
@ -316,7 +316,7 @@ class Connection
|
||||||
struct fax_info_t {
|
struct fax_info_t {
|
||||||
int rate; ///< bit rate used at connect or at disconnect (depends when you ask for it)
|
int rate; ///< bit rate used at connect or at disconnect (depends when you ask for it)
|
||||||
bool hiRes; ///< fax is transferred in high resolution
|
bool hiRes; ///< fax is transferred in high resolution
|
||||||
bool colorJPEG; ///< color fax transmitted as JPEG file
|
unsigned short format; ///< 0=SFF,black&white, 1=colorJPEG
|
||||||
int pages; ///< number of transmitted pages (only available after disconnection!)
|
int pages; ///< number of transmitted pages (only available after disconnection!)
|
||||||
std::string stationID; ///< ID of the sending station
|
std::string stationID; ///< ID of the sending station
|
||||||
};
|
};
|
||||||
|
@ -657,6 +657,9 @@ class Connection
|
||||||
/* History
|
/* History
|
||||||
|
|
||||||
$Log: connection.h,v $
|
$Log: connection.h,v $
|
||||||
|
Revision 1.5 2003/05/25 13:38:30 gernot
|
||||||
|
- support reception of color fax documents
|
||||||
|
|
||||||
Revision 1.4 2003/05/24 13:48:54 gernot
|
Revision 1.4 2003/05/24 13:48:54 gernot
|
||||||
- get fax details (calling station ID, transfer format, ...), handle PLCI
|
- get fax details (calling station ID, transfer format, ...), handle PLCI
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue