- /* no hdlc and rebuffer */
- if (bchannel->call->rebuffer && !bchannel->call->hdlc) {
- int u = bchannel->rebuffer_usage;
- unsigned char * b = bchannel->rebuffer;
- int l = len;
- int fd = bchannel->call->pipe[1];
-
- d = data;
-
- if (u > 0) {
- if (u + l >= 160) {
- memcpy(b + u, d, 160 - u);
- d += 160 - u;
- l -= 160 - u;
- u = 0;
- if (write(fd, b, 160) < 0)
- goto errout;
- } else {
- memcpy(b + u, d, l);
- u += l;
- l = 0;
- }
- }
-
- while (l >= 160) {
- if (write(fd, d, 160) < 0)
- goto errout;
- d += 160;
- l -= 160;
- }
-
- if (l > 0) {
- memcpy(b, d, l);
- }
- bchannel->rebuffer_usage = u + l;
- } else {
- len = write(bchannel->call->pipe[1], data, len);
- if (len < 0)
- goto errout;
- }