Пример #1
0
/* Seed the random-number generator */
void
randpkt_seed(void)
{
	unsigned int	randomness;
	time_t		now;
#ifndef _WIN32
	int 		fd;
	ssize_t		ret;

#define RANDOM_DEV "/dev/urandom"

	/*
	 * Assume it's at least worth trying /dev/urandom on UN*X.
	 * If it doesn't exist, fall back on time().
	 *
	 * XXX - Use CryptGenRandom on Windows?
	 */
	fd = ws_open(RANDOM_DEV, O_RDONLY);
	if (fd == -1) {
		if (errno != ENOENT) {
			fprintf(stderr,
				"randpkt: Could not open " RANDOM_DEV " for reading: %s\n",
				g_strerror(errno));
			exit(2);
		}
		goto fallback;
	}

	ret = ws_read(fd, &randomness, sizeof randomness);
	if (ret == -1) {
		fprintf(stderr,
			"randpkt: Could not read from " RANDOM_DEV ": %s\n",
			g_strerror(errno));
		exit(2);
	}
	if ((size_t)ret != sizeof randomness) {
		fprintf(stderr,
			"randpkt: Tried to read %lu bytes from " RANDOM_DEV ", got %ld\n",
			(unsigned long)sizeof randomness, (long)ret);
		exit(2);
	}
	srand(randomness);
	ws_close(fd);
	return;

fallback:
#endif
	now = time(NULL);
	randomness = (unsigned int) now;

	srand(randomness);
}
Пример #2
0
int main(int argc, char ** argv)
{
   char buf[8000];
   websocket_t ws;
   int fd, plen, len;

   fd = ws_connect();

   ws_init(&ws, fd, 1000, 1);

   for (int eof = 0; !eof;)
   {
      for (len = 0; !eof;)
      {
         if ((plen = read(0, buf + len, sizeof(buf) - len)) == -1)
            exit(1);

         // check for eof
         eof = plen == 0;

         len += plen;
         // check for "\n.\n" (single period on line)
         if (len > 2 && buf[len - 1] == '\n' &&
               buf[len - 3] == '\n' && buf[len - 2] == '.')
         {
            // remove it
            len -= 2;
            break;
         }
      }

      if ((ws_write(&ws, buf, len)) == -1)
         exit(1);

      if ((plen = ws_read(&ws, buf, sizeof(buf))) == -1)
         exit(1);

      if (!plen)
         break;

      write(1, buf, plen);
   }

   ws_free(&ws);

   close(fd);
   return 0;
}