Deleted Added
full compact
apr_memcache.c (302408) apr_memcache.c (362181)
1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements. See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0

--- 342 unchanged lines hidden (view full) ---

351
352 rv = apr_socket_create(&conn->sock, family, SOCK_STREAM, 0, np);
353
354 if (rv != APR_SUCCESS) {
355 apr_pool_destroy(np);
356 return rv;
357 }
358
1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements. See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0

--- 342 unchanged lines hidden (view full) ---

351
352 rv = apr_socket_create(&conn->sock, family, SOCK_STREAM, 0, np);
353
354 if (rv != APR_SUCCESS) {
355 apr_pool_destroy(np);
356 return rv;
357 }
358
359 conn->buffer = apr_palloc(conn->p, BUFFER_SIZE);
359 conn->buffer = apr_palloc(conn->p, BUFFER_SIZE + 1);
360 conn->blen = 0;
361 conn->ms = ms;
362
363 rv = conn_connect(conn);
364 if (rv != APR_SUCCESS) {
365 apr_pool_destroy(np);
366 }
367 else {

--- 355 unchanged lines hidden (view full) ---

723 return storage_cmd_write(mc,
724 MC_REPLACE, MC_REPLACE_LEN,
725 key,
726 data, data_size,
727 timeout, flags);
728
729}
730
360 conn->blen = 0;
361 conn->ms = ms;
362
363 rv = conn_connect(conn);
364 if (rv != APR_SUCCESS) {
365 apr_pool_destroy(np);
366 }
367 else {

--- 355 unchanged lines hidden (view full) ---

723 return storage_cmd_write(mc,
724 MC_REPLACE, MC_REPLACE_LEN,
725 key,
726 data, data_size,
727 timeout, flags);
728
729}
730
731/*
732 * Parses a decimal size from size_str, returning the value in *size.
733 * Returns 1 if parsing was successful, 0 if parsing failed.
734 */
735static int parse_size(const char *size_str, apr_size_t *size)
736{
737 char *endptr;
738 long size_as_long;
739
740 errno = 0;
741 size_as_long = strtol(size_str, &endptr, 10);
742 if ((size_as_long < 0) || (errno != 0) || (endptr == size_str) ||
743 (endptr[0] != ' ' && (endptr[0] != '\r' || endptr[1] != '\n'))) {
744 return 0;
745 }
746
747 *size = (unsigned long)size_as_long;
748 return 1;
749}
750
731APU_DECLARE(apr_status_t)
732apr_memcache_getp(apr_memcache_t *mc,
733 apr_pool_t *p,
734 const char *key,
735 char **baton,
736 apr_size_t *new_length,
737 apr_uint16_t *flags_)
738{

--- 52 unchanged lines hidden (view full) ---

791 flags = apr_strtok(NULL, " ", &last);
792 flags = apr_strtok(NULL, " ", &last);
793
794 if (flags_) {
795 *flags_ = atoi(flags);
796 }
797
798 length = apr_strtok(NULL, " ", &last);
751APU_DECLARE(apr_status_t)
752apr_memcache_getp(apr_memcache_t *mc,
753 apr_pool_t *p,
754 const char *key,
755 char **baton,
756 apr_size_t *new_length,
757 apr_uint16_t *flags_)
758{

--- 52 unchanged lines hidden (view full) ---

811 flags = apr_strtok(NULL, " ", &last);
812 flags = apr_strtok(NULL, " ", &last);
813
814 if (flags_) {
815 *flags_ = atoi(flags);
816 }
817
818 length = apr_strtok(NULL, " ", &last);
799 if (length) {
800 len = strtol(length, (char **)NULL, 10);
819 if (!length || !parse_size(length, &len)) {
820 ms_bad_conn(ms, conn);
821 apr_memcache_disable_server(mc, ms);
822 return APR_EGENERAL;
801 }
823 }
802
803 if (len == 0 ) {
804 *new_length = 0;
805 *baton = NULL;
806 }
807 else {
808 apr_bucket_brigade *bbb;
809 apr_bucket *e;
810
811 /* eat the trailing \r\n */
812 rv = apr_brigade_partition(conn->bb, len+2, &e);
824 else {
825 apr_bucket_brigade *bbb;
826 apr_bucket *e;
827
828 /* eat the trailing \r\n */
829 rv = apr_brigade_partition(conn->bb, len+2, &e);
813
814 if (rv != APR_SUCCESS) {
815 ms_bad_conn(ms, conn);
816 apr_memcache_disable_server(mc, ms);
817 return rv;
818 }
819
820 bbb = apr_brigade_split(conn->bb, e);
821
822 rv = apr_brigade_pflatten(conn->bb, baton, &len, p);
830 if (rv != APR_SUCCESS) {
831 ms_bad_conn(ms, conn);
832 apr_memcache_disable_server(mc, ms);
833 return rv;
834 }
835
836 bbb = apr_brigade_split(conn->bb, e);
837
838 rv = apr_brigade_pflatten(conn->bb, baton, &len, p);
823
824 if (rv != APR_SUCCESS) {
825 ms_bad_conn(ms, conn);
839 if (rv != APR_SUCCESS) {
840 ms_bad_conn(ms, conn);
826 apr_memcache_disable_server(mc, ms);
827 return rv;
828 }
829
830 rv = apr_brigade_destroy(conn->bb);
831 if (rv != APR_SUCCESS) {
832 ms_bad_conn(ms, conn);
841 return rv;
842 }
843
844 rv = apr_brigade_destroy(conn->bb);
845 if (rv != APR_SUCCESS) {
846 ms_bad_conn(ms, conn);
833 apr_memcache_disable_server(mc, ms);
834 return rv;
835 }
836
837 conn->bb = bbb;
838
839 *new_length = len - 2;
840 (*baton)[*new_length] = '\0';
841 }
842
843 rv = get_server_line(conn);
844 if (rv != APR_SUCCESS) {
845 ms_bad_conn(ms, conn);
846 apr_memcache_disable_server(mc, ms);
847 return rv;
848 }
849
850 if (strncmp(MS_END, conn->buffer, MS_END_LEN) != 0) {
847 return rv;
848 }
849
850 conn->bb = bbb;
851
852 *new_length = len - 2;
853 (*baton)[*new_length] = '\0';
854 }
855
856 rv = get_server_line(conn);
857 if (rv != APR_SUCCESS) {
858 ms_bad_conn(ms, conn);
859 apr_memcache_disable_server(mc, ms);
860 return rv;
861 }
862
863 if (strncmp(MS_END, conn->buffer, MS_END_LEN) != 0) {
851 rv = APR_EGENERAL;
864 ms_bad_conn(ms, conn);
865 apr_memcache_disable_server(mc, ms);
866 return APR_EGENERAL;
852 }
853 }
854 else if (strncmp(MS_END, conn->buffer, MS_END_LEN) == 0) {
855 rv = APR_NOTFOUND;
856 }
857 else {
867 }
868 }
869 else if (strncmp(MS_END, conn->buffer, MS_END_LEN) == 0) {
870 rv = APR_NOTFOUND;
871 }
872 else {
858 rv = APR_EGENERAL;
873 ms_bad_conn(ms, conn);
874 apr_memcache_disable_server(mc, ms);
875 return APR_EGENERAL;
859 }
860
861 ms_release_conn(ms, conn);
862
863 return rv;
864}
865
866APU_DECLARE(apr_status_t)

