[code language="c"]
#include <sys/select.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <stropts.h>
#include <sys/conf.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <termios.h>
#include <sys/stream.h>
#include <sys/stropts.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
#define max(x,y) ((x) > (y) ? (x) : (y))
#define BUFF_SIZE 8192 // 5000
char buff[BUFF_SIZE];
char buff2[BUFF_SIZE] =
"\x01\x41\x41\x41\x01\x42\x42\x42\x01\x43\x43\x43\x01\x44\x44\x44"
"\x01\x45\x45\x45\x01\x46\x46\x46\x01\x47\x47\x47\x01\x48\x48\x48"
"\x01\x49\x49\x49\x01\x4a\x4a\x4a\x01\x4b\x4b\x4b\x01\x4c\x4c\x4c"
"\x01\x4d\x4d\x4d\x01\x4e\x4e\x4e\x01\x4f\x4f\x4f\x01\x50\x50\x50"
"\x01\x51\x51\x51\x01\x52\x52\x52\x01\x53\x53\x53\x01\x54\x54\x54"
"\x01\x55\x55\x55\x01\x56\x56\x56\x01\x57\x57\x57\x01\x58\x58\x58"
"\x01\x59\x59\x59\x01\x5a\x5a\x5a\x02\x41\x41\x41\x02\x42\x42\x42"
"\x02\x43\x43\x43\x02\x44\x44\x44\x02\x45\x45\x45\x02\x46\x46\x46"
"\x02\x47\x47\x47\x02\x48\x48\x48\x02\x49\x49\x49\x02\x4a\x4a\x4a"
"\x02\x4b\x4b\x4b\x02\x4c\x4c\x4c\x02\x4d\x4d\x4d\x02\x4e\x4e\x4e"
"\x02\x4f\x4f\x4f\x02\x50\x50\x50\x02\x51\x51\x51\x02\x52\x52\x52"
"\x02\x53\x53\x53\x02\x54\x54\x54\x02\x55\x55\x55\x02\x56\x56\x56"
"\x02\x57\x57\x57\x02\x58\x58\x58\x02\x59\x59\x59\x02\x5a\x5a\x5a"
"\x03\x41\x41\x41\x03\x42\x42\x42\x03\x43\x43\x43\x03\x44\x44\x44"
"\x03\x45\x45\x45\x03\x46\x46\x46\x03\x47\x47\x47\x03\x48\x48\x48"
"\x03\x49\x49\x49\x03\x4a\x4a\x4a\x03\x4b\x4b\x4b\x03\x4c\x4c\x4c"
"\x03\x4d\x4d\x4d\x03\x4e\x4e\x4e\x03\x4f\x4f\x4f\x03\x50\x50\x50"
"\x03\x51\x51\x51\x03\x52\x52\x52\x03\x53\x53\x53\x03\x54\x54\x54"
"\x03\x55\x55\x55\x03\x56\x56\x56\x03\x57\x57\x57\x03\x58\x58\x58"
"\x03\x59\x59\x59\x03\x5a\x5a\x5a\x04\x41\x41\x41\x04\x42\x42\x42"
"\x04\x43\x43\x43\x04\x44\x44\x44\x04\x45\x45\x45\x04\x46\x46\x46"
"\x04\x47\x47\x47\x04\x48\x48\x48\x04\x49\x49\x49\x04\x4a\x4a\x4a"
"\x04\x4b\x4b\x4b\x04\x4c\x4c\x4c\x04\x4d\x4d\x4d\x04\x4e\x4e\x4e"
"\x04\x4f\x4f\x4f\x04\x50\x50\x50\x04\x51\x51\x51\x04\x52\x52\x52"
"\x04\x53\x53\x53\x04\x54\x54\x54\x04\x55\x55\x55\x04\x56\x56\x56"
"\x04\x57\x57\x57\x04\x58\x58\x58\x04\x59\x59\x59\x04\x5a\x5a\x5a"
"\x05\x41\x41\x41\x05\x42\x42\x42\x05\x43\x43\x43\x05\x44\x44\x44"
"\x05\x45\x45\x45\x05\x46\x46\x46\x05\x47\x47\x47\x05\x48\x48\x48"
"\x05\x49\x49\x49\x05\x4a\x4a\x4a\x05\x4b\x4b\x4b\x05\x4c\x4c\x4c"
"\x05\x4d\x4d\x4d\x05\x4e\x4e\x4e\x05\x4f\x4f\x4f\x05\x50\x50\x50"
"\x05\x51\x51\x51\x05\x52\x52\x52\x05\x53\x53\x53\x05\x54\x54\x54"
"\x05\x55\x55\x55\x05\x56\x56\x56\x05\x57\x57\x57\x05\x58\x58\x58"
"\x05\x59\x59\x59\x05\x5a\x5a\x5a\x06\x41\x41\x41\x06\x42\x42\x42"
"\x06\x43\x43\x43\x06\x44\x44\x44\x06\x45\x45\x45\x06\x46\x46\x46"
"\x06\x47\x47\x47\x06\x48\x48\x48\x06\x49\x49\x49\x06\x4a\x4a\x4a"
"\x06\x4b\x4b\x4b\x06\x4c\x4c\x4c\x06\x4d\x4d\x4d\x06\x4e\x4e\x4e"
"\x06\x4f\x4f\x4f\x06\x50\x50\x50\x06\x51\x51\x51\x06\x52\x52\x52"
"\x06\x53\x53\x53\x06\x54\x54\x54\x06\x55\x55\x55\x06\x56\x56\x56"
"\x06\x57\x57\x57\x06\x58\x58\x58\x06\x59\x59\x59\x06\x5a\x5a\x5a"
"\x07\x41\x41\x41\x07\x42\x42\x42\x07\x43\x43\x43\x07\x44\x44\x44"
"\x07\x45\x45\x45\x07\x46\x46\x46\x07\x47\x47\x47\x07\x48\x48\x48"
"\x07\x49\x49\x49\x07\x4a\x4a\x4a\x07\x4b\x4b\x4b\x07\x4c\x4c\x4c"
"\x07\x4d\x4d\x4d\x07\x4e\x4e\x4e\x07\x4f\x4f\x4f\x07\x50\x50\x50"
"\x07\x51\x51\x51\x07\x52\x52\x52\x07\x53\x53\x53\x07\x54\x54\x54"
"\x07\x55\x55\x55\x07\x56\x56\x56\x07\x57\x57\x57\x07\x58\x58\x58"
"\x07\x59\x59\x59\x07\x5a\x5a\x5a\x08\x41\x41\x41\x08\x42\x42\x42"
"\x08\x43\x43\x43\x08\x44\x44\x44\x08\x45\x45\x45\x08\x46\x46\x46"
"\x08\x47\x47\x47\x08\x48\x48\x48\x08\x49\x49\x49\x08\x4a\x4a\x4a"
"\x08\x4b\x4b\x4b\x08\x4c\x4c\x4c\x08\x4d\x4d\x4d\x08\x4e\x4e\x4e"
"\x08\x4f\x4f\x4f\x08\x50\x50\x50\x08\x51\x51\x51\x08\x52\x52\x52"
"\x08\x53\x53\x53\x08\x54\x54\x54\x08\x55\x55\x55\x08\x56\x56\x56"
"\x08\x57\x57\x57\x08\x58\x58\x58\x08\x59\x59\x59\x08\x5a\x5a\x5a"
"\x09\x41\x41\x41\x09\x42\x42\x42\x09\x43\x43\x43\x09\x44\x44\x44"
"\x09\x45\x45\x45\x09\x46\x46\x46\x09\x47\x47\x47\x09\x48\x48\x48"
"\x09\x49\x49\x49\x09\x4a\x4a\x4a\x09\x4b\x4b\x4b\x09\x4c\x4c\x4c"
"\x09\x4d\x4d\x4d\x09\x4e\x4e\x4e\x09\x4f\x4f\x4f\x09\x50\x50\x50"
"\x09\x51\x51\x51\x09\x52\x52\x52\x09\x53\x53\x53\x09\x54\x54\x54"
"\x09\x55\x55\x55\x09\x56\x56\x56\x09\x57\x57\x57\x09\x58\x58\x58"
"\x09\x59\x59\x59\x09\x5a\x5a\x5a\x0a\x41\x41\x41\x0a\x42\x42\x42"
"\x0a\x43\x43\x43\x0a\x44\x44\x44\x0a\x45\x45\x45\x0a\x46\x46\x46"
"\x0a\x47\x47\x47\x0a\x48\x48\x48\x0a\x49\x49\x49\x0a\x4a\x4a\x4a"
"\x0a\x4b\x4b\x4b\x0a\x4c\x4c\x4c\x0a\x4d\x4d\x4d\x0a\x4e\x4e\x4e"
"\x0a\x4f\x4f\x4f\x0a\x50\x50\x50\x0a\x51\x51\x51\x0a\x52\x52\x52"
"\x0a\x53\x53\x53\x0a\x54\x54\x54\x0a\x55\x55\x55\x0a\x56\x56\x56"
"\x0a\x57\x57\x57\x0a\x58\x58\x58\x0a\x59\x59\x59\x0a\x5a\x5a\x5a"
"\x0b\x41\x41\x41\x0b\x42\x42\x42\x0b\x43\x43\x43\x0b\x44\x44\x44"
"\x0b\x45\x45\x45\x0b\x46\x46\x46\x0b\x47\x47\x47\x0b\x48\x48\x48"
"\x0b\x49\x49\x49\x0b\x4a\x4a\x4a\x0b\x4b\x4b\x4b\x0b\x4c\x4c\x4c"
"\x0b\x4d\x4d\x4d\x0b\x4e\x4e\x4e\x0b\x4f\x4f\x4f\x0b\x50\x50\x50"
"\x0b\x51\x51\x51\x0b\x52\x52\x52\x0b\x53\x53\x53\x0b\x54\x54\x54"
"\x0b\x55\x55\x55\x0b\x56\x56\x56\x0b\x57\x57\x57\x0b\x58\x58\x58"
"\x0b\x59\x59\x59\x0b\x5a\x5a\x5a\x0c\x41\x41\x41\x0c\x42\x42\x42"
"\x0c\x43\x43\x43\x0c\x44\x44\x44\x0c\x45\x45\x45\x0c\x46\x46\x46"
"\x0c\x47\x47\x47\x0c\x48\x48\x48\x0c\x49\x49\x49\x0c\x4a\x4a\x4a"
"\x0c\x4b\x4b\x4b\x0c\x4c\x4c\x4c\x0c\x4d\x4d\x4d\x0c\x4e\x4e\x4e"
"\x0c\x4f\x4f\x4f\x0c\x50\x50\x50\x0c\x51\x51\x51\x0c\x52\x52\x52"
"\x0c\x53\x53\x53\x0c\x54\x54\x54\x0c\x55\x55\x55\x0c\x56\x56\x56"
"\x0c\x57\x57\x57\x0c\x58\x58\x58\x0c\x59\x59\x59\x0c\x5a\x5a\x5a"
"\x0d\x41\x41\x41\x0d\x42\x42\x42\x0d\x43\x43\x43\x0d\x44\x44\x44"
"\x0d\x45\x45\x45\x0d\x46\x46\x46\x0d\x47\x47\x47\x0d\x48\x48\x48"
"\x0d\x49\x49\x49\x0d\x4a\x4a\x4a\x0d\x4b\x4b\x4b\x0d\x4c\x4c\x4c"
"\x0d\x4d\x4d\x4d\x0d\x4e\x4e\x4e\x0d\x4f\x4f\x4f\x0d\x50\x50\x50"
"\x0d\x51\x51\x51\x0d\x52\x52\x52\x0d\x53\x53\x53\x0d\x54\x54\x54"
"\x0d\x55\x55\x55\x0d\x56\x56\x56\x0d\x57\x57\x57\x0d\x58\x58\x58"
"\x0d\x59\x59\x59\x0d\x5a\x5a\x5a\x0e\x41\x41\x41\x0e\x42\x42\x42"
"\x0e\x43\x43\x43\x0e\x44\x44\x44\x0e\x45\x45\x45\x0e\x46\x46\x46"
"\x0e\x47\x47\x47\x0e\x48\x48\x48\x0e\x49\x49\x49\x0e\x4a\x4a\x4a"
"\x0e\x4b\x4b\x4b\x0e\x4c\x4c\x4c\x0e\x4d\x4d\x4d\x0e\x4e\x4e\x4e"
"\x0e\x4f\x4f\x4f\x0e\x50\x50\x50\x0e\x51\x51\x51\x0e\x52\x52\x52"
"\x0e\x53\x53\x53\x0e\x54\x54\x54\x0e\x55\x55\x55\x0e\x56\x56\x56"
"\x0e\x57\x57\x57\x0e\x58\x58\x58\x0e\x59\x59\x59\x0e\x5a\x5a\x5a"
"\x0f\x41\x41\x41\x0f\x42\x42\x42\x0f\x43\x43\x43\x0f\x44\x44\x44"
"\x0f\x45\x45\x45\x0f\x46\x46\x46\x0f\x47\x47\x47\x0f\x48\x48\x48"
"\x0f\x49\x49\x49\x0f\x4a\x4a\x4a\x0f\x4b\x4b\x4b\x0f\x4c\x4c\x4c"
"\x0f\x4d\x4d\x4d\x0f\x4e\x4e\x4e\x0f\x4f\x4f\x4f\x0f\x50\x50\x50"
"\x0f\x51\x51\x51\x0f\x52\x52\x52\x0f\x53\x53\x53\x0f\x54\x54\x54"
"\x0f\x55\x55\x55\x0f\x56\x56\x56\x0f\x57\x57\x57\x0f\x58\x58\x58"
"\x0f\x59\x59\x59\x0f\x5a\x5a\x5a\x10\x41\x41\x41\x10\x42\x42\x42"
"\x10\x43\x43\x43\x10\x44\x44\x44\x10\x45\x45\x45\x10\x46\x46\x46"
"\x10\x47\x47\x47\x10\x48\x48\x48\x10\x49\x49\x49\x10\x4a\x4a\x4a";
struct termios tty_state_orig, tty_state_mod;
pid_t cpid = -1;
int fdmax = 0;
int fd_master=-1, fd_slave=-1;
int logfd=-1;
pid_t shell_pid=-1;
// signal handlers
void sighup (int sig)
{
sig = sig;
/*if (close(fd_slave) < 0)
perror("Close slave failed");
if (close(fd_master) < 0)
perror("Close master failed: ");
if (close(logfd) < 0)
perror("Close master failed: ");*/
exit(0);
}
void sigpipe (int sig)
{
sig = sig;
//snoopfd = -1;
signal (SIGPIPE, sigpipe);
}
void sigchld (int sig)
{
int status, pid;
sig = sig;
wait(&status);
raise (SIGHUP);
signal (SIGCHLD, sigchld);
}
// taken from snooptty
int stty_raw (int fd)
{
struct termios tty_state;
int i;
if (tcgetattr(fd, &tty_state) < 0)
{
perror("tcgetattr failed: ");
return (-1);
}
tty_state_orig = tty_state;
tty_state.c_lflag &= ~(ICANON | IEXTEN | ISIG | ECHO);
tty_state.c_iflag &= ~(ICRNL | INPCK | ISTRIP | IXON | BRKINT);
tty_state.c_oflag &= ~OPOST;
tty_state.c_cflag |= CS8;
tty_state.c_cc[VMIN] = 1;
tty_state.c_cc[VTIME] = 0;
tty_state_mod = tty_state;
if (tcsetattr(fd, TCSAFLUSH, &tty_state) < 0)
{
perror("tcgetattr failed: ");
return (-1);
}
return (0);
}
/*
void errorf (char *fmt, ...)
{
va_list args;
va_start (args, fmt);
vfprintf (stderr, fmt, args);
exit (1);
}
int fdprintf (int fd, char *fmt, ...)
{
va_list args;
int r;
char str[256];
va_start (args, fmt);
r = vsprintf(str, fmt, args);
write (fd, str, r);
return (r);
}
*/
void finish()
{
remove("/home/bazz/latest/pty/test.txt");
if (close(fd_slave) < 0)
perror("Close slave failed");
if (close(fd_master) < 0)
perror("Close master failed: ");
if (close(logfd) < 0)
perror("Close master failed: ");
//kill(shell_pid, 9);
if (tcsetattr(STDIN_FILENO, TCSANOW, &tty_state_orig) < 0)
{
perror("tcgetattr failed: ");
return (-1);
}
}
int main (int argc, char *argv[], char **envp)
{
if (!isatty(STDIN_FILENO))
printf ("stdin is not a tty\n");
atexit(finish);
//init
signal (SIGPIPE, sigpipe);
signal (SIGCHLD, sigchld);
signal (SIGHUP, sighup);
//
shell_pid = getppid();
//memset(buff2, 0x41, BUFF_SIZE);
// Open Master device
printf("Opening master device\n"); ////sleep(1);
fd_master = open("/dev/ptmx", O_RDWR);
if (fd_master < 0)
perror("opening master failed\n");
/// Grantpt
printf("Doing Grantpt()\n"); ////sleep(1);
if (grantpt(fd_master) < 0)
perror("Grantpt Master failed\n");
///Unlockpt
printf("Unlocking pt\n"); ////sleep(1);
if (unlockpt(fd_master) < 0)
perror("Unlockpt Master failed\n");
struct termios term;
struct winsize twin;
printf("getting stdin termios\n");
if (tcgetattr (STDIN_FILENO, &term) < 0)
perror("tcgetattr failed\n");
printf("getting window settings\n");
if (ioctl (STDIN_FILENO, TIOCGWINSZ, (char *) &twin) < 0)
perror("ioctl TCIOCGWINSZ failed\n");
// ptsname()
char *slavename;
printf("---Getting slave name\n"); ////sleep(1);
slavename = ptsname(fd_master);
if (slavename == NULL)
perror("---ptsname failed\n");
// opening Slave
printf("---Opening slave\n"); ////sleep(1);
fd_slave = open(slavename, O_RDWR);
if (fd_slave < 0)
{
printf("---open(%s) failed\n",slavename);
perror("---");
}
////
// THE BIG FORK
/////////
/////////
printf("Forking\n"); sleep(1);
cpid = fork();
if (cpid == 0)
{
printf("in CHILD: \n");
//setsid()
printf("---Setsid()\n");
if (setsid() < 0)
perror("---setsid failed\n");
// Pushing modules to slave
printf("---Pushing ptem module to slave\n"); ////sleep(1);
if (ioctl(fd_slave, I_PUSH, "ptem") == -1)
perror("---pushing ptem module failed\n");
printf("---Pushing ldterm module to slave\n"); ////sleep(1);
if (ioctl(fd_slave, I_PUSH, "ldterm") == -1)
perror("---Pushing ldterm module failed\n");
printf("---setting term settings\n");
fflush(stdout);
if (tcsetattr(fd_slave, TCSANOW, &term) < 0)
perror ("---can't set termios\n");
printf("---setting window settings\n");
if (ioctl(fd_slave, TIOCSWINSZ, &twin) < 0)
perror ("---can't set winsize\n");
if (dup2(fd_slave, STDIN_FILENO) != STDIN_FILENO)
perror ("---can't dup2 into stdin\n");
if (dup2(fd_slave, STDOUT_FILENO) != STDOUT_FILENO)
perror ("---can't dup2 into stdout\n");
if (dup2(fd_slave, STDERR_FILENO) != STDERR_FILENO)
perror ("---can't dup2 into stderr\n");
if (fd_slave > STDERR_FILENO)
close (fd_slave);
stty_raw(STDIN_FILENO);
//char **args = (char *[]){ "-i", (char*)0 };
//
//atexit(finish);
execle("/bin/bash","/bin/bash",0,envp);
if (execle("/home/bazz/latest/invoke2","/home/bazz/latest/invoke2", "v", (char*) 0, envp) < 0)
perror("---execle error!\n");
//----XXXXXXXXX
/*struct termios t;
tcgetattr(fd_slave, &t);
stty_raw(fd_slave);
printf("\n\n---Successfully set slave to RAW settings\n\n");
*/
//if (close(fd_slave) < 0)
//perror("---Close slave failed: ");
//printf("---Closed Slave\n");
//printf("---Closing master fd\n");
//if (close(fd_master) < 0)
//perror("---Closing master fd failed\n");
printf("---exiting\n");
fflush(stdout);
sleep(5);
exit(-1);
}
if (cpid > 0)
{
fd_set readset;
int cexit; // child exit code
int len, n, sel, susp = 0;
char logfile[] = "/home/bazz/latest/pty/log.txt";
logfd = open(logfile, O_CREAT|O_APPEND|O_WRONLY, S_IRWXU|S_IRWXG|S_IRWXO);
if (logfd < 0)
perror("opening log file failed\n");
printf("In Parent: \n");
/*printf("Telling master to forward SIGINT signals to slave\n"); ////sleep(1);
if (ioctl(fd_master, TIOCSIGNAL, SIGINT) < 0)
perror("Setting master to forward sigint to slave failed\n");*/
stty_raw (STDIN_FILENO);
//stty_raw (fd_master);
fdmax = max(STDIN_FILENO, fd_slave);
while (1)
{
do
{
FD_ZERO (&readset);
FD_SET (STDIN_FILENO, &readset);
FD_SET (fd_master, &readset);
sel = select(fdmax + 1, &readset, NULL, NULL, NULL);
}
while (sel == -1 && errno == EINTR);
if (sel == -1 && errno != EINTR)
{
printf ("select failed. errno = %d\n", errno);
perror("");
}
if (FD_ISSET(STDIN_FILENO, &readset))
{
if ((n = read(STDIN_FILENO, buff, BUFF_SIZE)) < 1)
exit (0);
buff[n] = 0;
if (strchr(buff,4))
{
int i;
//buff2[6000] = 0x0a;
//buff2[6001] = 0x00;
write (fd_master,buff2,1600);
//write (fd_master,"\x0a",1);
//fflush(fd_master);
//for (i=0;i < 421; i++)
// write (STDIN_FILENO, buff2[i], 1);
continue;
}
write (logfd, buff, n);
write (fd_master, buff, n);
}
if (FD_ISSET(fd_master, &readset))
{
if ((n = read(fd_master, buff, BUFF_SIZE)) < 1)
exit (0);
write (STDOUT_FILENO, buff, n);
}
}
if (close(fd_master) < 0)
perror("Close master failed: ");
printf("Closed master\nQuitting..\n");
printf("Waiting for child..\n"); sleep(1);
wait(&cexit);
}
else {
perror("Fork failed\n");
}
return 0;
}
/* do the main server loop */
/*while (1)
{
do
{
FD_ZERO (&readset);
FD_SET (STDIN_FILENO, &readset);
FD_SET (ptyfd, &readset);
if (snoopfd >= 0)
FD_SET (snoopfd, &readset);
else if (use_socket && authfd == -1)
FD_SET (servfd, &readset);
sel = select(fdmax + 1, &readset, NULL, NULL, NULL);
}
while (sel == -1 && errno == EINTR);
if (sel == -1 && errno != EINTR)
errorf ("select failed. errno = %d\n", errno);
if (FD_ISSET(STDIN_FILENO, &readset))
{
if ((n = read(STDIN_FILENO, buff, BUFF_SIZE)) < 1)
exit (0);
write (ptyfd, buff, n);
}
if ((snoopfd >= 0) && FD_ISSET(snoopfd, &readset))
{
n = read(snoopfd, buff, BUFF_SIZE);
if (!n || ((*buff == TERM_CHAR) && (n == 1) && use_socket))
{
close (snoopfd);
snoopfd = -1;
}
else if ((*buff == SUSP_CHAR) && (n == 1) && use_socket)
{
if (susp = !susp)
fdprintf (snoopfd, "\r\nSnoop suspended. %s (ASCII %d) to resume.\r\n",
SC_STRING, SUSP_CHAR);
else
fdprintf (snoopfd, "Snoop resumes...\r\n");
}
else
write (ptyfd, buff, n);
}
if (FD_ISSET(ptyfd, &readset))
{
if ((n = read(ptyfd, buff, BUFF_SIZE)) < 1)
exit (0);
write (STDOUT_FILENO, buff, n);
if (!susp && (snoopfd >= 0))
write (snoopfd, buff, n);
}
}
*/
// I think we have to do these after a fork
////
// Not sure whether to tell slave/master to be stream terminal
// so i will tell both, no i will tell master
//if (setsid() < 0)
//perror("setsid failed\n");
//if (ioctl(fd_slave, M_SETOPTS, SO_ISTTY) < 0)
//perror("Slave M_SETOPTS to SO_ISTTY failed\n");
// we can fiddle wit this if the program fails
// Now that we have an adequate master and slave
// lets do some testing
// simple tests
/*
write fd_master "hello"
read fd_slave
printf
opposite
*/
////sleep(2);
//////Test #2
// Make slave raw
//sleep(3);
/*int nbytes1;
char str1[] = "hello";
char buf[100];
int i;
for (i=0; i< 100; i++) {buf[i] = 0;}
printf("\nTesting the master and slave\n"
"-------------------------------\n");
sleep(3);
printf("Writing \"%s\" to master\n", str1);
sleep (1);
nbytes1 = write(fd_master, str1, strlen(str1));
if (nbytes1 != strlen(str1))
printf("-nbytes- wasnt strlen(%s)+1\n", str1);
printf("wrote %d bytes to master\n", nbytes1); sleep(1);
for (i=0; i<=10; i++)
{ printf("str1[%d] = %d\n", i,(int)str1[i]); }
sleep(4);*/
//////Test #2
// Make slave raw
/*struct termios t;
tcgetattr(fd_slave, &t);
stty_raw(fd_slave);
printf("\n\nSuccessfully set slave to RAW settings\n\n");
//sleep(3);*/
// Test 3
//master to slave again with raw settings
//
/*int nbytes2;
char str2[] = "derp";
printf("Testing the master and slave\n"
"-------------------------------\n"
"Writing \"%s\" to master\n", str2);
//sleep(2);
nbytes2 = write(fd_master, str2, strlen(str2));
if (nbytes2 != strlen(str2))
printf("-nbytes- wasnt strlen(%s)+1\n", str2);
printf("wrote %d bytes to master\n", nbytes2); //sleep(1);
//sleep(1);
printf("reading %d bytes from slave\n", nbytes2); //sleep(1);
if (read(fd_slave, buf, nbytes2) < 0)
perror("read error\n");
for (i=0; i<=10; i++)
{ printf("buf[%d] = %d, str2[%d] = %d\n", i, (int)buf[i],i,(int)str2[i]); }
printf("here is the output: %s\n", buf);
//sleep(4);
*/
//Test 4
// Salve to master
//
//
/*char str3[] = "Poope!";
char buf2[100];
for (i=0; i<100; i++) { buf2[i] = 0; }
int nbytes3 = strlen("Poope!");*/
/*printf("Testing the master and slave\n"
"-------------------------------\n"
"Writing \"%s\" to slave\n", str3);*/
//sleep(2);
//nbytes3 = write(fd_slave, str3, strlen(str3));
//if (nbytes3 != strlen(str3))
//printf("-nbytes- wasnt strlen(%s)+1\n", str3);
//printf("wrote %d bytes to slave\n", nbytes3); //sleep(1);
/*printf("reading %d bytes from master\n\n", nbytes3); //sleep(1);
if (read(fd_master, buf2, nbytes3) < 0)
perror("read error\n");
//buf2[5] = '\n';
//buf2[7] = 0;
for (i=0; i < 10; i++) {
printf("buf2[%d] = %d\n", i,(int)buf2[i]);
} sleep(4);
printf("here is the output: ");
fflush(stdout);
if (write(STDIN_FILENO, buf2, nbytes3) < 0)
perror("---write to stdin failed\n");
printf("\n");
//sleep(2);*/
/*
if (strcmp(buf2, str1) == 0)
{
printf("But that seems wrong??\n"); //sleep(1);
printf("Apparently master buffers what it writes, as well\nas what it receives\n"); //sleep(1);
printf("Let's read some more from the master..\n\n"); //sleep(1);
printf("reading %d bytes from master\n", nbytes2);
if (read(fd_master, buf2, nbytes2) < 0)
perror("read error\n");
for (i=0; i < 10; i++) {
printf("buf2[%d] = %d, str1[%d] = %d\n", i, (int)buf2[i],i,(int)str2[i]);
}
printf("here is the output: %s\n\n", buf2);
//sleep(1);
printf("reading %d bytes from master\n", nbytes3);
if (read(fd_master, buf2, nbytes3) < 0)
perror("read error\n");
for (i=0; i < 10; i++) {
printf("buf2[%d] = %d, str1[%d] = %d\n", i, (int)buf2[i],i,(int)str3[i]);
}
printf("here is the output: %s\n\n", buf2);
//sleep(3);
}*/
// lets try reading form the slave then
//printf("reading %d of bytes from slave\n\n", nbytes1);
//if (read(fd_slave, buf2, nbytes3) < 0)
//perror("read error\n");
////sleep(1);
//printf("from slave: %s", buf2);
Leave a Reply