| 7093 | */ |
| 7094 | |
| 7095 | static void |
| 7096 | process_state_message( |
| 7097 | ippeve_job_t *job, /* I - Job */ |
| 7098 | char *message) /* I - Message */ |
| 7099 | { |
| 7100 | int i; /* Looping var */ |
| 7101 | ippeve_preason_t state_reasons, /* printer-state-reasons values */ |
| 7102 | bit; /* Current reason bit */ |
| 7103 | char *ptr, /* Pointer into message */ |
| 7104 | *next; /* Next keyword in message */ |
| 7105 | int remove; /* Non-zero if we are removing keywords */ |
| 7106 | |
| 7107 | |
| 7108 | /* |
| 7109 | * Skip leading "STATE:" and any whitespace... |
| 7110 | */ |
| 7111 | |
| 7112 | for (message += 6; *message; message ++) |
| 7113 | if (*message != ' ' && *message != '\t') |
| 7114 | break; |
| 7115 | |
| 7116 | /* |
| 7117 | * Support the following forms of message: |
| 7118 | * |
| 7119 | * "keyword[,keyword,...]" to set the printer-state-reasons value(s). |
| 7120 | * |
| 7121 | * "-keyword[,keyword,...]" to remove keywords. |
| 7122 | * |
| 7123 | * "+keyword[,keyword,...]" to add keywords. |
| 7124 | * |
| 7125 | * Keywords may or may not have a suffix (-report, -warning, -error) per |
| 7126 | * RFC 8011. |
| 7127 | */ |
| 7128 | |
| 7129 | if (*message == '-') |
| 7130 | { |
| 7131 | remove = 1; |
| 7132 | state_reasons = job->printer->state_reasons; |
| 7133 | message ++; |
| 7134 | } |
| 7135 | else if (*message == '+') |
| 7136 | { |
| 7137 | remove = 0; |
| 7138 | state_reasons = job->printer->state_reasons; |
| 7139 | message ++; |
| 7140 | } |
| 7141 | else |
| 7142 | { |
| 7143 | remove = 0; |
| 7144 | state_reasons = IPPEVE_PREASON_NONE; |
| 7145 | } |
| 7146 | |
| 7147 | while (*message) |
| 7148 | { |
| 7149 | if ((next = strchr(message, ',')) != NULL) |
| 7150 | *next++ = '\0'; |
| 7151 | |
| 7152 | if ((ptr = strstr(message, "-error")) != NULL) |