FAX-programm auf 7170?

Status
Für weitere Antworten geschlossen.
So, ich versuchs mal...
Mit dem Signal-Handler kannst du auf die kill-Signale reagieren. (z.B. Konfig neu einlesen)
Code:
/******************************************************************************
 * SigHandler
 ******************************************************************************/

void SigHandler(int signal)
{
    switch(signal)
    {
        case SIGTERM:

            slog ? syslog(LOG_DAEMON | LOG_INFO, "shutdown") : printf("CheckMailD <shutdown>\n");

            intervall = 0;

            break;

        case SIGHUP:

            slog ? syslog(LOG_DAEMON | LOG_INFO, "update") : printf("CheckMailD <update>\n");

            if(!ReadConf())
            {
                intervall = 0;
            }

            break;

        case SIGUSR1:

            online = 1;

            if(slog)
            {
                syslog(LOG_DAEMON | LOG_INFO, "wakeup");
            }
            else
            {
                printf("CheckMailD <wakeup>\n");
            }
            
            break;
            
        case SIGUSR2:

            online = 0;
            
            if(slog)
            {
                syslog(LOG_DAEMON | LOG_INFO, "sleep");
            }
            else
            {
                printf("CheckMailD <sleep>\n");
            }
    }
}
Das ist die daemonize-Funktion:
Code:
/******************************************************************************
 * Daemonize
 ******************************************************************************/

void daemonize()
{
int i,lfp;
char str[10];
    if(getppid()==1) return; /* already a daemon */
    i=fork();
    if (i<0) exit(1); /* fork error */
    if (i>0) exit(0); /* parent exits */
    /* child (daemon) continues */
    setsid(); /* obtain a new process group */
    for (i=getdtablesize();i>=0;--i) close(i); /* close all descriptors */
    i=open("/dev/null",O_RDWR); dup(i); dup(i); /* handle standart I/O */
    umask(027); /* set newly created file permissions */
    chdir(RUNNING_DIR); /* change running directory */
    lfp=open(LOCK_FILE,O_RDWR|O_CREAT,0640);
    if (lfp<0) exit(1); /* can not open */
    if (lockf(lfp,F_TLOCK,0)<0) exit(0);  /*can not lock */
    /* first instance continues */
    sprintf(str,"%d\n",getpid());
    write(lfp,str,strlen(str)); /* record pid to lockfile */
    signal(SIGCHLD,SIG_IGN); /* ignore child */
    signal(SIGTSTP,SIG_IGN); /* ignore tty signals */
    signal(SIGTTOU,SIG_IGN);
    signal(SIGTTIN,SIG_IGN);
    signal(SIGHUP,SigHandler); /* catch hangup signal */
    signal(SIGTERM,SigHandler); /* catch kill signal */
    signal(SIGUSR1,SigHandler);
    signal(SIGUSR2,SigHandler);
}
Da musst du mal schauen, welche Includes du brauchst. Bei Bedarf kann ich die auch noch posten.
Hauptprogramm:
Code:
#define PIDFILE "/var/run/checkmaild.pid"  
#define LOCK_FILE    "/var/lock/checkmail.lock"
#define RUNNING_DIR    "/var/tmp"

int main(int argc, char **argv)
{
...
daemonize();
...
// install sighandler

        if(signal(SIGTERM, SigHandler) == SIG_ERR)
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "Installation of Signalhandler for TERM failed") : printf("CheckMailD <Installation of Signalhandler for TERM failed>\n");

            return -1;
        }

        if(signal(SIGHUP, SigHandler) == SIG_ERR)
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "Installation of Signalhandler for HUP failed") : printf("CheckMailD <Installation of Signalhandler for HUP failed>\n");

            return -1;
        }

        if(signal(SIGUSR1, SigHandler) == SIG_ERR)
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "Installation of Signalhandler for USR1 failed") : printf("CheckMailD <Installation of Signalhandler for USR1 failed>\n");

            return -1;
        }

        if(signal(SIGUSR2, SigHandler) == SIG_ERR)
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "Installation of Signalhandler for USR2 failed") : printf("CheckMailD <Installation of Signalhandler for USR2 failed>\n");

            return -1;
        }
