Lines Matching defs:rp
63 * returns 0 if no further valid range forthcoming; rp->state
68 lws_ranges_next(struct lws_range_parsing *rp)
74 char c = rp->buf[rp->pos];
76 switch (rp->state) {
82 rp->state = LWSRS_COMPLETED;
86 if (c != beq[rp->pos]) {
87 rp->state = LWSRS_SYNTAX;
90 if (rp->pos == 5)
91 rp->state = LWSRS_FIRST;
95 rp->start = 0;
96 rp->end = 0;
97 rp->start_valid = 0;
98 rp->end_valid = 0;
100 rp->state = LWSRS_STARTING;
106 rp->state = LWSRS_ENDING;
111 rp->state = LWSRS_SYNTAX;
114 rp->start = (unsigned long long)(((unsigned long long)rp->start * 10) + (unsigned long long)(c - '0'));
115 rp->start_valid = 1;
120 rp->state = LWSRS_FIRST;
122 rp->pos++;
129 if (!rp->start_valid) { /* eg, -500 */
130 if (rp->end > rp->extent)
131 rp->end = rp->extent;
133 rp->start = rp->extent - rp->end;
134 rp->end = rp->extent - 1;
136 if (!rp->end_valid)
137 rp->end = rp->extent - 1;
139 rp->did_try = 1;
142 if (rp->end < rp->start) {
145 rp->state = LWSRS_COMPLETED;
153 rp->state = LWSRS_SYNTAX;
156 rp->end = (unsigned long long)(((unsigned long long)rp->end * 10) + (unsigned long long)(c - '0'));
157 rp->end_valid = 1;
161 rp->pos++;
166 lws_ranges_reset(struct lws_range_parsing *rp)
168 rp->pos = 0;
169 rp->ctr = 0;
170 rp->start = 0;
171 rp->end = 0;
172 rp->start_valid = 0;
173 rp->end_valid = 0;
174 rp->state = LWSRS_BYTES_EQ;
181 lws_ranges_init(struct lws *wsi, struct lws_range_parsing *rp,
184 rp->agg = 0;
185 rp->send_ctr = 0;
186 rp->inside = 0;
187 rp->count_ranges = 0;
188 rp->did_try = 0;
189 lws_ranges_reset(rp);
190 rp->state = LWSRS_COMPLETED;
192 rp->extent = extent;
194 if (lws_hdr_copy(wsi, (char *)rp->buf, sizeof(rp->buf),
198 rp->state = LWSRS_BYTES_EQ;
200 while (lws_ranges_next(rp)) {
201 rp->count_ranges++;
202 rp->agg += rp->end - rp->start + 1;
205 lwsl_debug("%s: count %d\n", __func__, rp->count_ranges);
206 lws_ranges_reset(rp);
208 if (rp->did_try && !rp->count_ranges)
211 lws_ranges_next(rp);
213 return rp->count_ranges;