view rvinterf/lowlevel/clientcmd.c @ 207:c70c077243dd

gsm-fw: beginning of config magic for FFS
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Wed, 25 Dec 2013 08:40:20 +0000
parents ec040f521cc2
children 2f285f20d617
line wrap: on
line source

/*
 * This rvinterf module implements the handling of client commands.
 */

#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <unistd.h>
#include "../pktmux.h"
#include "../limits.h"
#include "../localsock.h"
#include "client.h"

void
process_msg_from_client(cli)
	struct client *cli;
{
	int c;
	char logmsg[128];

	switch (cli->rx_buf[0]) {
	case CLI2RVI_WANT_RVTRACE:
		if (cli->rx_msglen != 9) {
			send_local_msg_to_client(cli, "-Bad command length");
			return;
		}
		c = cli->int_rvt_count;
		if (c >= MAX_RVT_INTEREST) {
			send_local_msg_to_client(cli,
					"-Error: too many RVT interests");
			return;
		}
		cli->int_rvt_mask[c] = cli->rx_buf[1] << 24 |
					cli->rx_buf[2] << 16 |
					cli->rx_buf[3] << 8 | cli->rx_buf[4];
		cli->int_rvt_match[c] = cli->rx_buf[5] << 24 |
					cli->rx_buf[6] << 16 |
					cli->rx_buf[7] << 8 | cli->rx_buf[8];
		sprintf(logmsg,
		"*** Client program interested in RVT mask %08X match %08X",
			cli->int_rvt_mask[c], cli->int_rvt_match[c]);
		output_line(logmsg);
		cli->int_rvt_count++;
		send_local_msg_to_client(cli, "+OK");
		return;
	case CLI2RVI_WANT_MUXPROTO:
		if (cli->rx_msglen != 2) {
			send_local_msg_to_client(cli, "-Bad command length");
			return;
		}
		if (cli->rx_buf[1] < 0x12 || cli->rx_buf[1] > 0x18) {
			send_local_msg_to_client(cli,
					"-Unsupported protocol MUX value");
			return;
		}
		sprintf(logmsg,
			"*** Client program interested in MUX proto %02X",
			cli->rx_buf[1]);
		output_line(logmsg);
		cli->int_proto[cli->rx_buf[1] - 0x12] = 1;
		send_local_msg_to_client(cli, "+OK");
		return;
	case CLI2RVI_PKT_TO_TARGET:
		c = cli->rx_msglen - 1;
		if (c < 1 || c > MAX_PKT_TO_TARGET) {
			send_local_msg_to_client(cli,
						 "-Invalid Tx packet length");
			return;
		}
		send_pkt_to_target(cli->rx_buf + 1, c);
		log_sent_packet(cli->rx_buf + 1, c);
		return;
	case CLI2RVI_RAWBYTES_TO_TARGET:
		/* To be implemented */
	default:
		send_local_msg_to_client(cli, "-Unimplemented command");
	}
}