// cleanup          
unlink(PIDFILE);
Nach dem daemonize(); kommen keine Ausgaben mehr auf der Konsole!

MfG Oliver
 
Wenn du wieder mal ein Fax empfängst, dann schau mal im Debug Output nach, ob da was mit 'X Resolution'.. information lost saving value , oder sowas steht. Hat glaub ich irgendwie mit der LibTIff zu tun, aber is jetz erstmal egal.. wie gesagt, erst die MSN geschichte :)

Nichts lieber als das, jetzt wo es so schön funktioniert.... :)

Code:
/var # ./ivcall -d capi/2/0451123456 -a 0451123456 -F /var/tmp/fax3.tif
sine create complex
HDLC carrier up
create integer sine dds
HDLC carrier down
HDLC carrier up
HDLC carrier down
Changed from phase 1 to 4
>>> DIS: 80 00 ce f4 80 80 81 80 80 80 18
HDLC underflow in state 9
Changed from phase 4 to 3
HDLC carrier up
HDLC carrier down
T4 timeout in state 9
Changed from phase 3 to 4
>>> DIS: 80 00 ce f4 80 80 81 80 80 80 18
T2 timeout
Start receiving document
>>> DIS: 80 00 ce f4 80 80 81 80 80 80 18
HDLC underflow in state 9
Changed from phase 4 to 3
HDLC carrier up
HDLC framing OK
<<< TSI: 43 39 37 34 20 37 32 20 39 32 20 31 35 34 20 39 34 2b 20 20 20
TSI without final frame tag
Remote fax gave TSI as: "+49 451 123456"
<<< DCS: 83 00 c6 f0 00
DCS with final frame tag
In state 9
Get at 9600bps, modem 1
Changed from phase 3 to 5
Non-ECM carrier up
Non-ECM carrier down
Non-ECM carrier up
Non-ECM carrier trained
Non-ECM carrier down
Changed from phase 5 to 4
>>> CFR: 84
HDLC underflow in state 5
Post trainability
Changed from phase 4 to 5
Non-ECM carrier up
Non-ECM carrier trained
/var/tmp/fax3.tif: Warning, "XResolution": Information lost writing value (-5.41
93e-315) as (unsigned) RATIONAL.
/var/tmp/fax3.tif: Warning, "YResolution": Information lost writing value (-5.41
93e-315) as (unsigned) RATIONAL.
Changed from phase 5 to 3
HDLC carrier up
HDLC framing OK
<<< EOP: 2f
EOP with final frame tag
In state 5
Changed from phase 3 to 4
* Pages transferred: 1
* Image size: 1728x2512
* Image resolution: 7700x7700
* Transfer rate: 9600
* Bad rows: 0
* Longest bad row run: 0
* Compression type: 2
* Image size: 0
>>> MCF: 8c
HDLC underflow in state 8
Changed from phase 4 to 3
HDLC carrier up
HDLC framing OK
<<< DCN: fb
DCN with final frame tag
In state 8
Disconnecting
Changed from phase 3 to 7
Phase E not successful.
Changed from phase 7 to 8
Got FAX EOF
/var #

Warning, "XResolution"
Warning, "YResolution"
Das scheint das Problem zu sein.......


