示例#1
0
struct file_download *init_file_download( struct uri *uri, struct session *ses, unsigned char *file, int fd )
{
  struct file_download *file_download;
  if ( mem_calloc( 1, 116 ) )
  {
    file_download->uri = get_composed_uri( uri, URI_BASE );
    if ( file_download->uri == 0 )
    {
      &file_download[0] = 0;
      mem_free( (void*)file_download[0].next );
      return downloads.next + 4;
    }
    init_download_display( &file_download[0] );
    file_download->file = file;
    file_download->download.callback = &download_data;
    file_download->download.data = (void*)file_download[0].next;
    file_download->ses = &ses[0];
    file_download->handle = fd;
    file_download->term = ses->tab->term;
    file_download->prev = &downloads.next[0];
    &file_download = &downloads->next[0];
    downloads.next = (void*)file_download[0].next;
    file_download->prev = &file_download[0];
    return downloads.next + 4;
  }
  else
  {
    return downloads.next + 4;
  }
}
示例#2
0
文件: dialogs.c 项目: rkd77/elinks-tv
static struct uri *
get_auth_entry_uri(struct listbox_item *item)
{
	struct auth_entry *auth_entry = (struct auth_entry *)item->udata;

	return get_composed_uri(auth_entry->uri, URI_HTTP_AUTH);
}
示例#3
0
文件: proxy.c 项目: rkd77/elinks-tv
struct uri *
get_proxied_uri(struct uri *uri)
{
    if (uri->protocol == PROTOCOL_PROXY)
        return get_uri(uri->data, URI_BASE);

    return get_composed_uri(uri, URI_BASE);
}
示例#4
0
文件: dialogs.c 项目: rkd77/elinks-tv
static void
auth_ok(void *data)
{
	struct dialog *dlg = (struct dialog *)data;
	struct auth_entry *entry = (struct auth_entry *)dlg->udata2;
	struct session *ses = (struct session *)dlg->udata;

	entry->blocked = 0;
	entry->valid = auth_entry_has_userinfo(entry);

#ifdef CONFIG_FORMHIST
	if (get_opt_bool((const unsigned char *)"document.browse.forms.show_formhist", ses)) {
		unsigned char *url = get_uri_string(entry->uri, URI_HTTP_AUTH);

		if (url) {
			struct form form = {};

			form.action = url;
			INIT_LIST_OF(struct submitted_value, submit);
			struct submitted_value *user, *password;

			user = init_submitted_value((unsigned char *)"user", entry->user, FC_TEXT, NULL, 0);
			if (user) {
				add_to_list(submit, user);
			}
			password = init_submitted_value((unsigned char *)"password", entry->password, FC_PASSWORD, NULL, 0);
			if (password) {
				add_to_list(submit, password);
			}

			memorize_form(ses, &submit, &form);
			done_submitted_value_list(&submit);
			mem_free(url);
		}
	}
#endif

	if (entry->valid && have_location(ses)) {
		struct location *loc = cur_loc(ses);
		struct uri *uri = loc->vs.uri;

		/* Make a 'fake' redirect to a URI without user/password so that
		 * the user/password from the URI will not override what the
		 * user just entered in the dialog. */
		if ((uri->userlen && strlcmp(entry->user, -1, uri->user, uri->userlen))
		    || (uri->password && strlcmp(entry->password, -1, uri->password, uri->passwordlen))) {

			uri = get_composed_uri(uri, URI_HTTP_AUTH | URI_DATA | URI_POST);
			if (uri) {
				goto_uri_frame(ses, uri, NULL, CACHE_MODE_INCREMENT);
				done_uri(uri);
				return;
			}
		}
	}

	reload(ses, CACHE_MODE_INCREMENT);
}
示例#5
0
void auth_ok( void *data )
{
  int edx;
  struct auth_entry *entry = &((int*)data)[2];
  struct session *ses = &((int*)data)[1];
  ((int*)data)[2] = ((int*)data)[2] & -2;
  entry->bits_at_112/*.1_1of4*/ = ( (int)entry->bits_at_112/*.1_1of4*/ & -2 & -3 ) | ( ( entry->user[0] == 0 ? 1 : entry->password[0] != 0 ) * 2 );
  if ( ( ( (unsigned char)( ( (int)entry->bits_at_112/*.1_1of4*/ & -2 & -3 ) | ( ( entry->password[0] != 0 ) * 2 ) ) & 2 ) & 255 ) && ses->history.current )
  {
    struct uri *uri = ses->history.current->vs.uri;
    if ( uri->bits_at_40/*.3_4of4*/ )
    {
      errfile = "/home/naftali/source/elinks-0.12~pre5/src/protocol/auth/dialogs.c";
      errline = 45;
      if ( elinks_strlcmp( &entry->user[0], -1, uri->user, uri->bits_at_40/*.3_4of4*/ ) )
      {
        uri = get_composed_uri( &uri[0], -32077 );
        if ( get_composed_uri( &uri[0], -32077 ) )
        {
          goto_uri_frame( &ses[0], get_composed_uri( &uri[0], -32077 ), 0, CACHE_MODE_INCREMENT );
          data = (void*)uri[0].string;
        }
      }
    }
    if ( uri->password )
    {
      errfile = "/home/naftali/source/elinks-0.12~pre5/src/protocol/auth/dialogs.c";
      errline = 46;
      if ( elinks_strlcmp( entry->password[0] + 72, -1, uri->password, (int)uri->bits_at_44/*.1_2of4*/ ) )
      {
        uri = get_composed_uri( &uri[0], -32077 );
      }
    }
  }
  reload( &ses[0], CACHE_MODE_INCREMENT );
  return;
}
示例#6
0
文件: proxy.c 项目: rkd77/elinks-tv
struct uri *
get_proxy_uri(struct uri *uri, struct connection_state *error_state)
{
    if (uri->protocol == PROTOCOL_PROXY) {
        return get_composed_uri(uri, URI_BASE);
    } else {
#ifdef CONFIG_SCRIPTING
        unsigned char *tmp = NULL;
        static int get_proxy_event_id = EVENT_NONE;

        set_event_id(get_proxy_event_id, "get-proxy");
        trigger_event(get_proxy_event_id, &tmp, struri(uri));

        uri = get_proxy_worker(uri, tmp, error_state);
        mem_free_if(tmp);
        return uri;
#else
        return get_proxy_worker(uri, NULL, error_state);
#endif
    }
}
示例#7
0
文件: proxy.c 项目: rkd77/elinks-tv
static struct uri *
get_proxy_worker(struct uri *uri, unsigned char *proxy,
                 struct connection_state *error_state)
{
    unsigned char *protocol_proxy = NULL;

