
#include "port_linux.h"

#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>


static int open_port = 0;

/* Some helper funtions for detecting keyboard input */
void changemode(int dir)
{
  static struct termios oldt, newt;

  if ( dir == 1 )
  {
    tcgetattr( STDIN_FILENO, &oldt);
    newt = oldt;
    
    newt.c_lflag &= ~( ICANON | ECHO );
    tcsetattr( STDIN_FILENO, TCSANOW, &newt);
  } else if (dir == 2) {
   	tcgetattr( STDIN_FILENO, &oldt);
    newt = oldt;
    newt.c_lflag &= ~( ICANON);
    newt.c_lflag |= ECHO;
    tcsetattr( STDIN_FILENO, TCSANOW, &newt);
  } else {
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
  }
}
int kbhit (void)
{
  struct timeval tv;
  fd_set rdfs;

  tv.tv_sec = 0;
  tv.tv_usec = 0;

  FD_ZERO(&rdfs);
  FD_SET (STDIN_FILENO, &rdfs);

  select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
  return FD_ISSET(STDIN_FILENO, &rdfs);

}



int open_ssp_port (const char *port) {
	open_port = OpenSSPPort(port);
	return (open_port != -1);
}

void close_ssp_port () {
	CloseSSPPort(open_port);
}

int send_ssp_command(SSP_COMMAND *sspC) {

	return SSPSendCommand(open_port, sspC);
}

int negotiate_ssp_encryption(SSP_COMMAND *sspC, SSP_FULL_KEY * hostKey){
	return NegotiateSSPEncryption(open_port, sspC->SSPAddress, hostKey);
}