Und der Versand:
Code:
/var # ./ivcall -d capi/2/0451123456 -F /var/tmp/fax3.tif 0451123456
number 0451123456
sine create complex
HDLC carrier up
create integer sine dds
HDLC carrier down
HDLC carrier up
HDLC framing OK
Changed from phase 2 to 3
HDLC carrier up
HDLC framing OK
<<< CSI: 40 39 37 34 20 37 32 20 39 32 20 31 35 34 20 39 34 2b 20 20 20
CSI without final frame tag
Remote fax gave CSI as: "+49 451 123456"
<<< DIS: 80 00 ee f8 c4 80 90 80 80 98 00
DIS with final frame tag
In state 10
Start sending document
Changed from phase 3 to 4
>>> DCS: 83 00 86 80 80 80 00
HDLC underflow in state 3
Changed from phase 4 to 6
Changed from phase 6 to 3
HDLC carrier up
HDLC framing OK
<<< CFR: 84
CFR with final frame tag
In state 4
Trainability test succeeded
HDLC carrier down
Changed from phase 3 to 6
Changed from phase 6 to 4
>>> EOP: 2f
HDLC underflow in state 14
Changed from phase 4 to 3
HDLC carrier up
HDLC framing OK
<<< RTN: 4c
RTN with final frame tag
In state 14
* Pages transferred: 1
* Image size: 1728x2512
* Image resolution: 8037x3850
* Transfer rate: 9600
* Bad rows: 0
* Longest bad row run: 0
* Compression type: 2
* Image size: 37689
Changed from phase 3 to 4
>>> DCN: fb
HDLC underflow in state 2
Disconnecting
Changed from phase 4 to 7
Phase E not successful.
Changed from phase 7 to 8
Got FAX EOF
/var #


Bei gelegenheit musst Du mir aber bitte mal erklären, wie Du das mit ivcall gemacht hast.... Das würde mich brennend interessieren.....

Wie kann man denn aus ivcall, FastFP, spandsp, iff und libz ein lauffähiges Binary erstellen???

Gib mir doch bitte mal ein Stichwort.... Mit welcher Linux Distribution arbeitest Du?

Gruß
mastertester
 
Zuletzt bearbeitet:
mastertester schrieb:
Bei gelegenheit musst Du mir aber bitte mal erklären, wie Du das mit ivcall gemacht hast.... Das würde mich brennend interessieren.....

Wie kann man denn aus ivcall, FastFP, spandsp, iff und libz ein lauffähiges Binary erstellen???

Alles was du dazu brauchst ist lediglich ein funktionierendes buildroot. ich glaub ich hab mal eines von obenembedded.org mir runtergeladen, dann für den mipsel prozessor configuriert, einmal das make durchlaufen lassen. dann kriegst du die tools mipsel-linux-gcc, etc. mit includes , uclibc und zeugs in nem verzeichnis (staging_dir). Ist aber sicher auch woanders noch beschrieben.

Naja, und das lauffähige binary bekommst du dann, indem du die einzelnen libraries compilierst, in dein staging_dir installierst, und dann ivcall compilierst mit dem LDFLAG -static.

Wenn es dich noch genauer interssiert, dann wart ab bis ich von den ganzen Paketen die Sourcen mit Anleitung für das mipsel buildroot veröffentlicht habe.

PS: ich verwende zum compilieren noch irgend ein veraltetes RedHat Linux, kannst aber auch jede andere distribution nehmen, z.B. aktuelles Debian, weil das buildroot ja alle tools und libraries schon enthält. Du brauchst die ja alle für mipsel und nicht für i386, etc.
 
@Oliver:

Vielen Dank für die Daemonize Codes! Ich werd mir das in den nächsten Tagen anschauen, momentan ist noch das CAPI interface und der listening support (MSNs etc.) dran.

Kennst du dich evtl. auch damit aus, wie man aus nem config file was einliest und parst, und dann alles in ner struct dem programm zu verfügung stellt? Das fänd ich nämlich für die capi variante von ivcall noch sinnvoll (dann kann man noch andere features damit einfach realisieren, wie callthrough, anrufbeantworter, dtmf menü, etc...).
Brauchst jetz dazu nix posten, nur wenn du interesse hast, könntest du dir ja dann, wenn ich sie veröffentlicht habe, die ivcall sourcen anschauen und einen config file parser einbauen, wenn du zeit hast. wär cool.
 
Ich hab das zwar nicht selbst geschrieben, aber es funktioniert, oder gerade deswegen. :gruebel:
Code:
/******************************************************************************
 * ReadConf (0=fail, 1=done)
 ******************************************************************************/

