7 static char buf[102400];
10 page(Modem *m, char *spool)
16 * Start data reception. We should receive CONNECT in response
17 * to +FDR, then data reception starts when we send DC2.
19 m->valid &= ~(Vfhng|Vfet|Vfpts);
20 if(command(m, "AT+FDR") != Eok)
23 switch(response(m, 30)){
27 if((r = createfaxfile(m, spool)) != Eok)
29 if((r = putmchar(m, "\022")) != Eok)
37 return seterror(m, Eattn);
43 verbose("starting page %d", m->pageno);
45 while((r = getmchar(m, &c, 6)) == Eok){
47 if((r = getmchar(m, &c, 3)) != Eok)
52 verbose("B%2.2ux", c);
57 if(count >= sizeof(buf)){
58 if(write(m->pagefd, buf, count) < 0){
60 return seterror(m, Esys);
65 verbose("page %d done, count %d", m->pageno, count);
66 if(count && write(m->pagefd, buf, count) < 0){
68 return seterror(m, Esys);
74 * Wait for either OK or ERROR.
76 switch(r = response(m, 20)){
83 verbose("page: response %d", r);
89 receive(Modem *m, char *spool)
94 switch(r = page(m, spool)){
98 * Check we have a valid page reponse.
100 if((m->valid & Vfhng) == 0 && (m->valid & (Vfet|Vfpts)) != (Vfet|Vfpts)){
101 verbose("receive: invalid page reponse: #%4.4ux", m->valid);
102 return seterror(m, Eproto);
106 * Was the page successfully received?
109 if((m->valid & Vfpts) && m->fpts[0] != 1)
113 * Another page of the same document, a new document
115 * If no more pages we still have to get the FHNG, so
116 * the code is just the same as if there was another
122 case 0: /* another page */
123 case 2: /* no more pages */
127 case 1: /* new document */
129 * Bug: currently no way to run the
130 * fax-received process for this, so it
140 verbose("receive: invalid FET: %d", m->fet);
141 return seterror(m, Eproto);
145 * All done or hangup error.
146 * On error remove all pages in the current document.
149 if(m->valid & Vfhng){
152 verbose("receive: FHNG: %d", m->fhng);
154 for(r = 1; r <= m->pageno; r++){
157 setpageid(pageid, spool, m->time, m->pid, r);
161 return seterror(m, Eattn);
171 faxreceive(Modem *m, char *spool)
175 verbose("faxdaemon");
176 if((r = initfaxmodem(m)) != Eok)
180 * assume that the phone has been answered and
181 * we have received +FCON
189 * I wish I knew how to set the default parameters on the
190 * MT1432 modem (+FIP in Class 2.0).
192 return receive(m, spool);