--- 486 unchanged lines hidden (view full) ---

1353
1354 if (strncmp(MS_VALUE, conn->buffer, MS_VALUE_LEN) == 0) {
1355 char *key;
1356 char *flags;
1357 char *length;
1358 char *last;
1359 char *data;
1360 apr_size_t len = 0;
876 }
877
878 ms_release_conn(ms, conn);
879
880 return rv;
881}
882
883APU_DECLARE(apr_status_t)

--- 486 unchanged lines hidden (view full) ---

1370
1371 if (strncmp(MS_VALUE, conn->buffer, MS_VALUE_LEN) == 0) {
1372 char *key;
1373 char *flags;
1374 char *length;
1375 char *last;
1376 char *data;
1377 apr_size_t len = 0;
1378 apr_bucket *e = NULL;
1361
1362 key = apr_strtok(conn->buffer, " ", &last); /* just the VALUE, ignore */
1363 key = apr_strtok(NULL, " ", &last);
1364 flags = apr_strtok(NULL, " ", &last);
1379
1380 key = apr_strtok(conn->buffer, " ", &last); /* just the VALUE, ignore */
1381 key = apr_strtok(NULL, " ", &last);
1382 flags = apr_strtok(NULL, " ", &last);
1365
1366
1367 length = apr_strtok(NULL, " ", &last);
1383 length = apr_strtok(NULL, " ", &last);
1368 if (length) {
1369 len = strtol(length, (char **) NULL, 10);
1384
1385 if (!length || !parse_size(length, &len)) {
1386 rv = APR_EGENERAL;
1370 }
1387 }
1388 else {
1389 /* eat the trailing \r\n */
1390 rv = apr_brigade_partition(conn->bb, len+2, &e);
1391 }
1392 if (rv != APR_SUCCESS) {
1393 apr_pollset_remove (pollset, &activefds[i]);
1394 mget_conn_result(TRUE, FALSE, rv, mc, ms, conn,
1395 server_query, values, server_queries);
1396 queries_sent--;
1397 continue;
1398 }
1371
1372 value = apr_hash_get(values, key, strlen(key));
1399
1400 value = apr_hash_get(values, key, strlen(key));
1373
1374
1375 if (value) {
1401 if (value) {
1376 if (len != 0) {
1377 apr_bucket_brigade *bbb;
1378 apr_bucket *e;
1379
1380 /* eat the trailing \r\n */
1381 rv = apr_brigade_partition(conn->bb, len+2, &e);
1382
1383 if (rv != APR_SUCCESS) {
1384 apr_pollset_remove (pollset, &activefds[i]);
1385 mget_conn_result(FALSE, FALSE, rv, mc, ms, conn,
1386 server_query, values, server_queries);
1387 queries_sent--;
1388 continue;
1389 }
1390
1391 bbb = apr_brigade_split(conn->bb, e);
1392
1393 rv = apr_brigade_pflatten(conn->bb, &data, &len, data_pool);
1394
1395 if (rv != APR_SUCCESS) {
1396 apr_pollset_remove (pollset, &activefds[i]);
1397 mget_conn_result(FALSE, FALSE, rv, mc, ms, conn,
1398 server_query, values, server_queries);
1399 queries_sent--;
1400 continue;
1401 }
1402
1403 rv = apr_brigade_destroy(conn->bb);
1404 if (rv != APR_SUCCESS) {
1405 apr_pollset_remove (pollset, &activefds[i]);
1406 mget_conn_result(FALSE, FALSE, rv, mc, ms, conn,
1407 server_query, values, server_queries);
1408 queries_sent--;
1409 continue;
1410 }
1411
1412 conn->bb = bbb;
1413
1414 value->len = len - 2;
1415 data[value->len] = '\0';
1416 value->data = data;
1402 apr_bucket_brigade *bbb;
1403
1404 bbb = apr_brigade_split(conn->bb, e);
1405
1406 rv = apr_brigade_pflatten(conn->bb, &data, &len, data_pool);
1407 if (rv != APR_SUCCESS) {
1408 apr_pollset_remove (pollset, &activefds[i]);
1409 mget_conn_result(TRUE, FALSE, rv, mc, ms, conn,
1410 server_query, values, server_queries);
1411 queries_sent--;
1412 continue;
1417 }
1413 }
1418
1414
1415 rv = apr_brigade_destroy(conn->bb);
1416 if (rv != APR_SUCCESS) {
1417 apr_pollset_remove (pollset, &activefds[i]);
1418 mget_conn_result(TRUE, FALSE, rv, mc, ms, conn,
1419 server_query, values, server_queries);
1420 queries_sent--;
1421 continue;
1422 }
1423
1424 conn->bb = bbb;
1425
1426 value->len = len - 2;
1427 data[value->len] = '\0';
1428 value->data = data;
1429
1419 value->status = rv;
1420 value->flags = atoi(flags);
1430 value->status = rv;
1431 value->flags = atoi(flags);
1421
1432
1422 /* stay on the server */
1423 i--;
1433 /* stay on the server */
1434 i--;
1424
1425 }
1426 else {
1435 }
1436 else {
1427 /* TODO: Server Sent back a key I didn't ask for or my
1428 * hash is corrupt */
1437 /* Server Sent back a key I didn't ask for or my
1438 * hash is corrupt */
1439 rv = APR_EGENERAL;
1429 }
1430 }
1431 else if (strncmp(MS_END, conn->buffer, MS_END_LEN) == 0) {
1432 /* this connection is done */
1433 apr_pollset_remove (pollset, &activefds[i]);
1434 ms_release_conn(ms, conn);
1435 apr_hash_set(server_queries, &ms, sizeof(ms), NULL);
1440 }
1441 }
1442 else if (strncmp(MS_END, conn->buffer, MS_END_LEN) == 0) {
1443 /* this connection is done */
1444 apr_pollset_remove (pollset, &activefds[i]);
1445 ms_release_conn(ms, conn);
1446 apr_hash_set(server_queries, &ms, sizeof(ms), NULL);
1436
1437 queries_sent--;
1438 }
1439 else {
1440 /* unknown reply? */
1441 rv = APR_EGENERAL;
1442 }
1447 queries_sent--;
1448 }
1449 else {
1450 /* unknown reply? */
1451 rv = APR_EGENERAL;
1452 }
1443
1453 if (rv != APR_SUCCESS) {
1454 apr_pollset_remove (pollset, &activefds[i]);
1455 mget_conn_result(TRUE, FALSE, rv, mc, ms, conn,
1456 server_query, values, server_queries);
1457 queries_sent--;
1458 }
1444 } /* /for */
1445 } /* /while */
1446
1447 query_hash_index = apr_hash_first(temp_pool, server_queries);
1448 while (query_hash_index) {
1449 void *v;
1450 apr_hash_this(query_hash_index, NULL, NULL, &v);
1451 server_query = v;

--- 258 unchanged lines hidden ---
1459 } /* /for */
1460 } /* /while */
1461
1462 query_hash_index = apr_hash_first(temp_pool, server_queries);
1463 while (query_hash_index) {
1464 void *v;
1465 apr_hash_this(query_hash_index, NULL, NULL, &v);
1466 server_query = v;

--- 258 unchanged lines hidden ---