static void r3964_receive_buf(struct tty_struct *tty, const unsigned char *cp, char *fp, int count) { struct r3964_info *pInfo = (struct r3964_info *)tty->disc_data; const unsigned char *p; char *f, flags = 0; int i; for (i = count, p = cp, f = fp; i; i--, p++) { if (f) flags = *f++; if (flags == TTY_NORMAL) { receive_char(pInfo, *p); } else { receive_error(pInfo, flags); } } }
static void handle_rrq(tftp_client_state_t *cli) { short pak_type; short *netbuf_shorts = (short *)cli->block_buffer; sock_errno_e retcode; if (cli->state_flags & TFTP_SRV_BLKSIZE) { handle_oack_transmit(cli); } else { handle_data_transmit(cli); } while (1) { retcode = receive_packet(cli->client, cli->block_buffer, &cli->block_buffer_size); switch (retcode) { case SOCK_ERR_OK: break; case SOCK_ERR_TIMEOUT: if (handle_timeout(cli)) { continue; } else { return; } break; default: return; } pak_type = ntohs(netbuf_shorts[0]); switch (pak_type) { case TFTP_ACK: if (SOCK_ERR_OK == receive_ack(cli->block_buffer, cli->blockid)) { if (cli->state_flags & TFTP_SRV_LASTACK) { return; } else { handle_data_transmit(cli); } } break; case TFTP_ERROR: receive_error(cli->block_buffer); return; case TFTP_RRQ: /* FALLTHRU */ case TFTP_WRQ: /* FALLTHRU */ case TFTP_DATA: /* FALLTHRU */ case TFTP_OACK: tftp_log_message("Unhandled packet type %d in %s\n", pak_type, __FUNCTION__); break; default: tftp_log_message("Unknown packet type %d in %s\n", pak_type, __FUNCTION__); break; } } }