Lines Matching defs:neg

610 static void parse_negotiate_header(request_rec *r, negotiation_state *neg)
624 neg->ua_supports_trans = 0;
625 neg->send_alternates = 0;
626 neg->may_choose = 1;
627 neg->use_rvsa = 0;
628 neg->dont_fiddle_headers = 0;
647 neg->may_choose = 0; /* An empty Negotiate would require 300 response */
649 while ((tok = ap_get_list_item(neg->pool, &negotiate)) != NULL) {
658 neg->ua_supports_trans = 1;
664 neg->send_alternates = 1;
668 neg->may_choose = 1;
669 neg->use_rvsa = 1;
670 neg->dont_fiddle_headers = 1;
676 neg->may_choose = 1;
682 neg->dont_fiddle_headers = 1;
691 neg->dont_fiddle_headers, neg->use_rvsa,
692 neg->ua_supports_trans, neg->send_alternates, neg->may_choose);
703 static void maybe_add_default_accepts(negotiation_state *neg,
708 if (!neg->accepts) {
709 neg->accepts = apr_array_make(neg->pool, 4, sizeof(accept_rec));
711 new_accept = (accept_rec *) apr_array_push(neg->accepts);
718 new_accept = (accept_rec *) apr_array_push(neg->accepts);
721 if (neg->use_rvsa) {
939 static int read_type_map(apr_file_t **map, negotiation_state *neg,
942 request_rec *r = neg->r;
954 neg->count_multiviews_variants = 0;
957 APR_OS_DEFAULT, neg->pool)) != APR_SUCCESS) {
975 char *body1 = lcase_header_name_return_body(buffer, neg->r);
986 mime_info.file_name = ap_get_token(neg->pool, &body, 0);
991 get_entry(neg->pool, &accept_info, body);
999 body1 = ap_get_token(neg->pool, &body, 0);
1012 mime_info.content_languages = do_languages_line(neg->pool,
1017 mime_info.content_encoding = ap_get_token(neg->pool, &body, 0);
1021 char *desc = apr_pstrdup(neg->pool, body);
1031 char *tag = apr_pstrdup(neg->pool, body);
1049 void *new_var = apr_array_push(neg->avail_vars);
1092 static int read_types_multi(negotiation_state *neg)
1094 request_rec *r = neg->r;
1109 || !ap_os_is_path_absolute(neg->pool, r->filename)) {
1120 if ((status = apr_dir_open(&dirp, neg->dir_name,
1121 neg->pool)) != APR_SUCCESS) {
1123 "cannot read directory for multi: %s", neg->dir_name);
1258 neg->avail_vars->nelts = 0;
1262 return read_type_map(NULL, neg, sub_req);
1268 mime_info.file_name = apr_pstrdup(neg->pool, dirent.name);
1276 get_entry(neg->pool, &accept_info, sub_req->content_type);
1279 new_var = apr_array_push(neg->avail_vars);
1282 neg->count_multiviews_variants++;
1293 if (anymatch && !neg->avail_vars->nelts) {
1311 qsort((void *) neg->avail_vars->elts, neg->avail_vars->nelts,
1487 static void set_default_lang_quality(negotiation_state *neg)
1489 var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
1492 if (!neg->dont_fiddle_headers) {
1493 for (j = 0; j < neg->avail_vars->nelts; ++j) {
1497 neg->default_lang_quality = 0.0001f;
1503 neg->default_lang_quality = 1.0f;
1537 static void set_language_quality(negotiation_state *neg, var_rec *variant)
1539 int forcepriority = neg->conf->forcelangpriority;
1551 if (!neg->dont_fiddle_headers) {
1552 variant->lang_quality = neg->default_lang_quality;
1554 if (!neg->accept_langs) {
1569 if (!neg->accept_langs) {
1574 accept_rec *accs = (accept_rec *) neg->accept_langs->elts;
1600 for (i = 0; i < neg->accept_langs->nelts; ++i) {
1634 if (!bestthistag && !neg->dont_fiddle_headers) {
1715 idx = find_lang_index(neg->conf->language_priority, lang);
1743 static apr_off_t find_content_length(negotiation_state *neg, var_rec *variant)
1753 char *fullname = ap_make_full_path(neg->pool, neg->dir_name,
1757 APR_FINFO_SIZE, neg->pool) == APR_SUCCESS) {
1772 static void set_accept_quality(negotiation_state *neg, var_rec *variant)
1785 if (!neg->accepts) {
1791 accept_recs = (accept_rec *) neg->accepts->elts;
1804 for (i = 0; i < neg->accepts->nelts; ++i) {
1829 if (!neg->dont_fiddle_headers && !neg->accept_q &&
1833 else if (!neg->dont_fiddle_headers && !neg->accept_q &&
1852 static void set_charset_quality(negotiation_state *neg, var_rec *variant)
1862 if (!neg->accept_charsets) {
1868 accept_recs = (accept_rec *) neg->accept_charsets->elts;
1884 if (neg->dont_fiddle_headers)
1895 for (i = 0; i < neg->accept_charsets->nelts; ++i) {
1945 static void set_encoding_quality(negotiation_state *neg, var_rec *variant)
1953 if (!neg->accept_encodings) {
1971 accept_recs = (accept_rec *) neg->accept_encodings->elts;
1979 for (i = 0; i < neg->accept_encodings->nelts; ++i) {
2028 * one is through the neg->use_rvsa flag.
2040 static int is_variant_better_rvsa(negotiation_state *neg, var_rec *variant,
2073 ? apr_array_pstrcat(neg->pool, variant->content_languages, ',')
2107 static int is_variant_better(negotiation_state *neg, var_rec *variant,
2143 ? apr_array_pstrcat(neg->pool, variant->content_languages, ',')
2232 if (find_content_length(neg, variant) >= find_content_length(neg, best)) {
2284 static int best_match(negotiation_state *neg, var_rec **pbest)
2292 var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
2297 const char *preferred_language = apr_table_get(neg->r->subprocess_env,
2301 if (apr_table_get(neg->r->subprocess_env, "no-gzip")) {
2309 const char *env_value = apr_table_get(neg->r->subprocess_env,
2317 set_default_lang_quality(neg);
2330 for (j = 0; j < neg->avail_vars->nelts; ++j) {
2355 set_accept_quality(neg, variant);
2364 set_language_quality(neg, variant);
2366 set_encoding_quality(neg, variant);
2367 set_charset_quality(neg, variant);
2372 if (neg->may_choose) {
2381 if (neg->use_rvsa) {
2382 if (is_variant_better_rvsa(neg, variant, best, &bestq)) {
2387 if (is_variant_better(neg, variant, best, &bestq)) {
2396 if (neg->use_rvsa) {
2430 * neg->is_transparent determines whether a transparently negotiated
2446 static void set_neg_headers(request_rec *r, negotiation_state *neg,
2450 var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
2459 int max_vlist_array = (neg->avail_vars->nelts * 21);
2473 if (neg->send_alternates && neg->avail_vars->nelts)
2483 for (j = 0; j < neg->avail_vars->nelts; ++j) {
2527 if (!neg->send_alternates)
2590 && (len = find_content_length(neg, variant)) >= 0) {
2602 if (neg->send_alternates && neg->avail_vars->nelts) {
2608 if (neg->is_transparent || vary_by_type || vary_by_language ||
2612 neg->is_transparent ? ", negotiate" : "",
2619 if (neg->is_transparent) { /* Create TCN response header */
2631 static char *make_variant_list(request_rec *r, negotiation_state *neg)
2635 int max_vlist_array = (neg->avail_vars->nelts * 15) + 2;
2645 for (i = 0; i < neg->avail_vars->nelts; ++i) {
2646 var_rec *variant = &((var_rec *) neg->avail_vars->elts)[i];
2689 static void store_variant_list(request_rec *r, negotiation_state *neg)
2692 apr_table_setn(r->notes, "variant-list", make_variant_list(r, neg));
2696 make_variant_list(r->main, neg));
2706 static int setup_choice_response(request_rec *r, negotiation_state *neg,
2751 if (neg->is_transparent &&
2809 set_neg_headers(r, neg, alg_choice); /* add Alternates and Vary */
2821 static int do_negotiation(request_rec *r, negotiation_state *neg,
2824 var_rec *avail_recs = (var_rec *) neg->avail_vars->elts;
2837 neg->is_transparent = 1;
2843 neg->is_transparent = 0;
2845 for (j = 0; j < neg->avail_vars->nelts; ++j) {
2854 neg->is_transparent = 0;
2860 neg->is_transparent = 0;
2865 if (neg->is_transparent) {
2866 parse_negotiate_header(r, neg);
2869 neg->may_choose = 1;
2872 maybe_add_default_accepts(neg, prefer_scripts);
2874 alg_result = best_match(neg, bestp);
2884 neg->send_alternates = 1; /* always include Alternates header */
2885 set_neg_headers(r, neg, alg_result);
2886 store_variant_list(r, neg);
2888 if (neg->is_transparent && neg->ua_supports_trans) {
2915 if (neg->is_transparent) {
2917 if ((res = setup_choice_response(r, neg, *bestp)) != 0) {
2922 set_neg_headers(r, neg, alg_result);
2960 && neg->count_multiviews_variants != 1) {
2969 negotiation_state *neg;
2979 neg = parse_accept_headers(r);
2980 if ((res = read_type_map(&map, neg, r))) {
2984 res = do_negotiation(r, neg, &best, 0);
3085 negotiation_state *neg;
3096 neg = parse_accept_headers(r);
3098 if ((res = read_types_multi(neg))) {
3101 avail_recs = (var_rec *) neg->avail_vars->elts;
3102 for (j = 0; j < neg->avail_vars->nelts; ++j) {
3110 if (neg->avail_vars->nelts == 0) {
3114 res = do_negotiation(r, neg, &best,
3148 avail_recs = (var_rec *) neg->avail_vars->elts;
3149 for (j = 0; j < neg->avail_vars->nelts; ++j) {