int get_message_from_socket(void)  /* Returns 0 for success for 1 for error. */
{
int result_code,bytes_read=0,return_code=0;
hold_time = time((time_t *) 0);
while (1)
  {
  current_time = time((time_t *) 0);
  if (current_time - hold_time > TIMEOUT_SECONDS)
    {
    printf("Timeout waiting for smtp server; quitting.\n");
    return_code = 1;
    break;
    }
  result_code = read(sock,buffer,1);  /* Try to read just one character. */
  if (result_code != 1)  /* Nothing received? */
    {
    sleep(1);
    continue;
    }
  if (buffer[0] == 13)  /* CR received?  If so, then skip.  */
    continue;
  if (buffer[0] == 10)  /* LF received? */
    break;
  temp_string[bytes_read++] = buffer[0];
  }
temp_string[bytes_read] = 0;  /* Terminate output string. */
return(return_code);
}

void find_field_in_form_data_string(char *field_to_find)  /* Returns temp_string. */
{
char field_name_string[255],field_value_string[255];
int form_data_string_pointer=0,result_string_pointer;
while (1)  /* Once through for each fieldname/value combination. */
  {
  result_string_pointer = 0;
  while (form_data_string[form_data_string_pointer]!='=')
    field_name_string[result_string_pointer++] = form_data_string[form_data_string_pointer++];
  field_name_string[result_string_pointer] = 0;  /* Terminate fieldname string. */
  form_data_string_pointer++;  /* Skip = sign. */
  result_string_pointer = 0;
  while ((form_data_string[form_data_string_pointer]!='&')
   &&    (form_data_string[form_data_string_pointer]!=0))
    field_value_string[result_string_pointer++] = form_data_string[form_data_string_pointer++];
  field_value_string[result_string_pointer] = 0;
  /* Now we have the field name and field value. */
  if (!strcmp(field_name_string,field_to_find))  /* Is this the one? */
    {
    strcpy(temp_string,field_value_string);
    break;
    }
  /* That wasn't the correct pair; try for another? */
  if (form_data_string[form_data_string_pointer] == 0)  /* End of input? */
    {
    temp_string[0] = 0;
    break;
    }
  form_data_string_pointer++;  /* Skip the & sign and try again. */
  }
/* Here we've broken out; the result is in temp_string, or it's blank. */
}

