Lines Matching refs:spa

56 typedef int (*lws_urldecode_stateful_cb)(struct lws_spa *spa,
98 lws_urldecode_s_create(struct lws_spa *spa, struct lws *wsi, char *out,
105 if (spa->i.ac)
106 s = lwsac_use_zero(spa->i.ac, sizeof(*s), spa->i.ac_chunk_size);
121 s->data = spa;
457 lws_urldecode_s_destroy(struct lws_spa *spa, struct lws_urldecode_stateful *s)
472 if (!spa->i.ac)
479 lws_urldecode_spa_lookup(struct lws_spa *spa, const char *name)
481 const char * const *pp = spa->i.param_names;
484 for (n = 0; n < spa->i.count_params; n++) {
488 if (spa->i.param_names_stride)
489 pp = (const char * const *)(((char *)pp) + spa->i.param_names_stride);
498 lws_urldecode_spa_cb(struct lws_spa *spa, const char *name, char **buf, int len,
503 if (final == LWS_UFS_CLOSE || spa->s->content_disp_filename[0]) {
504 if (spa->i.opt_cb) {
505 n = spa->i.opt_cb(spa->i.opt_data, name,
506 spa->s->content_disp_filename,
514 n = lws_urldecode_spa_lookup(spa, name);
518 if (!spa->i.ac) {
519 if (!spa->params[n])
520 spa->params[n] = *buf;
522 if ((*buf) + len >= spa->end) {
531 spa->s->out_len -= len + 1;
533 spa->params[n] = lwsac_use(spa->i.ac, (unsigned int)len + 1,
534 spa->i.ac_chunk_size);
535 if (!spa->params[n])
538 memcpy(spa->params[n], *buf, (unsigned int)len);
539 spa->params[n][len] = '\0';
542 spa->param_length[n] += len;
550 struct lws_spa *spa;
553 spa = lwsac_use_zero(i->ac, sizeof(*spa), i->ac_chunk_size);
555 spa = lws_zalloc(sizeof(*spa), "spa");
557 if (!spa)
560 spa->i = *i;
561 if (!spa->i.max_storage)
562 spa->i.max_storage = 512;
565 spa->storage = lwsac_use(i->ac, (unsigned int)spa->i.max_storage,
568 spa->storage = lws_malloc((unsigned int)spa->i.max_storage, "spa");
570 if (!spa->storage)
573 spa->end = spa->storage + i->max_storage - 1;
577 spa->params = lwsac_use_zero(i->ac,
580 spa->params = lws_zalloc(sizeof(char *) * (unsigned int)i->count_params,
581 "spa params");
582 if (!spa->params)
586 spa->s = lws_urldecode_s_create(spa, wsi, spa->storage, i->max_storage,
588 if (!spa->s)
593 spa->param_length = lwsac_use_zero(i->ac,
596 spa->param_length = lws_zalloc(sizeof(int) * (unsigned int)i->count_params,
597 "spa param len");
598 if (!spa->param_length)
602 // lwsl_notice("%s: Created SPA %p\n", __func__, spa);
604 return spa;
607 lws_urldecode_s_destroy(spa, spa->s);
610 lws_free(spa->params);
613 lws_free(spa->storage);
616 lws_free(spa);
642 lws_spa_process(struct lws_spa *spa, const char *in, int len)
644 if (!spa) {
645 lwsl_err("%s: NULL spa\n", __func__);
649 if (spa->finalized)
652 return lws_urldecode_s_process(spa->s, in, len);
656 lws_spa_get_length(struct lws_spa *spa, int n)
658 if (n >= spa->i.count_params)
661 return spa->param_length[n];
665 lws_spa_get_string(struct lws_spa *spa, int n)
667 if (n >= spa->i.count_params)
670 return spa->params[n];
674 lws_spa_finalize(struct lws_spa *spa)
676 if (!spa)
679 if (spa->s) {
680 lws_urldecode_s_destroy(spa, spa->s);
681 spa->s = NULL;
684 spa->finalized = 1;
690 lws_spa_destroy(struct lws_spa *spa)
694 lwsl_info("%s: destroy spa %p\n", __func__, spa);
696 if (spa->s)
697 lws_urldecode_s_destroy(spa, spa->s);
699 if (spa->i.ac)
700 lwsac_free(spa->i.ac);
702 lws_free(spa->param_length);
703 lws_free(spa->params);
704 lws_free(spa->storage);
705 lws_free(spa);