示例#1
0
/*---------------------------------------------------------------------------*/
static int
input(struct tcp_socket *tcps, void *ptr,
      const uint8_t *inputptr, int inputdatalen)
{
  struct http_socket *s = ptr;

  input_pt(s, inputptr, inputdatalen);
  start_timeout_timer(s);

  return 0; /* all data consumed */
}
示例#2
0
static void initialize( Driver* dp, char* application_title ) {
    dp->application_title = application_title;
    initialize_SPI();
    listen_for_application_activation( dp );
    search_desktop_for_application( dp );
    if ( dp->found_application ) {
        remove_listener( dp );
        closedown( dp );
        return;
    }

    start_timeout_timer( dp );
    SPI_event_main();

    remove_listener( dp );
    closedown( dp );
    if ( ! dp->found_application )
        rb_raise( rb_eRuntimeError, "No such application running." );
}
示例#3
0
/*---------------------------------------------------------------------------*/
static void
event(struct tcp_socket *tcps, void *ptr,
      tcp_socket_event_t e)
{
  struct http_socket *s = ptr;
  char host[MAX_HOSTLEN];
  char path[MAX_PATHLEN];
  uint16_t port;
  char str[42];
  int len;

  if(e == TCP_SOCKET_CONNECTED) {
    puts("Connected");
    if(parse_url(s->url, host, &port, path)) {
      tcp_socket_send_str(tcps, s->postdata != NULL ? "POST " : "GET ");
      tcp_socket_send_str(tcps, path);
      tcp_socket_send_str(tcps, " HTTP/1.1\r\n\r");
      tcp_socket_send_str(tcps, "Connection: close\r\n\r");
      tcp_socket_send_str(tcps, "Host: ");
      tcp_socket_send_str(tcps, host);
      tcp_socket_send_str(tcps, "\r\n\r");
      if(s->postdata != NULL) {
        if(s->content_type) {
          tcp_socket_send_str(tcps, "Content-Type: ");
          tcp_socket_send_str(tcps, s->content_type);
          tcp_socket_send_str(tcps, "\r\n\r");
        }
        tcp_socket_send_str(tcps, "Content-Length: ");
        sprintf(str, "%u", s->postdatalen);
        tcp_socket_send_str(tcps, str);
        tcp_socket_send_str(tcps, "\r\n\r");
      } else if(s->length || s->pos > 0) {
        tcp_socket_send_str(tcps, "Range: bytes=");
        if(s->length) {
          if(s->pos >= 0) {
            sprintf(str, "%llu-%llu", s->pos, s->pos + s->length - 1);
          } else {
            sprintf(str, "-%llu", s->length);
          }
        } else {
          sprintf(str, "%llu-", s->pos);
        }
        tcp_socket_send_str(tcps, str);
        tcp_socket_send_str(tcps, "\r\n\r");
      }
      tcp_socket_send_str(tcps, "\r\n\r");
      if(s->postdata != NULL && s->postdatalen) {
        len = tcp_socket_send(tcps, s->postdata, s->postdatalen);
        s->postdata += len;
        s->postdatalen -= len;
      }
    }
    parse_header_init(s);
  } else if(e == TCP_SOCKET_CLOSED) {
    call_callback(s, HTTP_SOCKET_CLOSED, NULL, 0);
    removesocket(s);
    puts("Closed");
  } else if(e == TCP_SOCKET_TIMEDOUT) {
    call_callback(s, HTTP_SOCKET_TIMEDOUT, NULL, 0);
    removesocket(s);
    puts("Timedout");
  } else if(e == TCP_SOCKET_ABORTED) {
    call_callback(s, HTTP_SOCKET_ABORTED, NULL, 0);
    removesocket(s);
    puts("Aborted");
  } else if(e == TCP_SOCKET_DATA_SENT) {
    if(s->postdata != NULL && s->postdatalen) {
      len = tcp_socket_send(tcps, s->postdata, s->postdatalen);
      s->postdata += len;
      s->postdatalen -= len;
    } else {
      start_timeout_timer(s);
    }
  }
}
示例#4
0
/*---------------------------------------------------------------------------*/
static void
event(struct tcp_socket *tcps, void *ptr,
      tcp_socket_event_t e)
{
  struct http_socket *s = ptr;
  char host[MAX_HOSTLEN];
  char path[MAX_PATHLEN];
  uint16_t port;
  char str[42];
  int len;

  if(e == TCP_SOCKET_CONNECTED) {
    printf("Connected\n");
    if(parse_url(s->url, host, &port, path)) {
      tcp_socket_send_str(tcps, s->postdata != NULL ? "POST " : "GET ");
      if(s->proxy_port != 0) {
        /* If we are configured to route through a proxy, we should
           provide the full URL as the path. */
        tcp_socket_send_str(tcps, s->url);
      } else {
        tcp_socket_send_str(tcps, path);
      }
      tcp_socket_send_str(tcps, " HTTP/1.1\r\n");
      tcp_socket_send_str(tcps, "Connection: close\r\n");
      tcp_socket_send_str(tcps, "Host: ");
      /* If we have IPv6 host, add the '[' and the ']' characters
         to the host. As in rfc2732. */
      if(memchr(host, ':', MAX_HOSTLEN)) {
        tcp_socket_send_str(tcps, "[");
      }
      tcp_socket_send_str(tcps, host);
      if(memchr(host, ':', MAX_HOSTLEN)) {
        tcp_socket_send_str(tcps, "]");
      }
      tcp_socket_send_str(tcps, "\r\n");
      if(s->postdata != NULL) {
        if(s->content_type) {
          tcp_socket_send_str(tcps, "Content-Type: ");
          tcp_socket_send_str(tcps, s->content_type);
          tcp_socket_send_str(tcps, "\r\n");
        }
        tcp_socket_send_str(tcps, "Content-Length: ");
        sprintf(str, "%u", s->postdatalen);
        tcp_socket_send_str(tcps, str);
        tcp_socket_send_str(tcps, "\r\n");
      } else if(s->length || s->pos > 0) {
        tcp_socket_send_str(tcps, "Range: bytes=");
        if(s->length) {
          if(s->pos >= 0) {
            sprintf(str, "%llu-%llu", s->pos, s->pos + s->length - 1);
          } else {
            sprintf(str, "-%llu", s->length);
          }
        } else {
          sprintf(str, "%llu-", s->pos);
        }
        tcp_socket_send_str(tcps, str);
        tcp_socket_send_str(tcps, "\r\n");
      }
      tcp_socket_send_str(tcps, "\r\n");
      if(s->postdata != NULL && s->postdatalen) {
        len = tcp_socket_send(tcps, s->postdata, s->postdatalen);
        s->postdata += len;
        s->postdatalen -= len;
      }
    }
    parse_header_init(s);
  } else if(e == TCP_SOCKET_CLOSED) {
    call_callback(s, HTTP_SOCKET_CLOSED, NULL, 0);
    removesocket(s);
    printf("Closed\n");
  } else if(e == TCP_SOCKET_TIMEDOUT) {
    call_callback(s, HTTP_SOCKET_TIMEDOUT, NULL, 0);
    removesocket(s);
    printf("Timedout\n");
  } else if(e == TCP_SOCKET_ABORTED) {
    call_callback(s, HTTP_SOCKET_ABORTED, NULL, 0);
    removesocket(s);
    printf("Aborted\n");
  } else if(e == TCP_SOCKET_DATA_SENT) {
    if(s->postdata != NULL && s->postdatalen) {
      len = tcp_socket_send(tcps, s->postdata, s->postdatalen);
      s->postdata += len;
      s->postdatalen -= len;
    } else {
      start_timeout_timer(s);
    }
  }
}