Sun Java System Web Proxy Server 4.0.11 NSAPI Developer's Guide

Service Example Source Code

#include <nsapi.h>
static char *simple_msg = "default customized content";
/* This is the initialization function.
 * It gets the value of the generated-output parameter
 * specified in the Init directive in magnus.conf
NSAPI_PUBLIC int init-simple-service(pblock *pb, Session *sn,
 Request *rq)
    /* Get the message from the parameter in the directive in
      * magnus.conf
    simple_msg = pblock_findval("generated-output", pb);    
    return REQ_PROCEED;
/* This is the customized Service SAF.
 * It sends the "generated-output" message to the client.
NSAPI_PUBLIC int simple-service(pblock *pb, Session *sn, Request *rq)
     int return_value;
    char msg_length[8];    
    /* Use the protocol_status function to set the status of the
     * response before calling protocol_start_response.
    protocol_status(sn, rq, PROTOCOL_OK, NULL);
    /* Although we would expect the ObjectType stage to
     * set the content-type, set it here just to be
    * completely sure that it gets set to text/html.
    param_free(pblock_remove("content-type", rq->srvhdrs));
    pblock_nvinsert("content-type", "text/html", rq->srvhdrs);
    /* If you want to use keepalive, need to set content-length header.    
    * The util_itoa function converts a specified integer to a
     * string, and returns the length of the string. Use this
     * function to create a textual representation of a number.
    util_itoa(strlen(simple_msg), msg_length);
    pblock_nvinsert("content-length", msg_length, rq->srvhdrs);
    /* Send the headers to the client*/
    return_value = protocol_start_response(sn, rq);
     if (return_value == REQ_NOACTION) {
         /* HTTP HEAD instead of GET */
         return REQ_PROCEED;
    /* Write the output using net_write*/
    return_value = net_write(sn->csd, simple_msg,
     if (return_value == IO_ERROR) {
         return REQ_EXIT;
    return REQ_PROCEED;