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(0); } 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. */ }