Common Gateway Interface library (libcgi)

The libcgi library provides a set of functionalities for handling Common Gateway Interface (CGI) operations in C.

Contents

General information

The libcgi library is a helper library designed to facilitate CGI. It provides functions for retrieving request methods, query strings, printing headers, managing URL and multipart parameters, and handling authentication.

Request Method

The library defines an enumeration for various HTTP request methods:

  • LIBCGI_METHOD_POST: Indicates a POST request method.
  • LIBCGI_METHOD_POST_MULTIPART: Indicates a POST request with multipart data.
  • LIBCGI_METHOD_GET: Indicates a GET request method.
  • LIBCGI_METHOD_DELETE: Indicates a DELETE request method.
  • LIBCGI_METHOD_ERROR: Used to indicate an error in determining the request method.

Authentication Modes

The library also defines an enumeration for authentication modes, currently including:

  • LIBCGI_AUTH_COOKIE_FILE: Indicates authentication via a cookie file.

libcgi interface

  • libcgi_getRequestMethod - Returns the request method used for the current CGI call.
int libcgi_getRequestMethod(void)
  • libcgi_getQueryString - Returns the query string from the current CGI call.
char *libcgi_getQueryString(void)
  • libcgi_printCode - Prints the HTTP status code and status message as part of the response header.
void libcgi_printCode(unsigned code, char *status)
  • libcgi_printHeaders - Prints the HTTP response headers including content type, content disposition, and any additional raw headers.
void libcgi_printHeaders(char *content_type, char *content_disposition, char *filename, char *raw_headers)
  • libcgi_isLogged - A customizable function to determine if a user is logged in. It can take multiple arguments for validation.
int libcgi_isLogged(int argc, ...)

Data Structures

  • libcgi_param_t - Represents a parameter, which could be a part of the URL query string or a part of multipart form data.
typedef struct _libcgi_param {
    struct _libcgi_param *next; //  Pointer to the next parameter in the list
    enum { LIBCGI_PARAM_DEFAULT, LIBCGI_PARAM_FILE } type; // The type of the parameter
    union { // Key of the parameter or filename if the parameter is a file.
        char *key;
        char *filename;
    };
    union { // Value of the parameter or file stream if the parameter is a file.
        char *value;
        FILE *stream;
    };
} libcgi_param_t;

Parameters Management

  • libcgi_getUrlParams - Retrieves a linked list of URL parameters.
libcgi_param_t *libcgi_getUrlParams(void)
  • libcgi_freeUrlParams - Frees the memory allocated for URL parameters.
void libcgi_freeUrlParams(libcgi_param_t *params_head)
  • libcgi_getMultipartParams - Retrieves a linked list of parameters from a multipart/form-data request. The store_path parameter specifies where to store uploaded files
libcgi_param_t *libcgi_getMultipartParams(char *store_path)
  • libcgi_freeMultipartParams - Frees the memory allocated for multipart parameters.
void libcgi_freeMultipartParams(libcgi_param_t *params_head)

Using libcgi

To use functions provided by libcgi please add the library to the LIBS variable in Makefile and include the required header file.

See also

  1. Phoenix-RTOS core libraries
  2. Phoenix-RTOS Graphics Library
  3. Table of Contents