From 107129867260604d2d5fd833f1e8b290d27dc7b6 Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Tue, 18 Jan 2011 20:08:48 +0000 Subject: [PATCH] Okay, by quick and dirty, one should read broken. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40247 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/network/devices/dialup/dialup.cpp | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/add-ons/kernel/network/devices/dialup/dialup.cpp b/src/add-ons/kernel/network/devices/dialup/dialup.cpp index 18ffdca481..1b063b9818 100644 --- a/src/add-ons/kernel/network/devices/dialup/dialup.cpp +++ b/src/add-ons/kernel/network/devices/dialup/dialup.cpp @@ -53,7 +53,7 @@ struct dialup_device : net_device { char escape_string[8]; bigtime_t escape_silence; char hangup_string[16]; - bigtime_t flag_timeout; + bigtime_t tx_flag_timeout; uint32 rx_accm; uint32 tx_accm[8]; }; @@ -226,8 +226,8 @@ dialup_init(const char* name, net_device** _device) device->tx_flag_timeout = 1000000; // default rx & tx Async-Control-Character-Map - memset(device->rx_accm, 0xFF, sizeof(device->rx_accm)); - memset(device->tx_accm, 0xFF, sizeof(device->tx_accm)); + memset(&device->rx_accm, 0xFF, sizeof(device->rx_accm)); + memset(&device->tx_accm, 0xFF, sizeof(device->tx_accm)); *_device = device; return B_OK; @@ -401,8 +401,9 @@ dialup_send_data(net_device* _device, net_buffer* buffer) // more than a second ago. // Otherwise, the prior closing flag sequence is the open flag of this // frame - if (device->flag_timeout - && system_time() - device->last_closing_flag_sequence_time > device->flagt_timeout) { + if (device->tx_flag_timeout + && system_time() - device->last_closing_flag_sequence_time + > device->tx_flag_timeout) { packet[packetSize++] = HDLC_FLAG_SEQUENCE; } @@ -463,15 +464,17 @@ dialup_receive_data(net_device* _device, net_buffer** _buffer) if (buffer == NULL) return ENOBUFS; + status_t status; ssize_t bytesRead; - uint8* data; - packet = (uint8*)malloc(2 + 2 * buffer->size); + uint8* data = NULL; + uint8* packet = (uint8*)malloc(2 + 2 * buffer->size); if (packet == NULL) { status = B_NO_MEMORY; goto err; } - status_t status = gBufferModule->append_size(buffer, device->mtu + HDLC_HEADER_LENGTH, &data); + status = gBufferModule->append_size(buffer, + device->mtu + HDLC_HEADER_LENGTH, (void**)&data); if (status == B_OK && data == NULL) { dprintf("scattered I/O is not yet supported by dialup device.\n"); status = B_NOT_SUPPORTED; @@ -480,9 +483,10 @@ dialup_receive_data(net_device* _device, net_buffer** _buffer) goto err; while (true) { - bytesRead = read(device->fd, data, device->frame_size); + bytesRead = read(device->fd, data, device->mtu + HDLC_HEADER_LENGTH); if (bytesRead < 0) { - + // TODO + } } status = gBufferModule->trim(buffer, bytesRead); @@ -495,10 +499,12 @@ dialup_receive_data(net_device* _device, net_buffer** _buffer) device->stats.receive.packets++; *_buffer = buffer; - return B_OK; + status = B_OK; + goto done; err: gBufferModule->free(buffer); + device->stats.receive.errors++; done: free(packet);