+static int setbwlimit_cmd(UAContext *ua, const char *cmd)
+{
+ int action = -1;
+ CLIENT *client = NULL;
+ char Job[MAX_NAME_LENGTH];
+ *Job=0;
+ int64_t limit = -1;
+ JCR *jcr = NULL;
+ int i;
+
+ const char *lst_all[] = { "job", "jobid", "jobname", "client", NULL };
+ if (find_arg_keyword(ua, lst_all) < 0) {
+ start_prompt(ua, _("Set Bandwidth choice:\n"));
+ add_prompt(ua, _("Running Job")); /* 0 */
+ add_prompt(ua, _("Running and future Jobs for a Client")); /* 1 */
+ action = do_prompt(ua, "item", _("Choose where to limit the bandwidth"),
+ NULL, 0);
+ if (action < 0) {
+ return 1;
+ }
+ }
+
+ i = find_arg_with_value(ua, "limit");
+ if (i >= 0) {
+ limit = atoi(ua->argv[i]) * 1024LL;
+ }
+ if (limit < 0) {
+ if (!get_pint(ua, _("Enter new bandwidth limit kb/s: "))) {
+ return 1;
+ }
+ limit = ua->pint32_val * 1024LL; /* kb/s */
+ }
+
+ const char *lst[] = { "job", "jobid", "jobname", NULL };
+ if (action == 0 || find_arg_keyword(ua, lst) > 0) {
+ alist *jcrs = New(alist(10, not_owned_by_alist));
+ select_running_jobs(ua, jcrs, "limit");
+ foreach_alist(jcr, jcrs) {
+ jcr->max_bandwidth = limit; /* TODO: see for locking (Should be safe)*/
+ bstrncpy(Job, jcr->Job, sizeof(Job));
+ client = jcr->client;
+ setbwlimit_client(ua, client, Job, limit);
+ free_jcr(jcr);
+ }
+
+ } else {
+ client = get_client_resource(ua);
+ if (client) {
+ setbwlimit_client(ua, client, Job, limit);
+ }
+ }
+ return 1;
+}