示例#1
0
int main(int argc, char **argv)
{
  httpc_conn_t *conn; /* Client connection object */
  hresponse_t *res; /* Response object **/

  herror_t status;
  FILE *f;
  size_t size;
  char url[50], file[50], id[50], content_type[50];
  
  char buffer[MAX_BUFFER_SIZE+1];

  /* Check usage */
  if (argc < 5)
  {
    fprintf(stderr, "usage %s <url> <file> <id> <content-type>\n", argv[0]);
    exit(1);
  }

  /* Set log level to see more information written by the library */
  // log_set_level(NANOHTTP_LOG_VERBOSE);

  /* Initialize httpc module */
  if ((status = httpc_init(argc, argv)) != H_OK)
  {
    fprintf(stderr, "Cannot init httpc (%s)\n", herror_message(status));
    herror_release(status);
    return 1;
  }

  /* Create the client connection object */
  conn = httpc_new();

  httpc_set_header(conn, HEADER_TRANSFER_ENCODING, TRANSFER_ENCODING_CHUNKED);

  /*
   Open connection for mime
   */
  if ((status = httpc_mime_begin(conn, argv[1], argv[3], "", argv[4])) != H_OK)
  {
    fprintf(stderr, "Can not start MIME: %s\n", herror_message(status));
    herror_release(status);
    exit(1);
  }

  if (!send_file(conn,  argv[2], argv[3], argv[4]))
  {
    fprintf(stderr, "send_file failed\n");
    exit(1);
  }

  while (1)
  {
    printf("Enter filename ['.' for finish]: ");
    gets(file);
    if (!strcmp(file, "."))
       break;

    printf("Enter part id:");
    gets(id);
    printf("Enter content-type:");
    gets(content_type);

    if (!send_file(conn, file, id, content_type))
       exit(1);
  }

  if ((status = httpc_mime_end(conn, &res)) != H_OK)
  {
    fprintf(stderr, "httpc_mime_end failed (%s)\n", herror_message(status));
    herror_release(status);
    exit(1);
  }

   /* Show response */
  show_response(res);

  /* clean up*/
  hresponse_free(res);
  httpc_free(conn);
  return 0;
}
示例#2
0
herror_t
hresponse_new_from_socket(hsocket_t *sock, hresponse_t ** out)
{
  int i = 0, count;
  herror_t status;
  hresponse_t *res;
  attachments_t *mimeMessage;
  char buffer[MAX_HEADER_SIZE + 1];

read_header:                   /* for errorcode: 100 (continue) */
  /* Read header */
  while (i < MAX_HEADER_SIZE)
  {
    if ((status = hsocket_read(sock, &(buffer[i]), 1, 1, &count)) != H_OK)
    {
      log_error("Socket read error");
      return status;
    }

    buffer[i + 1] = '\0';       /* for strmp */

    if (i > 3)
    {
      if (!strcmp(&(buffer[i - 1]), "\n\n") ||
          !strcmp(&(buffer[i - 2]), "\n\r\n"))
        break;
    }
    i++;
  }

  /* Create response */
  res = _hresponse_parse_header(buffer);
  if (res == NULL)
  {
    log_error("Header parse error");
    return herror_new("hresponse_new_from_socket",
                      GENERAL_HEADER_PARSE_ERROR,
                      "Can not parse response header");
  }

  /* Chec for Errorcode: 100 (continue) */
  if (res->errcode == 100)
  {
    hresponse_free(res);
    i = 0;
    goto read_header;
  }

  /* Create input stream */
  res->in = http_input_stream_new(sock, res->header);


  /* Check for MIME message */
  if ((res->content_type &&
       !strcmp(res->content_type->type, "multipart/related")))
  {
    status = mime_get_attachments(res->content_type, res->in, &mimeMessage);
    if (status != H_OK)
    {
      /* TODO (#1#): Handle error */
      hresponse_free(res);
      return status;
    }
    else
    {
      res->attachments = mimeMessage;
      http_input_stream_free(res->in);
      res->in =
        http_input_stream_new_from_file(mimeMessage->root_part->filename);
      if (!res->in)
      {
        /* TODO (#1#): Handle error */

      }
      else
      {
        /* res->in->deleteOnExit = 1; */
      }
    }
  }
  *out = res;
  return H_OK;
}