int ReadConf()
{
    FILE *fd_conf;
    char *ptr;
    char line_buffer[256];
    int loop;

    // open config

        if(!(fd_conf = fopen(CFGPATH CFGFILE, "r+")))
        {
            syslog(LOG_DAEMON | LOG_INFO, "generate new Config, please modify and restart Daemon"); 
            printf("CheckMailD <generate new Config, please modify and restart Daemon>\n");

            if(mkdir(CFGPATH, S_IRWXU) == -1 && errno != EEXIST)
            {
                syslog(LOG_DAEMON | LOG_INFO, "could not create ConfigDir");
                printf("CheckMailD <could not create ConfigDir>\n");

                return 0;
            }

            if(!(fd_conf = fopen(CFGPATH CFGFILE, "w")))
            {
                syslog(LOG_DAEMON | LOG_INFO, "could not create Config");
                printf("CheckMailD <could not create Config>\n");

                return 0;
            }

            fprintf(fd_conf, "STARTDELAY=30\n");
            fprintf(fd_conf, "INTERVALL=15\n");
            fprintf(fd_conf, "LOGGING=Y\n");
            fprintf(fd_conf, "LOGMODE=S\n");
            fprintf(fd_conf, "NAME0=\n");
            fprintf(fd_conf, "POP30=\n");
            fprintf(fd_conf, "IMAP0=\n");
            fprintf(fd_conf, "USER0=\n");
            fprintf(fd_conf, "PASS0=\n");
            fprintf(fd_conf, "INBOX0=\n");

            fclose(fd_conf);

            return 0;
        }

    // clear database

        memset(account_db, 0, sizeof(account_db));

        startdelay = intervall = logging = logmode = 0;

    // fill database

        while(fgets(line_buffer, sizeof(line_buffer), fd_conf))
        {
            if((ptr = strstr(line_buffer, "STARTDELAY=")))
            {
                sscanf(ptr + 11, "%d", &startdelay);
            }
            else if((ptr = strstr(line_buffer, "INTERVALL=")))
            {
                sscanf(ptr + 10, "%d", &intervall);
            }
            else if((ptr = strstr(line_buffer, "LOGGING=")))
            {
                sscanf(ptr + 8, "%c", &logging);
            }
            else if((ptr = strstr(line_buffer, "LOGMODE=")))
            {
                sscanf(ptr + 8, "%c", &logmode);
            }
            else if((ptr = strstr(line_buffer, "NAME")) && (*(ptr+5) == '='))
            {
                char index = *(ptr+4);
                if((index >= '0') && (index <= '9'))
                {
                    sscanf(ptr + 6, "%s", account_db[index-'0'].name);
                }
            }
            else if((ptr = strstr(line_buffer, "POP3")) && (*(ptr+5) == '='))
            {
                char index = *(ptr+4);
                if((index >= '0') && (index <= '9'))
                {
                    sscanf(ptr + 6, "%s", account_db[index-'0'].pop3);
                }
            }
            else if((ptr = strstr(line_buffer, "IMAP")) && (*(ptr+5) == '='))
            {
                char index = *(ptr+4);
                if((index >= '0') && (index <= '9'))
                {
                    sscanf(ptr + 6, "%s", account_db[index-'0'].imap);
                }
            }
            else if((ptr = strstr(line_buffer, "USER")) && (*(ptr+5) == '='))
            {
                char index = *(ptr+4);
                if((index >= '0') && (index <= '9'))
                {
                    sscanf(ptr + 6, "%s", account_db[index-'0'].user);
                }
            }
            else if((ptr = strstr(line_buffer, "PASS")) && (*(ptr+5) == '='))
            {
                char index = *(ptr+4);
                if((index >= '0') && (index <= '9'))
                {
                    sscanf(ptr + 6, "%s", account_db[index-'0'].pass);
                }
            }
            else if((ptr = strstr(line_buffer, "INBOX")) && (*(ptr+6) == '='))
            {
                char index = *(ptr+5);
                if((index >= '0') && (index <= '9'))
                {
                    sscanf(ptr + 7, "%s", account_db[index-'0'].inbox);
                }
            }
        }

    // check for update

        if(!startdelay || !intervall || !logging || !logmode )
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "missing Param(s), update Config") : printf("CheckMailD <missing Param(s), update Config>\n");

            rewind(fd_conf);

            if(!startdelay)
            {
                startdelay = 30;
            }

            if(!intervall)
            {
                intervall = 15;
            }

            if(!logging)
            {
                logging = 'Y';
            }

            if(!logmode)
            {
                logmode = 'S';
            }

            fprintf(fd_conf, "STARTDELAY=%d\n", startdelay);
            fprintf(fd_conf, "INTERVALL=%d\n\n", intervall);
            fprintf(fd_conf, "LOGGING=%c\n", logging);
            fprintf(fd_conf, "LOGMODE=%c\n\n", logmode);

            for(loop = 0; loop < 10; loop++)
            {
                fprintf(fd_conf, "\nNAME%d=%s\n", loop, account_db[loop].name);
                fprintf(fd_conf, "POP3%d=%s\n", loop, account_db[loop].pop3);
                fprintf(fd_conf, "IMAP%d=%s\n", loop, account_db[loop].imap);
                fprintf(fd_conf, "USER%d=%s\n", loop, account_db[loop].user);
                fprintf(fd_conf, "PASS%d=%s\n", loop, account_db[loop].pass);
                 fprintf(fd_conf, "INBOX%d=%s\n", loop, account_db[loop].inbox);

                if(!account_db[loop + 1].name[0])
                {
                    break;
                }
            }
        }

        fclose(fd_conf);

    // check config

        if(startdelay < 15 || startdelay > 60)
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "STARTDELAY=%d out of Range, set to \"30\"", startdelay) : printf("CheckMailD <STARTDELAY=%d out of Range, set to \"30\">\n", startdelay);

            startdelay = 30;
        }

        if(!intervall)
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "INTERVALL=0, check Account(s) and Exit") : printf("CheckMailD <INTERVALL=0, check Account(s) and Exit>\n");
        }
        else if(intervall < 5 || intervall > 60)
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "INTERVALL=%d out of Range, set to \"15\"", intervall) : printf("CheckMailD <INTERVALL=%d out of Range, set to \"15\">\n", intervall);

            intervall = 15;
        }

        if(logging != 'Y' && logging != 'N')
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "LOGGING=%c invalid, set to \"N\"", logging) : printf("CheckMailD <LOGGING=%c invalid, set to \"N\">\n", logging);

            logging = 'N';
        }

        if(logmode != 'A' && logmode != 'S')
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "LOGMODE=%c invalid, set to \"S\"", logmode) : printf("CheckMailD <LOGMODE=%c invalid, set to \"S\">\n", logmode);

            logmode = 'S';
        }

        accounts = 0;

        for(loop = 0; loop <= 9; loop++)
        {
            if(account_db[loop].name[0] && (account_db[loop].pop3[0] || account_db[loop].imap[0]) && account_db[loop].user[0] && account_db[loop].pass[0])
            {
                accounts++;
            }
            else
            {
                break;
            }
        }
        
        if(accounts)
        {
            if(logging == 'N')
            {
                slog ? syslog(LOG_DAEMON | LOG_INFO, "check %d Account(s) every %dmin without Logging", accounts, intervall) : printf("CheckMailD <check %d Account(s) every %dmin without Logging>\n", accounts, intervall);
            }
            else if(logmode == 'A')
            {
                slog ? syslog(LOG_DAEMON | LOG_INFO, "check %d Account(s) every %dmin with Logging in Append-Mode", accounts, intervall) : printf("CheckMailD <check %d Account(s) every %dmin with Logging in Append-Mode>\n", accounts, intervall);
            }
            else
            {
                slog ? syslog(LOG_DAEMON | LOG_INFO, "check %d Account(s) every %dmin with Logging in Single-Mode", accounts, intervall) : printf("CheckMailD <check %d Account(s) every %dmin with Logging in Single-Mode>\n", accounts, intervall);
            }

            return 1;
        }
        else
        {
            slog ? syslog(LOG_DAEMON | LOG_INFO, "no valid Accounts found") : printf("CheckMailD <no valid Accounts found>\n");

            return 0;
        }
}

