[svn-commits] russell: branch russell/parking_updates r114627 - /team/russell/parking_updat...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Thu Apr 24 15:10:13 CDT 2008
Author: russell
Date: Thu Apr 24 15:10:11 2008
New Revision: 114627
URL: http://svn.digium.com/view/asterisk?view=rev&rev=114627
Log:
Add an option to randomize selection of the parking spot instead of using the
first one available. That's right, no more cherry picking 701 Mr. Sales guy!
Modified:
team/russell/parking_updates/main/features.c
Modified: team/russell/parking_updates/main/features.c
URL: http://svn.digium.com/view/asterisk/team/russell/parking_updates/main/features.c?view=diff&rev=114627&r1=114626&r2=114627
==============================================================================
--- team/russell/parking_updates/main/features.c (original)
+++ team/russell/parking_updates/main/features.c Thu Apr 24 15:10:11 2008
@@ -424,7 +424,8 @@
}
enum park_call_options {
- PARK_OPT_RINGING = (1 << 0),
+ PARK_OPT_RINGING = (1 << 0),
+ PARK_OPT_RANDOMIZE = (1 << 1),
};
struct park_call_args {
@@ -441,7 +442,7 @@
/* Park a call */
static int park_call_full(struct ast_channel *chan, struct ast_channel *peer, struct park_call_args *args)
{
- struct parkeduser *pu, *cur;
+ struct parkeduser *pu;
int i, x = -1, parking_range;
struct ast_context *con;
const char *parkinglotname;
@@ -482,19 +483,36 @@
ast_copy_string(pu->parkingexten, parkingexten, sizeof(pu->parkingexten));
x = atoi(parkingexten);
} else {
+ int start;
+ struct parkeduser *cur = NULL;
+
/* Select parking space within range */
- parking_range = args->parkinglot->parking_stop - args->parkinglot->parking_start+1;
- for (i = 0; i < parking_range; i++) {
- x = (i + args->parkinglot->parking_offset) % parking_range + args->parkinglot->parking_start;
+ parking_range = args->parkinglot->parking_stop - args->parkinglot->parking_start + 1;
+
+ if (ast_test_flag(args, PARK_OPT_RANDOMIZE)) {
+ start = ast_random() % (args->parkinglot->parking_stop - args->parkinglot->parking_start + 1);
+ } else {
+ start = args->parkinglot->parking_start;
+ }
+
+ for (i = start; 1; i++) {
+ if (i == args->parkinglot->parking_stop + 1) {
+ i = args->parkinglot->parking_start - 1;
+ continue;
+ }
+
AST_LIST_TRAVERSE(&args->parkinglot->parkings, cur, list) {
- if (cur->parkingnum == x)
+ if (cur->parkingnum == i) {
break;
+ }
}
- if (!cur)
+
+ if (!cur || i == start - 1) {
break;
- }
-
- if (!(i < parking_range)) {
+ }
+ }
+
+ if (i == start - 1 && cur) {
ast_log(LOG_WARNING, "No more parking spaces\n");
ast_free(pu);
AST_LIST_UNLOCK(&args->parkinglot->parkings);
More information about the svn-commits
mailing list