GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
KHTTP_TEMPLATE(3) FreeBSD Library Functions Manual KHTTP_TEMPLATE(3)

khttp_template, khttp_template_buf, khttp_template_fd
emit filled-in templates for kcgi

library “libkcgi”

#include <sys/types.h>
#include <stdarg.h>
#include <stdint.h>
#include <kcgi.h>

enum kcgi_err
khttp_template(struct kreq *req, const struct ktemplate *t, const char *filename);

enum kcgi_err
khttp_template_buf(struct kreq *req, const struct ktemplate *t, const char *buf, size_t sz);

enum kcgi_err
khttp_template_fd(struct kreq *req, const struct ktemplate *t, int fd, const char *filename);

Modify input by replacing keys in a template. May only be called after khttp_body(3). Output is written with khttp_write(3) using the req previously allocated with khttp_parse(3) or khttp_fcgi_parse(3). The khttp_templatex(3) family allows for alternative writers.

All functions accept a template t consisting of the following fields:

const char *const *key
An array of keys to be replaced in the template.
size_t keysz
The number of keys in t->key.
void *arg
An optional argument passed to t->cb.
int (*cb)(size_t index, void *arg)
The callback function invoked when a key at position index, which is always less than t->keysz, is found in t->key. The optional arg is passed the function. The function must return zero on failure, non-zero on success.

If t is NULL, the input is passed through to khttp_write(3) without any processing.

Otherwise, the input is passed to khttp_write(3) until a key sequence in encountered matching a key in t->key. The callback t->cb is then invoked instead of printing the key sequence. If there are multiple matching keys in t->key, only one is used (which is not yet fixed). If the key sequence is not found in t->key, it is passed unchanged to khttp_write(3).

The different input types are khttp_template(), which reads input from the file filename; khttp_template_buf(), which reads from a binary buffer buf of length sz; and khttp_template_fd(), which reads from a file descriptor fd with optional file-name fname used only for logging purposes.

Each substring of the input beginning and ending with a pair of “at” signs, @@key@@, is called a “key sequence”. Zero-length keys @@@@ are allowed and match empty template keys. If the @@ pair is escaped with a single backslash, \@@, the backslash is removed and it's emitted as @@.

A key sequence may not contain an escaped pair: this is parsed as a backslash followed by the trailing pair.

These return an enum kcgi_err indicating the error state:
No error occurred.
Memory allocation failed.
A system call failed. For example, writing to the output stream failed, or khttp_template() failed to open(2) filename.
t->cb returned 0.

The following simple example takes a buffer buf and applies the replacement template of two values, writing it to the current context req.
static int writer(size_t idx, void *arg)
{
  struct kreq *r = arg;
  if (idx == 0)
    khttp_puts(r, "foo-value");
  else if (idx == 1)
    khttp_puts(r, "bar-value");
  return 1;
}

enum kcgi_err format(struct kreq *r)
{
  const char *const keys[] = { "foo", "bar" };
  struct ktemplate t = {
    .key = keys,
    .keysz = 2,
    .arg = r,
    .cb = writer
  };
  const char *buf = "foo=@@foo@@, bar=@@bar@@";
  return khttp_template_buf(r, &t, buf, strlen(buf));
}

The function will produce “foo=foo-value, bar=bar-value”.

kcgi(3), khttp_body(3), khttp_parse(3), khttp_templatex(3), khttp_write(3)

Written by Kristaps Dzonsons <kristaps@bsd.lv>.
June 12, 2022 FreeBSD 13.1-RELEASE

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.