int main(int argc, char **argv)
{
    // read, update or create config

        if(!ReadConf())
        {
            return -1;
        }
}
MfG Oliver
 
Fax auf der FB

Ich möchte mich mal in Eure hochinteressante Diskussion als unbedarfter und experimentierfreuter User einklinken.
Also wenn ich das richtig verstehe, funktioniert der Faxempfang mit der FB einem Drucker und AUSGESCHALLTETEN PC ?
Was fange ich mit der ivcall.gz an. Wie kann ich das also auch mal teste.
Wäre mir am liebsten, wenn mir das jemand in Form eines Hausfrauenrezeptes sagen könnte, also man nehme....:cool:

Mein System: WIN2000, FB 7170
 
Zuletzt bearbeitet:
natalie89 schrieb:
funktioniert der Faxempfang mit der FB einem Drucker und AUSGESCHALLTETEN PC ?
Wenn ich das richtig verstanden habe, ist kein Drucker nötig.
 
ich habe eine Lösung dafür gesucht, das ich meinen PC ausgeschaltet lassen kann und trotzdem Faxe empfangen kann. Hab schon mal mit einem analogen Modem mit Faxspeicher geliebäugelt, wollte dann aber doch nicht in die Steinzeit zurück.
 
natalie89 schrieb:
Hab schon mal mit einem analogen Modem mit Faxspeicher geliebäugelt, wollte dann aber doch nicht in die Steinzeit zurück.
Das hatte ich früher auch, machte aber manchmal Probleme, deswegen läuft bei mir auf meinem fli4l-router ein faxclient, der die Faxe empfängt und nach dem Empfang an meine Mailadresse weiterleitet. Das funktioniert sehr gut. Weil viele Leute eine Fritzbox haben, und die entsprechende Hardware und teilweise auch schon Software dafür in der Box vorhanden ist, wäre die Modifikation der Fritzbox für viele Leute eine hervorragende Alternative zum Faxgerät. Faxe versenden kann man mit der Fritzbox ja sowieso schon.
Ich habe z. B. schon bei mehreren Leuten einen fli4l zusätzlich zur Fritzbox aufgestellt, damit sie Faxe empfangen können. Auf dieses zweite Gerät kann man dann verzichten.
 
