Changeset 441

Show
Ignore:
Timestamp:
07/11/2005 11:03:12 AM (3 years ago)
Author:
jan
Message:

added string-compare (NE, EQ), fixed handling of trigger.handler

Location:
branches/lighttpd-1.3.x/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/lighttpd-1.3.x/src/mod_cml.h

    r432 r441  
    6161         
    6262        buffer *basedir; 
     63        buffer *baseurl; 
    6364         
    6465        buffer *trigger_handler; 
     
    99100CACHE_FUNC_PROTO(f_memcache_get_string); 
    100101CACHE_FUNC_PROTO(f_memcache_get_long); 
     102CACHE_FUNC_PROTO(f_http_request_get_param); 
     103CACHE_FUNC_PROTO(f_crypto_md5); 
    101104 
    102105#endif 
  • branches/lighttpd-1.3.x/src/mod_cml_logic.c

    r432 r441  
    171171                { "memcache.get_long",     1, f_memcache_get_long }, 
    172172#endif 
     173                { "http.get_parameter",    1, f_http_request_get_param }, 
     174                { "crypto.md5",            1, f_crypto_md5 }, 
    173175                { NULL, 0, NULL }, 
    174176        }; 
     
    392394} 
    393395 
    394 int cache_ops_long(tnode *res, tnode *l, tnode *r) { 
     396int cache_ops_long(server *srv, tnode *res, tnode *l, tnode *r) { 
    395397        if (!IS_LONG(l) || !IS_LONG(r)) { 
    396398                return -1; 
     
    432434} 
    433435 
    434 int cache_ops_string(tnode *res, tnode *l, tnode *r) { 
     436int cache_ops_string(server *srv, tnode *res, tnode *l, tnode *r) { 
    435437        if (!IS_STRING(l) || !IS_STRING(r)) { 
    436438                return -1; 
     
    448450                 
    449451                break; 
     452        case EQ: 
     453                tnode_prepare_long(res); 
     454                 
     455                VAL_LONG(res) = buffer_is_equal(VAL_STRING(l), VAL_STRING(r)); 
     456                 
     457                res->value.type = T_NODE_VALUE_LONG; 
     458                res->op = UNSET; 
     459                 
     460                break; 
     461        case NE: 
     462                tnode_prepare_long(res); 
     463                 
     464                VAL_LONG(res) = !buffer_is_equal(VAL_STRING(l), VAL_STRING(r)); 
     465                 
     466                res->value.type = T_NODE_VALUE_LONG; 
     467                res->op = UNSET; 
     468                 
     469                break; 
    450470        default: 
    451471                return -1; 
    452472        } 
     473         
     474        return 0; 
     475} 
     476 
     477int cache_print_tree(server *srv, connection *con, plugin_data *p, tnode *t, int indent) { 
     478        char s[255]; 
     479        size_t i; 
     480         
     481        for (i = 0; i < indent; i++) { 
     482                s[i] = ' '; 
     483        } 
     484         
     485        s[i] = '\0'; 
     486         
     487        if (IS_LONG(t))   log_error_write(srv, __FILE__, __LINE__, "ssd", s, "l:", VAL_LONG(t));  
     488        if (IS_STRING(t)) log_error_write(srv, __FILE__, __LINE__, "ssb", s, "s:", VAL_STRING(t));  
     489         
     490         
     491        if (t->l) { 
     492                log_error_write(srv, __FILE__, __LINE__, "ss", s, "left");  
     493                cache_print_tree(srv, con, p, t->l, indent + 1); 
     494        } 
     495         
     496        if (t->r) { 
     497                log_error_write(srv, __FILE__, __LINE__, "ss", s, "right");  
     498                cache_print_tree(srv, con, p, t->r, indent + 1); 
     499        } 
     500         
    453501         
    454502        return 0; 
     
    478526        /* left and right are simple datatypes now */ 
    479527        if (IS_LONG(t->l) && IS_LONG(t->r)) { 
    480                 if (-1 == cache_ops_long(t, t->l, t->r)) { 
    481                         fprintf(stderr, "%s.%d\n", __FILE__, __LINE__); 
     528                if (-1 == cache_ops_long(srv, t, t->l, t->r)) { 
     529                        log_error_write(srv, __FILE__, __LINE__, "s",  
     530                                        "cache_ops_long failed"); 
    482531                        return -1; 
    483532                } 
    484533        } else if (IS_STRING(t->l) && IS_STRING(t->r)) { 
    485                 if (-1 == cache_ops_string(t, t->l, t->r)) { 
     534                if (-1 == cache_ops_string(srv, t, t->l, t->r)) { 
    486535                        log_error_write(srv, __FILE__, __LINE__, "s",  
    487536                                        "cache_ops_string failed"); 
     
    489538                } 
    490539        } else { 
    491                 log_error_write(srv, __FILE__, __LINE__, "s",  
    492                                 "typemismatch"); 
     540                log_error_write(srv, __FILE__, __LINE__, "sdd",  
     541                                "typemismatch", t->l->value.type, t->r->value.type); 
    493542                 
    494543                return -1; 
     
    516565 
    517566                if (IS_LONG(t)) { 
    518 #if 0 
    519                         fprintf(stderr, "eval: %s = %ld\n", p->trigger_if->ptr[i]->ptr, VAL_LONG(t)); 
    520 #endif 
     567                        log_error_write(srv, __FILE__, __LINE__, "sbd",  
     568                                        "eval:", p->trigger_if->ptr[i], VAL_LONG(t)); 
    521569                        if (VAL_LONG(t) != 0) { 
    522570                                tnode_free(t); 
     
    525573                        } 
    526574                } else if (IS_STRING(t)) { 
    527 #if 0 
    528                         fprintf(stderr, "eval: %s = '%s'\n", p->trigger_if->ptr[i]->ptr, VAL_STRING(t)->ptr); 
    529 #endif 
     575                        log_error_write(srv, __FILE__, __LINE__, "sbb",  
     576                                        "eval:", p->trigger_if->ptr[i], VAL_STRING(t)); 
     577                         
    530578                        if (VAL_STRING(t)->used > 1) { 
    531579                                tnode_free(t); 
     
    651699                                 */ 
    652700                                 
    653                                 buffer *b; 
    654                                  
    655                                 b = p->trigger_handler; 
    656                                  
    657                                 buffer_copy_string_buffer(b, p->basedir); 
    658                                 buffer_append_string(b, value);  
     701                                buffer_copy_string(p->trigger_handler, value); 
    659702                        } else { 
    660703                                log_error_write(srv, __FILE__, __LINE__, "db", key_len, srv->tmp_buf); 
     
    685728                 
    686729                /* rewrite filename */ 
    687                 buffer_copy_string_buffer(con->physical.path, p->trigger_handler); 
     730                buffer_copy_string_buffer(con->uri.path, p->baseurl); 
     731                buffer_append_string_buffer(con->uri.path, p->trigger_handler); 
     732         
     733                buffer_copy_string_buffer(con->physical.path, p->basedir); 
     734                buffer_append_string_buffer(con->physical.path, p->trigger_handler); 
    688735                 
    689736                chunkqueue_reset(con->write_queue);