Example #1
0
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);
		}

	}
}
Example #2
0
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;
        }
    }
}