All pastes #637015 Raw Edit

Cody Brocious

public c v1 · immutable
#637015 ·published 2007-07-28 13:24 UTC
rendered paste body
#include <stdio.h>#include <unistd.h>#include <string.h>#include <fcntl.h>#include <termios.h>#include <errno.h>#include <time.h>char buf[65536];void sendCmd(int fd, char *cmd) {	char temp[65536];	memcpy(temp, cmd, strlen(cmd) - 1);	temp[strlen(cmd)-1] = 0;	//printf("send: %s\n", temp);	if(write(fd, cmd, strlen(cmd)) == -1) {		fprintf(stderr, "Shit. %s\n", strerror(errno));		exit(1);	}}void recvResp(int fd) {	int ret;  ret = read(fd, buf, 65535);  if(ret == -1) {    fprintf(stderr, "Shit. %s\n", strerror(errno));    exit(1);  }  if(ret > 1 && (buf[ret - 1] == '\r' || buf[ret - 2] == '\n'))    --ret;  if(ret > 1 && (buf[ret - 1] == '\r' || buf[ret - 2] == '\n'))    --ret;  buf[ret] = 0;  if(buf[0] == '\n' || buf[0] == '\r')    return recvResp(fd);  //printf("recv: %s\n", buf);}struct termios term;int initConn(int speed) {	int fd = open("/dev/tty.baseband", O_RDWR | 0x20000 | O_NOCTTY);	unsigned int blahnull = 0;	unsigned int handshake = TIOCM_DTR | TIOCM_RTS | TIOCM_CTS | TIOCM_DSR;	if(fd == -1) {    fprintf(stderr, "%i(%s)\n", errno, strerror(errno));		exit(1);  }	ioctl(fd, 0x2000740D);	fcntl(fd, 4, 0);	tcgetattr(fd, &term);		ioctl(fd, 0x8004540A, &blahnull);	cfsetspeed(&term, speed);	cfmakeraw(&term);	term.c_cc[VMIN] = 0;	term.c_cc[VTIME] = 2;	term.c_cc[VEOL] = '\r';		term.c_iflag = (term.c_iflag & 0xFFFFF0CD) | 5;	term.c_oflag =  term.c_oflag & 0xFFFFFFFE;	term.c_cflag = (term.c_cflag & 0xFFFC6CFF) | 0x3CB00;	term.c_lflag =  term.c_lflag & 0xFFFFFA77;	term.c_cflag = (term.c_cflag & ~CSIZE) | CS8;	term.c_cflag &= ~PARENB;	term.c_lflag |= ICANON;	term.c_lflag &= ~ECHO;		tcsetattr(fd, TCSANOW, &term);	ioctl(fd, TIOCSDTR);	ioctl(fd, TIOCCDTR);	ioctl(fd, TIOCMSET, &handshake);  sendCmd(fd, "at\r");  recvResp(fd);  if(buf[0] != '0') {    recvResp(fd);    sendCmd(fd, "atv0\r");    recvResp(fd);    recvResp(fd);        sendCmd(fd, "atE0\r");    recvResp(fd);    recvResp(fd);  }}int main(int argc, char **argv) {  int fd;  	unsigned int ctr;	char brutebuf[28] = "AT+CLCK=\"PN\",0,\"00000000\"\r";	time_t start, end;  int kps, foo;  int days, hours, secs, mins;	  fd = initConn(atoi(argv[2]));  if(argc > 3) {    sprintf(buf, "at+ipr=%s\r", argv[3]);    sendCmd(fd, buf);    cfsetspeed(&term, atoi(argv[3]));    tcsetattr(fd, TCSANOW, &term);    recvResp(fd);    return 1;  }	start = time(0);	for(ctr = atoi(argv[1]); ctr < 100000000; ++ctr) {		if((ctr % 1000) == 0 && ctr != 0) {			end = time(0);      kps = 1000 / (unsigned int) difftime(end, start);      foo = (99999999 - ctr) / kps;      secs = foo % 60;      mins = (foo / 60) % 60;      hours = (foo / 60 / 60) % 24;      days = foo / 60 / 60 / 24;			fprintf(              stderr,               "%08u -- %i kps.  Time to completion: %i:%02i:%02i:%02i\n",               ctr, kps,               days, hours, mins, secs              );			start = end;		}		sprintf(brutebuf + 16, "%08u\"\r", ctr);		sendCmd(fd, brutebuf);		recvResp(fd);		if(buf[0] != '4')			fprintf(stderr, "Last command: %s\nRecv: %s\n", brutebuf, buf, buf[0]);	}	close(fd);}