#include "inet.h"

#ifdef HTTP
char big_recvline[MAXTOREAD];
#endif

char *
make_http_sendline (char *url)
{
  int size = 200;		/* Enough? */
  char *sendline = (char *) malloc (size);
  sprintf (sendline, "GET %s HTTP/1.0\r\nUser-Agent: Echoping/%s\r\n\r\n",
	   url, VERSION);
  return sendline;
}

void
find_server_and_port (char *server, short *port)
{
  char *text_port, *p;
  for (p = server; *p; p++)
    {
      if (*p == ':')
	{
	  *p = 0;
	  text_port = p + 1;
	  *port = atoi (text_port);
	}
    }
  if (*port == 0)
    *port = 80;
}

int 
read_from_server (int fd)
{
  int nr;
  int total = 0;
  char reply_code;
  int first_line = TRUE;
  short body = FALSE;
  while (!body)
    {
      nr = readline (fd, big_recvline, MAXTOREAD, TRUE);
      /* HTTP replies should be separated by CR-LF. Unfortunately, some
         servers send only CR :-( */
      body = ((nr == 2) || (nr == 1));		/* Empty line CR-LF seen */
      if (nr < 1)
	err_sys ("Error reading HTTP header");
      if (first_line)
	{
	  reply_code = big_recvline[9];		/* 9 because "HTTP/1.x 200..." */
	  if (reply_code != '2')
	    err_quit ("HTTP error \"%s\"", big_recvline);
	}
      total = total + nr;
      first_line = FALSE;
    }
  /* Read the body */
  nr = readline (fd, big_recvline, MAXTOREAD, FALSE);
  if (nr < 2)
    err_sys ("Reading HTTP body");
  total = total + nr;
  return total;			/* How to do if we want only the body's size? */
}
