view rvinterf/misc/sendsp.c @ 915:7b805007dcfc

etmsync: slight "main" refactoring in preparation for multiple programs
author Space Falcon <falcon@ivan.Harhan.ORG>
date Tue, 08 Sep 2015 18:26:42 +0000
parents 5d9001f0c3aa
children
line wrap: on
line source

/*
 * This hack-utility sends a GPF System Primitive given on the command line
 * to a target GSM device via rvinterf.
 */

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

char *socket_pathname = "/tmp/rvinterf_socket";

main(argc, argv)
	char **argv;
{
	char *stackdest, *primarg;
	unsigned intlen;
	u_char sendpkt[MAX_PKT_TO_TARGET];
	unsigned pktlen;

	if (argc < 3) {
usage:		fprintf(stderr, "usage: %s [-s socket] stackdest primarg\n",
			argv[0]);
		exit(1);
	}
	if (strcmp(argv[1], "-s")) {
		if (argc != 3)
			goto usage;
		stackdest = argv[1];
		primarg = argv[2];
	} else {
		if (argc != 5)
			goto usage;
		socket_pathname = argv[2];
		stackdest = argv[3];
		primarg = argv[4];
	}
	if (strlen(stackdest) > 4) {
		fprintf(stderr,
		"error: stack destination arg may not exceed 4 characters\n");
		exit(1);
	}
	intlen = 12 + strlen(primarg) + 1;
	pktlen = intlen + 4;
	if (pktlen > MAX_PKT_TO_TARGET) {
		fprintf(stderr, "error: max pkt to target limit exceeded\n");
		exit(1);
	}
	/* fill out the packet */
	sendpkt[0] = RVT_L23_HEADER;
	sendpkt[1] = 0xB7;	/* system prim */
	sendpkt[2] = intlen;
	sendpkt[3] = intlen >> 8;
	/* send zeros for the timestamp */
	sendpkt[4] = 0;
	sendpkt[5] = 0;
	sendpkt[6] = 0;
	sendpkt[7] = 0;
	/* as far as TI's sw is concerned, we are PCO */
	sendpkt[8] = 'P';
	sendpkt[9] = 'C';
	sendpkt[10] = 'O';
	sendpkt[11] = ' ';
	sprintf(sendpkt + 12, "%-4s%s", stackdest, primarg);
	/* send it! */
	send_pkt_to_target(sendpkt, pktlen);
	exit(0);
}