fli4l ?

das ist doch was Linuxiges, Oder ? Soviel wie ich weiß ein Server. Dieser läuft doch dann auf ein Rechner. Das bedeutet ich muss trotzdem den Rechner beim Faxempfang anlassen, oder ? Ich habe zwar einen Zweiterechner und auch eine Linuxdistribution darauf, aber so richtig mit fli4l kenne ich mich nichtt aus.
Ich würde das ja gern mal auf den Testrechner probieren, kannst du mir da weiter helfen ?
 
Die Fritzbox ist ein Linux-Rechner, der immer an ist!
Um nicht zu weit O.T. zu kommen, empfehle ich zu warten, bis es funktioniert und noch mal alles zu lesen.
Die Installation von diesem Mod wird sicher viele Grundkenntnisse (linux, telnet, Fritzbox-Konfiguration, ...) voraussetzen.
 
na gut also die FB ist der Linux Server. Da weiß ich doch schon mehr. Ein bisschen mehr darfst du mir schon zutrauen. :D Ich würde nur gern wissen, was ich dazu brauche. Wo ist der MOD. Was sind die Vorraussetzungen. Den FB editor habe ich, falls dieser auch erfoderlich ist.
 
natalie89 schrieb:
Ist nicht Dein ernst, oder?
Wenn Du hier alles (zumindest die letzten) gelesen hättest, wüßtest Du, dass die Programmierer noch in der Testphase stecken, ...
 
