- char *sp = strchr(data->value, ' ');
- char type;
- int rate;
-
- if (!sp || sp - data->value < 4 ||
- strncmp("service-policy", data->value, sp - data->value))
- return PLUGIN_RET_OK;
-
- while (*sp == ' ') sp++;
- data->value = sp;
-
- if (!(sp = strchr(data->value, ' ')) ||
- (strncmp("input", data->value, sp - data->value) &&
- strncmp("output", data->value, sp - data->value)))
- {
- p->log(3, p->get_id_by_session(data->s), data->s->tunnel,
- " Not throttling user (invalid type %.*s)\n",
- sp - data->value, data->value);
-
- return PLUGIN_RET_OK;
- }
-
- type = *data->value;
-
- while (*sp == ' ') sp++;
- data->value = sp;
-
- if ((rate = strtol(data->value, &sp, 10)) < 0 || *sp)
- {
- p->log(3, p->get_id_by_session(data->s), data->s->tunnel,
- " Not throttling user (invalid rate %s)\n",
- data->value);
-
- return PLUGIN_RET_OK;
- }
-
- if (type == 'i')
- {
- data->s->throttle_in = rate;
- p->log(3, p->get_id_by_session(data->s), data->s->tunnel,
- " Throttling user input to %dkb/s\n",
- rate);
- }
- else
- {
- data->s->throttle_out = rate;
- p->log(3, p->get_id_by_session(data->s), data->s->tunnel,
- " Throttling user output to %dkb/s\n",
- rate);
- }