calisto-20000323/
calisto-20000323/lib/
calisto-20000323/lib/etc/
calisto-20000323/lib/players/
calisto-20000323/lib/text/
calisto-20000323/log/
/*
 Calisto (c) 1998-1999 Peter Howkins, Matthew Howkins, Simon Howkins

 $Id: socks.c,v 1.3 2000/03/02 21:17:59 peter Exp $

 $Log: socks.c,v $
 Revision 1.3  2000/03/02 21:17:59  peter
 Now uses msnprintf()

 Revision 1.2  1999/12/16 17:53:13  peter
 Fixed bug in logging to file

 Revision 1.1  1999/11/29 22:08:22  peter
 Initial revision


 */
static char rcsid[] = "$Id: socks.c,v 1.3 2000/03/02 21:17:59 peter Exp $";

/* Ansi Includes */
#include <errno.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
/* Unix includes */
#include "sys/types.h"
#include "sys/socket.h"
#include "netinet/in.h"
#include "unistd.h"
/* Our includes */
#include "log.h"
#include "globals.h"
#include "msnprintf.h"
#include "structs.h"

/* Gets as many characters as possible into the buffer.
   There may be nothing, some characters but not a whole line,
   possibly a whole line, or several lines including bits.

   Returns -1 for problem with socket
           0  for no characters available, but connection OK
           >0 number of characters placed in buffer - no guarantee of how many lines
*/
int get_some_from_socket(int sfd, char *buffer, size_t bufsize)
{
  int size, count = 0;
  char c;

  while (count < bufsize) {
    size = recv(sfd, &c, 1, 0);
    switch (size) {
      case -1: /* No character read, but connection OK */
        return count;
      case 0:  /* No character read because connection broken */
        return -1;
    }
    /* Character read OK */
    *buffer++ = c;
    count++;
  }
  return count;
}

int send_to_socket(int sfd, const char *format, ...) {
  va_list ptr;
  char gap[OUTPUT_BUFFER];
  int check;

  va_start(ptr, format);
  mvsnprintf(gap, sizeof(gap), format, ptr);
  va_end(ptr);

  check = send(sfd, gap, strlen(gap),0);
  if (check == -1) {
    log(usage, "Error writing to socket %d: %s", sfd, strerror(errno));
    return 1;
  }
  return 0;
}