ja es gibt doch aber schon erfolgreiche Versuche. Da würde ich es auch gern probieren, ich weiß alles auf eigene Gefahr. :D
Wenn ich dich aber damit jetzt nerven würde, dann warte ich selbstberständlich. Bin nur so interreisrt an diesm Thema. :)
 
Du brauchst Telnet zugang auf die Box, und dann musst du das ivcall.gz runterladen (auch mit wget von der box aus) und aufrufen so wie an der Downloadstelle in diesm Thread beschrieben. Mit "wget URL" musst du dir ausserdem noch ein fax.tiff runterladen, wenn du versenden willst, oder du empfängst nach /var/media/ftp/faxempfang.tif auf deiner 7170 und gehst dann mit ftp <box-ip> und username ftp , passwort egal auf die box und lädst das empfangene tiff-file runter.

Ansononsten warte noch solange bis ich das Programm überarbeitet habe und es eine richtige Anleitung dafür gibt.
 
Klasse, da habe ich doch ein paar Hinweise und werde mich mal damit beschäftigen. Vielen Dank für die superschnellen Antworten :)
 
@flo: also wenn ich dir bei der capi programmierung helfen kann dann sag mir bescheid. Ich habe selbst, allerdings unter Windows, eine capi schnittstelle (capi2032.dll programmiert. Damals für einen Filialtransfer von Zutrittskontrolldaten.
 
the_ncw schrieb:
@flo: also wenn ich dir bei der capi programmierung helfen kann dann sag mir bescheid. Ich habe selbst, allerdings unter Windows, eine capi schnittstelle (capi2032.dll programmiert. Damals für einen Filialtransfer von Zutrittskontrolldaten.

Danke für deine Hilfe, werd ich mal drauf zurückkommen, wenn ichs brauch ;) Im Moment steht aber mal das Interface im Wesentlichen. Kann nur sein, dass später bei Erweiterungen mal ein paar Feinheiten auftreten.

Momentan ist mein Problem noch die LibTIFF .. beim speichern des Faxes werden die Werte für XResoultion und YResolution nicht richtig in den Tags gespeichert. Es wird ein korrekter Float Wert übergeben (77.0 usw.) und dann kommt aber nur -5.139e-315 oder so ähnlich an.
Wenn sich jemand mit LibTIFF und der TIFFSetField Funktion auskennt... ich wäre ihm oder ihr sehr dankbar :)
 
OKi.. das mit der Auflösung und der MSN klappt jetzt.

Jetzt geht nur noch nicht, dass man ein Fax das man mit ivcall empfangen hat wieder mit ivcall versendet!! Keine Ahnung warum, aber irgendwie ist scheinbar das Fax Format anders.
Hierzu wäre es sehr hilfreich, wenn ein paar Leute mal Testfaxe posten würden (auch welche, die mit ivcall empfangen wurden), und dann wiederum jemand anderes probiert diese Testfaxe mit ivcall zu versenden. So können wir mal sehen, welche versendet werden und welche nicht. Evtl. dann auch die Tiff Tags mit nem Tiff Tag Editor anschauen.

Daemon Mode kommt auch demnächst noch...

achja noch der Aufruf Befehl:
zum Empfang: ./ivcall -v 4 -d capi/1/MSN -a -F /var/tmp/recv01.tif -n MeinName
und zum Senden: ./ivcall -v 4 -d capi/1/MSN Zielrufnummer -F /var/tmp/recv01.tif -n MeinName

Und hier das neue binary:
(sourcen folgen bald)

ACHTUNG: neue version, siehe nächste Seite !!
 

Anhänge

  • ivcall.gz
    1.3 MB · Aufrufe: 71
Zuletzt bearbeitet:
hmmmm also bei mir klappt der Fax empfang mit der neuen Version gar nicht mehr als Ausgabe kommt:

sine create complex
create integer sine dds
:..IVCALL..: capi-failed

Ich habe es mit TobitFax und mit einem normalen Fax probiert mit der Alten Version geht es.
 
Status
Für weitere Antworten geschlossen.
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.