    if (proxy) {
        if (*proxy) {
            proxy = strip_proxy_protocol(proxy, (unsigned char *)"http://", (unsigned char *)"ftp://");

            return proxy_uri(uri, proxy, error_state);
        }

        /* "" from script_hook_get_proxy() */
        return get_composed_uri(uri, URI_BASE);
    }

    switch (uri->protocol) {
    case PROTOCOL_HTTP:
        protocol_proxy = get_protocol_proxy((unsigned char *)"protocol.http.proxy.host",
                                            (unsigned char *)"HTTP_PROXY", (unsigned char *)"http_proxy",
                                            (unsigned char *)"http://", NULL);
        break;

    case PROTOCOL_HTTPS:
        /* As Timo Lindfors explains, the communication between ELinks
         * and the proxy server is never encrypted, altho the proxy
         * might be used to transfer encrypted data between Web client
         * and Web server. (Some proxy servers might allow encrypted
         * communication between the Web client and the proxy
         * but ELinks does not support that.) */
        /* So, don't check whether the URI for the proxy begins
         * with "https://" but rather check for "http://".
         * Maybe we should allow either -- ELinks uses HTTP
         * to communicate with the proxy when we use it for FTP, but we
         * check for "ftp://" below; and what about 'be liberal in what
         * you accept' (altho that is usually applied to data received
         * from remote systems, not to user input)?  -- Miciah */
        protocol_proxy = get_protocol_proxy((unsigned char *)"protocol.https.proxy.host",
                                            (unsigned char *)"HTTPS_PROXY", (unsigned char *)"https_proxy",
                                            (unsigned char *)"http://", NULL);
        break;

    case PROTOCOL_FTP:
        protocol_proxy = get_protocol_proxy((unsigned char *)"protocol.ftp.proxy.host",
                                            (unsigned char *)"FTP_PROXY", (unsigned char *)"ftp_proxy",
                                            (unsigned char *)"ftp://", (unsigned char *)"http://");
        break;
    }

    if (protocol_proxy && *protocol_proxy) {
        unsigned char *no_proxy;
        unsigned char *slash = (unsigned char *)strchr((char *)protocol_proxy, '/');

        if (slash) *slash = 0;

        no_proxy = get_opt_str((const unsigned char *)"protocol.no_proxy", NULL);
        if (!*no_proxy) no_proxy = (unsigned char *)getenv("NO_PROXY");
        if (!no_proxy || !*no_proxy) no_proxy = (unsigned char *)getenv("no_proxy");

        if (!proxy_probe_no_proxy(uri->host, no_proxy))
            return proxy_uri(uri, protocol_proxy, error_state);
    }

    return get_composed_uri(uri, URI_BASE);
}
示例#8
0
struct uri *get_auth_entry_uri( struct listbox_item *item )
{
  return get_composed_uri( &item->udata[3], URI_HTTP_AUTH );
}