News
Abstract
C API programming example
Content
You are in: IBM i Technology Updates > Web Integration on i > IBM HTTP Server for i > Introduction > CGI programming example > C API programming example
/* This C source file is for compiling into the sample program APISAMPLE.PGM. It invokes the configuration file APIs contained in SRVPGM QHTTPSVR/QZHBCONF to read in a configuration file, and either replace an existing PORT directive or to add a new one. This code is written by IBM, and is intended only as a sample. There is no implied support for this code, and it is not a part of any IBM product. It can be freely copied, modified and used in any way desired. */ #include <stdio.h> #include <stdlib.h> #include <qusec.h> /* For errcode structure */ #include <qzhbconf.h> /* For group file API's */ int main (int argc, char **argv) { Qus_EC_t errcode; /* Error code structure */ unsigned char configname10[10]; /* Config name */ unsigned int cfghdl; /* Handle for config file */ unsigned int getlock = 1; /* Argument to request a write lock */ unsigned char valstr[100]; /* Value string argument */ unsigned int vallen; /* Length argument */ unsigned int numtofind = 0; /* Will be searching for last directive */ unsigned int casesense = 0; /* Case insensitive search */ unsigned int writecfg = 1; /* Write config back out */ unsigned int dirhdl; /* Handle for a directive */ if (argc <= 2 || strlen(argv[1]) > 10 || atoi(argv[2]) < 1) { printf("usage: call lib/prog 'configname' 'portnumber'\n"); return 1; } /* Get config name into a 10 character format */ strncpy((char *) configname10, " ", 10); strncpy((char *) configname10, argv[1], strlen(argv[1])); /* Set up error code structure */ errcode.Bytes_Provided = sizeof(Qus_EC_t); /* Open the config - program will end if error occurs */ QzhbOpenConfig(configname10, &getlock, &cfghdl, NULL); /* Search for the last PORT directive in the file */ strcpy((char *) valstr, "port"); vallen = strlen((char *) valstr); QzhbFindDirective(&cfghdl, valstr, &vallen, NULL, &numtofind, &casesense, &dirhdl, (unsigned char *) &errcode); /* Build string containing what we want the PORT directive to look like */ sprintf((char *) valstr, "Port %s", argv[2]); vallen = strlen((char *) valstr); /* If found a PORT directive, replace it with our new value */ if (errcode.Bytes_Available == 0) { /* Replace existing directive, letting error end the program */ QzhbReplaceDirective(&cfghdl, &dirhdl, valstr, &vallen, NULL); printf("Replaced existing PORT directive in configuration %s with: %s\n", argv[1], valstr); } /* If did not find the PORT directive, we want to add a new one */ else { unsigned int insertpos = 4; /* Automatic positioning */ /* Add new directive, letting error end the program */ QzhbAddDirective(&cfghdl, valstr, &vallen, &insertpos, NULL, &dirhdl, NULL); printf("Added new PORT directive in configuration %s as: %s\n", argv[1], valstr); } /* Close config and write contents back out */ QzhbCloseConfig(&cfghdl, &writecfg, NULL); return 0; }
[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Component":"","Platform":[{"code":"PF012","label":"IBM i"}],"Version":"All Versions","Edition":"","Line of Business":{"code":"LOB57","label":"Power"}}]
Was this topic helpful?
Document Information
Modified date:
30 January 2020
UID
ibm11274194